Staging Release - Step 1: Prepare CDN Pre-Release, Publish NPM #40
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: 'Staging Release - Step 1: Prepare CDN Pre-Release, Publish NPM' | |
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 staging release must be done from the staging branch | |
confirm-staging-branch: | |
name: Confirm release is run on staging | |
runs-on: ubuntu-latest | |
steps: | |
- name: Git checkout | |
uses: actions/checkout@v3 | |
- name: Branch Check | |
run: | | |
BRANCHNAME=${GITHUB_REF##*/} | |
if [ $BRANCHNAME != "staging" ]; then | |
echo "You can only run a staging release from the staging branch, you are trying to run it from ${BRANCHNAME}" | |
exit 1 | |
fi | |
build-bundle: | |
name: Build Distribution Bundle | |
runs-on: ubuntu-latest | |
needs: confirm-staging-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@v3 | |
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-staging-branch | |
steps: | |
- name: Checkout development branch | |
uses: actions/checkout@v3 | |
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 staging branch | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
ref: staging | |
- 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 staging 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 --branches staging --dry-run | |
# NPM Publish happens here | |
- name: Release | |
if: ${{ github.event.inputs.dryRun == 'false'}} | |
run: | | |
npx semantic-release --branches staging | |
- 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 }} |