fix(ci): reduce apt-get noise/fragility and allow per-job dispatch #112

Merged
rootiest merged 3 commits from ci-robustness-and-dispatch into main 2026-08-21 05:10:02 +00:00
Owner

Supersedes #111 (renamed branch, same commits — Gitea doesn't retarget an open PR's head on a branch rename).

Summary

  • The test and build-docs jobs' apt-get install steps were probing debconf frontends (Dialog → Readline → Teletype) on every run before landing on the one that actually works on the non-interactive runner. DEBIAN_FRONTEND=noninteractive is set directly on the sudo command line (sudo DEBIAN_FRONTEND=noninteractive apt-get install ...) rather than via a step-level env: block, since sudo's env_reset strips inherited environment variables that aren't in env_keep — a step-level env: wouldn't actually have reached the apt-get subprocess.
  • Installing fish pulls in man-db, groff-base, and xsel as recommended (not required) packages, triggering a slow "Building database of manual pages" step for tooling nothing in this pipeline uses. --no-install-recommends skips that.
  • apt-get update had no retry policy, so a transient blip against the PPA mirror would fail the whole job outright. -o Acquire::Retries=3 gives it a few attempts before giving up.
  • workflow_dispatch already let you manually run the whole pipeline, but there was no way to fire just one job — the standalone build-docs.yml used to allow that before it got merged into ci.yml and gated behind test. Added a job choice input (all / test / build-docs, defaulting to all) so either job can be dispatched on its own, e.g. to re-run docs generation without re-running the fish test suite, while push-triggered runs keep the existing needs: test gating.

Manual Verification Checklist

  • Confirm the test job's Install fish step no longer logs debconf: unable to initialize frontend lines
  • Confirm the build-docs job's Install dependencies step no longer logs the same
  • Confirm neither job's install step triggers a Building database of manual pages step anymore
  • Confirm both jobs still install fish/pandoc/etc. successfully and the rest of the pipeline (tests, docs build, deploy) completes as before on a normal push
  • Manually dispatch with job=test and confirm only the test job runs (build-docs shows skipped)
  • Manually dispatch with job=build-docs and confirm only build-docs runs (test shows skipped) and it still completes successfully
  • Manually dispatch with job=all (or the default) and confirm both jobs run in order as before
Supersedes #111 (renamed branch, same commits — Gitea doesn't retarget an open PR's head on a branch rename). ## Summary - The `test` and `build-docs` jobs' `apt-get install` steps were probing debconf frontends (Dialog → Readline → Teletype) on every run before landing on the one that actually works on the non-interactive runner. `DEBIAN_FRONTEND=noninteractive` is set directly on the `sudo` command line (`sudo DEBIAN_FRONTEND=noninteractive apt-get install ...`) rather than via a step-level `env:` block, since `sudo`'s `env_reset` strips inherited environment variables that aren't in `env_keep` — a step-level `env:` wouldn't actually have reached the `apt-get` subprocess. - Installing `fish` pulls in `man-db`, `groff-base`, and `xsel` as recommended (not required) packages, triggering a slow "Building database of manual pages" step for tooling nothing in this pipeline uses. `--no-install-recommends` skips that. - `apt-get update` had no retry policy, so a transient blip against the PPA mirror would fail the whole job outright. `-o Acquire::Retries=3` gives it a few attempts before giving up. - `workflow_dispatch` already let you manually run the whole pipeline, but there was no way to fire just one job — the standalone `build-docs.yml` used to allow that before it got merged into `ci.yml` and gated behind `test`. Added a `job` choice input (`all` / `test` / `build-docs`, defaulting to `all`) so either job can be dispatched on its own, e.g. to re-run docs generation without re-running the fish test suite, while push-triggered runs keep the existing `needs: test` gating. ## Manual Verification Checklist - [x] Confirm the `test` job's `Install fish` step no longer logs `debconf: unable to initialize frontend` lines - [x] Confirm the `build-docs` job's `Install dependencies` step no longer logs the same - [x] Confirm neither job's install step triggers a `Building database of manual pages` step anymore - [x] Confirm both jobs still install fish/pandoc/etc. successfully and the rest of the pipeline (tests, docs build, deploy) completes as before on a normal push - [x] Manually dispatch with `job=test` and confirm only the `test` job runs (`build-docs` shows skipped) - [x] Manually dispatch with `job=build-docs` and confirm only `build-docs` runs (`test` shows skipped) and it still completes successfully - [x] Manually dispatch with `job=all` (or the default) and confirm both jobs run in order as before
rootiest added 3 commits 2026-08-21 05:08:47 +00:00
apt-get install was probing for a Dialog then Readline debconf frontend
before falling back to Teletype on the non-interactive CI runner,
adding noise and failed-negotiation log lines to every run. Passing
DEBIAN_FRONTEND=noninteractive directly on the sudo command line (env
vars set via step-level `env:` don't survive sudo's env_reset) skips
the negotiation and goes straight to the frontend that actually works
here.
Two more sources of CI noise/fragility alongside the debconf frontend
fix: fish's install pulls in man-db/groff-base/xsel as recommends,
triggering a slow mandb rebuild for tooling nothing here uses;
--no-install-recommends skips that. apt-get update had no retry
policy, so a transient blip against the PPA mirror failed the whole
job; -o Acquire::Retries=3 gives it a few chances first.
workflow_dispatch already ran the whole pipeline manually, but there
was no way to fire just one job (e.g. re-run docs generation without
re-running the fish test suite) the way the old standalone
build-docs.yml let you. Add a job choice input (all/test/build-docs,
defaulting to all) and gate each job on it via `if:`, while leaving
the push-triggered path's needs: test gating untouched.
rootiest merged commit 70b5868e3e into main 2026-08-21 05:10:02 +00:00
rootiest deleted branch ci-robustness-and-dispatch 2026-08-21 05:10:02 +00:00
Sign in to join this conversation.