Skip to content
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
301 changes: 301 additions & 0 deletions .github/workflows/prod-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,301 @@
name: Release
permissions:
contents: read

on:
workflow_dispatch:
inputs:
version_bump:
required: false
description: '[Optional] Override semantic versioning with explict version (allowed values: "patch", "minor", "major", or explicit version)'
default: ''
dist_tag:
description: 'NPM distribution tag'
required: false
default: 'latest'
branch:
description: 'The branch to release from'
required: false
default: 'master'

env:
NODE_OPTIONS: "--max-old-space-size=4096"
NPM_CONFIG_UNSAFE_PERM: true

jobs:
compliance:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these need to come first? Can we break this up maybe? To have the publishing things come first?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need some validations to come first:

  1. Pre-publish validation that the head of main is healthy
  2. Publish
  3. Post-publish validation on the published artifact

runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'

- name: Install dependencies
run: npm ci --unsafe-perm

- name: Run compliance checks
run: |
npm run lint
npm run test_conditions

test-nodejs20:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies and build
run: |
npm ci --unsafe-perm
npm run build

- name: Run Node.js tests
run: npm run coverage-node

test-browser18:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies and build
run: |
npm ci --unsafe-perm
npm run build

- name: Run browser tests
run: npm run coverage-browser

test-vectors-nodejs20:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies and build
run: |
npm ci --unsafe-perm
npm run build

- name: Run integration tests with local publish
run: |
npm run verdaccio-publish
npm run verdaccio-node-decrypt
npm run verdaccio-node-encrypt

test-vectors-browser18:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies and build
run: |
npm ci --unsafe-perm
npm run build

- name: Run integration tests with local publish
run: |
npm run verdaccio-publish
npm run verdaccio-browser-decrypt
npm run verdaccio-browser-encrypt

# Once all tests have passed, run semantic versioning
version:
runs-on: ubuntu-latest
needs: [compliance, test-nodejs20, test-browser18, test-vectors-nodejs20, test-vectors-browser18]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 16
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why 16?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what the CodeBuild uses today

uses: actions/setup-node@v4
with:
node-version: '16'
cache: 'npm'

- name: Install dependencies
run: npm ci --unsafe-perm

- name: Configure git
env:
BRANCH: ${{ github.event.inputs.branch }}
VERSION_BUMP: ${{ github.event.inputs.version_bump }}
run: |
git config --global user.name "aws-crypto-tools-ci-bot"
git config --global user.email "[email protected]"
git checkout $BRANCH

- name: Version packages (dry run - no push)
run: |
# Generate new version and CHANGELOG entry and push it
npx lerna version --conventional-commits --git-remote origin --yes ${VERSION_BUMP:+$VERSION_BUMP --force-publish}
# Log the commit for posterity
git log -n 1

# Once semantic versioning has run and bumped versions, publish to npm
# TODO: Publish step that doesn't use OTP but instead follows
# https://docs.npmjs.com/trusted-publishers

# Once publishing is complete, validate that the published packages are useable
validate-nodejs:
runs-on: ubuntu-latest
# TODO: Uncomment when adding publish step
# needs: [publish]
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies
run: npm ci --unsafe-perm

- name: Validate published packages - Node.js
run: |
npm run verdaccio-node-decrypt
npm run verdaccio-node-encrypt

validate-browser:
runs-on: ubuntu-latest
# TODO: Uncomment when adding publish step
# needs: [publish]
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'

- name: Configure AWS Credentials for Tests
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-MPL-Dafny-Role-us-west-2
role-session-name: JavaScriptTests

- name: Install dependencies
run: npm ci --unsafe-perm

- name: Validate published packages - Browser
# This will fail until the publish step is run for the first time.
# A dependency change broke the browser tests.
# Commit fb10180dfb451ff5359ebc703c58eaf5393971ac fixes this.
# The first publish step for v4.2.2+ should make this pass.
# TODO: Remove this comment block after first successful publish of v4.2.2+.
run: |
npm run verdaccio-browser-decrypt
npm run verdaccio-browser-encrypt
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"build-browser": "tsc -b tsconfig.module.json",
"build": "run-s build-*",
"karma": "NODE_OPTIONS=--max-old-space-size=4096 karma start karma.conf.js",
"mocha": "mocha --exclude 'modules/*-+(browser|backend)/build/main/test/*.js' modules/**/build/main/test/*test.js",
"mocha": "mocha --timeout 5000 --exclude 'modules/*-+(browser|backend)/build/main/test/*.js' modules/**/build/main/test/*test.js",
"coverage-browser": "npm run karma && nyc report -t .karma_output --check-coverage",
"coverage-node": "nyc --instrument --all --check-coverage -n 'modules/**/build/main/src/*.js' -x 'modules/**/build/main/test/*.js' -x 'modules/*-+(browser|backend)/**/*.js' npm run mocha",
"coverage-merge": "nyc merge .karma_output .nyc_output/browser.json",
Expand Down