Skip to content

Commit

Permalink
Add support for latest release
Browse files Browse the repository at this point in the history
  • Loading branch information
Schultzer committed May 16, 2024
1 parent db0f43e commit 3f89461
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
24 changes: 24 additions & 0 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9995,6 +9995,8 @@ async function maybeInstallRebar3(rebar3Spec) {
}

async function getOTPVersion(otpSpec0, osVersion) {
otpSpec0 =
otpSpec0 == 'latest' ? await getLatestVersion('erlang', 'otp') : otpSpec0
const otpVersions = await getOTPVersions(osVersion)
let spec = otpSpec0.replace(/^OTP-/, '')
const versions = otpVersions
Expand All @@ -10010,6 +10012,14 @@ async function getOTPVersion(otpSpec0, osVersion) {
}

async function getElixirVersion(exSpec0, otpVersion0) {
exSpec0 =
exSpec0 == 'latest'
? await getLatestVersion('elixir-lang', 'elixir')
: exSpec0
otpVersion0 =
otpVersion0 == 'latest'
? await getLatestVersion('erlang', 'otp')
: otpVersion0
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2]
const otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]

Expand Down Expand Up @@ -10052,6 +10062,10 @@ async function getElixirVersion(exSpec0, otpVersion0) {
}

async function getGleamVersion(gleamSpec0) {
gleamSpec0 =
gleamSpec0 == 'latest'
? await getLatestVersion('gleam-lang', 'gleam')
: gleamSpec0
const gleamVersions = await getGleamVersions()
const spec = gleamSpec0
const versions = gleamVersions
Expand All @@ -10067,6 +10081,8 @@ async function getGleamVersion(gleamSpec0) {
}

async function getRebar3Version(r3Spec) {
r3Spec =
r3Spec == 'latest' ? await getLatestVersion('erlang', 'rebar3') : r3Spec
const rebar3Versions = await getRebar3Versions()
const spec = r3Spec
const versions = rebar3Versions
Expand Down Expand Up @@ -10205,6 +10221,14 @@ async function getRebar3Versions() {
return rebar3VersionsListing
}

async function getLatestVersion(owner, repo) {
const response = await fetch(
`https://api.github.com/repos/${owner}/${repo}/releases/latest`,
)
const json = await response.json()
return json.tag_name
}

function isStrictVersion() {
return getInput('version-type', false) === 'strict'
}
Expand Down
24 changes: 24 additions & 0 deletions src/setup-beam.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ async function maybeInstallRebar3(rebar3Spec) {
}

async function getOTPVersion(otpSpec0, osVersion) {
otpSpec0 =
otpSpec0 == 'latest' ? await getLatestVersion('erlang', 'otp') : otpSpec0
const otpVersions = await getOTPVersions(osVersion)
let spec = otpSpec0.replace(/^OTP-/, '')
const versions = otpVersions
Expand All @@ -179,6 +181,14 @@ async function getOTPVersion(otpSpec0, osVersion) {
}

async function getElixirVersion(exSpec0, otpVersion0) {
exSpec0 =
exSpec0 == 'latest'
? await getLatestVersion('elixir-lang', 'elixir')
: exSpec0
otpVersion0 =
otpVersion0 == 'latest'
? await getLatestVersion('erlang', 'otp')
: otpVersion0
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2]
const otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]

Expand Down Expand Up @@ -221,6 +231,10 @@ async function getElixirVersion(exSpec0, otpVersion0) {
}

async function getGleamVersion(gleamSpec0) {
gleamSpec0 =
gleamSpec0 == 'latest'
? await getLatestVersion('gleam-lang', 'gleam')
: gleamSpec0
const gleamVersions = await getGleamVersions()
const spec = gleamSpec0
const versions = gleamVersions
Expand All @@ -236,6 +250,8 @@ async function getGleamVersion(gleamSpec0) {
}

async function getRebar3Version(r3Spec) {
r3Spec =
r3Spec == 'latest' ? await getLatestVersion('erlang', 'rebar3') : r3Spec
const rebar3Versions = await getRebar3Versions()
const spec = r3Spec
const versions = rebar3Versions
Expand Down Expand Up @@ -374,6 +390,14 @@ async function getRebar3Versions() {
return rebar3VersionsListing
}

async function getLatestVersion(owner, repo) {
const response = await fetch(
`https://api.github.com/repos/${owner}/${repo}/releases/latest`,
)
const json = await response.json()
return json.tag_name
}

function isStrictVersion() {
return getInput('version-type', false) === 'strict'
}
Expand Down
37 changes: 36 additions & 1 deletion test/setup-beam.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,12 @@ async function testOTPVersions() {
expected = 'master'
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
assert.deepStrictEqual(got, expected)

spec = 'latest'
osVersion = 'ubuntu-22.04'
expected = 'OTP-26.2.5'
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
assert.deepStrictEqual(got, expected)
}

if (process.platform === 'win32') {
Expand All @@ -216,6 +222,12 @@ async function testOTPVersions() {
expected = '23.0.4'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)

spec = 'latest'
osVersion = 'windows-2019'
expected = '26.2.5'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)
}

simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
Expand Down Expand Up @@ -289,6 +301,18 @@ async function testElixirVersions() {
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)

spec = 'latest'
otpVersion = '24'
expected = 'v1.16.2-otp-24'
got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)

spec = 'latest'
otpVersion = 'latest'
expected = 'v1.16.2-otp-26'
got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)

simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
}

Expand Down Expand Up @@ -317,6 +341,12 @@ async function testGleamVersions() {
got = await setupBeam.getGleamVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)

spec = 'latest'
otpVersion = 'OTP-24'
expected = 'v1.1.0'
got = await setupBeam.getGleamVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
}

async function testRebar3Versions() {
Expand All @@ -338,6 +368,11 @@ async function testRebar3Versions() {
expected = '3.10.0'
got = await setupBeam.getRebar3Version(spec)
assert.deepStrictEqual(got, expected)

spec = 'latest'
expected = '3.23.0'
got = await setupBeam.getRebar3Version(spec)
assert.deepStrictEqual(got, expected)
}

async function testGetVersionFromSpec() {
Expand Down Expand Up @@ -528,7 +563,7 @@ async function testParseVersionFile() {
erlang ref:v${erlang}# comment, no space, and ref:v
elixir ref:${elixir} # comment, with space and ref:
not-gleam 0.23 # not picked up
gleam ${gleam}
gleam ${gleam}
rebar ${rebar3}`
const filename = 'test/.tool-versions'
fs.writeFileSync(filename, toolVersions)
Expand Down

0 comments on commit 3f89461

Please sign in to comment.