Compare commits

...
12 Commits
10 changed files with 1066 additions and 382 deletions
+30 -2
View File
@@ -15,9 +15,9 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0, windows-2016, windows-2019 ] os: [ ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0, windows-2016, windows-2019 ]
# Use various version syntax here for testing # Use various version syntax here for testing
ruby: [ 2.1, 2.2, 2.3, 2.4, 2.5, 2.6.6, 2.7, '3.0', ruby-head, debug, jruby-9.1, jruby, jruby-head, truffleruby, truffleruby-head ] ruby: [ 2.1, 2.2, 2.3, 2.4, 2.5, 2.6.6, 2.7, '3.0', ruby-head, jruby, jruby-head, truffleruby, truffleruby-head ]
include: include:
- { os: windows-2016, ruby: mingw } - { os: windows-2016, ruby: mingw }
- { os: windows-2019, ruby: mingw } - { os: windows-2019, ruby: mingw }
@@ -102,6 +102,34 @@ jobs:
if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby') if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby')
run: gem install sassc -N run: gem install sassc -N
testExactBundlerVersion:
name: "Test with an exact Bundler version"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ./
with:
ruby-version: 2.6
bundler: 2.1.4
- run: bundle --version | grep -F 2.1.4
testGemfileMatrix:
strategy:
fail-fast: false
matrix:
gemfile: [ rails5, rails6 ]
name: "Test with ${{ matrix.gemfile }} gemfile"
runs-on: ubuntu-latest
env:
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
steps:
- uses: actions/checkout@v2
- uses: ./
with:
ruby-version: 2.6
bundler-cache: true
- run: bundle exec rails --version
lint: lint:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
+5 -5
View File
@@ -82,9 +82,9 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu, macos] os: [ubuntu-latest, macos-latest]
ruby: [2.5, 2.6, 2.7, head, debug, jruby, jruby-head, truffleruby, truffleruby-head] ruby: [2.5, 2.6, 2.7, head, jruby, jruby-head, truffleruby, truffleruby-head]
runs-on: ${{ matrix.os }}-latest runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
@@ -116,10 +116,10 @@ if they are not at the root of the repository, see [action.yml](action.yml) for
### Bundler ### Bundler
By default, if there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` or `gems.locked`) with a `BUNDLED WITH` section, By default, if there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` or `gems.locked`) with a `BUNDLED WITH` section,
the latest version of Bundler with the same major version will be installed. that version of Bundler will be installed and used.
Otherwise, the latest compatible Bundler version is installed (Bundler 2 on Ruby >= 2.4, Bundler 1 on Ruby < 2.4). Otherwise, the latest compatible Bundler version is installed (Bundler 2 on Ruby >= 2.4, Bundler 1 on Ruby < 2.4).
This behavior can be customized, see [action.yml](action.yml) for details about the `bundler` input. This behavior can be customized, see [action.yml](action.yml) for more details about the `bundler` input.
### Caching `bundle install` automatically ### Caching `bundle install` automatically
+1 -1
View File
@@ -11,7 +11,7 @@ inputs:
default: 'default' default: 'default'
bundler: bundler:
description: | description: |
The version of Bundler to install. Either 'none', 1, 2, 'latest' or 'Gemfile.lock'. The version of Bundler to install. Either 'none', 'latest', 'Gemfile.lock', or a version number (e.g., 1, 2, 2.1.4).
For 'Gemfile.lock', the version is determined based on the BUNDLED WITH section from the file Gemfile.lock, $BUNDLE_GEMFILE.lock or gems.locked. For 'Gemfile.lock', the version is determined based on the BUNDLED WITH section from the file Gemfile.lock, $BUNDLE_GEMFILE.lock or gems.locked.
Defaults to 'Gemfile.lock' if the file exists and 'latest' otherwise. Defaults to 'Gemfile.lock' if the file exists and 'latest' otherwise.
required: false required: false
Generated Vendored
+996 -354
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "rails", "~> 5.2.0"
+3
View File
@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "rails", "~> 6.0.0"
+11 -10
View File
@@ -181,9 +181,8 @@ function readBundledWithFromGemfileLock(lockFile) {
const nextLine = lines[bundledWithLine+1] const nextLine = lines[bundledWithLine+1]
if (nextLine && /^\d+/.test(nextLine.trim())) { if (nextLine && /^\d+/.test(nextLine.trim())) {
const bundlerVersion = nextLine.trim() const bundlerVersion = nextLine.trim()
const majorVersion = bundlerVersion.match(/^\d+/)[0] console.log(`Using Bundler ${bundlerVersion} from ${lockFile} BUNDLED WITH ${bundlerVersion}`)
console.log(`Using Bundler ${majorVersion} from ${lockFile} BUNDLED WITH ${bundlerVersion}`) return bundlerVersion
return majorVersion
} }
} }
} }
@@ -211,7 +210,7 @@ async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefi
throw new Error(`Cannot parse bundler input: ${bundlerVersion}`) throw new Error(`Cannot parse bundler input: ${bundlerVersion}`)
} }
if (engine === 'ruby' && rubyVersion.match(/^2\.[12]/)) { if (engine === 'ruby' && rubyVersion.match(/^2\.[012]/)) {
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2') console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2')
bundlerVersion = '1' bundlerVersion = '1'
} else if (engine === 'ruby' && rubyVersion.startsWith('2.3')) { } else if (engine === 'ruby' && rubyVersion.startsWith('2.3')) {
@@ -222,9 +221,9 @@ async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefi
bundlerVersion = '1' bundlerVersion = '1'
} }
if (common.isHeadVersion(rubyVersion) && common.isBundler2Default(engine, rubyVersion) && bundlerVersion === '2') { if (common.isHeadVersion(rubyVersion) && common.isBundler2Default(engine, rubyVersion) && bundlerVersion.startsWith('2')) {
console.log(`Using Bundler 2 shipped with ${engine}-${rubyVersion}`) console.log(`Using Bundler 2 shipped with ${engine}-${rubyVersion}`)
} else if (engine === 'truffleruby' && !common.isHeadVersion(rubyVersion) && bundlerVersion === '1') { } else if (engine === 'truffleruby' && !common.isHeadVersion(rubyVersion) && bundlerVersion.startsWith('1')) {
console.log(`Using Bundler 1 shipped with ${engine}`) console.log(`Using Bundler 1 shipped with ${engine}`)
} else { } else {
const gem = path.join(rubyPrefix, 'bin', 'gem') const gem = path.join(rubyPrefix, 'bin', 'gem')
@@ -249,9 +248,11 @@ async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, b
} }
// config // config
const path = 'vendor/bundle' const cachePath = 'vendor/bundle'
// An absolute path, so it is reliably under $PWD/vendor/bundle, and not relative to the gemfile's directory
const bundleCachePath = path.join(process.cwd(), cachePath)
await exec.exec('bundle', ['config', '--local', 'path', path], envOptions) await exec.exec('bundle', ['config', '--local', 'path', bundleCachePath], envOptions)
if (fs.existsSync(lockFile)) { if (fs.existsSync(lockFile)) {
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], envOptions) await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], envOptions)
@@ -262,7 +263,7 @@ async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, b
} }
// cache key // cache key
const paths = [path] const paths = [cachePath]
const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile) const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile)
const key = `${baseKey}-${await common.hashFile(lockFile)}` const key = `${baseKey}-${await common.hashFile(lockFile)}`
// If only Gemfile.lock changes we can reuse part of the cache, and clean old gem versions below // If only Gemfile.lock changes we can reuse part of the cache, and clean old gem versions below
@@ -313,7 +314,7 @@ async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, b
} }
async function computeBaseKey(platform, engine, version, lockFile) { async function computeBaseKey(platform, engine, version, lockFile) {
let key = `setup-ruby-bundler-cache-v2-${platform}-${engine}-${version}` let key = `setup-ruby-bundler-cache-v3-${platform}-${engine}-${version}`
if (engine !== 'jruby' && common.isHeadVersion(version)) { if (engine !== 'jruby' && common.isHeadVersion(version)) {
let revision = ''; let revision = '';
+1 -1
View File
@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/ruby/setup-ruby", "homepage": "https://github.com/ruby/setup-ruby",
"dependencies": { "dependencies": {
"@actions/cache": "^1.0.2", "@actions/cache": "^1.0.5",
"@actions/core": "^1.2.6", "@actions/core": "^1.2.6",
"@actions/exec": "^1.0.3", "@actions/exec": "^1.0.3",
"@actions/io": "^1.0.2", "@actions/io": "^1.0.2",
+2 -2
View File
@@ -8,12 +8,12 @@ export function getVersions(platform) {
"2.5.0", "2.5.1", "2.5.2", "2.5.3", "2.5.4", "2.5.5", "2.5.6", "2.5.7", "2.5.8", "2.5.0", "2.5.1", "2.5.2", "2.5.3", "2.5.4", "2.5.5", "2.5.6", "2.5.7", "2.5.8",
"2.6.0", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", "2.6.6", "2.6.0", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", "2.6.6",
"2.7.0", "2.7.1", "2.7.2", "2.7.0", "2.7.1", "2.7.2",
"3.0.0-preview1", "3.0.0-preview2", "3.0.0-preview1", "3.0.0-preview2", "3.0.0-rc1",
"head", "debug", "head", "debug",
], ],
"jruby": [ "jruby": [
"9.1.17.0", "9.1.17.0",
"9.2.9.0", "9.2.10.0", "9.2.11.0", "9.2.11.1", "9.2.12.0", "9.2.13.0", "9.2.9.0", "9.2.10.0", "9.2.11.0", "9.2.11.1", "9.2.12.0", "9.2.13.0", "9.2.14.0",
"head" "head"
], ],
"truffleruby": [ "truffleruby": [
Generated
+14 -7
View File
@@ -2,22 +2,22 @@
# yarn lockfile v1 # yarn lockfile v1
"@actions/cache@^1.0.2": "@actions/cache@^1.0.5":
version "1.0.2" version "1.0.5"
resolved "https://registry.yarnpkg.com/@actions/cache/-/cache-1.0.2.tgz#a223dcc752c7f988016d28ee7232f930f85cec61" resolved "https://registry.yarnpkg.com/@actions/cache/-/cache-1.0.5.tgz#ba98725d38611b5426fc57a2f00bd8b0d9202f36"
integrity sha512-CzAseaJ4cKmOI58EIWUb/LfeYdM7Y25s39OEMtWAhEPrPPzrbSEjGHCLaYjJ0V8C4iojo8vBYh5B3OIJ37EiJw== integrity sha512-TcvJOduwsPP27KLmIa5cqXsQYFK2GzILcEpnhvYmhGwi1aYx9XwhKmp6Im8X6DJMBxbvupKPsOntG6f6sSkIPA==
dependencies: dependencies:
"@actions/core" "^1.2.4" "@actions/core" "^1.2.6"
"@actions/exec" "^1.0.1" "@actions/exec" "^1.0.1"
"@actions/glob" "^0.1.0" "@actions/glob" "^0.1.0"
"@actions/http-client" "^1.0.8" "@actions/http-client" "^1.0.9"
"@actions/io" "^1.0.1" "@actions/io" "^1.0.1"
"@azure/ms-rest-js" "^2.0.7" "@azure/ms-rest-js" "^2.0.7"
"@azure/storage-blob" "^12.1.2" "@azure/storage-blob" "^12.1.2"
semver "^6.1.0" semver "^6.1.0"
uuid "^3.3.3" uuid "^3.3.3"
"@actions/core@^1.2.0", "@actions/core@^1.2.3", "@actions/core@^1.2.4", "@actions/core@^1.2.6": "@actions/core@^1.2.0", "@actions/core@^1.2.3", "@actions/core@^1.2.6":
version "1.2.6" version "1.2.6"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09" resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA== integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
@@ -44,6 +44,13 @@
dependencies: dependencies:
tunnel "0.0.6" tunnel "0.0.6"
"@actions/http-client@^1.0.9":
version "1.0.9"
resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-1.0.9.tgz#af1947d020043dbc6a3b4c5918892095c30ffb52"
integrity sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg==
dependencies:
tunnel "0.0.6"
"@actions/io@^1.0.1", "@actions/io@^1.0.2": "@actions/io@^1.0.1", "@actions/io@^1.0.2":
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27" resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27"