Skip to content

ci · nightly

ci · nightly #90

Workflow file for this run

# SPDX-License-Identifier: Apache-2.0
#
# Nightly full gate (P0): the complete `make test` suite (host + QEMU acceptance).
# Long-running; scheduled off-peak and available via workflow_dispatch.
name: ci · nightly
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
full-test:
name: make test
runs-on: ubuntu-24.04-arm
timeout-minutes: 360
steps:
- uses: actions/checkout@v4
- name: Cache toolchains and heavy build inputs
uses: actions/cache@v4
with:
path: |
~/.swift/toolchains
~/.local/arm-gnu-toolchain
~/.local/bin
sysroot
models
build/busybox.elf
build/busybox.inputs-hash
build/nginx-root
build/nginx.inputs-hash
build/sqlite-root
build/sqlite.inputs-hash
build/openssl-root
build/openssl.inputs-hash
build/nginx-certs
build/swport-distfiles
# Include tree-owned runtime + port recipes. restore-keys may still
# rehydrate older roots; Makefile refuses/rebuilds unless each
# build/<name>.inputs-hash matches scripts/artifact-inputs-hash.sh.
key: bootstrap-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('ci/toolchain.env', 'scripts/build-newlib.sh', 'scripts/build-busybox.sh', 'scripts/artifact-inputs-hash.sh', 'scripts/busybox-inputs-hash.sh', 'scripts/build-nginx.sh', 'scripts/build-sqlite.sh', 'scripts/build-openssl.sh', 'userland/lib/crt0_newlib.S', 'userland/lib/newlib_syscalls.c', 'userland/user_newlib.ld', 'userland/compat/**', 'userland/nginx/swiftos/**', 'ports/databases/sqlite/Port.json', 'ports/www/nginx/Port.json', 'ports/security/openssl/Port.json') }}
restore-keys: |
bootstrap-${{ runner.os }}-${{ runner.arch }}-
- name: Bootstrap sysroot, busybox, models
run: ./scripts/ci-bootstrap.sh
- name: Export CI build environment
run: |
echo "SOURCE_DATE_EPOCH=0" >> "$GITHUB_ENV"
./scripts/ci-export-env.sh
- name: Full test suite
run: make test
ops-test:
name: prod + hetzner gates
runs-on: ubuntu-24.04-arm
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
- name: Cache toolchains and heavy build inputs
uses: actions/cache@v4
with:
path: |
~/.swift/toolchains
~/.local/arm-gnu-toolchain
~/.local/bin
sysroot
models
build/busybox.elf
build/busybox.inputs-hash
build/nginx-root
build/nginx.inputs-hash
build/sqlite-root
build/sqlite.inputs-hash
build/openssl-root
build/openssl.inputs-hash
build/nginx-certs
build/swport-distfiles
# Include tree-owned runtime + port recipes. restore-keys may still
# rehydrate older roots; Makefile refuses/rebuilds unless each
# build/<name>.inputs-hash matches scripts/artifact-inputs-hash.sh.
key: bootstrap-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('ci/toolchain.env', 'scripts/build-newlib.sh', 'scripts/build-busybox.sh', 'scripts/artifact-inputs-hash.sh', 'scripts/busybox-inputs-hash.sh', 'scripts/build-nginx.sh', 'scripts/build-sqlite.sh', 'scripts/build-openssl.sh', 'userland/lib/crt0_newlib.S', 'userland/lib/newlib_syscalls.c', 'userland/user_newlib.ld', 'userland/compat/**', 'userland/nginx/swiftos/**', 'ports/databases/sqlite/Port.json', 'ports/www/nginx/Port.json', 'ports/security/openssl/Port.json') }}
restore-keys: |
bootstrap-${{ runner.os }}-${{ runner.arch }}-
- name: Bootstrap sysroot, busybox, models
run: ./scripts/ci-bootstrap.sh
- name: Export CI build environment
run: ./scripts/ci-export-env.sh
- name: Production boot profile smoke
run: make prod-boot-test
- name: Hetzner deploy pipeline (build stage)
run: make hetzner-deploy-pipeline-test
- name: Hetzner deploy regression (QEMU topology)
run: make hetzner-deploy-test