Align CI with the control-toolbox Handbook (+ split CI by runner) - #302
Align CI with the control-toolbox Handbook (+ split CI by runner)#302jbcaillau wants to merge 2 commits into
Conversation
Apply the workflow rules from control-toolbox/Handbook/WORKFLOWS.md. Label-gated triggers (§2): CI, Documentation and Breakage previously ran on every event of every PR. They now subscribe to `types: [labeled, synchronize, reopened]` — deliberately excluding `opened`, which duplicates the run on PRs created with the label already applied — and guard their job with the org-standard two-branch `if:` so that only the relevant label firing triggers a run. Workflow distribution (§4): add the missing AddToProject.yml, which the handbook's table lists for CTParser.jl. Other alignments with the CTBase.jl/CTModels.jl reference callers: - CI: add windows-latest (§1, §6); rename job test-github -> call; drop the dead commented-out moonshot GPU block (CTParser has no GPU code, so it keeps a single `run ci` job per §3.1). - Documentation: restrict tags to v[0-9]+.[0-9]+.[0-9]+ so -beta tags no longer deploy docs. - Breakage: add CTDirect to the matrix — it is a real downstream consumer ([deps] + [compat]), alongside OptimalControl. - Coverage: capitalise the workflow name. The `run ci`, `run documentation` and `run breakage` labels have been created in the repository, since the gates are inert without them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Apply the split-CI pattern of WORKFLOWS.md §3.1, using CTFlows.jl's CI.yml as the reference: call the reusable ci.yml twice, once for the GitHub-hosted matrix and once for the self-hosted kkt runner, each gated by its own label. §3.1's table classifies CTParser.jl as having no GPU-relevant code and so keeping a single `run ci` job, but that is stale: test/Project.toml depends on CUDA, MadNLPGPU, KernelAbstractions and ExaModels, and test/runtests.jl loads them unconditionally. The GPU job therefore has real work to do. Labels are `github-runner` and `kkt-runner` as requested, rather than the `run ci cpu` / `run ci gpu` pair used elsewhere in the org. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
@ocots — diagnostic on the TL;DRThe workflow config is not the cause, and it is probably just queue latency — but there is one permission setting only an org admin can rule out, hence the ping. 1. The CI caller is identical to CTFlows.jl'sDiffing
The kkt job's dispatch inputs are character-for-character identical: versions: '["1"]'
runs_on: '[["kkt"]]'
runner_type: 'self-hosted'
use_ct_registry: true
secrets:
SSH_KEY: ${{ secrets.SSH_KEY }}Both call the same The label gate itself is confirmed working: ticking 2. Most likely cause: kkt is simply slow to pick upCTFlows.jl's own kkt job is not fast to start:
CTFlows' job sat Six minutes of waiting is not yet evidence of a fault, measured against a neighbour that just waited ninety-five. 3. The one thing that needs an org admin to rule outIf This is worth checking specifically because CTParser.jl has never run a kkt job before — its access has never actually been demonstrated, whereas CTFlows.jl's is proven by history. That asymmetry is precisely what runner-group scoping would produce.
I could not verify this myself: the API needs Suggested next stepWait for the in-flight CTFlows kkt job to finish.
Everything else on this PR is green: ubuntu and windows pass on Julia 1.10 and 1.12 (Windows being new for this package), with only the macOS cells outstanding. |
|
@ocots runs, but one test on GPU fails 👀 |
Applies the workflow rules from
Handbook/WORKFLOWS.md.Why
CI.yml,Documentation.ymlandBreakage.ymlfired on every event of every PR with no gate — exactly the waste §2 exists to prevent. §4's distribution table also lists CTParser.jl as needingAddToProject, which was missing. Finally, CI is now split per runner (§3.1).Changes
CI.ymlDocumentation.ymlrun documentationgate +types:; tags restricted tov[0-9]+\.[0-9]+\.[0-9]+so-betatags stop deploying docsBreakage.ymlrun breakagegate +types:; +CTDirectin the matrixCoverage.ymlname: coverage→Coverage(cosmetic)AddToProject.ymlUntouched (already conforming):
Formatter,SpellCheck,CompatHelper,AutoAssign,TagBot,UpdateReadme.CI split (§3.1, modelled on CTFlows.jl)
test-github-runnergithub-runnertest-kkt-runnerkkt(GPU/CUDA)1kkt-runner§3.1's table classifies CTParser.jl as having no GPU-relevant code and keeping a single
run cijob. That is stale:test/Project.tomldepends onCUDA,MadNLPGPU,KernelAbstractionsandExaModels, andtest/runtests.jlloads them unconditionally — so the GPU job has real work to do. Worth a Handbook correction separately.Label names are
github-runner/kkt-runneras requested, rather than therun ci cpu/run ci gpupair used by CTFlows/CTSolvers/OptimalControl.openedis deliberately excluded from the gated workflows'types:— per §2 it duplicates thelabeledrun when a PR is created with its label already applied.AddToProject/AutoAssigncorrectly keep it.Gate behaviour verified on this PR
CI,Documentation,Breakage→ zero runs; ungatedSpellCheckran, and the newAddToProjectfired onopened. ✅+github-runner:test-github-runnerfanned out to 6 jobs;test-kkt-runnerskipped. ✅synchronizewith neither runner label: both CI jobs skipped. ✅opened-exclusion working. ✅Notes for the reviewer
CTDirectadded to the breakage matrix because it is a genuine downstream consumer (real[deps]+[compat], not just a test[extras]). Previously onlyOptimalControlwas listed.windows-latestis new for this package — first Windows run ever, so a failure there is a real finding, not a regression from this PR. (CTFlows.jl's Windows job is currently failing too.)run cilabel is now inert — the split replaced it with the two runner labels. Delete it if you don't want it lingering.kkt-runnerhas not been exercised yet; the kkt runner looked backed up (CTFlows'test-gpu-kkthad been queued ~40 min).🤖 Generated with Claude Code