From b7adf2e308bf7e518f69a1d79d09398b25d5190a Mon Sep 17 00:00:00 2001 From: julien Date: Mon, 4 May 2026 14:55:14 +0200 Subject: [PATCH] fix(ci): post-runner-image cleanup (#7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Three follow-up fixes uncovered by the first end-to-end CI run on the self-hosted act_runner image (smoke-test PR). - **`check` job** — replace `nrwl/nx-set-shas@v4` (GitHub-API only, 404 on Gitea) with a manual shell step that derives `NX_BASE`/`NX_HEAD` from local git history (merge-base on `pull_request`, `HEAD~1` on `push`). - **`perf` job** — pin to `catthehacker/ubuntu:full-22.04` so Lighthouse CI finds a real Chrome. The default act image (`act-22.04`) is the minimal variant, ships without browsers. - **`package.json`** — declare `pnpm.onlyBuiltDependencies` to silence the "Ignored build scripts" warning and approve only the post-install hooks we actually rely on (Nx, Prisma, esbuild, swc, native watchers/resolvers). No ADR change — these are purely operational adjustments. ## Test plan - [ ] CI run on this PR: `check` and `perf` jobs both green. - [ ] No "Ignored build scripts" warning in `pnpm install` step output. - [ ] After merge, `push` event on `main` re-runs `check`, `scan`, `perf`, `a11y` cleanly (no `nx-set-shas` 404). --------- Co-authored-by: Julien Gautier Reviewed-on: https://git.unespace.com/julien/apf_portal/pulls/7 --- .gitea/workflows/ci.yml | 26 +++++++++++++++++++++++++- lighthouserc.js | 10 ++++++++++ package.json | 16 ++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 8b5c25e..80db345 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -18,7 +18,25 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: nrwl/nx-set-shas@v4 + # Derive NX_BASE / NX_HEAD for `nx affected`. Replaces + # nrwl/nx-set-shas@v4, which is GitHub-only (it queries the GitHub + # API to find the last successful workflow run, returning 404 on + # Gitea). HEAD~1 is a reasonable approximation for push events on + # a squash-merge trunk; pull_request uses the merge-base with the + # target branch. + - name: Derive Nx affected base and head + shell: bash + run: | + # `actions/checkout@v4` with fetch-depth: 0 already pulls every + # branch and tag, so origin/ is present locally — no + # extra `git fetch` is needed (and `--depth=0` is invalid: git + # requires a positive integer). + if [ "${{ github.event_name }}" = "pull_request" ]; then + echo "NX_BASE=$(git merge-base HEAD origin/${{ github.base_ref }})" >> "$GITHUB_ENV" + else + echo "NX_BASE=HEAD~1" >> "$GITHUB_ENV" + fi + echo "NX_HEAD=HEAD" >> "$GITHUB_ENV" - uses: pnpm/action-setup@v3 - uses: actions/setup-node@v4 with: @@ -70,6 +88,12 @@ jobs: perf: runs-on: [self-hosted, on-prem] + # Lighthouse CI drives a real Chrome instance; the default act runner + # image (catthehacker/ubuntu:act-22.04) ships without one. The :full + # variant adds Chrome, Firefox, and the GUI-test toolchain — pinned + # to the same Ubuntu 22.04 base as the default labels for parity. + container: + image: catthehacker/ubuntu:full-22.04 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 diff --git a/lighthouserc.js b/lighthouserc.js index 9d44732..d8a2575 100644 --- a/lighthouserc.js +++ b/lighthouserc.js @@ -23,6 +23,16 @@ module.exports = { // Slow-4G profile so scores are stable across CI runners and // comparable to industry public benchmarks. preset: 'desktop', + // Chrome's user-namespace sandbox is disabled inside the act + // runner container (AppArmor restriction on the host kernel), + // so Chrome fails to launch with a "No usable sandbox" zygote + // error. `--no-sandbox` is the standard Lighthouse / Puppeteer + // / Playwright workaround for containerised CI: the residual + // risk is acceptable because Chrome only loads our own freshly + // built bundle from http://localhost:4200/ inside an ephemeral + // self-hosted runner container — no untrusted content reaches + // the browser process. + chromeFlags: '--no-sandbox', }, }, assert: { diff --git a/package.json b/package.json index 2265fb8..3be8b8f 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,22 @@ "prettier --write" ] }, + "pnpm": { + "onlyBuiltDependencies": [ + "@nestjs/core", + "@parcel/watcher", + "@prisma/client", + "@prisma/engines", + "@swc/core", + "esbuild", + "less", + "lmdb", + "msgpackr-extract", + "nx", + "prisma", + "unrs-resolver" + ] + }, "devDependencies": { "@analogjs/vite-plugin-angular": "~2.1.2", "@analogjs/vitest-angular": "~2.1.2",