Skip to main content
Rosetta’s warming job (Workflows 5.x) ran two commands: rosetta run warming to populate the caches, then /etc/aspect/workflows/bin/warming_archive to upload them to the warming bucket. aspect ci warming replaces both with a single task: it cleans the runner’s prior Bazel state, runs bazel build --nobuild against the given targets to populate the repository, output, and Bazel caches, and, on an Aspect Workflows runner, uploads the populated caches to the warming bucket itself. Warming runs on a schedule (typically daily) to pre-populate an Aspect Workflows runner group’s shared caches, so the first real CI job of the day starts warm instead of building everything from cold.

What changed

Configuration

aspect ci warming takes positional target patterns plus a few flags:
  • Targets (positional, default ...): the Bazel target patterns to warm. ... expands to all rule targets in the package at and beneath the current directory.
  • --bazel-flag=<flag> (repeatable): extra flags forwarded to the underlying bazel build (e.g. --bazel-flag=--config=ci).
  • --bazel-startup-flag=<flag> (repeatable): extra Bazel startup flags.

Examples

Run warming on a schedule against your main branch. Before: .aspect/workflows/config.yaml plus a warming job running rosetta run warming + warming_archive. After: a scheduled CI job:
The warming task itself doesn’t need the setup-aspect plugin: it always runs on an Aspect Workflows CI runner where aspect is already on the PATH, and it makes no vanilla bazel calls. The GitHub Actions example still uses the action because it provides the auth aspect needs to post its status check; on other providers, supply ASPECT_API_TOKEN instead (see the comments in the examples).
Each provider triggers the job on its own schedule: a GitHub Actions schedule: cron, a Buildkite scheduled pipeline (Settings > Schedules > New Schedule), a GitLab pipeline schedule (Build > Pipeline schedules > New schedule), or a CircleCI scheduled pipeline named aspect-workflows-warming. The examples use 0 12 * * *, 12:00 UTC. Point it at your main branch and run it as often as your cache churn warrants (daily is typical).