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
77 lines
2.9 KiB
YAML
77 lines
2.9 KiB
YAML
# Nightly snapshot of the kernel images: the acceptance protocol, the proofs, the board images,
|
|
# then Nexus. Each stage is a step of scripts/nightly.sh (its header says what each does); any
|
|
# failure stops the run, and nothing is published unless every stage before it passed.
|
|
#
|
|
# org.starship:kernelImage:<LITHOS_VERSION>-SNAPSHOT, starshipos-snapshots
|
|
# classifier pc StarshipOS.iso amd64, UEFI -- the ISO the amd64 acceptance boot booted
|
|
# classifier raspi5 raspi5.img.xz Raspberry Pi 5, for Raspberry Pi Imager
|
|
# classifier milkv MilkV.img.xz Milk-V Mars
|
|
# classifier logs logs.tar.gz this run's serial logs, proof log and DoE CSVs
|
|
#
|
|
# Gitea runs a schedule from the default branch, master, so this builds master.
|
|
name: Nightly snapshot
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 3 * * *' # 03:00 UTC; the documents are at 04:00 (nightly-docs.yml)
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: qemu # one QEMU at a time on the runner: shared with acceptance.yml
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
nightly:
|
|
name: Acceptance, proofs, images
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: gitea/runner-images:ubuntu-24.04-v26.11.03 # the runner's own ubuntu-latest is Debian 11 (node:20-bullseye)
|
|
timeout-minutes: 150
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # the SBOM's version is git describe
|
|
lfs: false # only the logs and DoE CSVs are in LFS; the build needs neither
|
|
|
|
- name: Install the build's dependencies
|
|
run: |
|
|
make ARCH=amd64,aarch64,riscv64 init INIT_DOCS=0
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq maven default-jre-headless
|
|
|
|
- name: Acceptance amd64
|
|
run: scripts/nightly.sh accept amd64
|
|
- name: Acceptance aarch64
|
|
run: scripts/nightly.sh accept aarch64
|
|
- name: Acceptance riscv64
|
|
run: scripts/nightly.sh accept riscv64
|
|
- name: Acceptance PC stick loaded high
|
|
run: scripts/nightly.sh accept stick-high
|
|
- name: Acceptance 32-bit build
|
|
run: scripts/nightly.sh test-32
|
|
- name: Isabelle/HOL proofs
|
|
run: scripts/nightly.sh proofs
|
|
|
|
- name: Images
|
|
run: scripts/nightly.sh images
|
|
|
|
- name: Publish to Nexus
|
|
env:
|
|
NEXUS_USER: ci-publisher
|
|
NEXUS_PASSWORD: ${{ secrets.NEXUS_CI_PASSWORD }}
|
|
run: scripts/nightly.sh publish https://nexus.starshipos-f18.org/repository/starshipos-snapshots
|
|
|
|
- name: Keep the images
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: kernel-images-${{ github.run_number }}
|
|
path: build/nightly/
|
|
|
|
- name: Keep the logs and DoE CSVs
|
|
if: always()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: logs-${{ github.run_number }}
|
|
path: |
|
|
logs/
|
|
experiments/bare_metal/runs/
|