mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 14:34:21 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bc07a3af0 | ||
|
|
63dde36864 | ||
|
|
fde3324171 | ||
|
|
59aafb8612 | ||
|
|
ad1ebae995 |
@@ -15,7 +15,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15, windows-2016, windows-2019 ]
|
||||
os: [ ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0, windows-2016, windows-2019 ]
|
||||
# Use various version syntax here for testing
|
||||
ruby: [ 2.1, 2.2, 2.3, 2.4, 2.5, 2.6.6, 2.7, ruby-head, debug, jruby-9.1, jruby, jruby-head, truffleruby, truffleruby-head ]
|
||||
include:
|
||||
@@ -29,6 +29,8 @@ jobs:
|
||||
- { os: windows-2019, ruby: debug }
|
||||
- { os: windows-2019, ruby: truffleruby }
|
||||
- { os: windows-2019, ruby: truffleruby-head }
|
||||
- { os: macos-11.0, ruby: truffleruby }
|
||||
- { os: macos-11.0, ruby: truffleruby-head }
|
||||
|
||||
name: ${{ matrix.os }} ${{ matrix.ruby }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -39,7 +39,7 @@ The action works for all [GitHub-hosted runners](https://help.github.com/en/acti
|
||||
| Operating System | Recommended | Other Supported Versions |
|
||||
| ----------- | -------- | -------- |
|
||||
| Ubuntu | `ubuntu-latest` (= `ubuntu-18.04`) | `ubuntu-20.04`, `ubuntu-16.04` |
|
||||
| macOS | `macos-latest` (= `macos-10.15`) | |
|
||||
| macOS | `macos-latest` (= `macos-10.15`) | `macos-11.0` |
|
||||
| Windows | `windows-latest` (= `windows-2019`) | `windows-2016` |
|
||||
|
||||
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
|
||||
@@ -67,7 +67,6 @@ jobs:
|
||||
with:
|
||||
ruby-version: 2.6 # Not needed with a .ruby-version file
|
||||
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
||||
- run: bundle install
|
||||
- run: bundle exec rake
|
||||
```
|
||||
|
||||
@@ -93,7 +92,6 @@ jobs:
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby }}
|
||||
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
||||
- run: bundle install
|
||||
- run: bundle exec rake
|
||||
```
|
||||
|
||||
@@ -142,35 +140,6 @@ If there is a `Gemfile.lock` (or `$BUNDLE_GEMFILE.lock` or `gems.locked`), `bund
|
||||
To perform caching, this action will use `bundle config --local path vendor/bundle`.
|
||||
Therefore, the Bundler `path` should not be changed in your workflow for the cache to work (no `bundle config path`).
|
||||
|
||||
### Caching `bundle install` manually
|
||||
|
||||
You can also cache gems manually,
|
||||
but this is not recommended because it is verbose and very difficult to use a correct cache key.
|
||||
You can cache the installed gems with these two steps:
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: vendor/bundle
|
||||
key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/Gemfile.lock') }}
|
||||
restore-keys: |
|
||||
bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-
|
||||
- name: bundle install
|
||||
run: |
|
||||
bundle config deployment true
|
||||
bundle config path vendor/bundle
|
||||
bundle install --jobs 4
|
||||
```
|
||||
|
||||
When using a single OS, replace `${{ matrix.os }}` with the OS.
|
||||
When using a single job with a Ruby version, replace `${{ matrix.ruby }}` with the Ruby version.
|
||||
When using `.ruby-version`, replace `${{ matrix.ruby }}` with `${{ hashFiles('.ruby-version') }}`.
|
||||
When using `.tool-versions`, replace `${{ matrix.ruby }}` with `${{ hashFiles('.tool-versions') }}`.
|
||||
|
||||
This uses the [cache action](https://github.com/actions/cache).
|
||||
The code above is a more complete version of the [Ruby - Bundler example](https://github.com/actions/cache/blob/master/examples.md#ruby---bundler).
|
||||
Make sure to include `use-ruby` in the `key` to avoid conflicting with previous caches.
|
||||
|
||||
## Windows
|
||||
|
||||
Note that running CI on Windows can be quite challenging if you are not very familiar with Windows.
|
||||
|
||||
@@ -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, macos11
|
||||
if (match) {
|
||||
return `macos-${match[1]}.${match[2] || '0'}`
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
+31
-27
@@ -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, macos11
|
||||
if (match) {
|
||||
return `macos-${match[1]}.${match[2] || '0'}`
|
||||
}
|
||||
|
||||
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`
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = '';
|
||||
|
||||
+9
-2
@@ -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`
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user