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
## 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
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.
rootiest
changed title from fix(ci): set DEBIAN_FRONTEND=noninteractive for apt-get installs to fix(ci): reduce apt-get noise and fragility2026-08-21 04:55:05 +00:00
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
changed title from fix(ci): reduce apt-get noise and fragility to fix(ci): reduce apt-get noise/fragility and allow per-job dispatch2026-08-21 04:58:47 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
testandbuild-docsjobs'apt-get installsteps 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=noninteractiveis set directly on thesudocommand line (sudo DEBIAN_FRONTEND=noninteractive apt-get install ...) rather than via a step-levelenv:block, sincesudo'senv_resetstrips inherited environment variables that aren't inenv_keep— a step-levelenv:wouldn't actually have reached theapt-getsubprocess.fishpulls inman-db,groff-base, andxselas recommended (not required) packages, triggering a slow "Building database of manual pages" step for tooling nothing in this pipeline uses.--no-install-recommendsskips that.apt-get updatehad no retry policy, so a transient blip against the PPA mirror would fail the whole job outright.-o Acquire::Retries=3gives it a few attempts before giving up.workflow_dispatchalready let you manually run the whole pipeline, but there was no way to fire just one job — the standalonebuild-docs.ymlused to allow that before it got merged intoci.ymland gated behindtest. Added ajobchoice input (all/test/build-docs, defaulting toall) 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 existingneeds: testgating.Manual Verification Checklist
testjob'sInstall fishstep no longer logsdebconf: unable to initialize frontendlinesbuild-docsjob'sInstall dependenciesstep no longer logs the sameBuilding database of manual pagesstep anymorejob=testand confirm only thetestjob runs (build-docsshows skipped)job=build-docsand confirm onlybuild-docsruns (testshows skipped) and it still completes successfullyjob=all(or the default) and confirm both jobs run in order as beforefix(ci): set DEBIAN_FRONTEND=noninteractive for apt-get installsto fix(ci): reduce apt-get noise and fragilityfix(ci): reduce apt-get noise and fragilityto fix(ci): reduce apt-get noise/fragility and allow per-job dispatchPull request closed