From f5483241dbda2b55868af79144ee5c0cc16cc599 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sat, 1 Feb 2020 18:05:14 +0100 Subject: [PATCH] Add support for ruby-head --- .github/workflows/test.yml | 2 +- README.md | 2 +- dist/index.js | 31 +++++++++++++++++++---------- generate-ruby-installer-versions.rb | 2 ++ index.js | 2 +- ruby-install-builder-versions.js | 6 ++++-- ruby-install-builder.js | 20 ++++++++++++------- windows-versions.js | 3 ++- 8 files changed, 44 insertions(+), 24 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e09765a..61cbc7c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: matrix: os: [ ubuntu-16.04, ubuntu-18.04, macos-latest, windows-latest ] # Use various version syntaxes here for testing - ruby: [ .ruby-version, 2.3, ruby-2.4, 2.5, ruby-2.6.5, 2.7.0, jruby, truffleruby, truffleruby-head, rubinius ] + ruby: [ .ruby-version, 2.3, ruby-2.4, 2.5, ruby-2.6.5, 2.7.0, ruby-head, jruby, truffleruby, truffleruby-head, rubinius ] exclude: - os: windows-latest ruby: truffleruby diff --git a/README.md b/README.md index ef849b3..3c4b254 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby: | Interpreter | Versions | | ----------- | -------- | -| Ruby | 2.3.0 - 2.3.8, 2.4.0 - 2.4.9, 2.5.0 - 2.5.7, 2.6.0 - 2.6.5, 2.7.0 | +| Ruby | 2.3.0 - 2.3.8, 2.4.0 - 2.4.9, 2.5.0 - 2.5.7, 2.6.0 - 2.6.5, 2.7.0, head | | JRuby | 9.2.9.0 | | TruffleRuby | 19.3.0, 19.3.1, head | | Rubinius | 4.13 | diff --git a/dist/index.js b/dist/index.js index 975af02..e038719 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1442,7 +1442,7 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, version) if (!engineVersions.includes(version)) { const latestToFirstVersion = engineVersions.slice().reverse() - const found = latestToFirstVersion.find(v => v.startsWith(version)) + const found = latestToFirstVersion.find(v => v !== 'head' && v.startsWith(version)) if (found) { version = found } else { @@ -4875,9 +4875,6 @@ const axios = __webpack_require__(53) const builderReleaseTag = 'builds-newer-openssl' const releasesURL = 'https://github.com/eregon/ruby-install-builder/releases' -const truffleRubyHeadReleaseURL = 'https://github.com/eregon/truffleruby-dev-builder/releases/download' -const truffleRubyHeadMetadataURL = 'https://raw.githubusercontent.com/eregon/truffleruby-dev-builder/metadata/latest_build.tag' - function getAvailableVersions(platform, engine) { return rubyBuilderVersions.getVersions(platform)[engine] } @@ -4907,15 +4904,24 @@ async function downloadAndExtract(platform, ruby) { } async function getDownloadURL(platform, ruby) { - if (ruby === 'truffleruby-head') { - const response = await axios.get(truffleRubyHeadMetadataURL) - const tag = response.data.trim() - return `${truffleRubyHeadReleaseURL}/${tag}/${ruby}-${platform}.tar.gz` + if (ruby.endsWith('-head')) { + return getLatestHeadBuildURL(platform, ruby) } else { return `${releasesURL}/download/${builderReleaseTag}/${ruby}-${platform}.tar.gz` } } +async function getLatestHeadBuildURL(platform, ruby) { + const engine = ruby.split('-')[0] + const repository = `eregon/${engine}-dev-builder` + const metadataURL = `https://raw.githubusercontent.com/${repository}/metadata/latest_build.tag` + const releasesURL = `https://github.com/${repository}/releases/download` + + const response = await axios.get(metadataURL) + const tag = response.data.trim() + return `${releasesURL}/${tag}/${ruby}-${platform}.tar.gz` +} + /***/ }), @@ -4932,13 +4938,15 @@ function getVersions(platform) { "2.4.0", "2.4.1", "2.4.2", "2.4.3", "2.4.4", "2.4.5", "2.4.6", "2.4.7", "2.4.9", "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.6.0", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", - "2.7.0" + "2.7.0", + "head" ], "jruby": [ "9.2.9.0" ], "truffleruby": [ - "head", "19.3.0", "19.3.1" + "19.3.0", "19.3.1", + "head" ] } @@ -5186,7 +5194,8 @@ const versions = { "2.6.3": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z", "2.6.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z", "2.6.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z", - "2.7.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z" + "2.7.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z", + "head": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z" } diff --git a/generate-ruby-installer-versions.rb b/generate-ruby-installer-versions.rb index 6ec86b0..223fab9 100644 --- a/generate-ruby-installer-versions.rb +++ b/generate-ruby-installer-versions.rb @@ -23,5 +23,7 @@ versions = entries.select { |entry| [version, entry[:href]] }.to_h +versions['head'] = 'https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z' + js = "export const versions = #{JSON.pretty_generate(versions)}\n" File.write 'windows-versions.js', js diff --git a/index.js b/index.js index 45ca45f..dbb81a5 100644 --- a/index.js +++ b/index.js @@ -51,7 +51,7 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, version) if (!engineVersions.includes(version)) { const latestToFirstVersion = engineVersions.slice().reverse() - const found = latestToFirstVersion.find(v => v.startsWith(version)) + const found = latestToFirstVersion.find(v => v !== 'head' && v.startsWith(version)) if (found) { version = found } else { diff --git a/ruby-install-builder-versions.js b/ruby-install-builder-versions.js index 0e56cab..3d4c182 100644 --- a/ruby-install-builder-versions.js +++ b/ruby-install-builder-versions.js @@ -5,13 +5,15 @@ export function getVersions(platform) { "2.4.0", "2.4.1", "2.4.2", "2.4.3", "2.4.4", "2.4.5", "2.4.6", "2.4.7", "2.4.9", "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.6.0", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", - "2.7.0" + "2.7.0", + "head" ], "jruby": [ "9.2.9.0" ], "truffleruby": [ - "head", "19.3.0", "19.3.1" + "19.3.0", "19.3.1", + "head" ] } diff --git a/ruby-install-builder.js b/ruby-install-builder.js index 567453c..c777a95 100644 --- a/ruby-install-builder.js +++ b/ruby-install-builder.js @@ -9,9 +9,6 @@ const axios = require('axios') const builderReleaseTag = 'builds-newer-openssl' const releasesURL = 'https://github.com/eregon/ruby-install-builder/releases' -const truffleRubyHeadReleaseURL = 'https://github.com/eregon/truffleruby-dev-builder/releases/download' -const truffleRubyHeadMetadataURL = 'https://raw.githubusercontent.com/eregon/truffleruby-dev-builder/metadata/latest_build.tag' - export function getAvailableVersions(platform, engine) { return rubyBuilderVersions.getVersions(platform)[engine] } @@ -41,11 +38,20 @@ async function downloadAndExtract(platform, ruby) { } async function getDownloadURL(platform, ruby) { - if (ruby === 'truffleruby-head') { - const response = await axios.get(truffleRubyHeadMetadataURL) - const tag = response.data.trim() - return `${truffleRubyHeadReleaseURL}/${tag}/${ruby}-${platform}.tar.gz` + if (ruby.endsWith('-head')) { + return getLatestHeadBuildURL(platform, ruby) } else { return `${releasesURL}/download/${builderReleaseTag}/${ruby}-${platform}.tar.gz` } } + +async function getLatestHeadBuildURL(platform, ruby) { + const engine = ruby.split('-')[0] + const repository = `eregon/${engine}-dev-builder` + const metadataURL = `https://raw.githubusercontent.com/${repository}/metadata/latest_build.tag` + const releasesURL = `https://github.com/${repository}/releases/download` + + const response = await axios.get(metadataURL) + const tag = response.data.trim() + return `${releasesURL}/${tag}/${ruby}-${platform}.tar.gz` +} diff --git a/windows-versions.js b/windows-versions.js index 4228d3a..485412a 100644 --- a/windows-versions.js +++ b/windows-versions.js @@ -22,5 +22,6 @@ export const versions = { "2.6.3": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z", "2.6.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z", "2.6.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z", - "2.7.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z" + "2.7.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z", + "head": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z" }