mirror of
https://github.com/kuhyx/utils.git
synced 2026-11-11 19:53:59 +01:00
Some checks failed
dependency freshness / dependencies on newest stable (push) Waiting to run
file length / file-length (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
palette drift / palette (push) Waiting to run
shared gate tests / gate unit tests (push) Waiting to run
crdt_sync_dart tests / test (push) Has been cancelled
crdt_sync_flutter tests / test (push) Has been cancelled
design_system tests / test (push) Has been cancelled
sync_settings_ui tests / test (push) Has been cancelled
The gate is three files per repo -- a delegate, a pre-commit hook entry and a CI workflow -- and Phase 3 needs them in sixteen more repos. Hand-replication is precisely how the 250-line cap ended up shipping under four different hook ids, two of which were independent reimplementations rather than delegates, so the copy is now a script and the templates have exactly one home. scripts/install_dependency_freshness_gate.sh <repo> [--check] [--fvm] Idempotent, and it rewrites a copy that has drifted from the template rather than leaving it. `--check` reports without writing. `--fvm` pins the Flutter SDK, and only in a repo that actually holds a pubspec.yaml -- an .fvmrc in a Python repo declares a toolchain nothing there builds with. An unresolvable SDK version leaves the pin alone and exits 1: guessing would pin every repo to a number nobody chose. The pre-commit block is APPENDED rather than parsed and re-emitted. Every one of these configs carries comments explaining why its hooks exist, and a YAML round-trip through the standard library drops all of them. 306 tests, 100% branch coverage on every production module. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CRykabMwPgDzFHcARoqpaK
58 lines
2.1 KiB
YAML
58 lines
2.1 KiB
YAML
name: dependency freshness
|
|
|
|
# Every dependency on its ecosystem's newest STABLE release, enforced on push
|
|
# as well as at commit time. The local pre-commit hook only sees the manifests
|
|
# in a commit and can be skipped entirely by a fresh clone that never ran
|
|
# `pre-commit install`; this runs `--all` over the whole repo.
|
|
#
|
|
# `--strict` is CI-only. Offline the gate degrades to its cached answer and
|
|
# passes, because `--no-verify` is banned locally and a hook that hard-failed
|
|
# on a flaky connection would leave no way to commit. A runner is always
|
|
# online, so here an undeterminable answer is a real failure.
|
|
#
|
|
# Expect this to go red for reasons this repo's commit did not cause: an
|
|
# upstream release overnight is enough. That is the chosen behaviour -- the
|
|
# alternative is a gate that only notices staleness when someone remembers to
|
|
# look.
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
dependency-freshness:
|
|
name: dependencies on newest stable
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# The gate lives in the shared utils repo so every repo resolves the
|
|
# same "latest stable" the same way. Checking it out beats vendoring a
|
|
# copy, which is exactly how a gate and its survey start disagreeing.
|
|
- name: Check out the shared gate
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: kuhyx/utils
|
|
path: .utils
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.13"
|
|
|
|
- name: Install the gate's two runtime dependencies
|
|
run: python -m pip install --upgrade pyyaml packaging
|
|
|
|
- name: Cache registry lookups
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/dep-freshness
|
|
key: dep-freshness-${{ hashFiles('**/pubspec.yaml', '**/pyproject.toml',
|
|
'**/requirements*.txt', '**/package.json', '**/Cargo.toml', '**/go.mod') }}
|
|
restore-keys: dep-freshness-
|
|
|
|
- name: Every dependency is on newest stable
|
|
run: bash .utils/scripts/check_dependency_freshness.sh --all --strict
|