Release SDK #135
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release SDK | |
on: | |
workflow_dispatch: | |
inputs: | |
dryRun: | |
description: 'Do a dry run to preview instead of a real release [true/false]' | |
required: true | |
type: boolean | |
default: true | |
jobs: | |
# SDK release is done from master branch. | |
confirm-public-repo-master-branch: | |
name: 'Confirm release is run from public/master branch' | |
uses: mParticle/mparticle-workflows/.github/workflows/sdk-release-repo-branch-check.yml@main | |
build-bundle: | |
name: Build Distribution Bundle | |
runs-on: ubuntu-latest | |
needs: confirm-public-repo-master-branch | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: development | |
- name: NPM install | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16.x | |
- name: Run NPM CI | |
run: npm ci | |
- name: Lint with ESLint | |
run: npm run lint | |
- name: Lint with Prettier | |
run: npm run prettier | |
- name: Run Build IIFE | |
run: npm run build:iife | |
- name: Display Bundle Diff, but Fancy! | |
run: git diff --unified=3 dist/mparticle.js | npx diff-so-fancy | |
- name: Archive npm failure logs | |
uses: actions/upload-artifact@v2 | |
if: failure() | |
with: | |
name: npm-logs | |
path: ~/.npm/_logs | |
# Currently, we're only using Jest to test TypeScript modules | |
# and they do not require any built files | |
test-jest: | |
name: 'Test Jest' | |
runs-on: 'ubuntu-latest' | |
strategy: | |
matrix: | |
node-version: [16.x, 17.x, 18.x, 19.x, 20.x] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: NPM install | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Run NPM CI | |
run: npm ci | |
- name: Run Jest Tests | |
run: npm run test:jest | |
- name: Archive npm failure logs | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: npm-logs | |
path: ~/.npm/_logs | |
# Only Core test requires bundle, but we want to make sure | |
# that tests only run when the bundle is successfully built | |
test-core: | |
name: Core Tests | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: Core SDK Tests | |
test_command: npm run test | |
build_command: npm run build:iife | |
branch_name: ${{ vars.GITHUB_SHA }} | |
# Test Sub can be run independent of other tests | |
test-stub: | |
name: 'Test Stub' | |
runs-on: ubuntu-latest | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: NPM install | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16.x | |
- name: Run NPM CI | |
run: npm ci | |
- name: Install Firefox Latest | |
uses: browser-actions/setup-firefox@latest | |
- name: Log Firefox Version | |
run: firefox --version | |
- name: Run Stub Tests | |
run: npm run test:stub | |
- name: Archive npm failure logs | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: npm-logs | |
path: ~/.npm/_logs | |
# Integration Tests run the same suite of tests against various build systems | |
# to make sure our SDK will run in different environments | |
test-integrations-require-js: | |
name: 'Integration Tests: Require JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: Require JS Test | |
test_command: npm run test:requirejs | |
branch_name: ${{ vars.GITHUB_SHA }} | |
test-integrations-common-js-browserfy: | |
name: 'Integration Tests: Browserfy Common JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: Browserfy CJS Test | |
test_command: npm run test:integrations:cjs:browserfy | |
branch_name: ${{ vars.GITHUB_SHA }} | |
build_command: npm run build:npm && npm run build:test-bundle | |
test-integrations-common-js-webpack: | |
name: 'Integration Tests: webpack Common JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: webpack CJS Test | |
test_command: npm run test:integrations:cjs:webpack | |
branch_name: ${{ vars.GITHUB_SHA }} | |
build_command: npm run build:npm && npm run build:test-bundle | |
test-integrations-common-js-rollup: | |
name: 'Integration Tests: Rollup Common JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: Rollup CJS Test | |
test_command: npm run test:integrations:cjs:rollup | |
branch_name: ${{ vars.GITHUB_SHA }} | |
build_command: npm run build:npm && npm run build:test-bundle | |
test-integrations-module-js-webpack: | |
name: 'Integration Tests: webpack Module JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: webpack Module Test | |
test_command: npm run test:integrations:module:webpack | |
branch_name: ${{ vars.GITHUB_SHA }} | |
build_command: npm run build:esm && npm run build:test-bundle | |
test-integrations-module-js-rollup: | |
name: 'Integration Tests: Rollup Module JS' | |
uses: mParticle/mparticle-workflows/.github/workflows/web-run-test.yml@main | |
needs: | |
- test-core | |
- test-jest | |
- build-bundle | |
with: | |
test_command_label: Rollup Module Test | |
test_command: npm run test:integrations:module:rollup | |
branch_name: ${{ vars.GITHUB_SHA }} | |
build_command: npm run build:esm && npm run build:test-bundle | |
create-release-branch: | |
name: Create release branch | |
runs-on: ubuntu-latest | |
needs: | |
- test-core | |
- test-stub | |
- test-integrations-common-js-browserfy | |
- test-integrations-common-js-webpack | |
- test-integrations-common-js-rollup | |
- test-integrations-module-js-webpack | |
- test-integrations-module-js-rollup | |
- test-integrations-require-js | |
- confirm-public-repo-master-branch | |
steps: | |
- name: Checkout development branch | |
uses: actions/checkout@v2 | |
with: | |
repository: mparticle/mparticle-web-sdk | |
ref: development | |
- name: Create and push release branch | |
run: | | |
git checkout -b release/${{ github.run_number }} | |
git push origin release/${{ github.run_number }} | |
release: | |
name: Perform Release | |
runs-on: ubuntu-latest | |
needs: | |
- create-release-branch | |
env: | |
GITHUB_TOKEN: ${{ secrets.MP_SEMANTIC_RELEASE_BOT }} | |
GIT_AUTHOR_NAME: mparticle-automation | |
GIT_AUTHOR_EMAIL: [email protected] | |
GIT_COMMITTER_NAME: mparticle-automation | |
GIT_COMMITTER_EMAIL: [email protected] | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
steps: | |
- name: Checkout public master branch | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
ref: master | |
- name: Import GPG Key | |
uses: crazy-max/ghaction-import-gpg@e00cb83a68c1158b29afc5217dd0582cada6d172 #v4.4.0 | |
with: | |
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | |
passphrase: ${{ secrets.GPG_PASSPHRASE }} | |
git_user_signingkey: true | |
git_commit_gpgsign: true | |
- name: Merge release branch into master branch | |
run: | | |
git pull origin release/${{ github.run_number }} | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16.x | |
- name: Install dependencies | |
run: npm ci | |
- name: Release --dry-run | |
if: ${{ github.event.inputs.dryRun == 'true'}} | |
run: | | |
npx semantic-release --dry-run | |
# NPM Publish happens here | |
- name: Release | |
if: ${{ github.event.inputs.dryRun == 'false'}} | |
run: | | |
npx semantic-release | |
- name: Archive npm failure logs | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: npm-logs | |
path: ~/.npm/_logs | |
- name: Push automated release commits to release branch | |
if: ${{ github.event.inputs.dryRun == 'false' }} | |
run: | | |
git push origin HEAD:release/${{ github.run_number }} | |
sync-repository: | |
name: Sync repositories | |
needs: release | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout master branch | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
repository: ${{ github.repository }} | |
token: ${{ secrets.MP_SEMANTIC_RELEASE_BOT }} | |
ref: master | |
- name: Merge release branch into master branch | |
if: ${{ github.event.inputs.dryRun == 'false' }} | |
run: | | |
git pull origin release/${{ github.run_number }} | |
- name: Push release commits to main, master and development branches | |
if: ${{ github.event.inputs.dryRun == 'false' }} | |
run: | | |
git push origin HEAD:development | |
git push origin HEAD:master | |
git push origin HEAD:main | |
- name: Delete release branch | |
if: ${{ github.event.inputs.dryRun == 'false' }} | |
run: | | |
git push --delete origin release/${{ github.run_number }} |