From ad1ebae995ccc3584a094574eafc5826942ec8d4 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Thu, 12 Nov 2020 20:17:57 +0100 Subject: [PATCH] Also include the version in the platform for macos and windows * Guess the platform based on $ImageOS. --- common.js | 46 +++++++++++++++++++-------------------- dist/index.js | 58 ++++++++++++++++++++++++++----------------------- index.js | 2 +- ruby-builder.js | 11 ++++++++-- 4 files changed, 63 insertions(+), 54 deletions(-) diff --git a/common.js b/common.js index a10c0e1..03e7101 100644 --- a/common.js +++ b/common.js @@ -36,30 +36,7 @@ export async function hashFile(file) { return hash.digest('hex') } -export function getVirtualEnvironmentName() { - const platform = os.platform() - if (platform === 'linux') { - return `ubuntu-${findUbuntuVersion()}` - } else if (platform === 'darwin') { - return 'macos-latest' - } else if (platform === 'win32') { - return 'windows-latest' - } else { - throw new Error(`Unknown platform ${platform}`) - } -} - -function findUbuntuVersion() { - const lsb_release = fs.readFileSync('/etc/lsb-release', 'utf8') - const match = lsb_release.match(/^DISTRIB_RELEASE=(\d+\.\d+)$/m) - if (match) { - return match[1] - } else { - throw new Error('Could not find Ubuntu version') - } -} - -export function getImageOS() { +function getImageOS() { const imageOS = process.env['ImageOS'] if (!imageOS) { throw new Error('The environment variable ImageOS must be set') @@ -67,6 +44,27 @@ export function getImageOS() { return imageOS } +export function getVirtualEnvironmentName() { + const imageOS = getImageOS() + + let match = imageOS.match(/^ubuntu(\d+)/) // e.g. ubuntu18 + if (match) { + return `ubuntu-${match[1]}.04` + } + + match = imageOS.match(/^macos(\d{2})(\d+)/) // e.g. macos1015 + if (match) { + return `macos-${match[1]}.${match[2]}` + } + + match = imageOS.match(/^win(\d+)/) // e.g. win19 + if (match) { + return `windows-20${match[1]}` + } + + throw new Error(`Unknown ImageOS ${imageOS}`) +} + export function shouldExtractInToolCache(engine, version) { return engine === 'ruby' && !isHeadVersion(version) } diff --git a/dist/index.js b/dist/index.js index ed65049..440e66b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -32098,7 +32098,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isHeadVersion", function() { return isHeadVersion; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hashFile", function() { return hashFile; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVirtualEnvironmentName", function() { return getVirtualEnvironmentName; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getImageOS", function() { return getImageOS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shouldExtractInToolCache", function() { return shouldExtractInToolCache; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToolCacheRubyPrefix", function() { return getToolCacheRubyPrefix; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "win2nix", function() { return win2nix; }); @@ -32141,29 +32140,6 @@ async function hashFile(file) { return hash.digest('hex') } -function getVirtualEnvironmentName() { - const platform = os.platform() - if (platform === 'linux') { - return `ubuntu-${findUbuntuVersion()}` - } else if (platform === 'darwin') { - return 'macos-latest' - } else if (platform === 'win32') { - return 'windows-latest' - } else { - throw new Error(`Unknown platform ${platform}`) - } -} - -function findUbuntuVersion() { - const lsb_release = fs.readFileSync('/etc/lsb-release', 'utf8') - const match = lsb_release.match(/^DISTRIB_RELEASE=(\d+\.\d+)$/m) - if (match) { - return match[1] - } else { - throw new Error('Could not find Ubuntu version') - } -} - function getImageOS() { const imageOS = process.env['ImageOS'] if (!imageOS) { @@ -32172,6 +32148,27 @@ function getImageOS() { return imageOS } +function getVirtualEnvironmentName() { + const imageOS = getImageOS() + + let match = imageOS.match(/^ubuntu(\d+)/) // e.g. ubuntu18 + if (match) { + return `ubuntu-${match[1]}.04` + } + + match = imageOS.match(/^macos(\d{2})(\d+)/) // e.g. macos1015 + if (match) { + return `macos-${match[1]}.${match[2]}` + } + + match = imageOS.match(/^win(\d+)/) // e.g. win19 + if (match) { + return `windows-20${match[1]}` + } + + throw new Error(`Unknown ImageOS ${imageOS}`) +} + function shouldExtractInToolCache(engine, version) { return engine === 'ruby' && !isHeadVersion(version) } @@ -51454,7 +51451,7 @@ async function bundleInstall(gemfile, lockFile, platform, engine, version) { } async function computeBaseKey(platform, engine, version, lockFile) { - let key = `setup-ruby-bundler-cache-v2-${common.getImageOS()}-${engine}-${version}` + let key = `setup-ruby-bundler-cache-v2-${platform}-${engine}-${version}` if (engine !== 'jruby' && common.isHeadVersion(version)) { let revision = ''; @@ -52944,10 +52941,17 @@ async function downloadAndExtract(platform, engine, version) { } function getDownloadURL(platform, engine, version) { + let builderPlatform = platform + if (platform.startsWith('windows-')) { + builderPlatform = 'windows-latest' + } else if (platform.startsWith('macos-')) { + builderPlatform = 'macos-latest' + } + if (common.isHeadVersion(version)) { - return getLatestHeadBuildURL(platform, engine, version) + return getLatestHeadBuildURL(builderPlatform, engine, version) } else { - return `${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${platform}.tar.gz` + return `${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${builderPlatform}.tar.gz` } } diff --git a/index.js b/index.js index 096b9d3..3e8c940 100644 --- a/index.js +++ b/index.js @@ -293,7 +293,7 @@ async function bundleInstall(gemfile, lockFile, platform, engine, version) { } async function computeBaseKey(platform, engine, version, lockFile) { - let key = `setup-ruby-bundler-cache-v2-${common.getImageOS()}-${engine}-${version}` + let key = `setup-ruby-bundler-cache-v2-${platform}-${engine}-${version}` if (engine !== 'jruby' && common.isHeadVersion(version)) { let revision = ''; diff --git a/ruby-builder.js b/ruby-builder.js index cdbeb91..601a763 100644 --- a/ruby-builder.js +++ b/ruby-builder.js @@ -57,10 +57,17 @@ async function downloadAndExtract(platform, engine, version) { } function getDownloadURL(platform, engine, version) { + let builderPlatform = platform + if (platform.startsWith('windows-')) { + builderPlatform = 'windows-latest' + } else if (platform.startsWith('macos-')) { + builderPlatform = 'macos-latest' + } + if (common.isHeadVersion(version)) { - return getLatestHeadBuildURL(platform, engine, version) + return getLatestHeadBuildURL(builderPlatform, engine, version) } else { - return `${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${platform}.tar.gz` + return `${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${builderPlatform}.tar.gz` } }