- Sponsor
-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Loading status checks…
Ensure PR workflows can run on all PRs (but still skip when they're n…
…ot needed) (#2237) Closes #2279 This adds a `paths-filter` step to all workflows that run on PRs so that we can enable auto-merge, for more info about this read [enabling auto-merge](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request)! In order to be able to have required checks, a workflow can't be entirely skipped: see [Handling skipped but required checks](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks). This also merges frontend CI workflows into one with multiple parallel steps, which should speed things up a bit. It also upgrades node versions to 20 and 22 across the board.
Showing
8 changed files
with
469 additions
and
256 deletions.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
name: Backend Lint + Type Check | ||
|
||
on: [push, pull_request] | ||
|
||
# Cancel in progress workflows on pull_requests. | ||
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
# In order to be able to have required checks, a workflow can't be entirely | ||
# skipped: see https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks | ||
paths-filter: | ||
name: "Changed files?" | ||
runs-on: ubuntu-latest | ||
outputs: | ||
matches: ${{ steps.filter.outputs.matches }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 2 # important, to fetch previous commit | ||
|
||
# workaround for https://github.com/dorny/paths-filter/issues/240 | ||
- id: previous-sha | ||
run: 'echo "sha=$(git rev-parse HEAD^1)" >> $GITHUB_OUTPUT' | ||
|
||
- uses: dorny/paths-filter@v3 | ||
id: filter | ||
with: | ||
base: "${{ steps.previous-sha.outputs.sha }}" | ||
filters: | | ||
matches: | ||
- 'backend/**' | ||
- '.github/workflows/backend-lint.yaml' | ||
unit-tests: | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: checkout | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.10' | ||
|
||
- name: Install dependencies | ||
run: | | ||
cd backend/ | ||
python -m pip install --upgrade pip | ||
pip install -r requirements.txt | ||
pip install -r dev-requirements.txt | ||
- name: Style Check | ||
run: | | ||
black --check backend/btrixcloud/ | ||
- name: Lint Check | ||
run: | | ||
cd backend/ | ||
pylint btrixcloud/ | ||
- name: Type Check | ||
run: | | ||
cd backend/ | ||
mypy --install-types --non-interactive --check-untyped-defs btrixcloud/ |
This file was deleted.
Oops, something went wrong.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,299 @@ | ||
name: Frontend | ||
on: | ||
pull_request | ||
|
||
# Cancel in progress workflows on pull_requests. | ||
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
# In order to be able to have required checks, a workflow can't be entirely | ||
# skipped: see https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks | ||
paths-filter: | ||
name: "Changed files?" | ||
runs-on: ubuntu-latest | ||
outputs: | ||
matches: ${{ steps.filter.outputs.matches }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 2 # important, to fetch previous commit | ||
|
||
# workaround for https://github.com/dorny/paths-filter/issues/240 | ||
- id: previous-sha | ||
run: 'echo "sha=$(git rev-parse HEAD^1)" >> $GITHUB_OUTPUT' | ||
|
||
- uses: dorny/paths-filter@v3 | ||
id: filter | ||
with: | ||
base: "${{ steps.previous-sha.outputs.sha }}" | ||
filters: | | ||
matches: | ||
- 'frontend/src/**' | ||
- 'frontend/*.json' | ||
- 'frontend/*.js' | ||
- 'frontend/*.ts' | ||
- '.github/workflows/frontend-lint-test-build.yaml' | ||
unit-tests: | ||
name: Unit Tests | ||
runs-on: ubuntu-latest | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
strategy: | ||
matrix: | ||
node: [20, 22] | ||
steps: | ||
# Setup: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ github.head_ref }} | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node }} | ||
cache: 'yarn' | ||
cache-dependency-path: frontend/yarn.lock | ||
|
||
- name: Get installed Playwright version | ||
working-directory: frontend | ||
id: playwright-version | ||
run: | | ||
yarn add @yarnpkg/lockfile | ||
echo "PLAYWRIGHT_VERSION=$(node scripts/get-resolved-playwright-version.js)" >> $GITHUB_ENV | ||
- name: Cache playwright binaries | ||
uses: actions/cache@v4 | ||
id: playwright-cache | ||
with: | ||
path: | | ||
~/.cache/ms-playwright | ||
key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} | ||
|
||
- name: Install dependencies | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn install --frozen-lockfile | ||
|
||
- name: Install Playwright Browsers | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn playwright install --with-deps | ||
if: steps.playwright-cache.outputs.cache-hit != 'true' | ||
|
||
- name: Install Playwright Deps | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn playwright install-deps | ||
if: steps.playwright-cache.outputs.cache-hit != 'true' | ||
|
||
# Test: | ||
- name: Unit tests | ||
working-directory: frontend | ||
run: yarn test | ||
|
||
integration-tests: | ||
name: Integration Tests | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
timeout-minutes: 60 | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
node: [20, 22] | ||
env: | ||
E2E_USER_EMAIL: ${{ secrets.E2E_USER_EMAIL }} | ||
E2E_USER_PASSWORD: ${{ secrets.E2E_USER_PASSWORD }} | ||
API_BASE_URL: ${{ secrets.API_BASE_URL }} | ||
working-directory: ./frontend | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node }} | ||
cache: 'yarn' | ||
cache-dependency-path: frontend/yarn.lock | ||
|
||
- name: Get installed Playwright version | ||
working-directory: frontend | ||
id: playwright-version | ||
run: | | ||
yarn add @yarnpkg/lockfile | ||
echo "PLAYWRIGHT_VERSION=$(node scripts/get-resolved-playwright-version.js)" >> $GITHUB_ENV | ||
- name: Cache playwright binaries | ||
uses: actions/cache@v4 | ||
id: playwright-cache | ||
with: | ||
path: | | ||
~/.cache/ms-playwright | ||
key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} | ||
|
||
- name: Install dependencies | ||
working-directory: frontend | ||
run: yarn install --frozen-lockfile | ||
|
||
- name: Install Playwright Browsers | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn playwright install --with-deps | ||
if: steps.playwright-cache.outputs.cache-hit != 'true' | ||
|
||
- name: Install Playwright Deps | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn playwright install-deps | ||
if: steps.playwright-cache.outputs.cache-hit != 'true' | ||
|
||
- name: Create env file | ||
working-directory: frontend | ||
run: | | ||
touch .env | ||
echo E2E_USER_EMAIL="${{ secrets.E2E_USER_EMAIL }}" >> .env | ||
echo E2E_USER_PASSWORD="${{ secrets.E2E_USER_PASSWORD }}" >> .env | ||
cat .env | ||
- name: Build frontend | ||
working-directory: frontend | ||
run: yarn build | ||
id: build-frontend | ||
|
||
- name: Run Playwright tests | ||
working-directory: frontend | ||
run: yarn playwright test | ||
|
||
- uses: actions/upload-artifact@v4 | ||
if: always() | ||
with: | ||
name: playwright-report-node${{ matrix.node }}-${{github.sha}} | ||
path: frontend/playwright-report/ | ||
retention-days: 30 | ||
|
||
lint: | ||
name: Lint | ||
runs-on: ubuntu-latest | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
strategy: | ||
matrix: | ||
node: [20, 22] | ||
steps: | ||
# Setup: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ github.head_ref }} | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node }} | ||
cache: 'yarn' | ||
cache-dependency-path: frontend/yarn.lock | ||
|
||
- name: Install dependencies | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn install --frozen-lockfile | ||
|
||
# Lint: | ||
- name: Lint | ||
working-directory: frontend | ||
run: yarn lint:check | ||
|
||
localize: | ||
name: Localize | ||
runs-on: ubuntu-latest | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
strategy: | ||
matrix: | ||
node: [20, 22] | ||
steps: | ||
# Setup: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ github.head_ref }} | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node }} | ||
cache: 'yarn' | ||
cache-dependency-path: frontend/yarn.lock | ||
|
||
- name: Install dependencies | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn install --frozen-lockfile | ||
|
||
# Localize: | ||
- name: Localization build dry run | ||
working-directory: frontend | ||
run: yarn localize:build | ||
|
||
build: | ||
name: Build | ||
runs-on: ubuntu-latest | ||
needs: paths-filter | ||
if: needs.paths-filter.outputs.matches == 'true' | ||
strategy: | ||
matrix: | ||
node: [20, 22] | ||
steps: | ||
# Setup: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ github.head_ref }} | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node }} | ||
cache: 'yarn' | ||
cache-dependency-path: frontend/yarn.lock | ||
|
||
- name: Restore cache | ||
uses: actions/cache@v4 | ||
with: | ||
path: frontend/dist | ||
key: ${{ runner.os }}-btrix-frontend-build-${{ hashFiles('frontend/dist') }} | ||
restore-keys: | | ||
${{ runner.os }}-btrix-frontend-build- | ||
- name: Install dependencies | ||
working-directory: frontend | ||
env: | ||
HUSKY: 0 | ||
run: yarn install --frozen-lockfile | ||
|
||
# Check build: | ||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v2 | ||
with: | ||
driver-opts: network=host | ||
|
||
- name: Build Frontend | ||
uses: docker/build-push-action@v3 | ||
with: | ||
context: frontend | ||
load: true | ||
tags: webrecorder/browsertrix-frontend:latest | ||
cache-from: type=gha,scope=frontend | ||
cache-to: type=gha,scope=frontend,mode=max |
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
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
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