open-standards/.github/workflows/repo-checks.yml
Transaction Science 4a0ea0f6c6
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 7s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 57s
ci: one job for the repository's script checks
Six workflows, nine jobs on every push (lockfiles, tests-in-ci, workflow-hygiene,
wai-section-refs, spec-refs, and no-vanity-metrics' four), each paying for a container
and a checkout to run a script that reads the tree for a few seconds. On 2026-10-14
they were about half of the 119 jobs waiting for the linux-arm64 runner, queued behind
the long standards-build legs; spec-refs held a place on the one x86_64 runner.

repo-checks.yml runs them all in one job on linux-arm64, one step a check, in the same
order with the same self-tests. Every step runs even after an earlier one fails
(`!cancelled()`), so a red job names each failing check, and fails if any did. The
public-name check still runs only on the push to main, where its pattern list is
given. The two path filters (public text, WAI section references) are dropped: the
checks take seconds, and a filter that is wrong skips a check silently.

check-workflow-concurrency-selftest.sh takes the new file as its fixture (it removed
the concurrency block from workflow-hygiene.yml, now gone); CHARTER.md names the new
workflow. Locally: the concurrency self-test and check (24 workflows), the path-gate
self-test, tests-in-ci, spec refs and vanity metrics pass, and the workflow parses
(19 steps).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 12:05:46 -04:00

128 lines
6 KiB
YAML

# Repository checks: the script checks every change runs, in one job.
#
# Each of these is a script that reads the tree for a few seconds. They were six
# workflows and nine jobs (lockfiles, tests-in-ci, workflow-hygiene, wai-section-refs,
# spec-refs and no-vanity-metrics' four), and each job paid for a container and a
# checkout to run them. On 2026-10-14 the light checks were about half of the 119 jobs
# waiting for the linux-arm64 runner, queued behind the long standards-build legs, and
# spec-refs held a place on the one x86_64 runner. One job runs them all now, one step
# a check: every step runs even after an earlier one fails (`!cancelled()`), so a red
# job names each failing check in its own step, and the job fails if any did.
#
# The two path filters the old workflows had (public text on Markdown and wai/ sources,
# section references on the WAI documents) are gone: the checks take seconds, and a
# filter that is wrong skips a check silently.
name: repository checks
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
checks:
name: lockfiles, tests in CI, workflow hygiene, spec and section references, public text
runs-on: linux-arm64
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
python-version: '3.11'
# check-lockfiles.sh runs `cargo` against every lockfile.
- name: Install Rust 1.98.0
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# ── Every Cargo.lock is current ──────────────────────────────────────────
- name: "lockfiles: the check fails closed (self-test)"
if: ${{ !cancelled() }}
run: ./scripts/check-lockfiles-selftest.sh
- name: "lockfiles: every Cargo.lock is current"
if: ${{ !cancelled() }}
run: ./scripts/check-lockfiles.sh
# ── Every test file is run by a job or listed with its reason ────────────
- name: "tests in CI: the check fails closed (self-test)"
if: ${{ !cancelled() }}
run: ./scripts/check-tests-in-ci-selftest.sh
- name: "tests in CI: every test file is run or listed, and none can run empty"
if: ${{ !cancelled() }}
run: python3 -I scripts/check-tests-in-ci.py
# ── Every workflow supersedes its own queue; the path gate fails open ───
- name: "workflow hygiene: the check fails closed (self-test)"
if: ${{ !cancelled() }}
run: ./scripts/check-workflow-concurrency-selftest.sh
- name: "workflow hygiene: every workflow is grouped per ref"
if: ${{ !cancelled() }}
run: ./scripts/check-workflow-concurrency.sh
- name: "workflow hygiene: the path gate fails open (self-test)"
if: ${{ !cancelled() }}
run: ./scripts/pr-touches-paths-selftest.sh
# ── Code cites no section its SPEC lacks; WAI's cited sections exist ────
- name: "spec references: the check can fail (self-test)"
if: ${{ !cancelled() }}
run: bash scripts/check-spec-refs-selftest.sh
- name: "spec references: every SPEC citation resolves"
if: ${{ !cancelled() }}
run: python3 scripts/check-spec-refs.py
- name: "section references: every section WAI's documents cite exists"
if: ${{ !cancelled() }}
run: python scripts/check-wai-section-refs.py
# ── Public text: no vanity metrics, no comparison, no company names ─────
- name: "public text: no vanity metrics in committed Markdown"
if: ${{ !cancelled() }}
run: bash scripts/check-no-vanity-metrics.sh
- name: "public text: the two public-text checks fail closed (self-test)"
if: ${{ !cancelled() }}
run: bash scripts/test-public-text-checks.sh
- name: "public text: WAI's public text names no comparison"
if: ${{ !cancelled() }}
run: bash scripts/check-comparative-prose.sh
# The pattern list is a secret, never given to pull-request code: the check runs
# on the push to main.
- name: "public text: WAI's public text names no company or product (push to main)"
if: ${{ !cancelled() && github.event_name != 'pull_request' }}
env:
WAI_NAME_DENYLIST: ${{ secrets.WAI_NAME_DENYLIST }}
run: |
if [ -z "$WAI_NAME_DENYLIST" ]; then
echo "::error::WAI_NAME_DENYLIST is not set: the public-name check cannot run"
exit 1
fi
bash scripts/check-public-names.sh
# ── No library source file is unreachable from its crate root ───────────
# An orphan `.rs` (one no `mod`, `#[path]` or `include!` names) is never compiled,
# so nothing else in this repository can see it. Both directions, before trusting
# the result: a planted orphan must fail the check, and removing it must pass.
- name: "orphan sources: the check fails closed (self-test)"
if: ${{ !cancelled() }}
run: |
set -euo pipefail
probe=jcp/jcp-rs/crates/jcp-efficiency/src/_ci_orphan_probe.rs
printf 'pub fn never_compiled() -> u64 { 0 }\n' > "$probe"
if python3 scripts/check-orphan-sources.py >/dev/null 2>&1; then
rm -f "$probe"
echo "::error::the orphan check passed with a planted orphan present"
exit 1
fi
rm -f "$probe"
- name: "orphan sources: no new orphan source files"
if: ${{ !cancelled() }}
run: python3 scripts/check-orphan-sources.py