Skip to content

Merge main.

Merge main. #3580

Workflow file for this run

name: Continuous Integration (CODAP v3)
on:
push:
paths: # only run this workflow if it contains v3 files
- 'v3/**' # https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#example-including-paths
- '.github/workflows/v3.yml'
jobs:
build_test:
name: Build and Run Jest Tests
runs-on: ubuntu-latest
steps:
- uses: snow-actions/[email protected]
with:
patterns: v3
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install Dependencies
working-directory: v3
run: npm ci
- uses: actions/cache@v4
with:
path: v3/node_modules/.cache/webpack/
key: ${{ github.head_ref || github.ref_name }}-webpack-build
restore-keys: |
main-webpack-build
- name: Build
working-directory: v3
run: npm run build
- name: Run Tests
working-directory: v3
run: npm run test:coverage -- --maxWorkers=2
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
working-directory: v3
flags: jest
cypress:
runs-on: ubuntu-latest
strategy:
# when one test fails, DO NOT cancel the other
# containers, because this will kill Cypress processes
# leaving the Dashboard hanging ...
# https://github.com/cypress-io/github-action/issues/48
fail-fast: false
matrix:
# run multiple copies of the current job in parallel
containers: [1, 2, 3, 4]
# containers: [1]
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: v3/node_modules/.cache/webpack/
key: ${{ github.head_ref || github.ref_name }}-webpack-build
restore-keys: |
main-webpack-build
- uses: cypress-io/github-action@v6
with:
working-directory: v3
start: npm start
wait-on: 'http://localhost:8080'
# add timeout of 5 minutes to start
wait-on-timeout: 300
# only record the results to dashboard.cypress.io if CYPRESS_RECORD_KEY is set
record: ${{ !!secrets.CYPRESS_RECORD_KEY }}
# only do parallel if we have a record key
parallel: ${{ !!secrets.CYPRESS_RECORD_KEY }}
browser: chrome
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# pass GitHub token to allow accurately detecting a build vs a re-run build
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# turn on code coverage when running npm start
# so far we've been using a webpack coverage-istanbul-loader for this
# but there has been work on using the code coverage support in the browser directly,
# which should be much faster
CODE_COVERAGE: true
# Also turn on the code coverage tasks in cypress itself, these are disabled
# by default.
CYPRESS_coverage: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
working-directory: v3
flags: cypress
s3-deploy:
name: S3 Deploy
needs:
- build_test
- cypress
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install Dependencies
working-directory: v3
run: npm ci
env:
# skip installing cypress since it isn't needed for just building
# This decreases the deploy time quite a bit
CYPRESS_INSTALL_BINARY: 0
- uses: actions/cache@v4
with:
path: v3/node_modules/.cache/webpack/
key: ${{ github.head_ref || github.ref_name }}-webpack-build
restore-keys: |
main-webpack-build
- name: Configure Environment
working-directory: v3
run: |
cat <<EOF > .env
GOOGLE_DRIVE_CLIENT_ID="${{ secrets.GOOGLE_DRIVE_CLIENT_ID }}"
GOOGLE_DRIVE_API_KEY="${{ secrets.GOOGLE_DRIVE_API_KEY }}"
GOOGLE_DRIVE_APP_ID="${{ secrets.GOOGLE_DRIVE_APP_ID }}"
EOF
- uses: concord-consortium/s3-deploy-action@v1
with:
bucket: models-resources
prefix: codap3
workingDirectory: v3
awsAccessKeyId: ${{ secrets.V3_AWS_ACCESS_KEY_ID }}
awsSecretAccessKey: ${{ secrets.V3_AWS_SECRET_ACCESS_KEY }}
# Parameters to GHActions have to be strings, so a regular yaml array cannot
# be used. Instead the `|` turns the following lines into a string
topBranches: |
["main"]