Nightly CI workflow (sefcom/oxidizer)
The Nightly CI workflow from sefcom/oxidizer, explained and optimized by Latchkey.
CI health: B - good
Run this on Latchkey for self-healing, caching, and up to 58% lower cost.
Grade your own workflow free or run it on Latchkey →What it does
This is the Nightly CI workflow from the sefcom/oxidizer repository, a real project running GitHub Actions. It is shown here with attribution under its BSD-2-Clause license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Nightly CI
on:
schedule:
- cron: "0 0 * * *"
pull_request:
branches:
- master
paths:
- ".github/workflows/nightly-ci.yml"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
ci:
uses: angr/ci-settings/.github/workflows/angr-ci.yml@master
with:
nightly: true
secrets: inherit
windows:
name: Test Windows
runs-on: windows-2022
strategy:
matrix:
runner_id: [1, 2, 3, 4, 5]
fail-fast: false
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
with:
path: angr
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
with:
repository: angr/binaries
path: binaries
- uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1
- uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v6
- name: Sync dependencies
run: uv --directory angr sync -p 3.10
- name: Run pytest
run: uv --directory angr run pytest -n auto --splits 5 --group ${{ matrix.runner_id }} tests
macos:
name: Test macOS
runs-on: macos-15
strategy:
matrix:
runner_id: [1, 2, 3]
fail-fast: false
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
with:
path: angr
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
with:
repository: angr/binaries
path: binaries
- uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v6
# XXX: Install CMake<4 to build pinned unicorn==2.0.1.post1 for now
- name: Install CMake
uses: ssrobins/install-cmake@c54bb968401dd4ff9e6c9d697df5b843ee3b783b # v1
with:
version: 3.31.9
- name: Sync dependencies
run: uv --directory angr sync -p 3.10
- name: Run pytest
run: uv --directory angr run pytest -n auto --splits 3 --group ${{ matrix.runner_id }} tests
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: Nightly CI on: schedule: - cron: "0 0 * * *" pull_request: branches: - master paths: - ".github/workflows/nightly-ci.yml" workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: ci: timeout-minutes: 30 uses: angr/ci-settings/.github/workflows/angr-ci.yml@master with: nightly: true secrets: inherit windows: timeout-minutes: 30 name: Test Windows runs-on: windows-2022 strategy: matrix: runner_id: [1, 2, 3, 4, 5] fail-fast: false steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 with: path: angr - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 with: repository: angr/binaries path: binaries - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1 - uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v6 - name: Sync dependencies run: uv --directory angr sync -p 3.10 - name: Run pytest run: uv --directory angr run pytest -n auto --splits 5 --group ${{ matrix.runner_id }} tests macos: timeout-minutes: 30 name: Test macOS runs-on: macos-15 strategy: matrix: runner_id: [1, 2, 3] fail-fast: false steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 with: path: angr - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 with: repository: angr/binaries path: binaries - uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v6 # XXX: Install CMake<4 to build pinned unicorn==2.0.1.post1 for now - name: Install CMake uses: ssrobins/install-cmake@c54bb968401dd4ff9e6c9d697df5b843ee3b783b # v1 with: version: 3.31.9 - name: Sync dependencies run: uv --directory angr sync -p 3.10 - name: Run pytest run: uv --directory angr run pytest -n auto --splits 3 --group ${{ matrix.runner_id }} tests
What changed
- Add a job timeout so a hung step cannot burn hours of runner time.
1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.
This workflow runs 3 jobs (9 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.