mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 22:44:20 +02:00
Reuse builds in the toolcache when they exist
This commit is contained in:
+20
-14
@@ -1,6 +1,5 @@
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
const core = require('@actions/core')
|
||||
const exec = require('@actions/exec')
|
||||
const io = require('@actions/io')
|
||||
const tc = require('@actions/tool-cache')
|
||||
@@ -17,24 +16,33 @@ export function getAvailableVersions(platform, engine) {
|
||||
}
|
||||
|
||||
export async function install(platform, engine, version) {
|
||||
return await downloadAndExtract(platform, engine, version)
|
||||
}
|
||||
|
||||
async function downloadAndExtract(platform, engine, version) {
|
||||
let rubyPrefix
|
||||
if (common.shouldExtractInToolCache(engine, version)) {
|
||||
rubyPrefix = common.getToolCacheRubyPrefix(platform, version)
|
||||
let rubyPrefix, inToolCache
|
||||
if (common.shouldUseToolCache(engine, version)) {
|
||||
inToolCache = tc.find('Ruby', version)
|
||||
if (inToolCache) {
|
||||
rubyPrefix = inToolCache
|
||||
} else {
|
||||
rubyPrefix = common.getToolCacheRubyPrefix(platform, version)
|
||||
}
|
||||
} else if (windows) {
|
||||
rubyPrefix = path.join(`${common.drive}:`, `${engine}-${version}`)
|
||||
} else {
|
||||
rubyPrefix = path.join(os.homedir(), '.rubies', `${engine}-${version}`)
|
||||
}
|
||||
|
||||
const parentDir = path.dirname(rubyPrefix)
|
||||
|
||||
// Set the PATH now, so the MSYS2 'tar' is in Path on Windows
|
||||
common.setupPath([path.join(rubyPrefix, 'bin')])
|
||||
|
||||
if (!inToolCache) {
|
||||
await downloadAndExtract(platform, engine, version, rubyPrefix);
|
||||
}
|
||||
|
||||
return rubyPrefix
|
||||
}
|
||||
|
||||
async function downloadAndExtract(platform, engine, version, rubyPrefix) {
|
||||
const parentDir = path.dirname(rubyPrefix)
|
||||
|
||||
await io.rmRF(rubyPrefix)
|
||||
await io.mkdirP(parentDir)
|
||||
|
||||
@@ -47,13 +55,11 @@ async function downloadAndExtract(platform, engine, version) {
|
||||
await common.measure('Extracting Ruby', async () => {
|
||||
if (windows) {
|
||||
// Windows 2016 doesn't have system tar, use MSYS2's, it needs unix style paths
|
||||
await exec.exec('tar', [ '-xz', '-C', common.win2nix(parentDir), '-f', common.win2nix(downloadPath) ])
|
||||
await exec.exec('tar', ['-xz', '-C', common.win2nix(parentDir), '-f', common.win2nix(downloadPath)])
|
||||
} else {
|
||||
await exec.exec('tar', [ '-xz', '-C', parentDir, '-f', downloadPath ])
|
||||
await exec.exec('tar', ['-xz', '-C', parentDir, '-f', downloadPath])
|
||||
}
|
||||
})
|
||||
|
||||
return rubyPrefix
|
||||
}
|
||||
|
||||
function getDownloadURL(platform, engine, version) {
|
||||
|
||||
Reference in New Issue
Block a user