Skip to content

Nightly

Nightly #2

Workflow file for this run

name: Nightly
# Exhaustive run on a schedule: the full matrix with the xfail sweeps and
# valgrind on every Linux cell, against the pinned CppInterOp (reusable
# default). On any failure a tracking issue is opened/updated. To track
# upstream drift, add a cell with `cppinterop-ref: main`; it builds CppJIT
# against CppInterOp's tip and goes red when that API drifts ahead of the
# synced forks -- the signal that the next fork re-sync is due.
on:
schedule:
- cron: '30 2 * * *'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: nightly-${{ github.workflow }}
cancel-in-progress: true
jobs:
build-test:
name: ${{ matrix.os }}/llvm${{ matrix.llvm }}/py${{ matrix.py }}/c++${{ matrix.cxx }}${{ matrix.vg && '/vg' || '' }}${{ matrix.flavor == 'cling' && '/cling' || '' }}
strategy:
fail-fast: false
matrix:
# Superset of the PR matrix + breadth (py 3.12/3.13, C++17, LLVM 20, arm)
# and one cling cell. valgrind only on LLVM 21 cells: vendored etc/ has
# clang21 supps only, so other majors would surface unsuppressed noise.
include:
- { os: ubuntu-24.04, llvm: '20', flavor: system, py: '3.12', cxx: '17' }
- { os: ubuntu-24.04, llvm: '21', flavor: system, py: '3.13', cxx: '20', vg: true }
- { os: ubuntu-24.04, llvm: '21', flavor: system, py: '3.14', cxx: '20', vg: true }
- { os: ubuntu-24.04, llvm: '22', flavor: '', py: '3.14', cxx: '20' }
- { os: ubuntu-24.04, llvm: '21', flavor: system, py: '3.12', cxx: '20', vg: true }
- { os: ubuntu-24.04-arm, llvm: '21', flavor: system, py: '3.13', cxx: '20', vg: true }
- { os: ubuntu-24.04-arm, llvm: '20', flavor: system, py: '3.12', cxx: '17' }
- { os: macos-26, llvm: '21', flavor: system, py: '3.12', cxx: '20' }
- { os: macos-26-intel, llvm: '21', flavor: system, py: '3.12', cxx: '20' }
# cling backend, against the cached llvm-root (cling-llvm20) recipe cell.
- { os: ubuntu-24.04, llvm: '20', flavor: cling, flavor_version: cling-llvm20, py: '3.13', cxx: '20' }
uses: compiler-research/ci-workflows/.github/workflows/cppjit.yml@main
with:
# For upstream-drift detection, set cppinterop-ref: main here.
os: ${{ matrix.os }}
llvm-version: ${{ matrix.llvm }}
llvm-flavor: ${{ matrix.flavor }}
llvm-flavor-version: ${{ matrix.flavor_version || '' }}
python-version: ${{ matrix.py }}
cxx-standard: ${{ matrix.cxx }}
valgrind: ${{ matrix.vg || false }}
run-xfail-crashing-tests: true
drift-issue:
needs: build-test
if: ${{ always() && needs.build-test.result == 'failure' }}
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- uses: actions/github-script@v7
with:
script: |
const marker = '<!-- cppjit-nightly-drift -->';
const run = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const body = [
marker,
'## Nightly build/test failed',
'',
`The scheduled nightly run failed (CppJIT \`master\`, pinned CppInterOp).`,
`Investigate the failing cell; a persistent failure may mean a fork re-sync is due.`,
'',
`Run: ${run}`,
`Date: ${new Date().toISOString()}`,
].join('\n');
const existing = await github.paginate(github.rest.issues.listForRepo, {
...context.repo, state: 'open', labels: 'nightly-drift',
});
const hit = existing.find(i => (i.body || '').startsWith(marker));
if (hit) {
await github.rest.issues.createComment({ ...context.repo, issue_number: hit.number, body });
} else {
await github.rest.issues.create({
...context.repo,
title: 'Nightly: CppJIT build/test failing',
labels: ['nightly-drift'],
body,
});
}