Update pull_request_template.md #3722
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: 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 }} |