Files
Jing Chen b568325093 publish a release tag after the artifacts are uploaded.
A release tag was created before the release built, so a failed build left a
tag on GitHub with nothing behind it. release-20260824.0 is an example: the
build failed, but users still see a release that they cannot install.

Before
```
  make tag RELEASE_COMMIT=<sha> RELEASE_NAME=20260831.0 RELEASE_NOTES=<file>
                     │
  tag_release.sh     └─ pushes the annotated tag as  release-20260831.0   ← published immediately
                     │
        ┌────────────┴────────────┐
        │                         │
  Buildkite                  GitHub Actions
  (triggered by the tag)     release_mirror.yml
        ├─ make artifacts         ├─ poll GCS for artifacts (240 min timeout)
        ├─ make release           ├─ verify sha512
        └─ gcloud storage cp      └─ create the GitHub Release
           → gs://gvisor/releases/
```

After
```
  make tag RELEASE_COMMIT=<sha> RELEASE_NAME=20260831.0 RELEASE_NOTES=<file>
                     │
  tag_release.sh     └─ pushes the annotated tag as  staging-release-20260831.0
                     │
  Buildkite          ├─ tag.sh stage      restore release-20260831.0 locally (version stamping)
  (triggered by      ├─ make artifacts    x86_64 + aarch64
   the staging tag)  ├─ make release      sign, lay out repo/
                     ├─ gcloud storage cp → gs://gvisor/releases/
                     └─ tag.sh publish    push release-20260831.0, delete staging tag
                     │
  GitHub Actions     └─ release_mirror.yml  verify sha512, create the GitHub Release

```
2026-09-02 22:43:23 +00:00

111 lines
3.4 KiB
YAML

agents:
queue: release
_templates:
retry_settings: &retry_settings
automatic:
- exit_status: -1
limit: 10
- exit_status: "*"
limit: 2
common: &common
timeout_in_minutes: 180
retry:
<<: *retry_settings
notify:
- email: "[email protected]"
if: build.state == "failed"
env:
# Force a clean checkout every time to avoid reuse of files between runs.
BUILDKITE_CLEAN_CHECKOUT: true
steps:
- <<: *common
label: ":ship: Push all images (x86_64)"
if: build.branch == "master" && build.tag == null
commands:
- make ARCH=x86_64 DOCKER_PUSH_AS_LATEST=true push-all-images
- make ARCH=x86_64 REMOTE_IMAGE_PREFIX=gcr.io/gvisor-presubmit DOCKER_PUSH_AS_LATEST=true push-all-images
agents:
arch: "amd64"
queue: "release"
- <<: *common
label: ":ship: Push all images (aarch64)"
if: build.branch == "master" && build.tag == null
commands:
- make ARCH=aarch64 DOCKER_PUSH_AS_LATEST=true push-all-images
- make ARCH=aarch64 REMOTE_IMAGE_PREFIX=gcr.io/gvisor-presubmit DOCKER_PUSH_AS_LATEST=true push-all-images
agents:
arch: "arm64"
queue: "release-arm64"
- <<: *common
label: ":slot_machine: Syzkaller smoke test"
if: build.branch == "master" && build.tag == null
commands:
- make syzkaller-smoke-test
agents:
arch: "amd64"
queue: "release"
- <<: *common
label: ":ship: Release"
if: build.branch == "master" || build.tag != null
commands:
# Stamps the binaries below with release-<name>.
- ./.buildkite/scripts/release/tag.sh stage
- "make BAZEL_OPTIONS='--config=x86_64 --compilation_mode=opt' artifacts/x86_64"
- "make BAZEL_OPTIONS='--config=aarch64 --compilation_mode=opt' artifacts/aarch64"
- make artifacts-python
- make release RELEASE_NIGHTLY=$$RELEASE_NIGHTLY
- (cd repo && gcloud storage cp --recursive . gs://gvisor/releases/)
# Pushes release-<name> to GitHub.
- ./.buildkite/scripts/release/tag.sh publish
agents:
queue: "release"
- <<: *common
label: ":ship: Website Deploy"
if: build.branch == "master" && build.tag == null
commands:
# The built website image must be x86_64.
- make BAZEL_OPTIONS=--config=x86_64 website-deploy
agents:
arch: "amd64"
queue: "release"
- <<: *common
label: ":bun: COS Latest Driver Compatibility Test"
commands:
- tools/gpu/cos_drivers_test.sh
agents:
queue: "release-cos"
- <<: *common
label: ":female_supervillain: COS GPU Tests"
commands:
- make cos-gpu-all-tests
agents:
queue: "release-cos-canary-gpu"
- <<: *common
label: ":screwdriver: GPU Tests"
commands:
- make sudo TARGETS=//tools/gpu:main ARGS="install --latest"
- make gpu-all-tests
agents:
queue: "release-ubuntu-gpu"
- label: ":batfish: CUDA 12.8 tests"
# This is its own test rather than being part of the GPU tests,
# because it takes around 30 minutes to run.
parallelism: 16
timeout_in_minutes: 60
retry:
<<: *retry_settings
commands:
- make sudo TARGETS=//tools/gpu:main ARGS="install --latest"
- make cuda-12-8-tests
agents:
queue: "release-ubuntu-gpu"
- <<: *common
label: ":screwdriver: All GPU Drivers Test"
parallelism: 8
commands:
- tools/gpu/all_drivers_test.sh
agents:
queue: "release-ubuntu-gpu"