ci: replace aws-micro runner with ubuntu-latest in all workflows#5977
Merged
ci: replace aws-micro runner with ubuntu-latest in all workflows#5977
Conversation
Switches lightweight orchestration/config/versioning jobs from the self-hosted aws-micro runner to the GitHub-hosted ubuntu-slim runner (1 vCPU, 5 GB RAM, included in GitHub Actions minute quota and billed at the lowest rate among standard Linux runners). Affects: .github/workflows/build-test-distribute.yml (3 jobs) .github/workflows/config.yml (1 job) .github/workflows/distro-release.yml (2 jobs) .github/workflows/prepare-images.yml (1 job) .github/workflows/unity-nuget-test.yml (2 jobs) .github/workflows/update-win-version.yml (1 job) .github/workflows/versioning-release.yml (1 job) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ubuntu-slim doesn't ship 'requests' preinstalled (unlike the former aws-micro runner), so collect_ci_stats.py fails with ModuleNotFoundError right after the switch. The script imports boto3, botocore, and requests; only the first two were in the install step. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
oitel
approved these changes
Apr 24, 2026
Grantim
approved these changes
Apr 24, 2026
The config job only runs pre-commit, dorny/paths-filter, and a few shell snippets that work with branch-name / event context. None of these touch submodule contents, so pulling them in was pure waste — especially on ubuntu-slim where a full submodule clone adds a lot of disk I/O and network time for no benefit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MeshLib is a public repository, so all GitHub-hosted runners are free with no minute quota. ubuntu-latest is also free here and gives 4 vCPU / 16 GB RAM instead of the 1 vCPU / 5 GB of ubuntu-slim, with no 15-minute job cap. Timing data from the previous run on this branch showed ubuntu-slim adding ~1.4 min to the critical path vs. the old self-hosted aws-micro; ubuntu-latest is expected to recover most of that thanks to the larger CPU/RAM budget. The infrastructure goal of the PR (retiring the self-hosted aws-micro runner pool) is preserved. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Switch all 11 jobs that currently run on the self-hosted
aws-microrunner to the GitHub-hostedubuntu-latestrunner.MeshLib is a public repository, so all GitHub-hosted runners are free with no minute quota.
ubuntu-lateston a public repo is 4 vCPU / 16 GB RAM, has no 15-minute per-job cap, and is the most plentiful runner pool — a strict resource and reliability upgrade overubuntu-slimat the same (zero) cost.Files changed
.github/workflows/build-test-distribute.yml.github/workflows/config.yml.github/workflows/distro-release.yml.github/workflows/prepare-images.yml.github/workflows/unity-nuget-test.yml.github/workflows/update-win-version.yml.github/workflows/versioning-release.ymlWhy
aws-microrunner for lightweight orchestration work that doesn't need any custom environment.ubuntu-latestoutperforms 1 vCPU / 5 GBubuntu-slimon every job here, and avoids the 15-minuteubuntu-slimjob cap.Why not
ubuntu-slim?An earlier iteration of this PR used
ubuntu-slim. It works, butubuntu-slimonly pays off on private repos where the 3× cheaper per-minute rate stretches the included-minute pool. On this public repo there's no minute pool to stretch —ubuntu-latestis the same price (free) with strictly more resources.Bug fixed along the way (commit
38173a4)The first CI run on this branch exposed a latent bug in
build-test-distribute.yml: thecollect-statsjob'sInstall dependenciesstep pip-installed onlyboto3 botocore, butscripts/devops/collect_ci_stats.pyalsoimportsrequests. On the oldaws-microrunnerrequestswas preinstalled in the system Python, so this went unnoticed. On a clean GitHub-hosted runner image it fails withModuleNotFoundError: No module named 'requests'. Fixed by addingrequeststo the pip install line.Submodule cleanup (commit
fda697e)The
config.yml :: prepare-configjob was the onlyaws-micro-side job usingsubmodules: trueon its checkout. It runs onlyuv/pre-commit,dorny/paths-filter, and a few branch-name shell snippets — none of which touch submodule contents — so the submodule pull was pure waste.This turned out to be the single biggest performance win in the PR. Step-level breakdown of
config / prepare-config:CheckoutCheckout full historyaws-micro· with submodulesubuntu-slim· with submodulesubuntu-slim· without submodulesubuntu-latest· without submodulesRemoving submodules cut the whole job from 74 s → 27 s on ubuntu-slim — a 64% reduction. Submodule pull was 46 s on a clean GitHub-hosted runner with no git object cache (vs. 3 s on the warm self-hosted
aws-microbox), so it was the dominant cost.(All other previously-
aws-microjobs either don't check out the repo at all, or already checkout without submodules.)CI timing comparison: 3-way
aws-micro(master run24898903382) vs.ubuntu-slimwith submodules (PR run24897744204) vs.ubuntu-latestwithout submodules (PR run24913987716):aws-microwait/runubuntu-slimwait/runubuntu-latestwait/runconfig / prepare-configdebug-configprepare-image / always-successversioning-and-release-urlcollect-statsupdate-artifactsWhat the timings show
ubuntu-latest's 15 s aggregate is better thanaws-micro's 19 s — theubuntu-latestpool is plentiful enough that scheduling never bites.ubuntu-latestrecovered ~70% of the runtime regression thatubuntu-slimintroduced. Run-time delta vs.aws-micro: +38 s total (vs. +124 s onubuntu-slim).config / prepare-config(+4 s) at the start andupdate-artifacts(+24 s) at the end of the pipeline are on the critical path. Net wall-clock added: ≈ +28 s — small relative to a multi-hour build matrix.update-artifactsis the largest remaining gap. Looking at its steps, it's I/O bound (artifact download/upload over GitHub-hosted-runner network), not CPU-bound, so a bigger runner wouldn't help further.Test plan
ubuntu-latest-hosted job successfullyrequests— is now declared explicitly)ubuntu-latestis at most slightly slower thanaws-micro(i.e. no critical-path regression beyond +28 s)🤖 Generated with Claude Code