From 7f574c54fffd748a280be8c6eaabb1845e8e41d4 Mon Sep 17 00:00:00 2001 From: rajames Date: Fri, 6 Nov 2026 14:50:51 +0000 Subject: [PATCH] ci: nightly images and nightly documents, from StarForth-v4.0.0, to Nexus 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:-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:-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 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- .gitea/workflows/nightly-docs.yml | 48 +++++++++++++++++++++ .gitea/workflows/nightly.yml | 72 +++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 .gitea/workflows/nightly-docs.yml create mode 100644 .gitea/workflows/nightly.yml diff --git a/.gitea/workflows/nightly-docs.yml b/.gitea/workflows/nightly-docs.yml new file mode 100644 index 00000000..f3c287d1 --- /dev/null +++ b/.gitea/workflows/nightly-docs.yml @@ -0,0 +1,48 @@ +# Nightly snapshot of the documents: the book, the formal volumes and the API reference +# (scripts/nightly.sh docs), then Nexus. +# +# org.starship:documentation:-SNAPSHOT, starshipos-snapshots +# classifier book the book (make docs) +# classifier vol1, vol2, vol3 the formal volumes (make -C docs/formal vols) +# classifier api the API reference (make -C docs/formal doxygen) +# +# Gitea runs a schedule from the default branch. Until StarForth-v4.0.0 is merged to master, +# master carries a copy of this file whose checkout names that branch. +name: Nightly documents + +on: + schedule: + - cron: '0 4 * * *' # 04:00 UTC, after the images (nightly.yml, 03:00) + workflow_dispatch: + +jobs: + docs: + name: Book, volumes, API reference + runs-on: ubuntu-latest + timeout-minutes: 90 + steps: + - uses: actions/checkout@v4 + with: + ref: StarForth-v4.0.0 # until it is merged to master; then this line goes + fetch-depth: 0 + lfs: false + + - name: Install the documents' dependencies + run: | + make ARCH=amd64 init INIT_PROOFS=0 + DEBIAN_FRONTEND=noninteractive apt-get install -y -qq maven default-jre-headless + + - name: Documents + run: scripts/nightly.sh docs + + - name: Publish to Nexus + env: + NEXUS_USER: ci-publisher + NEXUS_PASSWORD: ${{ secrets.NEXUS_CI_PASSWORD }} + run: scripts/nightly.sh publish-docs https://nexus.starshipos-f18.org/repository/starshipos-snapshots + + - name: Keep the documents + uses: actions/upload-artifact@v3 + with: + name: documents-${{ github.run_number }} + path: build/nightly-docs/ diff --git a/.gitea/workflows/nightly.yml b/.gitea/workflows/nightly.yml new file mode 100644 index 00000000..94fb5731 --- /dev/null +++ b/.gitea/workflows/nightly.yml @@ -0,0 +1,72 @@ +# 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:-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. Until StarForth-v4.0.0 is merged to master, +# master carries a copy of this file whose checkout names that branch. +name: Nightly snapshot + +on: + schedule: + - cron: '0 3 * * *' # 03:00 UTC; the documents are at 04:00 (nightly-docs.yml) + workflow_dispatch: + +jobs: + nightly: + name: Acceptance, proofs, images + runs-on: ubuntu-latest + timeout-minutes: 150 + steps: + - uses: actions/checkout@v4 + with: + ref: StarForth-v4.0.0 # until it is merged to master; then this line goes + 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/