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..2634299fe 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) { @@ -446,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 7585bd54f..00ce226d6 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) { @@ -781,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) } @@ -46052,7 +46059,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 +46110,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 = engine === 'mswin' ? mswinVersions : rubyInstallerVersions + 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)) { @@ -46136,6 +46150,10 @@ async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } + if (engine === 'mswin') { + exportEnv({ SSL_CERT_FILE: findGitCertFile() }) + } + const paths = [`${rubyPrefix}\\bin`] const windowsToolchain = core.getInput('windows-toolchain') if (windowsToolchain === 'none') { @@ -46143,7 +46161,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 +46188,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) @@ -46241,15 +46286,22 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } -async function installMSYS1(url) { +// DevKit and mswin Rubies have no usable CA certificates on runners, so they use the bundle of Git for Windows +function findGitCertFile() { 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() const downloadPath = await common.measure('Downloading msys1 build tools', async () => { console.log(url) @@ -88071,11 +88123,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":{"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"}}'); + +/***/ }), + +/***/ 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":{"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"}}'); + +/***/ }), + /***/ 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 +88151,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 +88286,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 +88372,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..20cd5fcdb 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,12 @@ 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 +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 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..6105994bd 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,20 @@ 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_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| version = Gem::Version.correct?(raw_version) ? Gem::Version.new(raw_version) : head_version @@ -91,8 +107,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,20 +115,50 @@ 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_toolchain.(platform, version) - unless toolchain.one? - raise "#{toolchain.empty? ? 'no' : 'multiple'} toolchains found for #{raw_version} #{raw_arch}: #{toolchain}" - end - - 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 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.map do |arch, _| + toolchain = find_toolchain.("#{arch}-mswin64", version) + + [arch, URI.join(base_url, toolchain[:href]).to_s] + end + [raw_version, toolchains.to_h] +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..00b303caa --- /dev/null +++ b/windows-mswin-toolchain-versions.json @@ -0,0 +1,23 @@ +{ + "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" + } +} diff --git a/windows-mswin-versions.json b/windows-mswin-versions.json new file mode 100644 index 000000000..832963ba7 --- /dev/null +++ b/windows-mswin-versions.json @@ -0,0 +1,23 @@ +{ + "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/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..3a1f27a9e 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 = engine === 'mswin' ? mswinVersions : rubyInstallerVersions + 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)) { @@ -43,6 +50,10 @@ export async function install(platform, engine, version) { await downloadAndExtract(engine, version, url, base, rubyPrefix); } + if (engine === 'mswin') { + exportEnv({ SSL_CERT_FILE: findGitCertFile() }) + } + const paths = [`${rubyPrefix}\\bin`] const windowsToolchain = core.getInput('windows-toolchain') if (windowsToolchain === 'none') { @@ -50,7 +61,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 +88,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) @@ -148,15 +186,22 @@ async function installMSYS2(url, rubyPrefix = process.env.RUNNER_TEMP) { return [`${msys2Path}\\${msys2Type}\\bin`, `${msys2Path}\\usr\\bin`] } -async function installMSYS1(url) { +// DevKit and mswin Rubies have no usable CA certificates on runners, so they use the bundle of Git for Windows +function findGitCertFile() { 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() const downloadPath = await common.measure('Downloading msys1 build tools', async () => { console.log(url)