mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 15:16:08 +00:00
Improve visibility (+ fix bugs) over version-type and opt-in versions (#57)
(and tweak README regarding action versioning)
This commit is contained in:
committed by
GitHub
parent
d8a37f5aac
commit
830642517c
Vendored
+31
-14
@@ -4777,7 +4777,8 @@ async function getOTPVersion(otpSpec0, osVersion) {
|
||||
}
|
||||
if (otpVersion === null) {
|
||||
throw new Error(
|
||||
`Requested Erlang/OTP version (${otpSpec0}) not found in version list`,
|
||||
`Requested Erlang/OTP version (${otpSpec0}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4788,7 +4789,7 @@ async function getElixirVersion(exSpec0, otpVersion) {
|
||||
const elixirVersions = await getElixirVersions()
|
||||
const semverVersions = Array.from(elixirVersions.keys()).sort()
|
||||
|
||||
const exSpec = exSpec0.match(/^(.+)(-otp-.+)/) || exSpec0.match(/^(.+)/)
|
||||
const exSpec = exSpec0.match(/^v?(.+)(-otp-.+)/) || exSpec0.match(/^v?(.+)/)
|
||||
let elixirVersion
|
||||
if (exSpec[2]) {
|
||||
throw new Error(
|
||||
@@ -4801,7 +4802,8 @@ async function getElixirVersion(exSpec0, otpVersion) {
|
||||
}
|
||||
if (!exSpec || elixirVersion === null) {
|
||||
throw new Error(
|
||||
`Requested Elixir version (${exSpec0}) not found in version list`,
|
||||
`Requested Elixir version (${exSpec0}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
}
|
||||
const otpMatch = otpVersion.match(/^(?:OTP-)?([^.]+)/)
|
||||
@@ -4824,11 +4826,11 @@ async function getElixirVersion(exSpec0, otpVersion) {
|
||||
} else {
|
||||
throw new Error(
|
||||
`Requested Elixir / Erlang/OTP version (${exSpec0} / ${otpVersion}) not ` +
|
||||
'found in version list',
|
||||
"found in version list (should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
}
|
||||
|
||||
return elixirVersionWithOTP
|
||||
return `v${elixirVersionWithOTP}`
|
||||
}
|
||||
|
||||
async function getRebar3Version(r3Spec) {
|
||||
@@ -4836,7 +4838,8 @@ async function getRebar3Version(r3Spec) {
|
||||
const rebar3Version = getVersionFromSpec(r3Spec, rebar3Versions)
|
||||
if (rebar3Version === null) {
|
||||
throw new Error(
|
||||
`Requested rebar3 version (${r3Spec}) not found in version list`,
|
||||
`Requested rebar3 version (${r3Spec}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4896,7 +4899,7 @@ async function getElixirVersions() {
|
||||
.split('\n')
|
||||
.forEach((line) => {
|
||||
const elixirMatch =
|
||||
line.match(/^(.+)-otp-([^ ]+)/) || line.match(/^([^ ]+)/)
|
||||
line.match(/^v?(.+)-otp-([^ ]+)/) || line.match(/^v?([^ ]+)/)
|
||||
const elixirVersion = elixirMatch[1]
|
||||
const otpVersion = elixirMatch[2]
|
||||
const otpVersions = otpVersionsForElixirMap.get(elixirVersion) || []
|
||||
@@ -4928,18 +4931,19 @@ async function getRebar3Versions() {
|
||||
function getVersionFromSpec(spec, versions) {
|
||||
let version = null
|
||||
|
||||
if (core.getInput('version-type', { required: false }) === 'strict') {
|
||||
if (
|
||||
spec.match(/rc/) ||
|
||||
core.getInput('version-type', { required: false }) === 'strict'
|
||||
) {
|
||||
version = spec
|
||||
}
|
||||
|
||||
if (version === null) {
|
||||
// We keep a map of semver => "spec" in order to use semver ranges to find appropriate versions
|
||||
const versionsMap = versions.sort(sortVersions).reduce((acc, v) => {
|
||||
try {
|
||||
acc[semver.coerce(v).version] = v
|
||||
} catch {
|
||||
// some stuff can't be coerced, like 'master'
|
||||
acc[v] = v
|
||||
if (!v.match(/rc/)) {
|
||||
// release candidates are opt-in
|
||||
acc[maybeCoerced(v)] = v
|
||||
}
|
||||
return acc
|
||||
}, {})
|
||||
@@ -4948,13 +4952,26 @@ function getVersionFromSpec(spec, versions) {
|
||||
version =
|
||||
versionsMap[semver.maxSatisfying(Object.keys(versionsMap), rangeForMax)]
|
||||
} else {
|
||||
version = versionsMap[spec]
|
||||
version = versionsMap[maybeCoerced(spec)]
|
||||
}
|
||||
}
|
||||
|
||||
return version
|
||||
}
|
||||
|
||||
function maybeCoerced(v) {
|
||||
let ret
|
||||
|
||||
try {
|
||||
ret = semver.coerce(v).version
|
||||
} catch {
|
||||
// some stuff can't be coerced, like 'master'
|
||||
ret = v
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
function sortVersions(left, right) {
|
||||
let ret = 0
|
||||
const newL = verAsComparableStr(left)
|
||||
|
||||
Reference in New Issue
Block a user