2019-09-17 13:40:21 +00:00
# Rollup Template
2019-11-11 00:39:00 +00:00
This project contains the configuration and build scripts for most of
my Typescript projects, with scripts to create a new project and keep
existing ones up-to-date. Even this readme is a template for others.
2019-09-17 13:40:21 +00:00
2019-11-11 00:39:00 +00:00
## Features
2019-09-17 13:49:35 +00:00
2019-11-11 00:39:00 +00:00
- build scripts with `make`
- build pipeline with `gitlab`
- update github commit status
- publish docker images from branches & tags
- publish npm packages from tags
- bundled with `rollup`
- type checked with `typescript`
2019-11-11 00:44:31 +00:00
- style checked with `eslint` (with `tslint` rules and other plugins)
2019-11-11 00:39:00 +00:00
- tested with `mocha` (with source map support and helpers for async leak tracking)
- code coverage measured with `nyc`
- changelog generated with `standard-release`
2019-09-17 13:49:35 +00:00
2019-11-11 00:39:00 +00:00
### Intentionally Omitted Features
- everything frontend: React, CSS, etc
- heavy backend libraries: ORMs, etc
2019-09-17 13:49:35 +00:00
2019-09-17 13:40:21 +00:00
## Contents
- [Rollup Template ](#rollup-template )
- [Features ](#features )
- [Intentionally Omitted Features ](#intentionally-omitted-features )
2019-11-11 00:39:00 +00:00
- [Contents ](#contents )
- [Status ](#status )
- [Releases ](#releases )
2019-09-17 13:40:21 +00:00
- [Usage ](#usage )
2019-09-18 00:40:44 +00:00
- [To Setup ](#to-setup )
- [To Build ](#to-build )
- [To Release ](#to-release )
2019-09-17 13:40:21 +00:00
- [External Services ](#external-services )
- [Maintenance Bots ](#maintenance-bots )
2019-09-17 13:57:45 +00:00
- [External Secrets ](#external-secrets )
2019-09-17 13:40:21 +00:00
2019-11-11 00:39:00 +00:00
## Status
2019-09-17 13:40:21 +00:00
2019-11-11 00:39:00 +00:00
[![Pipeline status ](https://img.shields.io/gitlab/pipeline/ssube/rollup-template.svg?gitlab_url=https%3A%2F%2Fgit.apextoaster.com&logo=gitlab )](https://git.apextoaster.com/ssube/rollup-template/commits/master)
[![Lines of Code ](https://sonarcloud.io/api/project_badges/measure?project=ssube_rollup-template&metric=ncloc )](https://sonarcloud.io/dashboard?id=ssube_rollup-template)
[![Test coverage ](https://codecov.io/gh/ssube/rollup-template/branch/master/graph/badge.svg )](https://codecov.io/gh/ssube/rollup-template)
[![MIT license ](https://img.shields.io/github/license/ssube/rollup-template.svg )](https://github.com/ssube/rollup-template/blob/master/LICENSE.md)
[![FOSSA Status ](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fssube%2Frollup-template.svg?type=shield )](https://app.fossa.com/projects/git%2Bgithub.com%2Fssube%2Frollup-template?ref=badge_shield)
2019-09-17 13:40:21 +00:00
2019-11-11 00:39:00 +00:00
[![Open bug count ](https://img.shields.io/github/issues-raw/ssube/rollup-template/type-bug.svg )](https://github.com/ssube/rollup-template/issues?q=is%3Aopen+is%3Aissue+label%3Atype%2Fbug)
[![Open issue count ](https://img.shields.io/github/issues-raw/ssube/rollup-template.svg )](https://github.com/ssube/rollup-template/issues?q=is%3Aopen+is%3Aissue)
[![Closed issue count ](https://img.shields.io/github/issues-closed-raw/ssube/rollup-template.svg )](https://github.com/ssube/rollup-template/issues?q=is%3Aissue+is%3Aclosed)
2019-09-17 13:40:21 +00:00
2019-11-11 00:39:00 +00:00
[![Renovate badge ](https://badges.renovateapi.com/github/ssube/rollup-template )](https://renovatebot.com)
[![Dependency status ](https://img.shields.io/david/ssube/rollup-template.svg )](https://david-dm.org/ssube/rollup-template)
[![Dev dependency status ](https://img.shields.io/david/dev/ssube/rollup-template.svg )](https://david-dm.org/ssube/rollup-template?type=dev)
[![Known vulnerabilities ](https://snyk.io/test/github/ssube/rollup-template/badge.svg )](https://snyk.io/test/github/ssube/rollup-template)
[![Maintainability score ](https://api.codeclimate.com/v1/badges/0ca333e0379bda050d84/maintainability )](https://codeclimate.com/github/ssube/rollup-template/maintainability)
[![Technical debt ratio ](https://img.shields.io/codeclimate/tech-debt/ssube/rollup-template.svg )](https://codeclimate.com/github/ssube/rollup-template/trends/technical_debt)
[![Quality issues ](https://img.shields.io/codeclimate/issues/ssube/rollup-template.svg )](https://codeclimate.com/github/ssube/rollup-template/issues)
[![Language grade: JavaScript ](https://img.shields.io/lgtm/grade/javascript/g/ssube/rollup-template.svg?logo=lgtm )](https://lgtm.com/projects/g/ssube/rollup-template/context:javascript)
[![Total alerts ](https://img.shields.io/lgtm/alerts/g/ssube/rollup-template.svg )](https://lgtm.com/projects/g/ssube/rollup-template/alerts/)
## Releases
[![github release link ](https://img.shields.io/badge/github-release-blue?logo=github )](https://github.com/ssube/rollup-template/releases)
[![github release version ](https://img.shields.io/github/tag/ssube/rollup-template.svg )](https://github.com/ssube/rollup-template/releases)
2020-03-03 00:35:54 +00:00
[![github commits since release ](https://img.shields.io/github/commits-since/ssube/rollup-template/v0.2.4.svg )](https://github.com/ssube/rollup-template/compare/v0.2.4...master)
2019-11-11 00:39:00 +00:00
2019-11-11 00:47:48 +00:00
[![npm package link ](https://img.shields.io/badge/npm-package-blue?logo=npm )](https://www.npmjs.com/package/@apextoaster/rollup-template)
[![npm release version ](https://img.shields.io/npm/v/@apextoaster/rollup-template.svg )](https://www.npmjs.com/package/@apextoaster/rollup-template)
[![Typescript definitions ](https://img.shields.io/npm/types/@apextoaster/rollup-template.svg )](https://www.npmjs.com/package/@apextoaster/rollup-template)
2019-09-17 13:40:21 +00:00
## Usage
2019-09-18 00:40:44 +00:00
### To Setup
2019-09-17 13:40:21 +00:00
To create a new repository from this template:
2019-09-17 13:49:35 +00:00
- create your new repo on Github & Gitlab (your server or Gitlab.com)
- `git clone git@github.com:ssube/rollup-template.git your-project`
- `cd your-project`
2019-09-17 13:40:21 +00:00
- `git remote add github git@github.com:yourname/your-project.git`
- `git remote add gitlab git@gitlab.com:yourname/your-project.git`
- set up repository mirroring in Gitlab
- set up [some maintenance bots ](#maintenance-bots )
- `make git-push`
- install your dependencies
- write some code
2019-09-18 00:40:44 +00:00
### To Build
2019-09-17 13:40:21 +00:00
Once your project is set up:
- `make` to bundle and test
- commit
- `make git-push`
2019-09-23 13:21:25 +00:00
The `git-push` target pushes to Github first, to avoid conflicts with changes
from bots and other contributors.
2019-09-17 13:40:21 +00:00
2019-09-18 00:40:44 +00:00
### To Release
When your project is ready to release:
- `make release-dry` to make sure your changelog and options look right
- `make release`
2019-09-23 13:21:25 +00:00
Additional options can be passed with the `RELEASE_OPTS` variable. Frequently
used options include `--release-as minor` and `--prerelease` .
2019-09-18 00:40:44 +00:00
2019-09-17 13:40:21 +00:00
## External Services
2019-09-23 13:21:25 +00:00
This template works with or expects a few external services, namely a Gitlab
CI server (self-hosted or using Gitlab.com).
2019-09-17 13:40:21 +00:00
### Maintenance Bots
2019-09-23 13:21:25 +00:00
Good tests and clever bots can eliminate the most painful parts of project
maintenance. This repository is configured to work with:
2019-09-17 13:40:21 +00:00
- [CodeCov ](https://codecov.io/ )
- [Code Climate ](https://codeclimate.com/ )
- [LGTM ](https://lgtm.com/ )
- [Renovate ](https://renovatebot.com/ )
- [Snyk ](https://snyk.io/ )
- [SonarCloud ](https://sonarcloud.io/ )
2019-09-23 13:21:25 +00:00
None of these are required, but Renovate and Snyk can be very helpful when
2019-11-11 01:01:32 +00:00
dependencies release a security patch.
2019-09-17 13:57:45 +00:00
## External Secrets
2019-09-23 13:21:25 +00:00
This template expects a few secrets to exist in the environment, including
tokens for the [external services ](#external-services ).
2019-09-17 13:57:45 +00:00
2019-09-18 09:10:10 +00:00
| Name | Description |
| ------------------- | ----------------------------------------------------- |
| CC_TEST_REPORTER_ID | code climate ID |
| CODECLIMATE_SECRET | code climate token |
| CODECOV_SECRET | codecov token |
| DOCKER_SECRET | docker config, required for publishing images |
| GITHUB_SECRET | github.com token, required for publishing status |
| NPM_SECRET | npmjs.com token, required for publishing npm packages |
| SONAR_SECRET | sonarcloud token |
2019-09-18 14:21:49 +00:00
2019-09-23 13:21:25 +00:00
Secrets should be provided as environment variables, with the secret value
`base64` -encoded.