From e34fb3e2131c81f048d476f6ddcd0e5bc7f2baed Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 11 Nov 2026 13:23:21 +0900 Subject: [PATCH 1/8] Add mswin engine with builds from cache.ruby-lang.org The ruby-loco mswin build has not been updated since 2026-10-14. The mswin engine uses the builds published at cache.ruby-lang.org instead. `mswin` stays the master build as `mswin-head`, which picks the latest one from index.json at runtime. Only 3.4 and later are provided, because the packages of 3.3 and earlier reject the MSVC version of the runners or ship bin stubs that do not run from bash. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/test.yml | 2 +- README.md | 11 +++- common.js | 15 +++-- dist/index.js | 91 ++++++++++++++++++++++----- generate-test-matrix.rb | 10 ++- generate-windows-versions.rb | 72 +++++++++++++++++---- index.js | 5 +- rubygems.js | 2 +- windows-mswin-toolchain-versions.json | 22 +++++++ windows-mswin-versions.json | 22 +++++++ windows-toolchain-versions.json | 3 - windows-versions.json | 3 - windows.js | 48 +++++++++++--- 13 files changed, 254 insertions(+), 52 deletions(-) create mode 100644 windows-mswin-toolchain-versions.json create mode 100644 windows-mswin-versions.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7821f2723..1e0586467 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -117,7 +117,7 @@ jobs: shell: bash run: which -a bundle # https://github.com/ruby/setup-ruby/issues/658 - if: "matrix.ruby != 'mingw' && matrix.ruby != 'mswin' && matrix.ruby != 'ucrt'" + if: "matrix.ruby != 'mingw' && !startsWith(matrix.ruby, 'mswin') && matrix.ruby != 'ucrt'" - name: which rake run: which -a rake if: runner.os != 'Windows' diff --git a/README.md b/README.md index 1c8c319df..d7180f449 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby: | Interpreter | Versions | | ----------- | -------- | -| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 4.1.0-preview1, head, debug, mingw, mswin, ucrt | +| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 4.1.0-preview1, head, debug, mingw, ucrt | +| `mswin` | 3.4.11 - 4.0.9, head (Windows only) | | `jruby` | 9.1.17.0 - 10.1.3.0, head | | `truffleruby` | 19.3.0 - 40.0.0, head | | `truffleruby+graalvm` | 21.2.0 - 40.0.0, head | @@ -29,7 +30,10 @@ Native extensions are automatically compiled with AddressSanitizer when using `r `ruby-asan` and `asan-release` are currently only available on `ubuntu-24.04` and `ubuntu-26.04`. Regarding Windows ruby master builds, `mingw` is a MSYS2/MinGW build, `head` & `ucrt` are MSYS2/UCRT64 -builds, and `mswin` is a MSVC/VS 2022 build. +builds. + +`mswin` is CRuby built with MSVC, available on Windows only. `mswin-4.0` resolves to the latest 4.0.x release, and `mswin` and `mswin-head` to the latest master build. +The list of available versions is in [windows-mswin-versions.json](windows-mswin-versions.json). Preview and RC versions of Ruby might be available too on Ubuntu and macOS (not on Windows). However, it is recommended to test against `ruby-head` rather than previews, @@ -62,7 +66,8 @@ only has builds of CRuby 3.2 and newer, as older CRuby versions do not compile o The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder) and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2). -The `mingw`, `ucrt` and `mswin` builds are generated by [ruby-loco](https://github.com/MSP-Greg/ruby-loco). +The `mingw` and `ucrt` builds are generated by [ruby-loco](https://github.com/MSP-Greg/ruby-loco). +The `mswin` builds are published at [cache.ruby-lang.org](https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/) and maintained by [hsbt](https://github.com/hsbt). `ruby-head` is generated by [ruby-dev-builder](https://github.com/ruby/ruby-dev-builder), `jruby-head` is generated by [jruby-dev-builder](https://github.com/ruby/jruby-dev-builder), `truffleruby-head` and `truffleruby+graalvm-head` are generated by [truffleruby-dev-builder](https://github.com/ruby/truffleruby-dev-builder). diff --git a/common.js b/common.js index 79ad6266f..1a1cfe94e 100644 --- a/common.js +++ b/common.js @@ -70,7 +70,12 @@ export async function time(name, block) { export function isHeadVersion(rubyVersion) { // asan-release counts as "head" because the version cannot be selected -- you can only get whatever's latest - return ['head', 'debug', 'mingw', 'mswin', 'ucrt', 'asan', 'asan-release'].includes(rubyVersion) + return ['head', 'debug', 'mingw', 'ucrt', 'asan', 'asan-release'].includes(rubyVersion) +} + +// mswin is CRuby built with MSVC, so it follows the same version-dependent defaults +export function isCRuby(engine) { + return engine === 'ruby' || engine === 'mswin' } export function isStableVersion(engine, rubyVersion) { @@ -86,7 +91,7 @@ export function hasBundlerDefaultGem(engine, rubyVersion) { } export function isBundler1Default(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 2.6 && floatVersion(rubyVersion) < 2.7 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) < 21.0 @@ -98,7 +103,7 @@ export function isBundler1Default(engine, rubyVersion) { } export function isBundler2PlusDefault(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 2.7 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) >= 21.0 @@ -110,7 +115,7 @@ export function isBundler2PlusDefault(engine, rubyVersion) { } export function isBundler2dot2PlusDefault(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 3.0 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) >= 22.0 @@ -130,7 +135,7 @@ export function isBundler4PlusDefault(engine, rubyVersion) { export function targetRubyVersion(engine, rubyVersion) { const version = floatVersion(rubyVersion) - if (engine === 'ruby') { + if (isCRuby(engine)) { return version } else if (engine === 'jruby') { if (version === 9.1) { diff --git a/dist/index.js b/dist/index.js index 7585bd54f..b22abda14 100644 --- a/dist/index.js +++ b/dist/index.js @@ -316,6 +316,7 @@ __nccwpck_require__.r(__webpack_exports__); /* harmony export */ isBundler2PlusDefault: () => (/* binding */ isBundler2PlusDefault), /* harmony export */ isBundler2dot2PlusDefault: () => (/* binding */ isBundler2dot2PlusDefault), /* harmony export */ isBundler4PlusDefault: () => (/* binding */ isBundler4PlusDefault), +/* harmony export */ isCRuby: () => (/* binding */ isCRuby), /* harmony export */ isExactCacheKeyMatch: () => (/* binding */ isExactCacheKeyMatch), /* harmony export */ isHeadVersion: () => (/* binding */ isHeadVersion), /* harmony export */ isSelfHostedRunner: () => (/* binding */ isSelfHostedRunner), @@ -405,7 +406,12 @@ async function time(name, block) { function isHeadVersion(rubyVersion) { // asan-release counts as "head" because the version cannot be selected -- you can only get whatever's latest - return ['head', 'debug', 'mingw', 'mswin', 'ucrt', 'asan', 'asan-release'].includes(rubyVersion) + return ['head', 'debug', 'mingw', 'ucrt', 'asan', 'asan-release'].includes(rubyVersion) +} + +// mswin is CRuby built with MSVC, so it follows the same version-dependent defaults +function isCRuby(engine) { + return engine === 'ruby' || engine === 'mswin' } function isStableVersion(engine, rubyVersion) { @@ -421,7 +427,7 @@ function hasBundlerDefaultGem(engine, rubyVersion) { } function isBundler1Default(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 2.6 && floatVersion(rubyVersion) < 2.7 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) < 21.0 @@ -433,7 +439,7 @@ function isBundler1Default(engine, rubyVersion) { } function isBundler2PlusDefault(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 2.7 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) >= 21.0 @@ -445,7 +451,7 @@ function isBundler2PlusDefault(engine, rubyVersion) { } function isBundler2dot2PlusDefault(engine, rubyVersion) { - if (engine === 'ruby') { + if (isCRuby(engine)) { return floatVersion(rubyVersion) >= 3.0 } else if (engine.startsWith('truffleruby')) { return floatVersion(rubyVersion) >= 22.0 @@ -465,7 +471,7 @@ function isBundler4PlusDefault(engine, rubyVersion) { function targetRubyVersion(engine, rubyVersion) { const version = floatVersion(rubyVersion) - if (engine === 'ruby') { + if (isCRuby(engine)) { return version } else if (engine === 'jruby') { if (version === 9.1) { @@ -46052,7 +46058,7 @@ async function compareGemVersion(a, b, rubyPrefix) { // rubygems-update. See https://github.com/ruby/setup-ruby/pull/551 and // https://github.com/rubygems/rubygems/issues/7329 async function rubygemsLatest(gem, platform, engine, rubyVersion) { - if (engine === 'ruby') { + if (common.isCRuby(engine)) { const floatVersion = common.floatVersion(rubyVersion) if (common.isHeadVersion(rubyVersion)) { console.log('Ruby master builds use included RubyGems') @@ -46103,22 +46109,29 @@ const exec = __nccwpck_require__(95236) const common = __nccwpck_require__(97211) const rubyInstallerVersions = __nccwpck_require__(18287) const toolchainVersions = __nccwpck_require__(24977) +const mswinVersions = __nccwpck_require__(22158) +const mswinToolchainVersions = __nccwpck_require__(82768) function getAvailableVersions(_platform, engine) { - if (engine === 'ruby') { - return Object.keys(rubyInstallerVersions).filter(version => os.arch() in rubyInstallerVersions[version]) + const versions = { ruby: rubyInstallerVersions, mswin: mswinVersions }[engine] + if (versions) { + return Object.keys(versions).filter(version => os.arch() in versions[version]) } else { return undefined } } async function install(platform, engine, version) { - const url = rubyInstallerVersions[version][os.arch()] + let url = (engine === 'mswin' ? mswinVersions : rubyInstallerVersions)[version][os.arch()] + if (engine === 'mswin' && version === 'head') { + url = await getLatestMswinHeadURL(url) + } - if (!url.endsWith('.7z')) { - throw new Error(`URL should end in .7z: ${url}`) + const ext = path.posix.extname(url) + if (ext !== '.7z' && ext !== '.zip') { + throw new Error(`URL should end in .7z or .zip: ${url}`) } - const base = path.posix.basename(url, '.7z') + const base = path.posix.basename(url, ext) let rubyPrefix, inToolCache if (common.shouldUseToolCache(engine, version)) { @@ -46143,7 +46156,7 @@ async function install(platform, engine, version) { return rubyPrefix } - const toolchainUrl = toolchainVersions[version][os.arch()] + const toolchainUrl = (engine === 'mswin' ? mswinToolchainVersions : toolchainVersions)[version][os.arch()] // Examples: // - DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe @@ -46170,6 +46183,33 @@ async function install(platform, engine, version) { return rubyPrefix } +// mswin master builds are published daily under dated names, so pick the latest one from the index +async function getLatestMswinHeadURL(indexURL) { + // Retry like tc.downloadTool does for the archive, so a transient failure of the index does not fail the job + let response + for (let attempt = 1; attempt <= 3; attempt++) { + try { + response = await fetch(indexURL, { signal: AbortSignal.timeout(30000) }) + if (response.ok) break + } catch (error) { + if (attempt === 3) throw error + } + if (attempt < 3) await new Promise(resolve => setTimeout(resolve, 5000)) + } + if (!response.ok) { + throw new Error(`Failed to fetch ${indexURL}: ${response.status} ${response.statusText}`) + } + + const platform = `${os.arch()}-mswin64_140` + const builds = (await response.json()).builds.filter(build => build.channel === 'dev' && build.platform === platform) + if (builds.length === 0) { + throw new Error(`No mswin head build for ${platform} in ${indexURL}`) + } + + // The index is sorted by name, and the date in the name can differ from the date it was published + return builds.reduce((latest, build) => build.published_at > latest.published_at ? build : latest).url +} + async function downloadAndExtract(engine, version, url, base, rubyPrefix) { const downloadPath = await common.measure('Downloading Ruby', async () => { console.log(url) @@ -88071,11 +88111,27 @@ module.exports = /*#__PURE__*/JSON.parse('{"ruby":["1.9.3-p551","2.0.0-p648","2. /***/ }), +/***/ 82768: +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"3.4.12":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"head":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"}}'); + +/***/ }), + +/***/ 22158: +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.11-x64-mswin64_140.zip"},"3.4.12":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-x64-mswin64_140.zip"},"4.0.7":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.7-x64-mswin64_140.zip"},"4.0.8":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.8-x64-mswin64_140.zip"},"4.0.9":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-arm64-mswin64_140.zip","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-x64-mswin64_140.zip"},"head":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json"}}'); + +/***/ }), + /***/ 24977: /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"2.0.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.1.9":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.2.6":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.1":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.3":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.4.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.2.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.2.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.2.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.12":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.13":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.1":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.2":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.3":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.4":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.5":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.6":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.7":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.8":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.10":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.11":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.12":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.0":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.1":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.2":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.3":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.4":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.5":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.6":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.7":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"head":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"mingw":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64.7z"},"mswin":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"ucrt":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"2.0.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.1.9":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.2.6":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.1":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.3.3":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe"},"2.4.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.4.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.5.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.6.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"2.7.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.0.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.1.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14-openssl@1.1.7z"},"3.2.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.2.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.2.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.2.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.0":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.1":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.2":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.3":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.4":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.5":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.6":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.3.9":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.10":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.12":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.3.13":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.1":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.2":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.3":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"},"3.4.4":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.5":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.6":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.7":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.8":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.10":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.11":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"3.4.12":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.0":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.1":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.2":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.3":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.4":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.5":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.6":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.7":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"4.0.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"head":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"},"mingw":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64.7z"},"ucrt":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"}}'); /***/ }), @@ -88083,7 +88139,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"2.0.0":{"x64":"https://github.com/on /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"2.0.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.0.0-p648/ruby-2.0.0-p648-x64-mingw32.7z"},"2.1.9":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.1.9/ruby-2.1.9-x64-mingw32.7z"},"2.2.6":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.2.6/ruby-2.2.6-x64-mingw32.7z"},"2.3.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.0/ruby-2.3.0-x64-mingw32.7z"},"2.3.1":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.1/ruby-2.3.1-x64-mingw32.7z"},"2.3.3":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.3/ruby-2.3.3-x64-mingw32.7z"},"2.4.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/2.4.1-2/rubyinstaller-2.4.1-2-x64.7z"},"2.4.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.2-2/rubyinstaller-2.4.2-2-x64.7z"},"2.4.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.3-2/rubyinstaller-2.4.3-2-x64.7z"},"2.4.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.4-2/rubyinstaller-2.4.4-2-x64.7z"},"2.4.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.5-1/rubyinstaller-2.4.5-1-x64.7z"},"2.4.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.6-1/rubyinstaller-2.4.6-1-x64.7z"},"2.4.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.7-1/rubyinstaller-2.4.7-1-x64.7z"},"2.4.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.9-1/rubyinstaller-2.4.9-1-x64.7z"},"2.4.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.10-1/rubyinstaller-2.4.10-1-x64.7z"},"2.5.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.0-2/rubyinstaller-2.5.0-2-x64.7z"},"2.5.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.1-2/rubyinstaller-2.5.1-2-x64.7z"},"2.5.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.3-1/rubyinstaller-2.5.3-1-x64.7z"},"2.5.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.5-1/rubyinstaller-2.5.5-1-x64.7z"},"2.5.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.6-1/rubyinstaller-2.5.6-1-x64.7z"},"2.5.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.7-1/rubyinstaller-2.5.7-1-x64.7z"},"2.5.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.8-2/rubyinstaller-2.5.8-2-x64.7z"},"2.5.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.9-1/rubyinstaller-2.5.9-1-x64.7z"},"2.6.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.0-1/rubyinstaller-2.6.0-1-x64.7z"},"2.6.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.1-1/rubyinstaller-2.6.1-1-x64.7z"},"2.6.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.2-1/rubyinstaller-2.6.2-1-x64.7z"},"2.6.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z"},"2.6.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z"},"2.6.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z"},"2.6.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.6-2/rubyinstaller-2.6.6-2-x64.7z"},"2.6.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.7-1/rubyinstaller-2.6.7-1-x64.7z"},"2.6.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.8-1/rubyinstaller-2.6.8-1-x64.7z"},"2.6.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x64.7z"},"2.6.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.10-1/rubyinstaller-2.6.10-1-x64.7z"},"2.7.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z"},"2.7.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.1-1/rubyinstaller-2.7.1-1-x64.7z"},"2.7.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.2-1/rubyinstaller-2.7.2-1-x64.7z"},"2.7.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.3-1/rubyinstaller-2.7.3-1-x64.7z"},"2.7.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.4-1/rubyinstaller-2.7.4-1-x64.7z"},"2.7.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.5-1/rubyinstaller-2.7.5-1-x64.7z"},"2.7.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.6-1/rubyinstaller-2.7.6-1-x64.7z"},"2.7.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.7-1/rubyinstaller-2.7.7-1-x64.7z"},"2.7.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x64.7z"},"3.0.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x64.7z"},"3.0.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.1-1/rubyinstaller-3.0.1-1-x64.7z"},"3.0.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.2-1/rubyinstaller-3.0.2-1-x64.7z"},"3.0.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.3-1/rubyinstaller-3.0.3-1-x64.7z"},"3.0.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.4-1/rubyinstaller-3.0.4-1-x64.7z"},"3.0.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.5-1/rubyinstaller-3.0.5-1-x64.7z"},"3.0.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.6-1/rubyinstaller-3.0.6-1-x64.7z"},"3.0.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.7-1/rubyinstaller-3.0.7-1-x64.7z"},"3.1.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.0-1/rubyinstaller-3.1.0-1-x64.7z"},"3.1.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-3.1.1-1-x64.7z"},"3.1.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.2-1/rubyinstaller-3.1.2-1-x64.7z"},"3.1.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.3-1/rubyinstaller-3.1.3-1-x64.7z"},"3.1.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.4-1/rubyinstaller-3.1.4-1-x64.7z"},"3.1.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.5-1/rubyinstaller-3.1.5-1-x64.7z"},"3.1.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-1-x64.7z"},"3.1.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.7-1/rubyinstaller-3.1.7-1-x64.7z"},"3.2.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.0-1/rubyinstaller-3.2.0-1-x64.7z"},"3.2.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.1-1/rubyinstaller-3.2.1-1-x64.7z"},"3.2.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z"},"3.2.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.3-1/rubyinstaller-3.2.3-1-x64.7z"},"3.2.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.4-1/rubyinstaller-3.2.4-1-x64.7z"},"3.2.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.5-1/rubyinstaller-3.2.5-1-x64.7z"},"3.2.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.6-1/rubyinstaller-3.2.6-1-x64.7z"},"3.2.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.7-1/rubyinstaller-3.2.7-1-x64.7z"},"3.2.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.8-1/rubyinstaller-3.2.8-1-x64.7z"},"3.2.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.9-1/rubyinstaller-3.2.9-1-x64.7z"},"3.2.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.10-1/rubyinstaller-3.2.10-1-x64.7z"},"3.2.11":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.11-1/rubyinstaller-3.2.11-1-x64.7z"},"3.3.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.0-1/rubyinstaller-3.3.0-1-x64.7z"},"3.3.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.1-1/rubyinstaller-3.3.1-1-x64.7z"},"3.3.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.2-1/rubyinstaller-3.3.2-1-x64.7z"},"3.3.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.3-1/rubyinstaller-3.3.3-1-x64.7z"},"3.3.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.4-1/rubyinstaller-3.3.4-1-x64.7z"},"3.3.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.5-1/rubyinstaller-3.3.5-1-x64.7z"},"3.3.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.6-2/rubyinstaller-3.3.6-2-x64.7z"},"3.3.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.7-1/rubyinstaller-3.3.7-1-x64.7z"},"3.3.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.8-1/rubyinstaller-3.3.8-1-x64.7z"},"3.3.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.9-1/rubyinstaller-3.3.9-1-x64.7z"},"3.3.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.10-1/rubyinstaller-3.3.10-1-x64.7z"},"3.3.11":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.11-1/rubyinstaller-3.3.11-1-x64.7z"},"3.3.12":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.12-2/rubyinstaller-3.3.12-2-x64.7z"},"3.3.13":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.13-1/rubyinstaller-3.3.13-1-x64.7z"},"3.4.1":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-x64.7z"},"3.4.2":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.2-1/rubyinstaller-3.4.2-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.2-1/rubyinstaller-3.4.2-1-x64.7z"},"3.4.3":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.3-1/rubyinstaller-3.4.3-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.3-1/rubyinstaller-3.4.3-1-x64.7z"},"3.4.4":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.4-2/rubyinstaller-3.4.4-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.4-2/rubyinstaller-3.4.4-2-x64.7z"},"3.4.5":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-x64.7z"},"3.4.6":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-x64.7z"},"3.4.7":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-x64.7z"},"3.4.8":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.8-1/rubyinstaller-3.4.8-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.8-1/rubyinstaller-3.4.8-1-x64.7z"},"3.4.9":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-x64.7z"},"3.4.10":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.10-1/rubyinstaller-3.4.10-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.10-1/rubyinstaller-3.4.10-1-x64.7z"},"3.4.11":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.11-2/rubyinstaller-3.4.11-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.11-2/rubyinstaller-3.4.11-2-x64.7z"},"3.4.12":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.12-1/rubyinstaller-3.4.12-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.12-1/rubyinstaller-3.4.12-1-x64.7z"},"4.0.0":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.0-1/rubyinstaller-4.0.0-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.0-1/rubyinstaller-4.0.0-1-x64.7z"},"4.0.1":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.1-1/rubyinstaller-4.0.1-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.1-1/rubyinstaller-4.0.1-1-x64.7z"},"4.0.2":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.2-1/rubyinstaller-4.0.2-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.2-1/rubyinstaller-4.0.2-1-x64.7z"},"4.0.3":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.3-1/rubyinstaller-4.0.3-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.3-1/rubyinstaller-4.0.3-1-x64.7z"},"4.0.4":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.4-1/rubyinstaller-4.0.4-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.4-1/rubyinstaller-4.0.4-1-x64.7z"},"4.0.5":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.5-1/rubyinstaller-4.0.5-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.5-1/rubyinstaller-4.0.5-1-x64.7z"},"4.0.6":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.6-1/rubyinstaller-4.0.6-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.6-1/rubyinstaller-4.0.6-1-x64.7z"},"4.0.7":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.7-2/rubyinstaller-4.0.7-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.7-2/rubyinstaller-4.0.7-2-x64.7z"},"4.0.9":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.9-1/rubyinstaller-4.0.9-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.9-1/rubyinstaller-4.0.9-1-x64.7z"},"head":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z"},"mingw":{"x64":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z"},"mswin":{"x64":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z"},"ucrt":{"x64":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"2.0.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.0.0-p648/ruby-2.0.0-p648-x64-mingw32.7z"},"2.1.9":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.1.9/ruby-2.1.9-x64-mingw32.7z"},"2.2.6":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.2.6/ruby-2.2.6-x64-mingw32.7z"},"2.3.0":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.0/ruby-2.3.0-x64-mingw32.7z"},"2.3.1":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.1/ruby-2.3.1-x64-mingw32.7z"},"2.3.3":{"x64":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.3/ruby-2.3.3-x64-mingw32.7z"},"2.4.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/2.4.1-2/rubyinstaller-2.4.1-2-x64.7z"},"2.4.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.2-2/rubyinstaller-2.4.2-2-x64.7z"},"2.4.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.3-2/rubyinstaller-2.4.3-2-x64.7z"},"2.4.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.4-2/rubyinstaller-2.4.4-2-x64.7z"},"2.4.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.5-1/rubyinstaller-2.4.5-1-x64.7z"},"2.4.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.6-1/rubyinstaller-2.4.6-1-x64.7z"},"2.4.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.7-1/rubyinstaller-2.4.7-1-x64.7z"},"2.4.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.9-1/rubyinstaller-2.4.9-1-x64.7z"},"2.4.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.10-1/rubyinstaller-2.4.10-1-x64.7z"},"2.5.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.0-2/rubyinstaller-2.5.0-2-x64.7z"},"2.5.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.1-2/rubyinstaller-2.5.1-2-x64.7z"},"2.5.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.3-1/rubyinstaller-2.5.3-1-x64.7z"},"2.5.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.5-1/rubyinstaller-2.5.5-1-x64.7z"},"2.5.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.6-1/rubyinstaller-2.5.6-1-x64.7z"},"2.5.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.7-1/rubyinstaller-2.5.7-1-x64.7z"},"2.5.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.8-2/rubyinstaller-2.5.8-2-x64.7z"},"2.5.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.9-1/rubyinstaller-2.5.9-1-x64.7z"},"2.6.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.0-1/rubyinstaller-2.6.0-1-x64.7z"},"2.6.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.1-1/rubyinstaller-2.6.1-1-x64.7z"},"2.6.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.2-1/rubyinstaller-2.6.2-1-x64.7z"},"2.6.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z"},"2.6.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z"},"2.6.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z"},"2.6.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.6-2/rubyinstaller-2.6.6-2-x64.7z"},"2.6.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.7-1/rubyinstaller-2.6.7-1-x64.7z"},"2.6.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.8-1/rubyinstaller-2.6.8-1-x64.7z"},"2.6.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x64.7z"},"2.6.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.10-1/rubyinstaller-2.6.10-1-x64.7z"},"2.7.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z"},"2.7.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.1-1/rubyinstaller-2.7.1-1-x64.7z"},"2.7.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.2-1/rubyinstaller-2.7.2-1-x64.7z"},"2.7.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.3-1/rubyinstaller-2.7.3-1-x64.7z"},"2.7.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.4-1/rubyinstaller-2.7.4-1-x64.7z"},"2.7.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.5-1/rubyinstaller-2.7.5-1-x64.7z"},"2.7.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.6-1/rubyinstaller-2.7.6-1-x64.7z"},"2.7.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.7-1/rubyinstaller-2.7.7-1-x64.7z"},"2.7.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x64.7z"},"3.0.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x64.7z"},"3.0.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.1-1/rubyinstaller-3.0.1-1-x64.7z"},"3.0.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.2-1/rubyinstaller-3.0.2-1-x64.7z"},"3.0.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.3-1/rubyinstaller-3.0.3-1-x64.7z"},"3.0.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.4-1/rubyinstaller-3.0.4-1-x64.7z"},"3.0.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.5-1/rubyinstaller-3.0.5-1-x64.7z"},"3.0.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.6-1/rubyinstaller-3.0.6-1-x64.7z"},"3.0.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.7-1/rubyinstaller-3.0.7-1-x64.7z"},"3.1.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.0-1/rubyinstaller-3.1.0-1-x64.7z"},"3.1.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-3.1.1-1-x64.7z"},"3.1.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.2-1/rubyinstaller-3.1.2-1-x64.7z"},"3.1.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.3-1/rubyinstaller-3.1.3-1-x64.7z"},"3.1.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.4-1/rubyinstaller-3.1.4-1-x64.7z"},"3.1.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.5-1/rubyinstaller-3.1.5-1-x64.7z"},"3.1.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-1-x64.7z"},"3.1.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.7-1/rubyinstaller-3.1.7-1-x64.7z"},"3.2.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.0-1/rubyinstaller-3.2.0-1-x64.7z"},"3.2.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.1-1/rubyinstaller-3.2.1-1-x64.7z"},"3.2.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z"},"3.2.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.3-1/rubyinstaller-3.2.3-1-x64.7z"},"3.2.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.4-1/rubyinstaller-3.2.4-1-x64.7z"},"3.2.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.5-1/rubyinstaller-3.2.5-1-x64.7z"},"3.2.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.6-1/rubyinstaller-3.2.6-1-x64.7z"},"3.2.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.7-1/rubyinstaller-3.2.7-1-x64.7z"},"3.2.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.8-1/rubyinstaller-3.2.8-1-x64.7z"},"3.2.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.9-1/rubyinstaller-3.2.9-1-x64.7z"},"3.2.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.10-1/rubyinstaller-3.2.10-1-x64.7z"},"3.2.11":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.11-1/rubyinstaller-3.2.11-1-x64.7z"},"3.3.0":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.0-1/rubyinstaller-3.3.0-1-x64.7z"},"3.3.1":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.1-1/rubyinstaller-3.3.1-1-x64.7z"},"3.3.2":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.2-1/rubyinstaller-3.3.2-1-x64.7z"},"3.3.3":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.3-1/rubyinstaller-3.3.3-1-x64.7z"},"3.3.4":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.4-1/rubyinstaller-3.3.4-1-x64.7z"},"3.3.5":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.5-1/rubyinstaller-3.3.5-1-x64.7z"},"3.3.6":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.6-2/rubyinstaller-3.3.6-2-x64.7z"},"3.3.7":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.7-1/rubyinstaller-3.3.7-1-x64.7z"},"3.3.8":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.8-1/rubyinstaller-3.3.8-1-x64.7z"},"3.3.9":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.9-1/rubyinstaller-3.3.9-1-x64.7z"},"3.3.10":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.10-1/rubyinstaller-3.3.10-1-x64.7z"},"3.3.11":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.11-1/rubyinstaller-3.3.11-1-x64.7z"},"3.3.12":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.12-2/rubyinstaller-3.3.12-2-x64.7z"},"3.3.13":{"x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.13-1/rubyinstaller-3.3.13-1-x64.7z"},"3.4.1":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-x64.7z"},"3.4.2":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.2-1/rubyinstaller-3.4.2-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.2-1/rubyinstaller-3.4.2-1-x64.7z"},"3.4.3":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.3-1/rubyinstaller-3.4.3-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.3-1/rubyinstaller-3.4.3-1-x64.7z"},"3.4.4":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.4-2/rubyinstaller-3.4.4-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.4-2/rubyinstaller-3.4.4-2-x64.7z"},"3.4.5":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-x64.7z"},"3.4.6":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-x64.7z"},"3.4.7":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-x64.7z"},"3.4.8":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.8-1/rubyinstaller-3.4.8-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.8-1/rubyinstaller-3.4.8-1-x64.7z"},"3.4.9":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.9-1/rubyinstaller-3.4.9-1-x64.7z"},"3.4.10":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.10-1/rubyinstaller-3.4.10-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.10-1/rubyinstaller-3.4.10-1-x64.7z"},"3.4.11":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.11-2/rubyinstaller-3.4.11-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.11-2/rubyinstaller-3.4.11-2-x64.7z"},"3.4.12":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.12-1/rubyinstaller-3.4.12-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.12-1/rubyinstaller-3.4.12-1-x64.7z"},"4.0.0":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.0-1/rubyinstaller-4.0.0-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.0-1/rubyinstaller-4.0.0-1-x64.7z"},"4.0.1":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.1-1/rubyinstaller-4.0.1-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.1-1/rubyinstaller-4.0.1-1-x64.7z"},"4.0.2":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.2-1/rubyinstaller-4.0.2-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.2-1/rubyinstaller-4.0.2-1-x64.7z"},"4.0.3":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.3-1/rubyinstaller-4.0.3-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.3-1/rubyinstaller-4.0.3-1-x64.7z"},"4.0.4":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.4-1/rubyinstaller-4.0.4-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.4-1/rubyinstaller-4.0.4-1-x64.7z"},"4.0.5":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.5-1/rubyinstaller-4.0.5-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.5-1/rubyinstaller-4.0.5-1-x64.7z"},"4.0.6":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.6-1/rubyinstaller-4.0.6-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.6-1/rubyinstaller-4.0.6-1-x64.7z"},"4.0.7":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.7-2/rubyinstaller-4.0.7-2-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.7-2/rubyinstaller-4.0.7-2-x64.7z"},"4.0.9":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.9-1/rubyinstaller-4.0.9-1-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-4.0.9-1/rubyinstaller-4.0.9-1-x64.7z"},"head":{"arm64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-arm.7z","x64":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z"},"mingw":{"x64":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z"},"ucrt":{"x64":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z"}}'); /***/ }) @@ -88218,7 +88274,7 @@ async function setupRuby(options = {}) { const [engine, parsedVersion] = parseRubyEngineAndVersion(inputs['ruby-version']) let installer - if (platform.startsWith('windows-') && engine === 'ruby' && !common.isSelfHostedRunner()) { + if (platform.startsWith('windows-') && common.isCRuby(engine) && !common.isSelfHostedRunner()) { installer = __nccwpck_require__(26373) } else { installer = __nccwpck_require__(64572) @@ -88304,6 +88360,9 @@ function parseRubyEngineAndVersion(rubyVersion) { if (/^(\d+)/.test(rubyVersion) || common.isHeadVersion(rubyVersion)) { // X.Y.Z => ruby-X.Y.Z engine = 'ruby' version = rubyVersion + } else if (rubyVersion === 'mswin') { // mswin has always been the master build + engine = 'mswin' + version = 'head' } else if (!rubyVersion.includes('-')) { // myruby -> myruby-stableVersion engine = rubyVersion version = '' // Let the logic in validateRubyEngineAndVersion() find the version diff --git a/generate-test-matrix.rb b/generate-test-matrix.rb index e9e792cc1..f406c6fa2 100644 --- a/generate-test-matrix.rb +++ b/generate-test-matrix.rb @@ -45,6 +45,7 @@ def unique_versions(versions, segment_count, *symbolic) # Versions ruby_builder_versions = JSON.load(File.read('ruby-builder-versions.json')) windows_versions = JSON.load(File.read('windows-versions.json')) +windows_mswin_versions = JSON.load(File.read('windows-mswin-versions.json')) # ruby: each minor release + head ruby_versions = unique_versions(ruby_builder_versions['ruby'], 2, 'head') @@ -59,8 +60,15 @@ def unique_versions(versions, segment_count, *symbolic) truffleruby_versions = %w[truffleruby truffleruby-head truffleruby+graalvm truffleruby+graalvm-head] matrix += (macos_arm64_runners + ubuntu_runners).product(truffleruby_versions) +# mswin: each minor release + head, for each arch that has builds +{ 'x64' => windows_x64_runners, 'arm64' => windows_arm64_runners }.each do |arch, arch_runners| + mswin_versions = windows_mswin_versions.select { |_, archs| archs.key?(arch) }.keys + matrix += arch_runners.product(unique_versions(mswin_versions, 2, 'head').map { |version| "mswin-#{version}" }) +end +matrix += windows_x64_runners.product(%w[mswin]) + # ruby-loco: head -ruby_loco_versions = %w[mingw mswin ucrt] +ruby_loco_versions = %w[mingw ucrt] matrix += windows_x64_runners.product(ruby_loco_versions) # asan: latest release + head diff --git a/generate-windows-versions.rb b/generate-windows-versions.rb index a7c21c3fe..f0d56da24 100644 --- a/generate-windows-versions.rb +++ b/generate-windows-versions.rb @@ -12,6 +12,11 @@ %r{\A#{Regexp.escape 'https://github.com/MSP-Greg/ruby-loco/releases/download'}/\w[\w.-]*/\w[\w.-]*\z} ].freeze +MSWIN_VERSIONS_URLS_REGEXPS = [ + %r{\A#{Regexp.escape 'https://cache.ruby-lang.org/pub/ruby/binaries/mswin64'}/\w[\w.-]*\.zip\z}, + %r{\A#{Regexp.escape 'https://cache.ruby-lang.org/pub/ruby/binaries/index.json'}\z} +].freeze + WINDOWS_TOOLCHAIN_VERSIONS_URLS_REGEXPS = [ %r{\A#{Regexp.escape 'https://github.com/oneclick/rubyinstaller/releases/download/devkit-4.7.2/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe'}\z}, %r{\A#{Regexp.escape 'https://github.com/ruby/setup-msys2-gcc/releases/download'}/\w[\w.-]*/\w[\w@.-]*\z}, @@ -66,9 +71,6 @@ def validate(versions, allowed_urls_regexps) versions['mingw'] = { 'x64' => 'https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z' } -versions['mswin'] = { - 'x64' => 'https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z' -} versions['ucrt'] = { 'x64' => 'https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z' } @@ -79,6 +81,14 @@ def validate(versions, allowed_urls_regexps) base_url = 'https://github.com/ruby/setup-msys2-gcc/releases/latest/download/windows-toolchain.json' windows_toolchain = JSON.parse(URI.open(base_url, &:read), symbolize_names: true) +find_toolchains = -> platform, version { + windows_toolchain.select do |pkg| + pkg[:platform] == platform && pkg[:required_ruby_version].any? do |requirement| + Gem::Requirement.new(requirement).satisfied_by?(version) + end + end +} + versions.each do |raw_version, archs| version = Gem::Version.correct?(raw_version) ? Gem::Version.new(raw_version) : head_version @@ -91,8 +101,6 @@ def validate(versions, allowed_urls_regexps) "#{arch}-mingw-ucrt" when 'mingw' "#{arch}-mingw32" - when 'mswin' - "#{arch}-mswin64" else if version >= Gem::Version.new('3.1.0.dev') "#{arch}-mingw-ucrt" @@ -101,12 +109,7 @@ def validate(versions, allowed_urls_regexps) end end - toolchain = - windows_toolchain.select do |pkg| - pkg[:platform] == platform && pkg[:required_ruby_version].any? do |requirement| - Gem::Requirement.new(requirement).satisfied_by?(version) - end - end + toolchain = find_toolchains.(platform, version) unless toolchain.one? raise "#{toolchain.empty? ? 'no' : 'multiple'} toolchains found for #{raw_version} #{raw_arch}: #{toolchain}" @@ -118,3 +121,50 @@ def validate(versions, allowed_urls_regexps) validate(versions, WINDOWS_TOOLCHAIN_VERSIONS_URLS_REGEXPS) File.binwrite 'windows-toolchain-versions.json', "#{JSON.pretty_generate(versions)}\n" + +mswin_index_url = 'https://cache.ruby-lang.org/pub/ruby/binaries/index.json' +mswin_builds = JSON.parse(URI.open(mswin_index_url, &:read), symbolize_names: true)[:builds].select { |build| + build[:platform].end_with?('-mswin64_140') +} +mswin_arch = -> build { build[:platform].delete_suffix('-mswin64_140') } + +release_builds = mswin_builds.select { |build| + build[:channel] == 'release' && Gem::Version.new(build[:version]) >= Gem::Version.new('3.4') +} +dev_builds = mswin_builds.select { |build| build[:channel] == 'dev' } + +mswin_versions = release_builds.group_by { |build| + build[:version] +}.sort_by { |version, _| + Gem::Version.new(version) +}.to_h { |version, builds| + [version, builds.sort_by(&mswin_arch).to_h { |build| [mswin_arch.(build), build[:url]] }] +} + +# The latest master build is picked from the index at runtime, see getLatestMswinHeadURL in windows.js +mswin_versions['head'] = dev_builds.map(&mswin_arch).uniq.sort.to_h { |arch| [arch, mswin_index_url] } + +mswin_toolchain_versions = mswin_versions.to_h do |raw_version, archs| + version = raw_version == 'head' ? head_version : Gem::Version.new(raw_version) + + toolchains = archs.filter_map do |raw_arch, _| + arch = raw_arch == 'arm64' ? 'aarch64' : raw_arch + toolchain = find_toolchains.("#{arch}-mswin64", version) + + raise "multiple toolchains found for mswin-#{raw_version} #{raw_arch}: #{toolchain}" if toolchain.size > 1 + + # vcpkg packages for arm64 only exist for newer Rubies, skip builds that cannot get a toolchain + [raw_arch, URI.join(base_url, toolchain.first[:href]).to_s] if toolchain.one? + end + [raw_version, toolchains.to_h] +end + +mswin_versions.each do |raw_version, archs| + archs.select! { |raw_arch, _| mswin_toolchain_versions[raw_version].key?(raw_arch) } +end + +validate(mswin_versions, MSWIN_VERSIONS_URLS_REGEXPS) +File.binwrite 'windows-mswin-versions.json', "#{JSON.pretty_generate(mswin_versions)}\n" + +validate(mswin_toolchain_versions, WINDOWS_TOOLCHAIN_VERSIONS_URLS_REGEXPS) +File.binwrite 'windows-mswin-toolchain-versions.json', "#{JSON.pretty_generate(mswin_toolchain_versions)}\n" diff --git a/index.js b/index.js index 5d08a5863..3897877e3 100644 --- a/index.js +++ b/index.js @@ -54,7 +54,7 @@ export async function setupRuby(options = {}) { const [engine, parsedVersion] = parseRubyEngineAndVersion(inputs['ruby-version']) let installer - if (platform.startsWith('windows-') && engine === 'ruby' && !common.isSelfHostedRunner()) { + if (platform.startsWith('windows-') && common.isCRuby(engine) && !common.isSelfHostedRunner()) { installer = require('./windows') } else { installer = require('./ruby-builder') @@ -140,6 +140,9 @@ function parseRubyEngineAndVersion(rubyVersion) { if (/^(\d+)/.test(rubyVersion) || common.isHeadVersion(rubyVersion)) { // X.Y.Z => ruby-X.Y.Z engine = 'ruby' version = rubyVersion + } else if (rubyVersion === 'mswin') { // mswin has always been the master build + engine = 'mswin' + version = 'head' } else if (!rubyVersion.includes('-')) { // myruby -> myruby-stableVersion engine = rubyVersion version = '' // Let the logic in validateRubyEngineAndVersion() find the version diff --git a/rubygems.js b/rubygems.js index 7d65c54e1..83b560653 100644 --- a/rubygems.js +++ b/rubygems.js @@ -36,7 +36,7 @@ async function compareGemVersion(a, b, rubyPrefix) { // rubygems-update. See https://github.com/ruby/setup-ruby/pull/551 and // https://github.com/rubygems/rubygems/issues/7329 async function rubygemsLatest(gem, platform, engine, rubyVersion) { - if (engine === 'ruby') { + if (common.isCRuby(engine)) { const floatVersion = common.floatVersion(rubyVersion) if (common.isHeadVersion(rubyVersion)) { console.log('Ruby master builds use included RubyGems') diff --git a/windows-mswin-toolchain-versions.json b/windows-mswin-toolchain-versions.json new file mode 100644 index 000000000..a9b451874 --- /dev/null +++ b/windows-mswin-toolchain-versions.json @@ -0,0 +1,22 @@ +{ + "3.4.11": { + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + }, + "3.4.12": { + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + }, + "4.0.7": { + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + }, + "4.0.8": { + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + }, + "4.0.9": { + "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z", + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + }, + "head": { + "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z", + "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" + } +} diff --git a/windows-mswin-versions.json b/windows-mswin-versions.json new file mode 100644 index 000000000..047016086 --- /dev/null +++ b/windows-mswin-versions.json @@ -0,0 +1,22 @@ +{ + "3.4.11": { + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.11-x64-mswin64_140.zip" + }, + "3.4.12": { + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-x64-mswin64_140.zip" + }, + "4.0.7": { + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.7-x64-mswin64_140.zip" + }, + "4.0.8": { + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.8-x64-mswin64_140.zip" + }, + "4.0.9": { + "arm64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-arm64-mswin64_140.zip", + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-x64-mswin64_140.zip" + }, + "head": { + "arm64": "https://cache.ruby-lang.org/pub/ruby/binaries/index.json", + "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/index.json" + } +} diff --git a/windows-toolchain-versions.json b/windows-toolchain-versions.json index 39a21bc2d..803ddf4e1 100644 --- a/windows-toolchain-versions.json +++ b/windows-toolchain-versions.json @@ -345,9 +345,6 @@ "mingw": { "x64": "https://github.com/ruby/setup-msys2-gcc/releases/download/v20261024.010459/msys2-mingw64.7z" }, - "mswin": { - "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" - }, "ucrt": { "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z" } diff --git a/windows-versions.json b/windows-versions.json index afc2d36e7..ecae7c959 100644 --- a/windows-versions.json +++ b/windows-versions.json @@ -345,9 +345,6 @@ "mingw": { "x64": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z" }, - "mswin": { - "x64": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z" - }, "ucrt": { "x64": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z" } diff --git a/windows.js b/windows.js index 9bc195952..71e03d4ea 100644 --- a/windows.js +++ b/windows.js @@ -10,22 +10,29 @@ const exec = require('@actions/exec') const common = require('./common') const rubyInstallerVersions = require('./windows-versions.json') const toolchainVersions = require('./windows-toolchain-versions.json') +const mswinVersions = require('./windows-mswin-versions.json') +const mswinToolchainVersions = require('./windows-mswin-toolchain-versions.json') export function getAvailableVersions(_platform, engine) { - if (engine === 'ruby') { - return Object.keys(rubyInstallerVersions).filter(version => os.arch() in rubyInstallerVersions[version]) + const versions = { ruby: rubyInstallerVersions, mswin: mswinVersions }[engine] + if (versions) { + return Object.keys(versions).filter(version => os.arch() in versions[version]) } else { return undefined } } export async function install(platform, engine, version) { - const url = rubyInstallerVersions[version][os.arch()] + let url = (engine === 'mswin' ? mswinVersions : rubyInstallerVersions)[version][os.arch()] + if (engine === 'mswin' && version === 'head') { + url = await getLatestMswinHeadURL(url) + } - if (!url.endsWith('.7z')) { - throw new Error(`URL should end in .7z: ${url}`) + const ext = path.posix.extname(url) + if (ext !== '.7z' && ext !== '.zip') { + throw new Error(`URL should end in .7z or .zip: ${url}`) } - const base = path.posix.basename(url, '.7z') + const base = path.posix.basename(url, ext) let rubyPrefix, inToolCache if (common.shouldUseToolCache(engine, version)) { @@ -50,7 +57,7 @@ export async function install(platform, engine, version) { return rubyPrefix } - const toolchainUrl = toolchainVersions[version][os.arch()] + const toolchainUrl = (engine === 'mswin' ? mswinToolchainVersions : toolchainVersions)[version][os.arch()] // Examples: // - DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe @@ -77,6 +84,33 @@ export async function install(platform, engine, version) { return rubyPrefix } +// mswin master builds are published daily under dated names, so pick the latest one from the index +async function getLatestMswinHeadURL(indexURL) { + // Retry like tc.downloadTool does for the archive, so a transient failure of the index does not fail the job + let response + for (let attempt = 1; attempt <= 3; attempt++) { + try { + response = await fetch(indexURL, { signal: AbortSignal.timeout(30000) }) + if (response.ok) break + } catch (error) { + if (attempt === 3) throw error + } + if (attempt < 3) await new Promise(resolve => setTimeout(resolve, 5000)) + } + if (!response.ok) { + throw new Error(`Failed to fetch ${indexURL}: ${response.status} ${response.statusText}`) + } + + const platform = `${os.arch()}-mswin64_140` + const builds = (await response.json()).builds.filter(build => build.channel === 'dev' && build.platform === platform) + if (builds.length === 0) { + throw new Error(`No mswin head build for ${platform} in ${indexURL}`) + } + + // The index is sorted by name, and the date in the name can differ from the date it was published + return builds.reduce((latest, build) => build.published_at > latest.published_at ? build : latest).url +} + async function downloadAndExtract(engine, version, url, base, rubyPrefix) { const downloadPath = await common.measure('Downloading Ruby', async () => { console.log(url) From 7c7ec701f98427e7792ce6f8bc85431f86c41ebd Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 11 Nov 2026 13:23:32 +0900 Subject: [PATCH 2/8] Point SSL_CERT_FILE at Git's CA bundle for mswin The OpenSSL in the mswin builds looks for CA certificates in an OPENSSLDIR that does not exist on the runners, so certificate verification fails without it. A missing bundle only warns, because its path on windows-11-arm is not confirmed. Co-Authored-By: Claude Opus 5.5 --- dist/index.js | 19 +++++++++++++++++-- windows.js | 19 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index b22abda14..793c5c2a4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -46149,6 +46149,16 @@ async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } + // The OpenSSL in mswin builds looks for CA certificates in an OPENSSLDIR that does not exist on runners + if (engine === 'mswin' && !process.env['SSL_CERT_FILE'] && !process.env['SSL_CERT_DIR']) { + const certFile = findGitCertFile() + if (certFile) { + exportEnv({ SSL_CERT_FILE: certFile }) + } else { + core.warning("Cannot find Git's cert file, set SSL_CERT_FILE to verify TLS certificates with mswin") + } + } + const paths = [`${rubyPrefix}\\bin`] const windowsToolchain = core.getInput('windows-toolchain') if (windowsToolchain === 'none') { @@ -46281,12 +46291,17 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } -async function installMSYS1(url) { - const certFile = [ +function findGitCertFile() { + return [ 'C:\\Program Files\\Git\\ucrt64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\ssl\\cert.pem', + 'C:\\Program Files\\Git\\clangarm64\\etc\\ssl\\cert.pem', ].find(file => fs.existsSync(file)) +} + +async function installMSYS1(url) { + const certFile = findGitCertFile() if (certFile === undefined) { throw new Error("Cannot find Git's cert file") } diff --git a/windows.js b/windows.js index 71e03d4ea..cc7929c4d 100644 --- a/windows.js +++ b/windows.js @@ -50,6 +50,16 @@ export async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } + // The OpenSSL in mswin builds looks for CA certificates in an OPENSSLDIR that does not exist on runners + if (engine === 'mswin' && !process.env['SSL_CERT_FILE'] && !process.env['SSL_CERT_DIR']) { + const certFile = findGitCertFile() + if (certFile) { + exportEnv({ SSL_CERT_FILE: certFile }) + } else { + core.warning("Cannot find Git's cert file, set SSL_CERT_FILE to verify TLS certificates with mswin") + } + } + const paths = [`${rubyPrefix}\\bin`] const windowsToolchain = core.getInput('windows-toolchain') if (windowsToolchain === 'none') { @@ -182,12 +192,17 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } -async function installMSYS1(url) { - const certFile = [ +function findGitCertFile() { + return [ 'C:\\Program Files\\Git\\ucrt64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\ssl\\cert.pem', + 'C:\\Program Files\\Git\\clangarm64\\etc\\ssl\\cert.pem', ].find(file => fs.existsSync(file)) +} + +async function installMSYS1(url) { + const certFile = findGitCertFile() if (certFile === undefined) { throw new Error("Cannot find Git's cert file") } From db08eaf94f5fb0892c8503541abe1add09a022c6 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 11 Nov 2026 13:23:41 +0900 Subject: [PATCH 3/8] Send the download token only to github.com The mswin builds are downloaded from cache.ruby-lang.org, which does not take the token. Co-Authored-By: Claude Opus 5.5 --- common.js | 3 ++- dist/index.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/common.js b/common.js index 1a1cfe94e..2634299fe 100644 --- a/common.js +++ b/common.js @@ -451,6 +451,7 @@ export function isExactCacheKeyMatch(key, cacheKey) { } export async function download(url) { - const auth = inputs.token ? `token ${inputs.token}` : undefined + // The token is for github.com, so it must not reach other hosts such as cache.ruby-lang.org + const auth = inputs.token && new URL(url).hostname === 'github.com' ? `token ${inputs.token}` : undefined return await tc.downloadTool(url, undefined, auth) } diff --git a/dist/index.js b/dist/index.js index 793c5c2a4..7913bcb01 100644 --- a/dist/index.js +++ b/dist/index.js @@ -787,7 +787,8 @@ function isExactCacheKeyMatch(key, cacheKey) { } async function download(url) { - const auth = inputs.token ? `token ${inputs.token}` : undefined + // The token is for github.com, so it must not reach other hosts such as cache.ruby-lang.org + const auth = inputs.token && new URL(url).hostname === 'github.com' ? `token ${inputs.token}` : undefined return await tc.downloadTool(url, undefined, auth) } From f943b83f62dab85c68748484759f64b36c68e6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=AA=E3=81=A4=E3=81=8D?= Date: Tue, 10 Nov 2026 22:04:47 -0800 Subject: [PATCH 4/8] Add mswin-3.4.12 --- dist/index.js | 4 ++-- generate-test-matrix.rb | 9 +++------ generate-windows-versions.rb | 5 ++--- windows-mswin-toolchain-versions.json | 1 + windows-mswin-versions.json | 1 + 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/dist/index.js b/dist/index.js index 7913bcb01..500b91a45 100644 --- a/dist/index.js +++ b/dist/index.js @@ -88131,7 +88131,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"ruby":["1.9.3-p551","2.0.0-p648","2. /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"3.4.12":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"head":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"3.4.12":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.7":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.8":{"x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"4.0.9":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"},"head":{"arm64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z","x64":"https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z"}}'); /***/ }), @@ -88139,7 +88139,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://github.com/r /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.11-x64-mswin64_140.zip"},"3.4.12":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-x64-mswin64_140.zip"},"4.0.7":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.7-x64-mswin64_140.zip"},"4.0.8":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.8-x64-mswin64_140.zip"},"4.0.9":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-arm64-mswin64_140.zip","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-x64-mswin64_140.zip"},"head":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"3.4.11":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.11-x64-mswin64_140.zip"},"3.4.12":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-arm64-mswin64_140.zip","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-x64-mswin64_140.zip"},"4.0.7":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.7-x64-mswin64_140.zip"},"4.0.8":{"x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.8-x64-mswin64_140.zip"},"4.0.9":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-arm64-mswin64_140.zip","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-4.0.9-x64-mswin64_140.zip"},"head":{"arm64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json","x64":"https://cache.ruby-lang.org/pub/ruby/binaries/index.json"}}'); /***/ }), diff --git a/generate-test-matrix.rb b/generate-test-matrix.rb index f406c6fa2..20cd5fcdb 100644 --- a/generate-test-matrix.rb +++ b/generate-test-matrix.rb @@ -60,12 +60,9 @@ def unique_versions(versions, segment_count, *symbolic) truffleruby_versions = %w[truffleruby truffleruby-head truffleruby+graalvm truffleruby+graalvm-head] matrix += (macos_arm64_runners + ubuntu_runners).product(truffleruby_versions) -# mswin: each minor release + head, for each arch that has builds -{ 'x64' => windows_x64_runners, 'arm64' => windows_arm64_runners }.each do |arch, arch_runners| - mswin_versions = windows_mswin_versions.select { |_, archs| archs.key?(arch) }.keys - matrix += arch_runners.product(unique_versions(mswin_versions, 2, 'head').map { |version| "mswin-#{version}" }) -end -matrix += windows_x64_runners.product(%w[mswin]) +# mswin: each minor release + head +windows_ruby_mswin_versions = unique_versions(windows_mswin_versions.keys, 2, 'head') +matrix += windows_runners.product(windows_ruby_mswin_versions.map { |version| "mswin-#{version}"}) # ruby-loco: head ruby_loco_versions = %w[mingw ucrt] diff --git a/generate-windows-versions.rb b/generate-windows-versions.rb index f0d56da24..d137abbc0 100644 --- a/generate-windows-versions.rb +++ b/generate-windows-versions.rb @@ -147,14 +147,13 @@ def validate(versions, allowed_urls_regexps) mswin_toolchain_versions = mswin_versions.to_h do |raw_version, archs| version = raw_version == 'head' ? head_version : Gem::Version.new(raw_version) - toolchains = archs.filter_map do |raw_arch, _| + toolchains = archs.map do |raw_arch, _| arch = raw_arch == 'arm64' ? 'aarch64' : raw_arch toolchain = find_toolchains.("#{arch}-mswin64", version) raise "multiple toolchains found for mswin-#{raw_version} #{raw_arch}: #{toolchain}" if toolchain.size > 1 - # vcpkg packages for arm64 only exist for newer Rubies, skip builds that cannot get a toolchain - [raw_arch, URI.join(base_url, toolchain.first[:href]).to_s] if toolchain.one? + [raw_arch, URI.join(base_url, toolchain.first[:href]).to_s] end [raw_version, toolchains.to_h] end diff --git a/windows-mswin-toolchain-versions.json b/windows-mswin-toolchain-versions.json index a9b451874..00b303caa 100644 --- a/windows-mswin-toolchain-versions.json +++ b/windows-mswin-toolchain-versions.json @@ -3,6 +3,7 @@ "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" }, "3.4.12": { + "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-arm64-windows.7z", "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/vcpkg-x64-windows.7z" }, "4.0.7": { diff --git a/windows-mswin-versions.json b/windows-mswin-versions.json index 047016086..832963ba7 100644 --- a/windows-mswin-versions.json +++ b/windows-mswin-versions.json @@ -3,6 +3,7 @@ "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.11-x64-mswin64_140.zip" }, "3.4.12": { + "arm64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-arm64-mswin64_140.zip", "x64": "https://cache.ruby-lang.org/pub/ruby/binaries/mswin64/ruby-3.4.12-x64-mswin64_140.zip" }, "4.0.7": { From a3fa02d46e8638e0f601ce1b527179baf14c9ef7 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 11 Nov 2026 15:44:29 +0900 Subject: [PATCH 5/8] Use the arm64-mswin64 platform of the vcpkg packages setup-msys2-gcc renamed the platform of the arm64 vcpkg packages from aarch64-mswin64 to arm64-mswin64. https://github.com/ruby/setup-msys2-gcc/pull/42 Co-Authored-By: Claude Opus 5.5 --- generate-windows-versions.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/generate-windows-versions.rb b/generate-windows-versions.rb index d137abbc0..c3f9b9a39 100644 --- a/generate-windows-versions.rb +++ b/generate-windows-versions.rb @@ -147,13 +147,12 @@ def validate(versions, allowed_urls_regexps) mswin_toolchain_versions = mswin_versions.to_h do |raw_version, archs| version = raw_version == 'head' ? head_version : Gem::Version.new(raw_version) - toolchains = archs.map do |raw_arch, _| - arch = raw_arch == 'arm64' ? 'aarch64' : raw_arch + toolchains = archs.map do |arch, _| toolchain = find_toolchains.("#{arch}-mswin64", version) - raise "multiple toolchains found for mswin-#{raw_version} #{raw_arch}: #{toolchain}" if toolchain.size > 1 + raise "multiple toolchains found for mswin-#{raw_version} #{arch}: #{toolchain}" if toolchain.size > 1 - [raw_arch, URI.join(base_url, toolchain.first[:href]).to_s] + [arch, URI.join(base_url, toolchain.first[:href]).to_s] end [raw_version, toolchains.to_h] end From 08daae3db70608c6bface5287d64bf9d4e6508e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=AA=E3=81=A4=E3=81=8D?= Date: Tue, 10 Nov 2026 22:48:18 -0800 Subject: [PATCH 6/8] Refactor windows toolchain selection --- generate-windows-versions.rb | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/generate-windows-versions.rb b/generate-windows-versions.rb index c3f9b9a39..6105994bd 100644 --- a/generate-windows-versions.rb +++ b/generate-windows-versions.rb @@ -81,12 +81,18 @@ def validate(versions, allowed_urls_regexps) base_url = 'https://github.com/ruby/setup-msys2-gcc/releases/latest/download/windows-toolchain.json' windows_toolchain = JSON.parse(URI.open(base_url, &:read), symbolize_names: true) -find_toolchains = -> platform, version { - windows_toolchain.select do |pkg| +find_toolchain = -> platform, version { + toolchain = windows_toolchain.select do |pkg| pkg[:platform] == platform && pkg[:required_ruby_version].any? do |requirement| Gem::Requirement.new(requirement).satisfied_by?(version) end end + + unless toolchain.one? + raise "#{toolchain.empty? ? 'no' : 'multiple'} toolchains found for #{platform} #{version}: #{toolchain}" + end + + toolchain.first } versions.each do |raw_version, archs| @@ -109,13 +115,9 @@ def validate(versions, allowed_urls_regexps) end end - toolchain = find_toolchains.(platform, version) - - unless toolchain.one? - raise "#{toolchain.empty? ? 'no' : 'multiple'} toolchains found for #{raw_version} #{raw_arch}: #{toolchain}" - end + toolchain = find_toolchain.(platform, version) - archs[raw_arch] = URI.join(base_url, toolchain.first[:href]).to_s + archs[raw_arch] = URI.join(base_url, toolchain[:href]).to_s end end @@ -148,19 +150,13 @@ def validate(versions, allowed_urls_regexps) version = raw_version == 'head' ? head_version : Gem::Version.new(raw_version) toolchains = archs.map do |arch, _| - toolchain = find_toolchains.("#{arch}-mswin64", version) - - raise "multiple toolchains found for mswin-#{raw_version} #{arch}: #{toolchain}" if toolchain.size > 1 + toolchain = find_toolchain.("#{arch}-mswin64", version) - [arch, URI.join(base_url, toolchain.first[:href]).to_s] + [arch, URI.join(base_url, toolchain[:href]).to_s] end [raw_version, toolchains.to_h] end -mswin_versions.each do |raw_version, archs| - archs.select! { |raw_arch, _| mswin_toolchain_versions[raw_version].key?(raw_arch) } -end - validate(mswin_versions, MSWIN_VERSIONS_URLS_REGEXPS) File.binwrite 'windows-mswin-versions.json', "#{JSON.pretty_generate(mswin_versions)}\n" From 69f3287592504aec18d17b287a97179332d79953 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 11 Nov 2026 16:10:03 +0900 Subject: [PATCH 7/8] Handle Git's CA bundle for mswin the same way as for DevKit A missing bundle now fails the setup, so it is reported there rather than as a certificate error later. The bundle is found on every runner image, windows-11-arm included. https://github.com/ruby/setup-ruby/pull/971#discussion_r4534939682 Co-Authored-By: Claude Opus 5.5 --- dist/index.js | 20 ++++++++------------ windows.js | 20 ++++++++------------ 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/dist/index.js b/dist/index.js index 500b91a45..3c84683d0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -46150,14 +46150,8 @@ async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } - // The OpenSSL in mswin builds looks for CA certificates in an OPENSSLDIR that does not exist on runners - if (engine === 'mswin' && !process.env['SSL_CERT_FILE'] && !process.env['SSL_CERT_DIR']) { - const certFile = findGitCertFile() - if (certFile) { - exportEnv({ SSL_CERT_FILE: certFile }) - } else { - core.warning("Cannot find Git's cert file, set SSL_CERT_FILE to verify TLS certificates with mswin") - } + if (engine === 'mswin') { + exportEnv({ SSL_CERT_FILE: findGitCertFile() }) } const paths = [`${rubyPrefix}\\bin`] @@ -46292,20 +46286,22 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } +// DevKit and mswin Rubies have no usable CA certificates on runners, so they use the bundle of Git for Windows function findGitCertFile() { - return [ + const certFile = [ 'C:\\Program Files\\Git\\ucrt64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\ssl\\cert.pem', 'C:\\Program Files\\Git\\clangarm64\\etc\\ssl\\cert.pem', ].find(file => fs.existsSync(file)) + if (certFile === undefined) { + throw new Error("Cannot find Git's cert file") + } + return certFile } async function installMSYS1(url) { const certFile = findGitCertFile() - if (certFile === undefined) { - throw new Error("Cannot find Git's cert file") - } const downloadPath = await common.measure('Downloading msys1 build tools', async () => { console.log(url) diff --git a/windows.js b/windows.js index cc7929c4d..291393933 100644 --- a/windows.js +++ b/windows.js @@ -50,14 +50,8 @@ export async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } - // The OpenSSL in mswin builds looks for CA certificates in an OPENSSLDIR that does not exist on runners - if (engine === 'mswin' && !process.env['SSL_CERT_FILE'] && !process.env['SSL_CERT_DIR']) { - const certFile = findGitCertFile() - if (certFile) { - exportEnv({ SSL_CERT_FILE: certFile }) - } else { - core.warning("Cannot find Git's cert file, set SSL_CERT_FILE to verify TLS certificates with mswin") - } + if (engine === 'mswin') { + exportEnv({ SSL_CERT_FILE: findGitCertFile() }) } const paths = [`${rubyPrefix}\\bin`] @@ -192,20 +186,22 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } +// DevKit and mswin Rubies have no usable CA certificates on runners, so they use the bundle of Git for Windows function findGitCertFile() { - return [ + const certFile = [ 'C:\\Program Files\\Git\\ucrt64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\etc\\ssl\\cert.pem', 'C:\\Program Files\\Git\\mingw64\\ssl\\cert.pem', 'C:\\Program Files\\Git\\clangarm64\\etc\\ssl\\cert.pem', ].find(file => fs.existsSync(file)) + if (certFile === undefined) { + throw new Error("Cannot find Git's cert file") + } + return certFile } async function installMSYS1(url) { const certFile = findGitCertFile() - if (certFile === undefined) { - throw new Error("Cannot find Git's cert file") - } const downloadPath = await common.measure('Downloading msys1 build tools', async () => { console.log(url) From 0b0e3f0a3b5656cc2ef89cd3c99e266de761315b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=AA=E3=81=A4=E3=81=8D?= Date: Tue, 10 Nov 2026 23:59:27 -0800 Subject: [PATCH 8/8] Code style --- dist/index.js | 2 +- windows.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3c84683d0..00ce226d6 100644 --- a/dist/index.js +++ b/dist/index.js @@ -46114,7 +46114,7 @@ const mswinVersions = __nccwpck_require__(22158) const mswinToolchainVersions = __nccwpck_require__(82768) function getAvailableVersions(_platform, engine) { - const versions = { ruby: rubyInstallerVersions, mswin: mswinVersions }[engine] + const versions = engine === 'mswin' ? mswinVersions : rubyInstallerVersions if (versions) { return Object.keys(versions).filter(version => os.arch() in versions[version]) } else { diff --git a/windows.js b/windows.js index 291393933..3a1f27a9e 100644 --- a/windows.js +++ b/windows.js @@ -14,7 +14,7 @@ const mswinVersions = require('./windows-mswin-versions.json') const mswinToolchainVersions = require('./windows-mswin-toolchain-versions.json') export function getAvailableVersions(_platform, engine) { - const versions = { ruby: rubyInstallerVersions, mswin: mswinVersions }[engine] + const versions = engine === 'mswin' ? mswinVersions : rubyInstallerVersions if (versions) { return Object.keys(versions).filter(version => os.arch() in versions[version]) } else {