Skip to content

Update pull_request_template.md #3725

Update pull_request_template.md

Update pull_request_template.md #3725

Workflow file for this run

name: Complete pipeline
on:
push:
pull_request:
types:
- ready_for_review
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
timeout-minutes: 5
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
id: cache-build
uses: ./.github/actions/cache-build
- name: Setup project
if: ${{ steps.cache-build.outputs.node-modules-cache-hit != 'true' }}
run: npm run setup:ci
- name: Build shared
run: cd shared && npm run build && cd ..
lint:
timeout-minutes: 5
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
uses: ./.github/actions/cache-build
- name: Run ESLint
run: npm run lint
- name: Run Prettier
if: always()
run: npm run prettier:check
dependencies:
timeout-minutes: 10
runs-on: ubuntu-latest
needs: build
continue-on-error: true
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
uses: ./.github/actions/cache-build
- name: Audit root
if: always()
run: npm audit
- name: Audit shared
if: always()
run: cd shared; npm audit; cd ..
- name: Audit frontend
if: always()
run: cd frontend; npm audit; cd ..
- name: Audit backend
if: always()
run: cd backend; npm audit; cd ..
test:
timeout-minutes: 4
runs-on: ubuntu-latest
needs: build
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: ${{ vars.POSTGRES_DB }}
POSTGRES_PASSWORD: ${{ vars.POSTGRES_PASSWORD }}
POSTGRES_USER: ${{ vars.POSTGRES_USER }}
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
uses: ./.github/actions/cache-build
- name: Create .env
run: >
cat ./.env.example
| sed -e "s/^DFM_DB_USER=.*$/DFM_DB_USER=${{ vars.POSTGRES_USER }}/"
| sed -e "s/^#DFM_DB_PASSWORD=.*$/DFM_DB_PASSWORD=${{ vars.POSTGRES_PASSWORD }}/"
| sed -e "s/^DFM_DB_NAME=.*$/DFM_DB_NAME=${{ vars.POSTGRES_DB }}/"
| sed -e "s/^DFM_DB_HOST=.*$/DFM_DB_HOST=127.0.0.1/" > ./.env
- name: Run migrations
run: cd backend && npm run migration:run && cd ..
- name: Run Backend Tests
run: cd backend && npm run test:ci-no-migration; cd ..
if: always()
- name: Run Frontend Tests
run: cd frontend && npm run test:ci; cd ..
if: always()
- name: Run Shared Tests
run: cd shared && npm run test:ci; cd ..
if: always()
- name: Merge coverage
run: npm run merge-coverage
if: always()
- name: Upload coverage
uses: actions/upload-artifact@v3
if: always()
with:
name: coverage-output
path: coverage
migration-test:
timeout-minutes: 4
runs-on: ubuntu-latest
needs: build
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: ${{ vars.POSTGRES_DB }}
POSTGRES_PASSWORD: ${{ vars.POSTGRES_PASSWORD }}
POSTGRES_USER: ${{ vars.POSTGRES_USER }}
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
uses: ./.github/actions/cache-build
- name: Create .env
run: >
cat ./.env.example
| sed -e "s/^DFM_DB_USER=.*$/DFM_DB_USER=${{ vars.POSTGRES_USER }}/"
| sed -e "s/^#DFM_DB_PASSWORD=.*$/DFM_DB_PASSWORD=${{ vars.POSTGRES_PASSWORD }}/"
| sed -e "s/^DFM_DB_NAME=.*$/DFM_DB_NAME=${{ vars.POSTGRES_DB }}/"
| sed -e "s/^DFM_DB_HOST=.*$/DFM_DB_HOST=127.0.0.1/" > ./.env
- name: Run migrations
run: cd backend && npm run migration:run && cd ..
- name: Fetch Test Scenarios
run: git submodule update --init --recursive
if: always()
- name: Run Migration Tests
run: cd backend && npm run test:ci-migration; cd ..
if: always()
cypress:
timeout-minutes: 20
runs-on: ${{ matrix.os }}
needs: build
services:
postgres:
image: postgres:14
env:
POSTGRES_DB: ${{ vars.POSTGRES_DB }}
POSTGRES_PASSWORD: ${{ vars.POSTGRES_PASSWORD }}
POSTGRES_USER: ${{ vars.POSTGRES_USER }}
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
strategy:
matrix:
os: [ubuntu-latest]
browser: [firefox, chromium]
fail-fast: false
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache node modules and shared/dist
uses: ./.github/actions/cache-build
- name: Cache Cypress binary
uses: actions/cache@v3
id: cache-cypress
with:
path: ~/.cache/Cypress
key: cypress-${{ hashFiles('package-lock.json', '**/package-lock.json') }}-${{ runner.os }}
- name: Install Cypress
if: steps.cache-cypress.outputs.cache-hit != 'true'
run: npm run cy:install
- name: Create .env
run: >
cat ./.env.example
| sed -e "s/^DFM_DB_USER=.*$/DFM_DB_USER=${{ vars.POSTGRES_USER }}/"
| sed -e "s/^#DFM_DB_PASSWORD=.*$/DFM_DB_PASSWORD=${{ vars.POSTGRES_PASSWORD }}/"
| sed -e "s/^DFM_DB_NAME=.*$/DFM_DB_NAME=${{ vars.POSTGRES_DB }}/"
| sed -e "s/^DFM_DB_HOST=.*$/DFM_DB_HOST=127.0.0.1/" > ./.env
- name: Run migrations
run: cd backend && npm run migration:run && cd ..
- name: Run Cypress
uses: cypress-io/github-action@v5
with:
start: npm --prefix .. -- run start:all
working-directory: frontend
browser: ${{ matrix.browser }}
wait-on: 'http://127.0.0.1:4200/, http://127.0.0.1:3201/api/health'
wait-on-timeout: 90
command-prefix: '--' # So cypress is using our node version: https://github.com/cypress-io/github-action/issues/489#issuecomment-1021379037
- name: Archive cypress screenshots
if: always()
uses: actions/upload-artifact@v3
with:
name: cypress-screenshots-${{ matrix.browser }}
path: frontend/cypress/screenshots
# Dummy step to gate until all test are complete
tests-done:
if: always()
needs:
- test
- cypress
- lint
- migration-test
runs-on: ubuntu-latest
steps:
- uses: matrix-org/done-action@v2
with:
needs: ${{ toJSON (needs) }}
deploy-dev:
timeout-minutes: 10
runs-on: ubuntu-latest
needs: tests-done
if: github.ref == 'refs/heads/dev'
steps:
- uses: actions/checkout@v3
# Source: https://docs.docker.com/ci-cd/github-actions/
- name: Add commit hash to version
uses: ./.github/actions/add-commit-hash-to-version
- name: Login to docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: docker/Dockerfile
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/dfm:dev
deploy-main:
timeout-minutes: 10
runs-on: ubuntu-latest
needs: tests-done
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/extract-version
# Source: https://docs.docker.com/ci-cd/github-actions/
- name: Login to docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: docker/Dockerfile
push: true
tags: >
${{ secrets.DOCKER_HUB_USERNAME }}/dfm:latest ,
${{ secrets.DOCKER_HUB_USERNAME }}/dfm:${{ env.VERSION_NAME }}
release-main:
timeout-minutes: 2
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
needs: tests-done
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/extract-version
- name: Extract release notes
id: extract_release_notes
uses: ffurrer2/extract-release-notes@v1
- name: Create release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ env.VERSION_NAME }}
name: v${{ env.VERSION_NAME }}
target_commitish: main
body: ${{ steps.extract_release_notes.outputs.release_notes }}