Run Tests #2332
Workflow file for this run
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: Run Tests | |
on: | |
push: | |
branches: ["main"] | |
pull_request: | |
merge_group: | |
jobs: | |
yarn-duplicates: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- run: yarn install --immutable --inline-builds | |
- run: yarn dedupe --check | |
prettier: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- run: yarn install --immutable --inline-builds | |
- run: yarn prettier --check '{desktop,jobrunner,server}/**/*.{ts,tsx}' | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- run: yarn install --immutable --inline-builds | |
- run: yarn lint | |
typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- run: yarn install --immutable --inline-builds | |
- run: yarn typecheck | |
test-unit: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- run: yarn install --immutable --inline-builds | |
- run: yarn test -- --coverage | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ./desktop/coverage/coverage-final.json,./server/coverage/coverage-final.json,./jobrunner/coverage/coverage-final.json,./utility/testing/coverage/coverage-final.json | |
test-integration-server-jobrunner: | |
runs-on: ubuntu-latest | |
env: | |
DATABASE_URL: postgres://root:postgres@localhost:5432/badger_test | |
TUS_ENDPOINT: "http://localhost:1080/files" | |
S3_ENDPOINT: "http://localhost:9000" | |
AWS_ACCESS_KEY_ID: root | |
AWS_SECRET_ACCESS_KEY: rootroot | |
AWS_REGION: us-east-1 | |
STORAGE_BUCKET: badger | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- uses: FedericoCarboni/setup-ffmpeg@v3 | |
with: | |
ffmpeg-version: "release" | |
- run: docker compose up -d | |
- run: yarn install --immutable --inline-builds | |
- run: yarn prisma:migrateProd | |
- run: yarn test:integration -- --coverage | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ./server/coverage/coverage-final.json,./jobrunner/coverage/coverage-final.json | |
test-e2e-server: | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
env: | |
NODE_ENV: test | |
E2E_TEST: "true" | |
DATABASE_URL: postgres://root:postgres@localhost:5432/badger_test | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- name: Start services | |
run: docker compose up -d | |
- name: Install dependencies | |
run: yarn install --immutable --inline-builds | |
- name: Build server | |
run: | | |
yarn build | |
cp -r public .next/standalone/server/public | |
mkdir -p .next/standalone/server/.next | |
cp -r .next/static .next/standalone/server/.next/static | |
working-directory: ./server | |
- name: Build Jobrunner | |
run: | | |
yarn build | |
cp ../utility/prisma/schema.prisma . | |
working-directory: ./jobrunner | |
# Adapted from https://playwrightsolutions.com/playwright-github-action-to-cache-the-browser-binaries/ | |
- name: Get installed Playwright version | |
id: playwright-version | |
run: echo version=$(yarn info --json @playwright/test | jq -r '.children.Version') >> $GITHUB_OUTPUT | |
working-directory: ./server | |
- name: Cache playwright binaries | |
uses: actions/cache@v4 | |
id: playwright-cache | |
with: | |
path: | | |
~/.cache/ms-playwright | |
key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} | |
- name: Install Playwright Browsers | |
run: yarn playwright install --with-deps | |
working-directory: ./server | |
if: steps.playwright-cache.outputs.cache-hit != 'true' | |
- name: Install Playwright OS dependencies | |
run: npx playwright install-deps | |
if: steps.playwright-cache.outputs.cache-hit == 'true' | |
- name: Migrate database | |
run: yarn prisma:migrateProd | |
- name: Run Playwright tests | |
run: yarn ${{ runner.debug && 'test:e2e:debug' || 'test:e2e' }} | |
working-directory: ./server | |
env: | |
PLAYWRIGHT_HTML_REPORT: ${{ github.workspace }}/server/playwright-report | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: playwright-report-server | |
path: ./server/playwright-report/ | |
retention-days: 30 | |
test-e2e-desktop-standalone: | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
env: | |
NODE_ENV: test | |
E2E_TEST: "true" | |
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- name: Install dependencies | |
run: yarn install --immutable --inline-builds | |
- name: Build desktop | |
run: yarn build | |
working-directory: ./desktop | |
- name: Make logs folder | |
run: mkdir -p ${{ runner.temp }}/logs | |
- name: Run Playwright tests | |
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn ${{ runner.debug && 'test:e2e:debug' || 'test:e2e' }} --project standalone | |
working-directory: ./desktop | |
env: | |
PLAYWRIGHT_HTML_REPORT: ${{ github.workspace }}/desktop/playwright-report | |
BADGER_LOGS_PATH: ${{ runner.temp }}/logs | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: playwright-report-desktop | |
path: | | |
./desktop/playwright-report/ | |
./desktop/traces/ | |
./desktop/test-results/ | |
${{ runner.temp }}/logs | |
retention-days: 30 | |
test-e2e-desktop-complete: | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
env: | |
NODE_ENV: test | |
E2E_TEST: "true" | |
DATABASE_URL: postgres://root:postgres@localhost:5432/badger_test | |
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- name: Start services | |
run: docker compose up -d | |
- name: Install dependencies | |
run: yarn install --immutable --inline-builds | |
- uses: FedericoCarboni/setup-ffmpeg@v3 | |
with: | |
ffmpeg-version: "release" | |
- name: Build server | |
run: | | |
yarn build | |
cp -r public .next/standalone/server/public | |
mkdir -p .next/standalone/server/.next | |
cp -r .next/static .next/standalone/server/.next/static | |
working-directory: ./server | |
- name: Build Jobrunner | |
run: | | |
yarn build | |
cp ../utility/prisma/schema.prisma . | |
working-directory: ./jobrunner | |
- name: Build desktop | |
run: yarn build | |
working-directory: ./desktop | |
- name: Migrate database | |
run: yarn prisma:migrateProd | |
- name: Make logs folder | |
run: mkdir -p ${{ runner.temp }}/logs | |
- name: Start Jobrunner | |
run: | | |
node --enable-source-maps dist/index.cjs --watch --pidFile ${{ runner.temp }}/jobrunner.pid > ${{ runner.temp }}/logs/jobrunner.log 2>&1 & | |
npx -y wait-on file:/${{ runner.temp }}/jobrunner.pid | |
working-directory: ./jobrunner | |
- name: Start server | |
run: | | |
HOSTNAME=localhost node server/server.js > ${{ runner.temp }}/logs/server.log 2>&1 & | |
npx -y wait-on -v -t 120000 http://localhost:3000/api/healthz | |
working-directory: ./server/.next/standalone | |
- name: Run Playwright tests | |
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn ${{ runner.debug && 'test:e2e:debug' || 'test:e2e' }} --project complete | |
working-directory: ./desktop | |
env: | |
PLAYWRIGHT_HTML_REPORT: ${{ github.workspace }}/desktop/playwright-report | |
BADGER_LOGS_PATH: ${{ runner.temp }}/logs | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: playwright-report-desktop | |
path: | | |
./desktop/playwright-report/ | |
./desktop/traces/ | |
./desktop/test-results/ | |
${{ runner.temp }}/logs | |
retention-days: 30 |