Feature/cdd 2363 #2561
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: Pipeline | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- '*' | |
env: | |
AWS_REGION: 'eu-west-2' | |
permissions: | |
id-token: write # This is required for requesting the JWT | |
contents: read # This is required for the actions/checkout | |
jobs: | |
############################################################################### | |
# Install dependencies & build packages | |
############################################################################### | |
install: | |
name: Install | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- name: Install | |
run: npm ci --no-audit --no-fund | |
build: | |
name: Build | |
needs: [install] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: Build | |
run: NODE_ENV=test npm run build | |
############################################################################### | |
# Lighthouse checks | |
############################################################################### | |
lighthouse: | |
name: Lighthouse | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: Start mock server | |
run: npm run dev:mock-server & | |
- name: Wait for Mock Server | |
shell: sh | |
run: ./.github/scripts/wait-for-service.sh http://localhost:3005 | |
- name: Start Applicaton | |
run: NODE_ENV=test npm run start & | |
- name: Unlighthouse assertions and client | |
run: npx unlighthouse-ci --build-static --site http://localhost:3000/ --budget=80 | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: unlighthouse-report | |
path: ./.unlighthouse | |
retention-days: 10 | |
############################################################################### | |
# Code quality checks | |
############################################################################### | |
quality-checks: | |
name: Lint | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: Quality check | |
run: npm run lint | |
############################################################################## | |
# TypeScript | |
############################################################################## | |
typescript: | |
name: TypeScript | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: TypeScript Compilation | |
run: npm run tsc | |
############################################################################## | |
# Unit tests | |
############################################################################## | |
unit-tests: | |
name: Unit tests | |
permissions: write-all | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: Unit tests | |
run: npm run test:ci | |
- name: Unit tests coverage comment | |
uses: ukhsa-internal/jest-coverage-comment-action@v1 | |
with: | |
coverage-summary-path: ./coverage/coverage-summary.json | |
junitxml-path: ./junit.xml | |
title: Unit tests coverage | |
############################################################################## | |
# Playwright e2e tests | |
############################################################################## | |
e2e-tests: | |
name: Playwright tests (${{ matrix.shard }}/${{ strategy.job-total }}) | |
needs: [build] | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
shard: [1, 2, 3] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-node | |
- uses: ./.github/actions/install-cache | |
- uses: ./.github/actions/build-cache | |
- name: Setup Playwright | |
run: npx playwright install --with-deps | |
- name: Start mock server | |
run: npm run dev:mock-server & | |
- name: Wait for Mock Server | |
shell: sh | |
run: ./.github/scripts/wait-for-service.sh http://localhost:3005 | |
- name: Run Playwright tests | |
run: npx playwright test --grep-invert @smoke --shard=${{ matrix.shard }}/${{ strategy.job-total }} | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: playwright-report-${{ matrix.shard }}_${{ strategy.job-total }} | |
path: playwright-report/ | |
retention-days: 10 | |
############################################################################### | |
# Success gate | |
############################################################################### | |
success-gate: | |
name: Build Success Check | |
needs: [unit-tests, quality-checks, typescript, lighthouse, e2e-tests] | |
runs-on: ubuntu-latest | |
steps: | |
- run: echo 'All tests passed ✅' | |
############################################################################### | |
# Push image to ECR | |
############################################################################### | |
publish-image: | |
name: Publish image to ECR | |
needs: [ success-gate ] | |
runs-on: ubuntu-latest | |
if: ${{ github.ref == 'refs/heads/main' }} | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Build and publish docker image | |
uses: ./.github/actions/publish-image | |
with: | |
role-to-assume: ${{ secrets.AWS_TOOLS_ACCOUNT_ROLE }} | |
architecture: arm64 | |
ecr-repository: ukhsa-data-dashboard/front-end | |
image-tag: ${{ github.sha }} | |
############################################################################### | |
# Deploy | |
############################################################################### | |
trigger-deployments: | |
name: Trigger deployments | |
needs: [publish-image] | |
runs-on: ubuntu-latest | |
if: ${{ github.ref == 'refs/heads/main' }} | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- uses: ./.github/actions/trigger-deployments | |
with: | |
token: ${{ secrets.DEPLOYMENT_TRIGGER_TOKEN }} |