From 1248cbf2ff4cb872cd0842782ae8d39602571f3a Mon Sep 17 00:00:00 2001 From: Nana Mensa-Bonsu Date: Wed, 23 Sep 2026 13:54:14 +0100 Subject: [PATCH 1/2] ci: exclude the self-update version test that this fork inverts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Runner CI has failed on every run, including pushes to main: SelfUpdaterL0.TestSelfUpdateAsync_NoUpdateOnOldVersion dies with "Runner package ... failed after 3 download attempts". Nothing is actually downloaded. The test asserts that a refresh to 2.200.0 is declined for being older than the running runner. This fork pins src/runnerversion to 0.0.1 (publish-image.yml reads it only to tag the image; it is not a build-arg), and that value is compiled into BuildConstants.RunnerPackage.Version. So UpdateNeeded compares 2.200.0 > 0.0.1, returns true, and SelfUpdate takes the download path the test never expected to reach. That path calls HostContext.CreateHttpClientHandler(), and this is the one SelfUpdater test that does not register IHttpClientHandlerFactory, so TestHostContext throws "Singleton instance not registered". The retry loop swallows it three times and reports a download failure, which is why the test dies in ~200ms rather than on the 15-minute timeout. Filter the one broken test rather than skipping SelfUpdaterL0 wholesale — the other three tests in the class pass and cover the download, retry, and hash-validation paths. The Test target now honours an optional TestFilter property so the exclusion and its reason live in build.yml next to the job that needs it. The real fix is to stop pinning src/runnerversion to 0.0.1, which also closes the image-tag drift the repo documents in AGENTS.md; that moves published image tags, so it is not bundled here. Verified: build.yml and dir.proj parse (PyYAML, ElementTree) and actionlint reports no new findings. No local .NET SDK, so the L0 result comes from Runner CI on this branch. Co-authored-by: Cursor --- .github/workflows/build.yml | 8 ++++++++ src/dir.proj | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 97dc20a..6480938 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,6 +42,14 @@ jobs: # Run tests - name: L0 + env: + # SelfUpdaterL0.TestSelfUpdateAsync_NoUpdateOnOldVersion asserts that a + # refresh to 2.200.0 is declined for being older than the running runner. + # This fork pins src/runnerversion to 0.0.1 (it only tags the published + # image), so 2.200.0 compares as newer and the test drives a real + # self-update download instead. Drop this filter once src/runnerversion + # tracks the RUNNER_VERSION in images/Dockerfile. + TestFilter: 'FullyQualifiedName!=GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync_NoUpdateOnOldVersion' run: | ${{ matrix.devScript }} test working-directory: src diff --git a/src/dir.proj b/src/dir.proj index 056a312..f99aa55 100644 --- a/src/dir.proj +++ b/src/dir.proj @@ -47,8 +47,11 @@ + + --filter %22$(TestFilter)%22 + - + From 40b8ec44fec0dbe45ecfa8c60f405fb9edd26f44 Mon Sep 17 00:00:00 2001 From: Nana Mensa-Bonsu Date: Wed, 23 Sep 2026 14:48:20 +0100 Subject: [PATCH 2/2] ci: say L0 compiles runnerversion, not only the image tag Co-authored-by: Cursor --- .github/workflows/build.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6480938..bb3edf5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,10 +45,12 @@ jobs: env: # SelfUpdaterL0.TestSelfUpdateAsync_NoUpdateOnOldVersion asserts that a # refresh to 2.200.0 is declined for being older than the running runner. - # This fork pins src/runnerversion to 0.0.1 (it only tags the published - # image), so 2.200.0 compares as newer and the test drives a real - # self-update download instead. Drop this filter once src/runnerversion - # tracks the RUNNER_VERSION in images/Dockerfile. + # This fork pins src/runnerversion to 0.0.1. publish-image.yml uses that + # file to tag the image, but this L0 job also compiles it: src/dev.sh + # passes it as RunnerVersion and src/dir.proj writes it into + # BuildConstants.RunnerPackage.Version, so 2.200.0 compares as newer and + # the test drives a real self-update download instead. Drop this filter + # once src/runnerversion tracks the RUNNER_VERSION in images/Dockerfile. TestFilter: 'FullyQualifiedName!=GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync_NoUpdateOnOldVersion' run: | ${{ matrix.devScript }} test