Retire GitHub automation that is disabled, non-functional, unowned, or
explicitly no longer wanted, together with its orphaned support code and
tests.
This removes the optional Dependabot version-update config; automatic
team mentions and cc-review requests; last-successful and nightly branch
advancement; reviewer pings; the disabled PR-comment bot; and the unused
CI-resource upload path. Active CI, release, tvm-bot, and manual
Docker-update workflows remain, with narrower permissions and event
guards, plus refreshed issue-template and network-resource guidance.
The behavior change is intentional: reviewer requests and team routing
become manual, and the nightly and last-successful branches are no
longer advanced by this repository. Dependabot security updates remain
controlled by repository settings.
Remove the retired ci_lint Docker image definition and its legacy lint
wrapper after the Jenkins matrix stopped building ci_lint in #19872.
Also remove the ci_lint entry from docker-images.ini, drop the
retired-image skip from the nightly Docker updater, and update the CI
test fixture accordingly.
Keep the temporary git_change_docker.sh ignore entries for the deleted
lint Docker files so this cleanup PR does not trigger an unnecessary
Docker image rebuild.
This is the first step in retiring the unused `ci_lint` Docker image.
This PR removes `ci_lint` from the generated Jenkins Docker image matrix
so new Jenkinsfiles no longer resolve, build, or deploy that image. It
also skips `ci_lint` in the nightly Docker image updater and teaches
`git_change_docker.sh` to ignore the lint Docker files that will be
removed later.
The actual lint Docker files are intentionally kept in this PR for
compatibility with the current Jenkins PR bootstrap path. Some PR Docker
jobs may still run the main-branch pipeline while reading files from the
PR checkout, and that older pipeline still passes `ci_lint` to
`determine_docker_images.py` during prepare. Keeping the files and the
temporary `docker-images.ini` entry avoids failing before the updated
generated Jenkinsfiles take effect.
A follow-up PR can delete `docker/Dockerfile.ci_lint`,
`docker/install/ubuntu_install_clang_format.sh`, `docker/lint.sh`, and
the README lint Docker example after this lands.
The Jenkins PR title/body linter is comparatively heavy and can report
false positives before the normal CI signal is available.
This removes the check_pr step from the Jenkins prepare flow and drops
the now-unused script-level test coverage.
This fixes CI script tests that accidentally run helper scripts with the
wrong Python interpreter.
Some tests call `run_script(..., env={...})` to pass test-specific
environment variables. `subprocess.run` treats `env` as a full
environment replacement, so the subprocess lost the current `PATH`.
Since these scripts use a shebang like:
```python
#!/usr/bin/env python3
```
they could fall back to the system Python instead of the active test
Python.
In the wheel test environment this caused the CI helper scripts to run
under Python 3.8, even though TVM requires Python >=3.10. Importing
`ci/scripts/jenkins/git_utils.py` then failed on PEP 604 annotations
such as:
```python
Any | None
tuple[str, str] | None
```
with:
```text
TypeError: unsupported operand type(s) for |: '_SpecialForm' and 'NoneType'
```
This patch updates `tests/python/ci/test_utils.py::run_script` to merge
test-provided environment variables into `os.environ` instead of
replacing the entire environment. This preserves the active Python/PATH
while still allowing each test to override or add variables.
## Summary
`ci/jenkins/data.py` was carrying two unrelated concerns: artifact
bundle definitions for s3 staging, and the docker image tag registry.
This PR decouples both from the Jenkinsfile-generated code, making each
concern standalone and machine-readable without Python.
## Changes
### Part 1 — Bundle refactor (`10950ac192`)
- `ci/scripts/jenkins/s3.py` gains `--bundle <name>` (repeatable) that
resolves bundle names from `ci/jenkins/data.py::files_to_stash` at
runtime; `--items` preserved for back-compat
- `ci/jenkins/templates/utils/macros.j2` `upload_artifacts` macro emits
`--bundle <name>` flags instead of inlining the file list as `--items`
- Template callsites (cpu, gpu, arm) updated to pass `bundles=[...]`
names
- Generated `.groovy` files regenerated — no `build/` paths appear in
artifact upload blocks; only bundle names
### Part 2 — Docker image registry extraction (`6df22c09b9`)
- New `ci/docker-images.ini` (one `[ci_*]` section per image) is the
single source of truth for image tags
- `docker/dev_common.sh::lookup_image_spec` reads the ini directly with
`awk` — no Python invocation
- `ci/jenkins/data.py` drops the inline `docker_images` dict; loads it
via `configparser` from the ini, preserving the same nested-dict shape
so Jinja templates and the current `s3.py` module import keep working
unchanged
- `data.py __main__` is now the bundle-resolver CLI (`python3
ci/jenkins/data.py <bundle> [...]` → file paths, one per line) — no more
dual-purpose image-name lookup branch
- `ci/scripts/jenkins/open_docker_update_pr.py` updated to read/write
`ci/docker-images.ini` instead of `data.py`
## Acceptance
```
# No build/ artifact paths in generated Jenkinsfiles (bundle names only):
grep -rn "build/lib\|build/cpptest" ci/jenkins/generated/ # → nothing
# generate.py is byte-identical after the change:
python3 ci/jenkins/generate.py # → "no changes made" for all 5 groovy files
# dev_common.sh resolves same tag as before:
bash -c 'source docker/dev_common.sh && lookup_image_spec ci_cpu'
# → tlcpack/ci-cpu:20251130-061900-c429a2b1
```
This PR enables ruff pyupgrade (UP) rules with py310 target, auto-fixing
~5600 annotation modernizations (PEP 585 generics, PEP 604 unions,
deprecated typing imports).
Also removes from __future__ import annotations from ir/module.py and
rmsnorm.py, bumps requires-python to >=3.10, and removes absolute_import
aliases from topi/contrib files.
Add a script to download 3rd party embedded resources (CSS, JS, etc) to
local files. This ensures that the documentation can be viewed offline
and reduces external dependencies.
The script:
1. Detects external URLs in HTML/CSS files
2. Downloads the resources to _static/downloads
3. Updates the HTML/CSS files to use local copies
This PR applies appropriate changes to make sure the CI fails if micro_tvmc.sh tutorial fails. This issue was captured in #14074.
This PR also makes changes to avoid this breakage in bash script tutorials in future. In addition, this PR fixes the bug in running TVMC tutorial which happened due to renaming zephyr_board to board.
Hardcoding the Docker images in the Jenkinsfiles has the downside that only trusted changes are actually run in CI. Since Docker image updates are pretty frequent, this makes for a pretty bad UX (e.g. CI runs but doesn't actually test the PR). The fix here makes it so the images are read from a different file during CI execution so updates from anyone are picked up.
This PR eliminates the need to use the batch jobs in Jenkins to update Docker images. Docker images are built as part of post-merge CI on `main` and anyone can trigger a validation run by filing a PR with changed Docker tags.
This breaks up the Jenkinsfile into ones for GPU, CPU, etc. This removes a false dependency between the build and test steps (e.g. before the GPU tests had to wait on the Hexagon build to complete) and makes the Jenkins UI a bit better since there's not 30 tests to scroll through to find a failure. An example can be found in my fork here: https://github.com/driazati/tvm/pull/38 in the checks box. Before this is merged https://github.com/tlc-pack/ci/blob/main/jenkins/jenkins-jobs/prod/tvm.yaml will need to be updated to accept webhooks from apache/tvm instead of my fork.
See #13337 for more context
In this PR, the skipped tests script will also check if tests in the `required_tests_to_run.json` have not been skipped. If there are skipped tests, they will be added to the returned comment.
I am not entirely sure where it's best to place the `required_tests_to_run` file, so I left it in `tvm/ci/scripts/`. I am happy to take suggestions.
Aims to prevent situations such as #12529
This adds a short lint to ensure that all files have a single trailing newline and no trailing whitespaces. This PR is in two commits, one to add the check and another to fix currently offending files in the repo. See https://github.com/apache/tvm/pull/13058/commits/ba2c2e235e2a16d62fdeed959044c65012d9f942 for just the significant changes. Auto-corrections applied with
```
pre-commit run --all-files
```
This would post the comment that the tests bot and the docs comment bot
uses straightaway when a PR is posted. This will contain links to
generic info about posting PRs (and obviate the
`.github/PULL_REQUEST_TEMPLATE.md`) as well as dynamic info about the
specific PR (filled in later by the respective bots). This would make
things like the auto-cc bot more transparent since it would have a link
to the relevant issue.
Tested live here: https://github.com/driazati/tvm/pull/21#issuecomment-1236019529
This has been working fine for a while, this code opens it up so it's
not limited to the authors in #9983.
Co-authored-by: driazati <driazati@users.noreply.github.com>
This fixes the issue where merging from GitHub Actions (i.e. with the default `GITHUB_TOKEN`) doesn't trigger post merge GitHub Actions on the commit it creates in `main`. Instead these jobs are triggered manually by a call to the Actions API after the merge has taken place.
This also updates the tvmbot testing code (and by extension some of the other CI testing code) to remove the fixtures for each test in favor of constructing them from a single sample at runtime, this makes it a lot easier to add new tests and see what is different between each data sample and clean up the testing anti-patterns that were there before (e.g. `run()` instead of `pytest.mark.parameterize`, but none of the tests in `test_ci.py` have changed)
Tested in https://github.com/driazati/tvm/pull/36 which ran https://github.com/driazati/tvm/actions/runs/2881047903
This PR adds a script that does a diff of skipped tests between the latest successful build on the main and the current branch. Then, it posts a comment with the report on the open PR.
#11670
This PR builds and tests TVM (running the CPP and unittests) under minimal configuration with some debug flags enabled:
- `USE_RELAY_DEBUG=ON` in TVM
- `-Wp,-D_GLIBCXX_ASSERTIONS` in TVM
- `-DLLVM_ENABLE_ASSERTIONS=ON` in LLVM
It also adds this configuration to the CI.
`tests/python/unittest/test_meta_schedule_task_scheduler.py::test_meta_schedule_task_scheduler_multiple_gradient_based` results in an array OOB access and a segfault due to `D_GLIBCXX_ASSERTIONS`. I disable this test for now and will open an issue to solve it ASAP.
It should fix#11932 and address [this discussion](https://discuss.tvm.apache.org/t/pre-rfc-new-ci-container-ci-cpu-asserts/12536/9).
There was a level of unwrapping missing in the check for who is allowed to trigger re-runs causing it to always fail. This also uses a different actions API endpoint to re-run only failed GitHub jobs. This also fixes the text fixtures to match the GitHub API response, also tested live in driazati#34.
Co-authored-by: driazati <driazati@users.noreply.github.com>
GitHub associates the automation run on PRs for user tagging and reviews
as CI jobs on that PR, and since these often get re-run, skipped, or may
fail in the background they prevent merges. This PR ignores all of these
jobs so only the ones defined in `main.yml` matter, which are the ones
that actually build / test TVM.
This is a simpler version of #11569
This adds the right permissions so anyone associated with the repo can trigger a re-run (GitHub hasn't flagged all committers as repo `COLLABORATORS` for some reason so it's difficult to determine from a username who has commit rights) and makes it so `@tvm-bot rerun` also re-runs all the Actions on a PR.
See #11768 for details
This adds a GitHub Action to check for the latest images on Docker Hub via the Docker API and update the `Jenkinsfile` accordingly. It sends this in as PR for a committer to review and merge.
Co-authored-by: driazati <driazati@users.noreply.github.com>
See #11768. This adds a script to check if Docker images exist in `tlcpack` and switch to `tlcpackstaging` if not (the tags must match though). There is also a feature flag for this in jenkins in the `DETERMINE_DOCKER_IMAGES` env variable (which must be set to `yes` for this change to work)
Some python tests are failing in the wheel. This PR skips them if the environment variable `WHEEL_TEST` is set.
This PR is related to https://github.com/tlc-pack/tlcpack/pull/115.
This rebuilds Docker images and uses them in later stages in the same build. If the build is running on `main`, then the images are uploaded to Docker Hub automatically once the run is complete. Images are always rebuilt, but Docker Hub functions as a cache. If there have been no changes to `docker/` since the last available hash on Docker Hub, then the build will just use the images from Hub.
This adds a command to restart CI runs that have stopped (either from a
failure, success, or abort) via GitHub comments addressed to tvm-bot:
```
@tvm-bot rerun
```
tvm-bot will then comment on the thread and send a request to Jenkins to
restart CI. This does not restart GitHub Actions jobs though we may be
able to add that in the future.
Co-authored-by: driazati <driazati@users.noreply.github.com>
This implements https://discuss.tvm.apache.org/t/rfc-allow-merging-via-pr-comments/12220. The bot can be invoked from a top-level review comment or via a regular PR comment. The text `@tvm-bot merge` anywhere in the body will trigger the bot. Right now it checks that the latest commit is reviewed and that all CI jobs that have run on that commit are successful. If it fails, it will leave a comment on the PR with the reason.
This is just a start and some features are left for followups:
* Various TODOs throughout the code
* "Scheduled" merges that happen once CI finishes
* Allowing committers to merge without getting a fresh review for changes after an approval