mirror of
https://github.com/suitenumerique/docs
synced 2026-04-21 13:37:20 +00:00
We had to maintains 2 jobs, test-e2e-chromium and test-e2e-other-browser, in the impress-frontend workflow. By factorising the E2E tests into a separate workflow, we can now maintain only one job for each browser, which is much simpler and easier to maintain.
168 lines
4.5 KiB
YAML
168 lines
4.5 KiB
YAML
name: Frontend Workflow
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- "*"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
|
|
install-dependencies:
|
|
uses: ./.github/workflows/dependencies.yml
|
|
with:
|
|
node_version: '22.x'
|
|
with-front-dependencies-installation: true
|
|
|
|
test-front:
|
|
needs: install-dependencies
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "22.x"
|
|
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Test App
|
|
run: cd src/frontend/ && yarn test
|
|
|
|
lint-front:
|
|
runs-on: ubuntu-latest
|
|
needs: install-dependencies
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "22.x"
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Check linting
|
|
run: cd src/frontend/ && yarn lint
|
|
|
|
test-e2e-chromium:
|
|
uses: ./.github/workflows/e2e-tests.yml
|
|
with:
|
|
browser-name: chromium
|
|
projects: --project=chromium
|
|
timeout-minutes: 25
|
|
|
|
test-e2e-other-browser:
|
|
needs: test-e2e-chromium
|
|
uses: ./.github/workflows/e2e-tests.yml
|
|
with:
|
|
browser-name: other-browser
|
|
projects: --project=firefox --project=webkit
|
|
timeout-minutes: 30
|
|
|
|
bundle-size-check:
|
|
runs-on: ubuntu-latest
|
|
needs: install-dependencies
|
|
if: github.event_name == 'pull_request'
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
issues: write
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Detect relevant changes
|
|
id: changes
|
|
uses: dorny/paths-filter@v3
|
|
with:
|
|
filters: |
|
|
lock:
|
|
- 'src/frontend/**/yarn.lock'
|
|
app:
|
|
- 'src/frontend/apps/impress/**'
|
|
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Setup Node.js
|
|
if: steps.changes.outputs.lock == 'true' || steps.changes.outputs.app == 'true'
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "22.x"
|
|
|
|
- name: Check bundle size changes
|
|
if: steps.changes.outputs.lock == 'true' || steps.changes.outputs.app == 'true'
|
|
uses: preactjs/compressed-size-action@v2
|
|
with:
|
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
build-script: "app:build"
|
|
pattern: "apps/impress/out/**/*.{css,js,html}"
|
|
exclude: "{**/*.map,**/node_modules/**}"
|
|
minimum-change-threshold: 500
|
|
compression: "gzip"
|
|
cwd: "./src/frontend"
|
|
show-total: true
|
|
strip-hash: "[-_.][a-f0-9]{8,}(?=\\.(?:js|css|html)$)"
|
|
omit-unchanged: true
|
|
install-script: "yarn install --frozen-lockfile"
|
|
|
|
uikit-theme-checker:
|
|
runs-on: ubuntu-latest
|
|
needs: install-dependencies
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "22.x"
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Build theme
|
|
run: cd src/frontend/apps/impress && yarn build-theme
|
|
|
|
- name: Ensure theme is up to date
|
|
shell: bash
|
|
run: |
|
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
echo "Error: build-theme produced git changes (tracked or untracked)."
|
|
echo "--- git status --porcelain ---"
|
|
git status --porcelain
|
|
echo "--- git diff ---"
|
|
git --no-pager diff
|
|
exit 1
|
|
fi
|