# A release: pushing a tag v builds that commit exactly as the nightly does -- the # acceptance protocol, the proofs, the board images -- and the documents, and publishes both to # starshipos-releases at that version: # # org.starship:kernelImage: classifiers pc, raspi5, milkv, logs (nightly.yml) # org.starship:documentation: classifiers book, vol1, vol2, vol3, api (nightly-docs.yml) # # The tag must name the version the tree says it is: v (kernel/Makefile). A tag # that does not is refused before anything is built. A release repository takes a version once. name: Release on: push: tags: ['v*'] concurrency: group: qemu # one QEMU at a time on the runner: shared with acceptance.yml cancel-in-progress: false jobs: release: name: Release ${{ github.ref_name }} 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: 240 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: false - name: The tag names the tree's version run: | tree="v$(sed -n 's/^LITHOS_VERSION *?= *//p' kernel/Makefile)" echo "tag ${{ github.ref_name }}, kernel/Makefile LITHOS_VERSION -> $tree" [ "${{ github.ref_name }}" = "$tree" ] || { echo "The tag must be $tree, or LITHOS_VERSION changed first."; exit 1; } echo "NIGHTLY_VERSION=${tree#v}" >> "$GITHUB_ENV" - name: Install the dependencies run: | make ARCH=amd64,aarch64,riscv64 init 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: 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 https://nexus.starshipos-f18.org/repository/starshipos-releases scripts/nightly.sh publish-docs https://nexus.starshipos-f18.org/repository/starshipos-releases - name: Keep the release uses: actions/upload-artifact@v3 with: name: release-${{ github.ref_name }} path: | build/nightly/ build/nightly-docs/ - name: Keep the logs and DoE CSVs if: always() uses: actions/upload-artifact@v3 with: name: release-logs-${{ github.ref_name }} path: | logs/ experiments/bare_metal/runs/