GitHub Actions Self-Hosted Runner Brownout: Update Before September 25

Quick answer: If your GitHub Actions workflows use self-hosted runners on github.com, update them now. GitHub’s final week of configuration-and-runtime brownouts is September 14, 16 and 18, 2026, from 11:00 a.m. to 3:00 p.m. ET (15:00–19:00 UTC). Full GitHub Enterprise Cloud enforcement begins September 25. During a brownout, an unsupported runner can fail to register and can stop receiving or executing jobs. [1]

Minimum is not the same as current: version 2.329.0 is the minimum for configuration or re-registration, but job execution also requires installing every new runner release within 30 days. GitHub says a runner pinned forever to 2.329.0 will eventually stop receiving jobs. Use the version offered in your repository or organization’s runner download instructions rather than treating 2.329.0 as a permanent target. [1][3]

September 2026 brownout and enforcement dates

DateWindowExpected impact on unsupported runners
September 1411 a.m.–3 p.m. ET / 15:00–19:00 UTCConfiguration and runtime blocking
September 1611 a.m.–3 p.m. ET / 15:00–19:00 UTCConfiguration and runtime blocking
September 1811 a.m.–3 p.m. ET / 15:00–19:00 UTCConfiguration and runtime blocking
September 25Full enforcement beginsUnsupported registrations are blocked; outdated connected runners can stop executing jobs

These dates apply to GitHub Enterprise Cloud on github.com. GitHub Enterprise Cloud with Data Residency reached full enforcement on July 31, while GitHub Enterprise Server is not affected by this specific cloud rollout. [1]

Five-minute runner audit

  1. Confirm scope: search workflow files for runs-on: self-hosted, custom runner labels or runner groups.
  2. Open the inventory: in the relevant repository or organization, go to Settings → Actions → Runners. GitHub shows each registered runner’s name, labels and status there. [2]
  3. Record the actual version: query the REST inventory below. The current API response includes a version field for each runner. [4]
  4. Check the deployment source: inspect VM templates, container images, startup scripts, ARC scale sets and disaster-recovery images. Updating one currently running host does not repair a stale image that will recreate the old version.
  5. Test spare capacity: upgrade a canary runner, run a representative workflow, then roll through the fleet while enough known-good capacity remains online.

List organization runners and versions with the GitHub CLI

ORG="your-organization"

gh api   -H "X-GitHub-Api-Version: 2026-03-10"   --paginate   "/orgs/$ORG/actions/runners?per_page=100"   --jq '.runners[] | [.name, .os, .status, .busy, .version] | @tsv'

The organization endpoint requires suitable organization administration permission. Repository- and enterprise-level endpoints are also documented; use the scope that owns your runners. Do not paste access tokens into scripts, tickets or command output. [4]

Check a runner version’s end-of-life schedule

ORG="your-organization"
VERSION="2.329.0"   # replace with the version found in your inventory

gh api   -H "X-GitHub-Api-Version: 2026-03-10"   "/orgs/$ORG/actions/runners/deprecations/$VERSION"

GitHub documents a dedicated organization endpoint that returns a runner version and the dates when its registration or runtime support ends. This is safer than assuming that “2.329.0 or later” alone guarantees runtime eligibility. [4]

How to update without breaking CI

  1. Use GitHub’s generated download instructions. Open Settings → Actions → Runners → New self-hosted runner for the correct OS and architecture. GitHub notes that runner releases are progressive, so the globally latest tag may not yet be the version offered to every enterprise or organization. [3]
  2. Back up configuration, not job workspaces. Preserve your service identity, labels, runner group, network policy and deployment automation. Treat job work directories as disposable.
  3. Drain or isolate one runner. Prevent new jobs from landing on the canary, allow its current job to finish, then stop its service.
  4. Replace the runner binary or image. For ephemeral/container fleets, rebuild and redeploy the source image instead of patching only live containers.
  5. Start and inspect the service. On Linux, ./svc.sh status checks the installed service. Runner and update logs are stored under _diag; systemd installations can also be inspected with journalctl. [2]
  6. Run a real validation workflow. Exercise checkout, caches, artifacts, containers and any custom labels used by production jobs.
  7. Roll forward gradually. Keep enough healthy runners available for critical queues and monitor for GitHub’s outdated-runner annotations.

Auto-update enabled vs disabled

Runner modelWhat to verify
Persistent runner, auto-update enabledConfirm it can reach GitHub’s update services and that SelfUpdate logs show successful updates.
Persistent runner, auto-update disabledBuild a recurring release-monitoring and upgrade process; every major, minor and patch release counts.
Ephemeral VM or container runnerUpdate the golden image and provisioning pipeline. Recreate runners from the new image.
Actions Runner ControllerReview the runner image/tag used by the scale set and perform a controlled rollout with spare capacity.

GitHub says self-hosted runners update automatically by default. When updates are disabled with --disableupdate, each release must be installed within 30 days; critical security releases can stop job queuing sooner. Update connectivity requires access to GitHub release and object-storage domains listed in the runner reference. [5]

Why a runner may still fail after an update

  • The old image returned: autoscaling or recovery automation recreated a runner from a cached template.
  • Update traffic is blocked: a proxy, firewall or TLS interception policy prevents access to GitHub’s update services.
  • The service never restarted: the files changed, but the active service still uses the old installation or failed to start.
  • Labels no longer match: the replacement runner registered without a label required by runs-on.
  • No matching capacity is online: GitHub notes that a job can remain queued until its 24-hour timeout when no matching self-hosted runner is available. [5]

To test network access, GitHub documents ./config.sh --check --url URL --pat TOKEN. The check prints PASS or FAIL for required services and writes details under _diag. Use a narrowly scoped temporary credential and never publish the token. GitHub warns against disabling TLS verification except for diagnosis because it removes transport privacy and integrity. [2]

Frequently asked questions

Is version 2.329.0 enough?

It is the minimum version for configuration and re-registration under this migration, not a permanent runtime target. Runners must also install each newer release within 30 days. Check the API’s version and deprecation data, then use the version GitHub currently offers to your organization. [1][4]

Will GitHub-hosted runners be affected?

No action is required for ordinary GitHub-hosted runners under this self-hosted runner enforcement notice. The affected software is the runner application that customers deploy and manage themselves. [1]

Does this apply to GitHub Enterprise Server?

GitHub says Enterprise Server is not impacted by this specific github.com enforcement rollout. Follow the compatibility guidance for your own GHES release instead of applying the cloud deadline blindly. [1]

What happens during the September 14, 16 and 18 brownouts?

GitHub plans temporary configuration and runtime blocking from 11 a.m. to 3 p.m. ET. Unsupported runners can fail to register and can stop executing jobs during those windows. Treat an intermittent queue or registration failure as an upgrade signal rather than waiting for September 25. [1]

Official sources

  1. GitHub Changelog: minimum-version enforcement timeline
  2. GitHub Docs: monitor and troubleshoot self-hosted runners
  3. Official Actions runner latest release
  4. GitHub REST API endpoints for self-hosted runners
  5. GitHub self-hosted runners reference

Google ADK for Kotlin 1.0 Quickstart: Android and JVM Setup

Leave a Comment

muddaser logo

Public Speaker, Softskills trainer and technology enthusiast

Services

HelpingOrange

Subtitles

Video Production

SEO

Website development

Consultancy

Resources

Blog

Developer Center

Exchange

Contact

Muddaser Altaf

Social Address