Skip to content

Feature/cdd 2363

Feature/cdd 2363 #2563

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 }}