Skip to main content
CI needs one job and no GPU runner. On pull requests, only the kernels in changed files are verified and cached results are reused. The main branch and a nightly run verify everything.

GitHub Actions

.github/workflows/theformalera.yml
Then make theformalera / verify a required check under branch protection. A kernel that fails verification can no longer be merged.

Inputs

Outputs

With runner: local, the action installs theformalera[triton,engine] and caches .theformalera/cache, .theformalera/lemmas/local and the spec cache between runs. The reports and the proofs are uploaded as the theformalera-report artifact.

The pull-request comment

The SARIF upload puts the failure on kernels/attn_decode.py:39 under Files changed.
For CUTLASS kernels, run the job in a CUDA devel container so that nvcc is available. No GPU is needed: container: nvidia/cuda:<version>-devel-ubuntu22.04.

GitLab CI

.gitlab-ci.yml
Set THEFORMALERA_TOKEN as a masked CI/CD variable. The theformalera-verify job runs on merge requests, on the default branch and on schedules. It publishes SARIF as a SAST report, keeps the reports and proofs as artifacts, and posts the summary to the merge request when GITLAB_API_TOKEN is set. Override THEFORMALERA_LEVEL and THEFORMALERA_RUNNER to change the level and run mode.

Buildkite

.buildkite/pipeline.yml

Any other CI

The action is a thin wrapper around three commands:
verify exits with status 0 only when the policy passes. --report-dir writes the JSON report, SARIF, the Markdown comment and an HTML report; see Reports.

Pre-commit

Run the quick level on the kernels staged for commit:
.pre-commit-config.yaml

What triggers re-verification

A kernel is verified again when any of these change: its source or the @triton.jit helpers it calls, its annotation, the locked spec version, the engine version, or the relevant settings in theformalera.toml. Comments and formatting do not change the lowered IR, so they do not trigger a new proof. On the nightly run, UNKNOWN results are retried when new lemmas for their node have appeared, and spec security advisories for the locked versions are reported.