Skip to content

Give the DevOps stack its own build, so its PRs are actually checked - #21

Merged
ChrisonSimtian merged 1 commit into
mainfrom
feat/first-class-build
Aug 24, 2026
Merged

Give the DevOps stack its own build, so its PRs are actually checked#21
ChrisonSimtian merged 1 commit into
mainfrom
feat/first-class-build

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Closes the gap in Homelab #415. This repo had no .github directory at all, so a PR against it merged with zero checks — its shapes were only ever validated because someone happened to run the superproject's build by hand from a working tree with the submodule checked out. A malformed shape would merge clean and surface one repo away from the change that caused it.

That's not hypothetical: the Forgejo OIDC shape (#20) merged yesterday with no checks reported.

#415's table is out of date

It describes an opt-in validate.yml calling the superproject's reusable _validate-shapes.yml. SmartHome has since replaced that with a Fallout-driven build.yml that runs the same portable validator through the repo's own build — so ./build.sh locally and CI run the identical target, and the release bundle is proven on every PR rather than at release time. This ports the newer pattern.

.config, .husky, CLAUDE.md and README.md were already here and byte-identical to SmartHome's, so this is the missing half rather than a fresh start.

Running it caught what reading it didn't

A case-sensitive grep for SmartHome missed four lowercase references, so the first bundle came out as:

bundled dist/smarthome-0.1.0.tar.gz    ← from a repo called DevOps

Wrong archive name, wrong release asset, wrong CI artifact name. Fixed and re-run:

bundled dist/devops-0.1.0.tar.gz (19647 bytes)

# DevOps stack — 0.1.0
- Repo: Chrison-Homelab/Homelab.Stacks.DevOps
| cloudflared | 3004 |   | forgejo-runner | 3001 |   | forgejo | 3000 |
| github-runner | 3002 |  | newt | 3005 |          | shell | 3003 |

One thing I left deliberately imperfect

BundlePaths() stays hand-maintained, ported as-is rather than made clever. It now carries a warning, because a new asset directory not listed there is silently left out of the bundle rather than failing the build. It's the one part of this harness that rots; shell-assets is currently the only entry that matters.

⚠ One thing I could not verify

Whether this repo is inside the SCHEMA_RO_PAT org secret's visibility scope. Reading that needs admin:org, which I don't have, and there's no repo-level secret here.

So this PR's own CI run is the test. If build fails at the validator download step, the fix is the command in the superproject's CLAUDE.md — grant the secret to this repo. Flagging rather than discovering it silently.

Note on ordering

Per #415's warning: this repo hosts github-runner, which the superproject's CI depends on. Nothing here touches the runner or its shape — this only adds a build that runs on ubuntu-latest, so a failure here cannot take the fleet's CI with it.

Closes the gap in #415: this repo had no `.github` directory at all, so a PR
against it merged with zero checks. Its shapes were only ever validated because
someone happened to run the superproject's build by hand from a working tree
that had the submodule checked out. A malformed shape merged clean and
surfaced one repo away from the change that caused it.

Ported from SmartHome, which is the current reference — note that #415's table
is out of date. It describes an opt-in `validate.yml` calling the superproject's
reusable `_validate-shapes.yml`; SmartHome has since replaced that with a
Fallout-driven `build.yml` that runs the same portable validator through this
repo's own build, so `./build.sh` locally and CI run the identical target. It
also proves the release bundle builds on every PR rather than at release time.

`.config`, `.husky`, `CLAUDE.md` and `README.md` were already here and already
identical to SmartHome's, so this is the missing half rather than a fresh start.

RUNNING IT CAUGHT WHAT READING IT DID NOT. A case-sensitive grep for
"SmartHome" missed four lowercase references, so the first bundle came out as
`smarthome-0.1.0.tar.gz` from a repo called DevOps — wrong archive name, wrong
release asset, wrong CI artifact. Fixed and re-run; the bundle is now
`devops-0.1.0.tar.gz` with all six members and the right repo in its manifest.

BundlePaths stays hand-maintained, ported as-is rather than made clever, but it
now carries a warning: a new asset directory that is not listed there is
silently left out of the bundle instead of failing the build. It is the one
part of this harness that rots, and `shell-assets` is currently the only entry
that matters.

⚠ Unverified: whether this repo is inside the `SCHEMA_RO_PAT` org secret's
visibility scope. Reading that needs admin:org, which I do not have — so the
first CI run is the test. If `build` fails at the validator download, the fix
is in the superproject's CLAUDE.md: grant the secret to this repo.

Refs #415.
@ChrisonSimtian ChrisonSimtian added the enhancement New feature or request label Aug 24, 2026
@ChrisonSimtian
ChrisonSimtian merged commit 5dce8a5 into main Aug 24, 2026
1 check passed
@ChrisonSimtian
ChrisonSimtian deleted the feat/first-class-build branch August 24, 2026 09:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant