mirror of
https://github.com/hanzo-apps/HIPs.git
synced 2026-10-30 14:47:28 +00:00
runs-on was a bare scalar. Jobs written that way queue and are never picked up — link and quest have waited since 10 August, painter since the 5th, none of them with a single success — while repos writing the same label as a sequence drain within seconds of a push on the same fleet. Same label, same runners, different shape. It fails silently: nothing errors, the job simply never starts, so the lane looks configured and does nothing.
88 lines
4.1 KiB
YAML
88 lines
4.1 KiB
YAML
name: ci
|
|
|
|
# Native CI on git.hanzo.ai. Runs the SAME lint a contributor runs locally:
|
|
#
|
|
# python3 scripts/lint-hips.py
|
|
#
|
|
# This job used to carry its own copy of the checks as an inline heredoc, so the
|
|
# gate existed only on Hanzo Git and a failure could not be reproduced without
|
|
# pushing. Two implementations of one rule is the defect this repository exists
|
|
# to name. There is now one, in scripts/lint-hips.py, and this file calls it.
|
|
#
|
|
# Every check fires on a defect that was actually present in HIPs/: five specs
|
|
# unreachable from the index, two files both claiming hip: 0127, a HIP with no
|
|
# status shipping green, 101 H1 headings disagreeing with their own front
|
|
# matter, and a second index that described 25 HIPs while 138 existed.
|
|
|
|
on:
|
|
push:
|
|
branches: ['**']
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: [hanzo-build-linux-amd64]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# The lint's own test suite runs FIRST. It breaks a scratch copy of the
|
|
# corpus 22 ways and requires the lint to report the matching code for
|
|
# each, plus asserts that every declared check has a test. A green lint
|
|
# whose checks have never been seen to fail is indistinguishable from a
|
|
# lint that returns success unconditionally -- which is exactly what the
|
|
# GitHub workflow this replaced did.
|
|
# The capability list is an INPUT, so it is checked out rather than
|
|
# copied here. A snapshot committed into this repo would be a second
|
|
# statement of which capabilities exist, and it would drift from the one
|
|
# the cloud actually serves -- which is the whole thing the ratchet below
|
|
# exists to catch.
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
repository: hanzoai/openapi
|
|
path: .capabilities
|
|
|
|
- name: the lint fails when it should
|
|
run: python3 scripts/test-lint-hips.py
|
|
|
|
- name: every HIP is structurally sound
|
|
run: python3 scripts/lint-hips.py
|
|
|
|
# The index is GENERATED. This regenerates it in memory and fails on any
|
|
# difference, so README cannot drift from HIPs/ -- and its own self-test
|
|
# runs first, because a generator that silently emits a SHORT table is
|
|
# worse than none. Eleven ways to break the corpus, and each must both
|
|
# refuse and leave README.md byte-identical.
|
|
- name: the generator refuses when it should
|
|
env:
|
|
HANZO_CAPABILITIES: .capabilities/capabilities.yaml
|
|
run: python3 scripts/test-index.py
|
|
|
|
- name: README is exactly what HIPs/ projects to
|
|
env:
|
|
HANZO_CAPABILITIES: .capabilities/capabilities.yaml
|
|
run: python3 scripts/index.py --check
|
|
|
|
# One capability, one HIP. The ratchet (capability-coverage.txt) carries
|
|
# what has no spec yet and may only SHRINK, so a capability shipping
|
|
# without one fails here instead of going unnoticed. coverage.py refuses
|
|
# to report at all if it cannot resolve the list -- a coverage gate that
|
|
# passes when its input is missing has not been shown to work.
|
|
#
|
|
# ONE INPUT. This step used to take a second: a checkout of cloud, whose
|
|
# manifest coverage.py unioned with the list above, because an app serving
|
|
# no HTTP operation (kafka on :9092, zen coresident) could never appear in
|
|
# a taxonomy curated over the emitted document. The union is what broke the
|
|
# gate -- the two spelt six capabilities differently, so a union of two
|
|
# spellings was twelve names for six things and six came back uncovered
|
|
# whichever spelling the HIPs carried. `fleet:` is DERIVED from that same
|
|
# manifest now, complete for the apps that serve no operation and carrying
|
|
# one name each, so the second checkout answers a question nobody asks. It
|
|
# also named hanzoai/cloud, the re-rooted OSS core, which carries no
|
|
# manifest at all -- so what it actually contributed was an empty set from
|
|
# a step allowed to fail.
|
|
- name: every capability has a HIP
|
|
env:
|
|
HANZO_CAPABILITIES: .capabilities/capabilities.yaml
|
|
run: python3 scripts/coverage.py
|