Add support for gems.rb/gems.locked during bundle install.

This commit is contained in:
Samuel Williams
2020-09-03 10:48:45 +12:00
parent ad2d64d83c
commit 638e8fff19
2 changed files with 36 additions and 12 deletions
+18 -6
View File
@@ -213,14 +213,26 @@ async function installBundler(bundlerVersionInput, platform, rubyPrefix, engine,
}
async function bundleInstall(platform, engine, version) {
if (!fs.existsSync('Gemfile')) {
console.log('No Gemfile, skipping "bundle install" and caching')
return
if (await bundleInstallSpecific('gems.rb', 'gems.locked', platform, engine, version)) {
return true
}
if (await bundleInstallSpecific('Gemfile', 'Gemfile.lock', platform, engine, version)) {
return true
}
console.log('No Gemfile/gems.rb, skipping "bundle install" and caching')
}
async function bundleInstallSpecific(gemsPath, lockPath, platform, engine, version) {
if (!fs.existsSync(gemsPath)) {
return false
}
// config
const path = 'vendor/bundle'
const hasGemfileLock = fs.existsSync('Gemfile.lock');
const hasGemfileLock = fs.existsSync(lockPath)
if (hasGemfileLock) {
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'])
}
@@ -232,9 +244,9 @@ async function bundleInstall(platform, engine, version) {
let key = baseKey
let restoreKeys
if (hasGemfileLock) {
key += `-Gemfile.lock-${await common.hashFile('Gemfile.lock')}`
key += `-${lockPath}-${await common.hashFile(lockPath)}`
// If only Gemfile.lock we can reuse some of the cache (but it will keep old gem versions in the cache)
restoreKeys = [`${baseKey}-Gemfile.lock-`]
restoreKeys = [`${baseKey}-${lockPath}-`]
} else {
// Only exact key, to never mix native gems of different platforms or Ruby versions
restoreKeys = []