Back to all blogs

Benchmark: Bazel builds 39.7x faster on Avrea than GitHub Actions

On GitHub Actions, a no-cache Bazel build takes 37 minutes 10 seconds. On Avrea, the same build, same 2 vCPU spec, one label change: 14 minutes 4 seconds without cache, 56 seconds with.

Leo Lännenmäki
21 April 2026
Benchmark: Bazel builds 39.7x faster on Avrea than GitHub Actions

Why Bazel

Bazel powers CI at companies running enormous monorepos: tens of thousands of source files, multiple languages, aggressive caching. Supporting Bazel's remote cache, and making it fast, was high on our list.

How we ran the test

Built Bazel from source, with Bazel's remote cache enabled on the cached run. Both sides matched on paper:

GitHub Actions Avrea
Runner label ubuntu-24.04 avrea-ubuntu-latest-2-vcpu
vCPU 2 2
RAM 7.8Gi 7.8Gi

For the cached run, Bazel's  pointed at Avrea's co-located cache, populated on a prior warm-up run and then read from.  On the GitHub side there's no comparable cache built in.

Variance on Avrea was small: a few seconds on the cached runs. GitHub Actions was noisier.

Results

GitHub Actions Avrea Speedup
No cache 37m 10s 14m 4s 2.6x
With cache n/a 56.1s 39.7x

Without caching, Avrea comes out 2.6x faster. With Bazel's remote cache pointed at Avrea's Bazel remote cache endpoint, a warm build finishes in 56 seconds.

Why it's faster

The hardware (the 2.6x)

A no-cache Bazel build is CPU-bound and disk-heavy. Compiler passes pin a single core. The build also churns through a big pile of intermediate object files.

Avrea's 2 vCPU runner is the same size as GitHub's on paper, but the hardware underneath is different. Sysbench single-core: ~6,500 events/sec vs GitHub's ~3,670. Disk writes: ~4 GB/s vs ~220 MB/s.

That's the 2.6x, before any caching gets involved.

The cache (the 39.7x)

Bazel's remote cache stores every action's output (compiled objects, linked binaries, test results), keyed by input hash. On a cached run, if the inputs haven't changed, Bazel reads the output back and skips the work.

Avrea's cache runs on the same infrastructure as the runners, so reads come straight off co-located storage. That reduces the usual network-path bottlenecks.

On a fully-warm cache, what's left of the build is mostly Bazel walking the action graph and pulling outputs out of storage.

Other benchmarks in this series

What Avrea is

Avrea is drop-in for GitHub Actions runners. Swap ubuntu-latest for avrea-ubuntu-latest and push.

Every run gets step-level CPU and memory metrics, searchable logs, and SSH into the live VM when you need to reproduce something. That last one matters with Bazel specifically: when a build wedges in a deep action graph, you want to poke at it, not rerun blind.

Every job runs in an isolated ephemeral VM. ISO 27001:2022 certified.

See pricing or start free on Avrea →