Automatically install libxml2-dev libxslt-dev on TruffleRuby if needed

* This is a special case, because TruffleRuby needs an extra system
  dependency that other Rubies do not, and GitHub runners do not have
  these packages installed by default, while TravisCI has them.
This commit is contained in:
Benoit Daloze
2021-01-09 14:48:58 +01:00
parent 3460195737
commit 5aaa89ff0d
5 changed files with 74 additions and 4 deletions
+13
View File
@@ -142,6 +142,19 @@ jobs:
bundler-cache: true
- run: bundle exec rails --version
testTruffleRubyNokogiri:
name: "Test installing a Gemfile with nokogiri on TruffleRuby"
runs-on: ubuntu-latest
env:
BUNDLE_GEMFILE: gemfiles/nokogiri.gemfile
steps:
- uses: actions/checkout@v2
- uses: ./
with:
ruby-version: truffleruby-head
bundler-cache: true
- run: bundle list | grep nokogiri
lint:
runs-on: ubuntu-20.04
steps:
+12
View File
@@ -38,6 +38,16 @@ function readBundledWithFromGemfileLock(lockFile) {
return null
}
async function afterLockFile(lockFile, platform, engine) {
if (engine === 'truffleruby' && platform.startsWith('ubuntu-')) {
const contents = fs.readFileSync(lockFile, 'utf8')
if (contents.includes('nokogiri')) {
await common.measure('Installing libxml2-dev libxslt-dev, required to install nokogiri on TruffleRuby', async () =>
exec.exec('sudo', ['apt-get', '-yqq', 'install', 'libxml2-dev', 'libxslt-dev'], { silent: true }))
}
}
}
export async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefix, engine, rubyVersion) {
let bundlerVersion = bundlerVersionInput
@@ -112,6 +122,8 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer
await exec.exec('bundle', ['lock'], envOptions)
}
await afterLockFile(lockFile, platform, engine)
// cache key
const paths = [cachePath]
const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile)
+17 -2
View File
@@ -19,8 +19,10 @@ export function partition(string, separator) {
return [string.slice(0, i), string.slice(i + separator.length, string.length)]
}
let inGroup = false
export async function measure(name, block) {
return await core.group(name, async () => {
const body = async () => {
const start = performance.now()
try {
return await block()
@@ -29,7 +31,20 @@ export async function measure(name, block) {
const duration = (end - start) / 1000.0
console.log(`Took ${duration.toFixed(2).padStart(6)} seconds`)
}
})
}
if (inGroup) {
// Nested groups are not yet supported on GitHub Actions
console.log(`> ${name}`)
return await body()
} else {
inGroup = true
try {
return await core.group(name, body)
} finally {
inGroup = false
}
}
}
export function isHeadVersion(rubyVersion) {
Generated Vendored
+29 -2
View File
@@ -32811,8 +32811,10 @@ function partition(string, separator) {
return [string.slice(0, i), string.slice(i + separator.length, string.length)]
}
let inGroup = false
async function measure(name, block) {
return await core.group(name, async () => {
const body = async () => {
const start = performance.now()
try {
return await block()
@@ -32821,7 +32823,20 @@ async function measure(name, block) {
const duration = (end - start) / 1000.0
console.log(`Took ${duration.toFixed(2).padStart(6)} seconds`)
}
})
}
if (inGroup) {
// Nested groups are not yet supported on GitHub Actions
console.log(`> ${name}`)
return await body()
} else {
inGroup = true
try {
return await core.group(name, body)
} finally {
inGroup = false
}
}
}
function isHeadVersion(rubyVersion) {
@@ -44559,6 +44574,16 @@ function readBundledWithFromGemfileLock(lockFile) {
return null
}
async function afterLockFile(lockFile, platform, engine) {
if (engine === 'truffleruby' && platform.startsWith('ubuntu-')) {
const contents = fs.readFileSync(lockFile, 'utf8')
if (contents.includes('nokogiri')) {
await common.measure('Installing libxml2-dev libxslt-dev, required to install nokogiri on TruffleRuby', async () =>
exec.exec('sudo', ['apt-get', '-yqq', 'install', 'libxml2-dev', 'libxslt-dev'], { silent: true }))
}
}
}
async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefix, engine, rubyVersion) {
let bundlerVersion = bundlerVersionInput
@@ -44633,6 +44658,8 @@ async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, b
await exec.exec('bundle', ['lock'], envOptions)
}
await afterLockFile(lockFile, platform, engine)
// cache key
const paths = [cachePath]
const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile)
+3
View File
@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "nokogiri"