Scheduled and On-Demand Testing#
Beyond per-PR checks, FlagGems runs broader test sweeps on a schedule to catch regressions that only show up across the full operator suite or across vendors that aren't touched by a given PR.
daily.yaml — full-suite regression on NVIDIA#
Trigger: cron 3 16 * * * (00:03 Beijing time, daily); also manual
workflow_dispatch.
Runs the entire operator test suite (not just changed operators) on the NVIDIA runner:
cpp-op— the full C++ extension test suite.python-op—tools/test-op.shwithCHANGED_FILES=__ALL__, which expands to everytests/test*.pyfile. Also collects coverage and uploads it as theop-ut-coverageartifact.examples—tools/test-examples.shagainst all example/model tests.
coverage.yaml — publish coverage to the docs site#
Trigger: workflow_run after daily completes; also manual
workflow_dispatch with a run_id input.
Downloads the op-ut-coverage artifact produced by daily.yaml, unpacks
the HTML coverage report and summary markdown, commits them under
docs/static/coverage/<date> and docs/content/en/references/test/unit/,
and pushes directly to the gh-pages branch. hugo-site.yaml then rebuilds
and republishes the site in response to that push.
weekly.yaml — multi-vendor full-suite testing#
Trigger: cron 30 13 * * 3,6 (21:30 Beijing time, Wednesday and
Saturday); also manual workflow_dispatch with optional branch,
vendors, ops, upload_log, and send_feishu inputs.
Runs the full (or a filtered) operator suite across every enabled vendor
backend, configured in .github/configs/weekly/weekly-test.yaml and one
YAML file per backend. Backends are split into two execution modes:
- Container-based (
test-container) — runs inside the backend's Docker image, for vendors whose SDK is distributed as a container. Ascend (910B) gets a 24h job timeout; others get standard limits, since the whole-vendor run can take many hours. - Native (
test-native) — runs directly on the self-hosted runner without a container, for vendors set up that way.
Each run installs FlagGems, checks GPU availability, runs
tools/run_tests.py (scoped by --ops or --stages all), summarizes
results with psum_text/psum_html, and (unless disabled via input)
uploads the packaged results to the internal op-monitor service and posts a
Feishu notification with the outcome.
command.yaml — on-demand /test command#
Trigger: issue_comment created on a PR, matching /test <operator>:<runner>.
Lets any PR participant with the right permissions request an ad-hoc test
of a single operator on a specific runner (e.g. /test constant_pad_nd:mthreads) without waiting for the operator to have a
vendor/* label or for a full CI run. For operators that already have
history, it runs the test before and after the PR's changes and posts a
comparison; for brand-new operators, it posts a single-run report. Results
(and full logs) are attached as a PR comment and an uploaded artifact.
Feishu and monitoring integrations#
ci-report-feishu.yamlreports everyrule-checkcompletion to a Feishu Bitable for tracking pass/fail trends over time.weekly.yamlandcommand.yaml's failure paths send Feishu chat notifications via.github/scripts/notify_feishu.py.weekly.yamlalso uploads results to an internal "op-monitor" HTTP service for longer-term dashboards.
These are observability workflows; they do not gate merges.