Merge pull request #78 from DarkFlorist/404 #271
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: Test | |
# Many build steps have their own caches, so each job has its own cache to improve subsequent build times. | |
# Build tools are configured to cache to node_modules/.cache, so they are cached independently of node_modules. | |
# Caches are saved every run (by keying on github.run_id), and the most recent available cache is loaded. | |
# See https://jongleberry.medium.com/speed-up-your-ci-and-dx-with-node-modules-cache-ac8df82b7bb0. | |
on: | |
push: | |
branches: | |
- main | |
- releases/staging | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache | |
key: ${{ runner.os }}-eslint-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-eslint- | |
- run: yarn lint | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Lint | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache | |
key: ${{ runner.os }}-tsc-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-tsc- | |
- run: yarn typecheck | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Typecheck | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
deps-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- run: yarn yarn-deduplicate --strategy=highest --list --fail | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Dependency checks | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
unit-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache | |
key: ${{ runner.os }}-jest-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-jest- | |
- run: yarn test --coverage --maxWorkers=100% | |
- uses: codecov/codecov-action@v3 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
fail_ci_if_error: false | |
flags: unit-tests | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Unit tests | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.swc | |
key: ${{ runner.os }}-swc-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-swc- | |
- run: yarn build | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: build | |
path: build | |
if-no-files-found: error | |
cypress-typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache | |
key: ${{ runner.os }}-cypress-tsc-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-cypress-tsc- | |
- run: yarn typecheck:cypress | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Cypress typecheck | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
# Allows for parallel re-runs of cypress tests without re-building. | |
cypress-rerun: | |
runs-on: ubuntu-latest | |
steps: | |
- run: exit 0 | |
cypress-test-matrix: | |
needs: [build, cypress-rerun] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
containers: [1, 2, 3, 4] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: /root/.cache/Cypress | |
key: ${{ runner.os }}-cypress-${{ hashFiles('**/node_modules/cypress/package.json') }} | |
- run: | | |
yarn cypress install | |
yarn cypress info | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build | |
path: build | |
- uses: actions/cache/restore@v3 | |
with: | |
path: cache | |
key: ${{ runner.os }}-hardhat-${{ hashFiles('hardhat.config.js') }}-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-hardhat-${{ hashFiles('hardhat.config.js') }}- | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Cypress tests | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
cloud-typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup | |
- uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache | |
key: ${{ runner.os }}-cloud-tsc-${{ github.run_id }} | |
restore-keys: ${{ runner.os }}-cloud-tsc- | |
- run: yarn typecheck:cloud | |
- if: failure() && github.ref_name == 'main' | |
uses: ./.github/actions/report | |
with: | |
name: Cloud typecheck | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TEST_REPORTER_WEBHOOK }} | |
pre: | |
if: ${{ github.ref_name == 'main' || github.ref_name == 'releases/staging' }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/[email protected] | |
with: | |
script: | | |
github.rest.repos.createCommitStatus({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
sha: context.sha, | |
state: 'pending', | |
context: 'Test / promotion', | |
description: 'Running tests...', | |
target_url: 'https://github.com/Uniswap/interface/actions/runs/' + context.runId | |
}) | |
post: | |
if: ${{ github.ref_name == 'main' || github.ref_name == 'releases/staging' }} | |
needs: [pre, lint, typecheck, deps-tests, unit-tests, cypress-test-matrix] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/[email protected] | |
with: | |
script: | | |
github.rest.repos.createCommitStatus({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
sha: context.sha, | |
state: ${{ env.STATUS }} ? 'success' : 'failure', | |
context: 'Test / promotion', | |
description: ${{ env.STATUS }} ? 'All tests passed' : 'One or more tests failed and are blocking promotion', | |
target_url: 'https://github.com/Uniswap/interface/actions/runs/' + context.runId | |
}) | |
env: | |
STATUS: | | |
${{ needs.lint.result == 'success' }} && | |
${{ needs.typecheck.result == 'success' }} && | |
${{ needs.deps-tests.result == 'success' }} && | |
${{ needs.unit-tests.result == 'success' }} && | |
${{ needs.cypress-test-matrix.result == 'success' }} |