From f24ac5ac92343551818b092d82b1028798178a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Fri, 17 Jan 2025 16:54:45 -0600 Subject: [PATCH 1/4] Add `ubuntu-22.04-arm` and `ubuntu-24.04-arm` support in GitHub Runners --- .../datasource/github-runners/index.spec.ts | 15 +++++++++++++++ lib/modules/datasource/github-runners/index.ts | 17 ++++++++++++++++- .../manager/github-actions/extract.spec.ts | 14 +++++++++++++- lib/modules/manager/github-actions/extract.ts | 16 +++++++++++++--- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/lib/modules/datasource/github-runners/index.spec.ts b/lib/modules/datasource/github-runners/index.spec.ts index 7d79c59aca7e0d..6adb97585dbd86 100644 --- a/lib/modules/datasource/github-runners/index.spec.ts +++ b/lib/modules/datasource/github-runners/index.spec.ts @@ -21,6 +21,21 @@ describe('modules/datasource/github-runners/index', () => { }); }); + it('returns releases for Ubuntu ARM64', async () => { + const res = await getPkgReleases({ + datasource: GithubRunnersDatasource.id, + packageName: 'ubuntu_arm64', + }); + + expect(res).toMatchObject({ + releases: [ + { version: '22.04', isStable: false }, + { version: '24.04', isStable: false }, + ], + sourceUrl: 'https://github.com/actions/runner-images', + }); + }); + it('returns releases for macOS', async () => { const res = await getPkgReleases({ datasource: GithubRunnersDatasource.id, diff --git a/lib/modules/datasource/github-runners/index.ts b/lib/modules/datasource/github-runners/index.ts index 08a42b3f92c115..3265e1ec0cb948 100644 --- a/lib/modules/datasource/github-runners/index.ts +++ b/lib/modules/datasource/github-runners/index.ts @@ -23,6 +23,10 @@ export class GithubRunnersDatasource extends Datasource { { version: '18.04', isDeprecated: true }, { version: '16.04', isDeprecated: true }, ], + ubuntu_arm64: [ + { version: '24.04', isStable: false }, + { version: '22.04', isStable: false }, + ], macos: [ { version: '15', isStable: false }, { version: '15-large', isStable: false }, @@ -46,6 +50,13 @@ export class GithubRunnersDatasource extends Datasource { ], }; + private static readonly supportsLatest: Record = { + ubuntu: true, + ubuntu_arm64: false, + macos: true, + windows: true, + }; + public static isValidRunner( runnerName: string, runnerVersion: string, @@ -59,7 +70,11 @@ export class GithubRunnersDatasource extends Datasource { ({ version }) => version === runnerVersion, ); - return runnerVersion === 'latest' || versionExists; + return ( + (runnerVersion === 'latest' && + GithubRunnersDatasource.supportsLatest[runnerName]) || + versionExists + ); } override readonly defaultVersioning = dockerVersioningId; diff --git a/lib/modules/manager/github-actions/extract.spec.ts b/lib/modules/manager/github-actions/extract.spec.ts index f3d499e10adda7..962ef4c861161a 100644 --- a/lib/modules/manager/github-actions/extract.spec.ts +++ b/lib/modules/manager/github-actions/extract.spec.ts @@ -30,6 +30,10 @@ jobs: labels: ubuntu-20.04-16core test10: runs-on: abc-123 + test11: + runs-on: ubuntu-22.04-arm + test12: + runs-on: ubuntu-latest-arm `; describe('modules/manager/github-actions/extract', () => { @@ -569,10 +573,18 @@ describe('modules/manager/github-actions/extract', () => { datasource: 'github-runners', autoReplaceStringTemplate: '{{depName}}-{{newValue}}', }, + { + depName: 'ubuntu_arm64', + currentValue: '22.04', + replaceString: 'ubuntu-22.04-arm', + depType: 'github-runner', + datasource: 'github-runners', + autoReplaceStringTemplate: 'ubuntu-{{newValue}}-arm', + }, ]); expect( res?.deps.filter((d) => d.datasource === 'github-runners'), - ).toHaveLength(7); + ).toHaveLength(8); }); }); }); diff --git a/lib/modules/manager/github-actions/extract.ts b/lib/modules/manager/github-actions/extract.ts index b797f8fc1e9f2c..e4299d4f471865 100644 --- a/lib/modules/manager/github-actions/extract.ts +++ b/lib/modules/manager/github-actions/extract.ts @@ -157,7 +157,17 @@ function extractRunner(runner: string): PackageDependency | null { return null; } - const { depName, currentValue } = runnerVersionGroups; + let { depName, currentValue } = runnerVersionGroups; + let replaceString = `${depName}-${currentValue}`; + let autoReplaceStringTemplate = '{{depName}}-{{newValue}}'; + + const armVersionMatch = currentValue.match(/^(?\d+\.\d+)-arm$/); + if (depName === 'ubuntu' && armVersionMatch) { + depName = 'ubuntu_arm64'; + currentValue = armVersionMatch.groups?.version ?? currentValue; + replaceString = `ubuntu-${currentValue}-arm`; + autoReplaceStringTemplate = 'ubuntu-{{newValue}}-arm'; + } if (!GithubRunnersDatasource.isValidRunner(depName, currentValue)) { return null; @@ -166,10 +176,10 @@ function extractRunner(runner: string): PackageDependency | null { const dependency: PackageDependency = { depName, currentValue, - replaceString: `${depName}-${currentValue}`, + replaceString, depType: 'github-runner', datasource: GithubRunnersDatasource.id, - autoReplaceStringTemplate: '{{depName}}-{{newValue}}', + autoReplaceStringTemplate, }; if (!dockerVersioning.api.isValid(currentValue)) { From 4d1fa5c3541abc6e255d23dd455c5fc5a3e3e3c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Fri, 17 Jan 2025 17:27:21 -0600 Subject: [PATCH 2/4] Update documentation --- lib/modules/datasource/github-runners/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/datasource/github-runners/readme.md b/lib/modules/datasource/github-runners/readme.md index 4c3d92bb3249e9..9ba14509001956 100644 --- a/lib/modules/datasource/github-runners/readme.md +++ b/lib/modules/datasource/github-runners/readme.md @@ -1,7 +1,7 @@ This datasource returns a list of all runners that are hosted by GitHub. The datasource is based on [GitHub's `runner-images` repository](https://github.com/actions/runner-images). -Examples: `windows-2022` / `ubuntu-24.04` / `macos-14` +Examples: `windows-2022` / `ubuntu-24.04` / `macos-14` / `ubuntu-24.04-arm` ## Maintenance From 226d36b736cc329d7de8a773afbef49eb0932433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Fri, 17 Jan 2025 17:54:38 -0600 Subject: [PATCH 3/4] Mark them as stable --- lib/modules/datasource/github-runners/index.spec.ts | 5 +---- lib/modules/datasource/github-runners/index.ts | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/modules/datasource/github-runners/index.spec.ts b/lib/modules/datasource/github-runners/index.spec.ts index 6adb97585dbd86..e0b52b35932e78 100644 --- a/lib/modules/datasource/github-runners/index.spec.ts +++ b/lib/modules/datasource/github-runners/index.spec.ts @@ -28,10 +28,7 @@ describe('modules/datasource/github-runners/index', () => { }); expect(res).toMatchObject({ - releases: [ - { version: '22.04', isStable: false }, - { version: '24.04', isStable: false }, - ], + releases: [{ version: '22.04' }, { version: '24.04' }], sourceUrl: 'https://github.com/actions/runner-images', }); }); diff --git a/lib/modules/datasource/github-runners/index.ts b/lib/modules/datasource/github-runners/index.ts index 3265e1ec0cb948..2c2df833cf8aa7 100644 --- a/lib/modules/datasource/github-runners/index.ts +++ b/lib/modules/datasource/github-runners/index.ts @@ -23,10 +23,7 @@ export class GithubRunnersDatasource extends Datasource { { version: '18.04', isDeprecated: true }, { version: '16.04', isDeprecated: true }, ], - ubuntu_arm64: [ - { version: '24.04', isStable: false }, - { version: '22.04', isStable: false }, - ], + ubuntu_arm64: [{ version: '24.04' }, { version: '22.04' }], macos: [ { version: '15', isStable: false }, { version: '15-large', isStable: false }, From e3dbdd861ee74d9e92fbc07b02cb2271f281dc31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Fri, 17 Jan 2025 17:55:29 -0600 Subject: [PATCH 4/4] Consider latest-arm value, ignore it later --- lib/modules/manager/github-actions/extract.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/github-actions/extract.ts b/lib/modules/manager/github-actions/extract.ts index e4299d4f471865..be8528b6629461 100644 --- a/lib/modules/manager/github-actions/extract.ts +++ b/lib/modules/manager/github-actions/extract.ts @@ -161,7 +161,9 @@ function extractRunner(runner: string): PackageDependency | null { let replaceString = `${depName}-${currentValue}`; let autoReplaceStringTemplate = '{{depName}}-{{newValue}}'; - const armVersionMatch = currentValue.match(/^(?\d+\.\d+)-arm$/); + const armVersionMatch = currentValue.match( + /^(?[\\.A-Za-z0-9]+)-arm$/, + ); if (depName === 'ubuntu' && armVersionMatch) { depName = 'ubuntu_arm64'; currentValue = armVersionMatch.groups?.version ?? currentValue;