4bc8a01b4cbd2bac5cdc7f2c2a144f400f5b78d7
11
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d54e2fe276 |
release: the PC stick image, and a Gitea release anyone can download from (#126)
- scripts/nightly.sh images builds the PC's USB stick too (make boot_image TARGET=PC -> pc-stick.img.xz, in SHA256SUMS); publish sends it to Nexus as classifier pc-stick. pc stays the ISO QEMU boots. - scripts/nightly.sh gitea-release <tag>: the tag as a Gitea release -- a pre-release for -alpha.N and the like -- notes from the tag's message with the checksums, the images, SHA256SUMS, the documents and the StarshipOS Root CA's certificate attached; run again, it adds only what is missing. release.yml runs it after the Nexus publish, with the secret RELEASE_TOKEN. Tested here: images builds pc-stick.img.xz (785 KB); gitea-release against a stand-in Gitea API made a pre-release with the notes and ten files, and a second run added nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
3c21a20f1a |
ci: the workflows run in lithosananke-runner:4f675c8b75b2, with HOL-Library
Build / Image RASPI (push) Successful in 2m28s
Build / Image PC (push) Successful in 2m56s
Build / Image MILKV (push) Successful in 2m34s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 8m52s
Acceptance / Acceptance (pull_request) Successful in 12m30s
The image runner-image.yml built from master
|
||
|
|
da020a430d |
ci: one concurrency group for every workflow; a runner-image rebuild blocks the rest
Captain Bob, 2026-11-07: "I also want that rebuilds block other jobs always." acceptance, nightly and release shared the group qemu; now runner-image, build and nightly-docs do too, so a rebuild of the runner image (on the host's Docker daemon) never overlaps another job, whatever the runner's capacity (#121). On this server every CI run is then one at a time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
03027f9769 |
pki: the StarshipOS CA, made on the CI box; capsules signed in CI
Ruled by Captain Bob, 2026-11-07: "New root CA on the CI box. Valid StarshipOS rather than snake oil intermediate." - ci/pki/make-ca.sh makes the StarshipOS Root CA (its key stays on the CI box) and the StarshipOS Capsule Signing intermediate it issues, and stores the signing key as the secret CAPSULE_SIGN_KEY. - The kernel finds the signing certificate by one name, CAPSULE_SIGNING_CERT_NAME = pki:starshipos-intermediate.der. The certificate itself lands once make-ca.sh has run; until then the snakeoil intermediate is in the tree under its old name and the capsules check as "no root key" (a warning, as "missing" was). - mkcapsule refuses a signing key that is not that certificate's. - SIGN_KEY has no default; acceptance, build, nightly and release set it from the secret. FABRIC-3.md XLVI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
5690d2980b |
ci: the nightly's proofs run last, and cannot hold back the images
Nightly 174 passed acceptance, then Isabelle was killed building HOL-Library (exit 137, out of memory on the runner), and the images were never built or published. The proofs check the theories, not the images: they now run after the publish, whatever happened before them, and a failure still turns the run red. Their log stays in the run's logs artifact. A release still runs them before it publishes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
fb24d3f482 |
ci: run the jobs in the runner image (#120)
Build / Image RASPI (push) Successful in 2m45s
Build / Image PC (push) Successful in 3m53s
Build / Image MILKV (push) Successful in 2m26s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 9m20s
Acceptance / Acceptance (pull_request) Successful in 13m45s
The workflows' containers are now lithosananke-runner:72b6cf370db1, built and published by runner-image.yml, with everything init installs and Maven already in it; the install steps are gone, except the documents' packages in nightly-docs.yml and release.yml. The registry refuses anonymous pulls, so each job pulls with PACKAGES_TOKEN. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
0fd7648a77 |
ci: acceptance.yml gates every PR into master; master only through an accepted PR
Build / Image RASPI (push) Successful in 4m19s
Build / Image PC (push) Successful in 4m14s
Build / Image MILKV (push) Successful in 4m30s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m19s
Acceptance / Acceptance (pull_request) Successful in 16m48s
Captain Bob, 2026-11-06: what a developer runs, what CI runs and what the nightly runs are one process, and "failures should not be allowed to be merged to master". acceptance.yml runs on every PR into master (opened, pushed to, reopened): .claude/CLAUDE.md's acceptance protocol through the same scripts/nightly.sh stages -- amd64, aarch64, riscv64 to [zuse@Hera] ok>, the PC stick loaded high (and the three agree on dict_hash), then make -C v4 test-32 -- one QEMU at a time, in one job. Its logs and DoE CSVs are kept, pass or fail. master's branch protection requires it. acceptance, nightly and release share the concurrency group qemu, so the runner never runs two of them at once: CLAUDE.md's one-QEMU rule holds in CI too. build.yml becomes the quick check on pushes only. .claude/CLAUDE.md's Hard Rules: commit and push directly on the working branch; master only through a PR that passed acceptance, no direct pushes; no approval required while there is one developer. Named: the Captain Bob method. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
6eadd2f56c |
ci: build.yml checks every push and PR; every job on Ubuntu 24.04 with Node (closes #18)
Build / Image RASPI (push) Successful in 4m20s
Build / Image PC (push) Successful in 3m56s
Build / Image MILKV (push) Successful in 4m2s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m5s
Build / Image RASPI (pull_request) Successful in 4m33s
Build / Image PC (pull_request) Successful in 4m24s
Build / Image MILKV (pull_request) Successful in 5m4s
Build / v4 tests (32- and 64-bit cells) (pull_request) Successful in 11m54s
build.yml, as master had it, could not run here: it called Makefile.starkernel and make T=<board> (the tree has kernel/Makefile and TARGET=<board>), listed a Pi 4 with no port, published "releases" under org/f18 on every push, installed Isabelle2024 (the proofs need Isabelle2025-2) from a mirror that answered 503, and duplicated the nightlies with its own 02:00 schedule. Now it is the check on every push to master and StarForth-v4.0.0 and every PR into master: each board's image (make boot_image TARGET=PC|RASPI|MILKV, xz'd, kept with its SBOM) and make -C v4 test, both cell widths. It publishes nothing; the nightlies and release.yml do. Every job of every workflow now names its container, gitea/runner-images:ubuntu-24.04-v26.11.03: the runner maps ubuntu-latest to node:20-bullseye, Debian 11, where every job of PR #30's runs failed at its first apt-get, and which has no qemu-efi-riscv64 and a far older QEMU and compilers than the Ubuntu 24.04 all of this was tested on. Node is needed in the image: actions/checkout and upload-artifact run inside the job's container. The dated tag keeps a run from changing under an image update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
92ca805ecf |
Merge master into StarForth-v4.0.0: the branch's build, master's CI files kept
StarshipOS Build / milkv (pull_request) Failing after 38s
StarshipOS Build / pc (pull_request) Failing after 34s
StarshipOS Build / pi4 (pull_request) Failing after 35s
StarshipOS Build / pi5 (pull_request) Failing after 35s
StarshipOS Build / qemu (pull_request) Failing after 34s
StarshipOS Build / Isabelle/HOL Proofs (pull_request) Failing after 1m30s
StarshipOS Build / Documentation (pull_request) Failing after 37s
For PR #30. master's 9 commits since the fork (T= board selection, mk/boards.mk, build.yml, the nightly workflows) conflicted in four files; each is resolved to the branch's version: .gitea/workflows/nightly.yml added on both; master's copy named .gitea/workflows/nightly-docs.yml the branch in its checkout, the branch's builds the default branch Makefile master's T= and mk/boards.mk against kernel/Makefile the branch's TARGET=<board> and boards/; master's edits were to Makefile.starkernel, renamed here The two workflows' header comment now says they build master. Merged cleanly from master: build.yml (its board matrix, Nexus publish and 02:00 nightly; it still calls Makefile.starkernel and make T=<board>, which this tree does not have -- #18) and mk/boards.mk (nothing here includes it). Against the branch the merge changes only those CI files and mk/boards.mk: no kernel, v4 or Makefile source, so the build is the one accepted on 2026-11-06. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 |
||
|
|
a5a29cc857 |
ci: nightly images, nightly documents and tagged releases, in the tree
scripts/nightly.sh, one stage per call, a step each in the workflows:
accept <amd64|aarch64|riscv64|stick-high> the acceptance protocol --
qemu_session.py zuse, and stick_zuse --target qemu-stick-high;
after the last, dict_hash must be equal on the three
test-32 make -C v4 test-32
proofs isabelle build -c -D proof/ (StarForth checked afresh each run)
images the Pi 5 and Mars images, xz for Raspberry Pi Imager
publish org.starship:kernelImage: pc (iso), raspi5, milkv (img.xz),
logs (tar.gz: this run's serial logs, proof log, DoE CSVs)
docs, publish-docs book, vol1-3, api -> org.starship:documentation
.gitea/workflows/nightly.yml (03:00) and nightly-docs.yml (04:00) publish
<LITHOS_VERSION>-SNAPSHOT to starshipos-snapshots; release.yml, on a tag
v*, builds and publishes both to starshipos-releases at the tag's version,
refusing a tag that is not v<LITHOS_VERSION>. Until this branch is merged
to master, master carries copies of the two nightlies naming it.
make init: INIT_DOCS=0 leaves out TeX and Doxygen, INIT_PROOFS=0 Isabelle.
Checked here, stage by stage, in order: the four acceptance boots PASS,
dict_hash 0xfec8c47cfc6f437f on the three, test-32 0 failures, StarForth
proved (0:00:41), images built; publish to a local file:// repository,
and the images' publish to Nexus starshipos-snapshots read back byte for
byte. The docs stage and publish-docs: not yet checked when committed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
|
||
|
|
7f574c54ff |
ci: nightly images and nightly documents, from StarForth-v4.0.0, to Nexus
StarshipOS Build / milkv (push) Failing after 2m11s
StarshipOS Build / pc (push) Failing after 2m54s
StarshipOS Build / pi4 (push) Failing after 2m52s
StarshipOS Build / pi5 (push) Failing after 2m24s
StarshipOS Build / qemu (push) Failing after 2m11s
StarshipOS Build / Isabelle/HOL Proofs (push) Failing after 2m57s
StarshipOS Build / Documentation (push) Failing after 2m19s
Gitea runs schedules from the default branch only, so until StarForth-v4.0.0
is merged here, master carries copies of that branch's two nightly
workflows, identical to them but for the checkout's ref:
nightly.yml 03:00 UTC: the acceptance protocol (zuse amd64, aarch64,
riscv64; the PC stick loaded high; dict_hash equal on the
three; test-32), the Isabelle/HOL proofs, the board images,
then org.starship:kernelImage:<LITHOS_VERSION>-SNAPSHOT --
classifiers pc (iso), raspi5, milkv (img.xz), logs
nightly-docs.yml 04:00 UTC: the book, the formal volumes, the API reference
-> org.starship:documentation:<LITHOS_VERSION>-SNAPSHOT
Both publish to starshipos-snapshots as ci-publisher (secret
NEXUS_CI_PASSWORD), and only if every stage before passed. The work is that
branch's scripts/nightly.sh. At the merge, take that branch's copies (this
ref line goes). build.yml's own 02:00 schedule is untouched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
|