diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0cb1ae7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,21 @@ +name: CI +on: pull_request +jobs: + test: + timeout-minutes: 5 + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: Brightspace/third-party-actions@actions/checkout + - name: Setup Node + uses: Brightspace/third-party-actions@actions/setup-node + with: + node-version-file: .nvmrc + - name: Install dependencies + run: npm install + - name: Lint and Test + run: npm run test + - name: Build Sample + run: npm run build-sample + - name: Report Coverage + run: npm run report-coverage diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..83860ab --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,26 @@ +name: Release +on: + push: + branches: + - master +jobs: + release: + name: Release + timeout-minutes: 5 + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: Brightspace/third-party-actions@actions/checkout + with: + persist-credentials: false + - name: Setup Node + uses: Brightspace/third-party-actions@actions/setup-node + with: + node-version-file: .nvmrc + - name: Semantic Release + uses: BrightspaceUI/actions/semantic-release@master + with: + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.D2L_GITHUB_TOKEN }} + NPM: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index f96a909..b17bb90 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ coverage sample/dist node_modules npm-debug.log +package-lock.json diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..0cee939 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 2f32511..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: node_js -node_js: -- 10 -sudo: false -script: -- npm test -- npm run build-sample -after_success: -- npm run report-coverage - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 -env: - global: - - CXX=g++-4.8 diff --git a/README.md b/README.md index 6eac10a..3ebd31b 100644 --- a/README.md +++ b/README.md @@ -41,11 +41,43 @@ progressCallback ( progress, accuracy ) **Note:** Iframe Brightspace pages that contain a navbar and/or minbar (such as quizzes and surveys) will have these removed in the ResizingIframe. -### Bump version ### +## Versioning & Releasing -```BASH -$ # npm help 1 version -$ # npm help 7 semver -$ npm version [major|minor|patch|premajor|preminor|prepatch|prerelease] -m "chore(version) bump %s" -$ git push upstream master --tags -``` +> TL;DR: Commits prefixed with `fix:` and `feat:` will trigger patch and minor releases when merged to `main`. Read on for more details... +The [sematic-release GitHub Action](https://github.com/BrightspaceUI/actions/tree/master/semantic-release) is called from the `release.yml` GitHub Action workflow to handle version changes and releasing. + +### Version Changes + +All version changes should obey [semantic versioning](https://semver.org/) rules: +1. **MAJOR** version when you make incompatible API changes, +2. **MINOR** version when you add functionality in a backwards compatible manner, and +3. **PATCH** version when you make backwards compatible bug fixes. + +The next version number will be determined from the commit messages since the previous release. Our semantic-release configuration uses the [Angular convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular) when analyzing commits: +* Commits which are prefixed with `fix:` or `perf:` will trigger a `patch` release. Example: `fix: validate input before using` +* Commits which are prefixed with `feat:` will trigger a `minor` release. Example: `feat: add toggle() method` +* To trigger a MAJOR release, include `BREAKING CHANGE:` with a space or two newlines in the footer of the commit message +* Other suggested prefixes which will **NOT** trigger a release: `build:`, `ci:`, `docs:`, `style:`, `refactor:` and `test:`. Example: `docs: adding README for new component` + +To revert a change, add the `revert:` prefix to the original commit message. This will cause the reverted change to be omitted from the release notes. Example: `revert: fix: validate input before using`. + +### Releases + +When a release is triggered, it will: +* Update the version in `package.json` +* Tag the commit +* Create a GitHub release (including release notes) +* Deploy a new package to NPM + +### Releasing from Maintenance Branches + +Occasionally you'll want to backport a feature or bug fix to an older release. `semantic-release` refers to these as [maintenance branches](https://semantic-release.gitbook.io/semantic-release/usage/workflow-configuration#maintenance-branches). + +Maintenance branch names should be of the form: `+([0-9])?(.{+([0-9]),x}).x`. + +Regular expressions are complicated, but this essentially means branch names should look like: +* `1.15.x` for patch releases on top of the `1.15` release (after version `1.16` exists) +* `2.x` for feature releases on top of the `2` release (after version `3` exists) + +[npm-url]: https://www.npmjs.org/package/frau-appconfig-builder +[npm-image]: https://img.shields.io/npm/v/frau-appconfig-builder.svg