mirror of
https://github.com/erlef/setup-beam.git
synced 2026-10-30 09:43:26 +00:00
Ease debugging, fix some CI issues, tweak folder structure (#200)
* Enable debug for OTP versions' listings * Make it easier to detect * Prevent error annotation on expected error The fact that one mirror fails in the above test and others follow working is test enough for me A single failing mirror should fail, but it's confusing to have an error annotation for a success (via continue-on-error) while not being able to suppress it via GitHub Actions * Trying to figure out why we have a rebar_core exception Might simply be that the bug is already fixed and we need to bump rebar3 * Try to debug into non-JSON input * Prevent error in rebar_core We're getting Access Denied for Fetching registry from "https://repo.hex.pm:443/registry.ets.gz?" * Try to figure out what's breaking tests * Make jsonParse(...).map failure more understandable * Ease test maintenance * Tweak folder structure while moving console._ to core._
This commit is contained in:
1 parent
cf692c3264
commit
b9783cdeea
42 files changed
+193
-127
No files matched your search
@@ -9,7 +9,6 @@ parserOptions:
|
|||||||
rules:
|
rules:
|
||||||
indent: ["warn", 2]
|
indent: ["warn", 2]
|
||||||
max-len: ["warn", 100]
|
max-len: ["warn", 100]
|
||||||
no-console: 0
|
|
||||||
no-undef: "error"
|
no-undef: "error"
|
||||||
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
||||||
no-use-before-define: 0
|
no-use-before-define: 0
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ jobs:
|
|||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
version-file: __tests__/.tool-versions
|
version-file: test/.tool-versions
|
||||||
version-type: strict
|
version-type: strict
|
||||||
|
|
||||||
unit_tests_windows:
|
unit_tests_windows:
|
||||||
|
|||||||
@@ -35,24 +35,3 @@ jobs:
|
|||||||
https://mirror.invalid
|
https://mirror.invalid
|
||||||
https://cdn.jsdelivr.net/hex
|
https://cdn.jsdelivr.net/hex
|
||||||
https://builds.hex.pm
|
https://builds.hex.pm
|
||||||
|
|
||||||
test-invalid-mirror:
|
|
||||||
name: Test errors with mirror
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use erlef/setup-beam
|
|
||||||
id: failing-setup-beam
|
|
||||||
uses: ./
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
otp-version: '24.3.4.6'
|
|
||||||
elixir-version: 'v1.13.4'
|
|
||||||
install-rebar: true
|
|
||||||
install-hex: true
|
|
||||||
hexpm-mirrors: https://mirror.invalid
|
|
||||||
- name: Report unexpected success
|
|
||||||
if: ${{ steps.failing-setup-beam.outcome == 'success' }}
|
|
||||||
run: |
|
|
||||||
echo "Action is expected to fail"
|
|
||||||
exit 1
|
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
- elixir-version: 'v1.4'
|
- elixir-version: 'v1.4'
|
||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
rebar3-version: '3.6.0'
|
rebar3-version: '3.15.0'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.4'
|
- elixir-version: 'v1.4'
|
||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
@@ -165,23 +165,23 @@ jobs:
|
|||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Elixir/Mix project tests
|
- name: Run Elixir/Mix project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/elixir_mix
|
cd test/projects/elixir_mix
|
||||||
mix deps.get
|
mix deps.get
|
||||||
mix test
|
mix test
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Erlang/rebar3 project tests
|
- name: Run Erlang/rebar3 project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/erlang_rebar3
|
cd test/projects/erlang_rebar3
|
||||||
rebar3 ct
|
rebar3 ct
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: Format Gleam project (without installing Erlang/OTP)
|
- name: Format Gleam project (without installing Erlang/OTP)
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/gleam_gleam
|
cd test/projects/gleam_gleam
|
||||||
gleam format
|
gleam format
|
||||||
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
||||||
- name: Run Gleam project tests (without `rebar3`)
|
- name: Run Gleam project tests (without `rebar3`)
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/gleam_gleam
|
cd test/projects/gleam_gleam
|
||||||
gleam test
|
gleam test
|
||||||
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
||||||
- name: Run escript
|
- name: Run escript
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ jobs:
|
|||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: rebar3 from Rust
|
- name: rebar3 from Rust
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/rust_rebar3_cmd
|
cd test/projects/rust_rebar3_cmd
|
||||||
cargo test -- --nocapture
|
cargo test -- --nocapture
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: mix version and help (CLI)
|
- name: mix version and help (CLI)
|
||||||
@@ -90,13 +90,13 @@ jobs:
|
|||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Elixir/Mix project tests
|
- name: Run Elixir/Mix project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/elixir_mix
|
cd test/projects/elixir_mix
|
||||||
mix deps.get
|
mix deps.get
|
||||||
mix test
|
mix test
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Erlang/rebar3 project tests
|
- name: Run Erlang/rebar3 project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/erlang_rebar3
|
cd test/projects/erlang_rebar3
|
||||||
rebar3 ct
|
rebar3 ct
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: Run escript
|
- name: Run escript
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
node_modules/**
|
node_modules/**
|
||||||
dist/.github/workflows
|
dist/.github/workflows
|
||||||
__tests__/.tool-versions
|
test/.tool-versions
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Elixir Problem Matchers
|
# Elixir Problem Matchers
|
||||||
|
|
||||||
Elixir Problem Matchers in [elixir-matchers.json](.github/elixir-matchers.json)
|
Elixir Problem Matchers in [elixir-matchers.json](matchers/elixir-matchers.json)
|
||||||
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
||||||
available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
|
available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
|
||||||
|
|
||||||
|
|||||||
File renamed without changes.
Vendored
+40
-32
@@ -7303,13 +7303,11 @@ async function main() {
|
|||||||
|
|
||||||
async function installOTP(otpSpec, osVersion, hexMirrors) {
|
async function installOTP(otpSpec, osVersion, hexMirrors) {
|
||||||
const otpVersion = await getOTPVersion(otpSpec, osVersion, hexMirrors)
|
const otpVersion = await getOTPVersion(otpSpec, osVersion, hexMirrors)
|
||||||
console.log(
|
core.startGroup(`Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`)
|
||||||
`##[group]Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`,
|
|
||||||
)
|
|
||||||
await installer.installOTP(osVersion, otpVersion, hexMirrors)
|
await installer.installOTP(osVersion, otpVersion, hexMirrors)
|
||||||
core.setOutput('otp-version', otpVersion)
|
core.setOutput('otp-version', otpVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/otp/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/otp/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
return otpVersion
|
return otpVersion
|
||||||
}
|
}
|
||||||
@@ -7323,19 +7321,17 @@ async function maybeInstallElixir(elixirSpec, otpSpec, hexMirrors) {
|
|||||||
otpSpec,
|
otpSpec,
|
||||||
hexMirrors,
|
hexMirrors,
|
||||||
)
|
)
|
||||||
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
core.startGroup(`Installing Elixir ${elixirVersion}`)
|
||||||
await installer.installElixir(elixirVersion, hexMirrors)
|
await installer.installElixir(elixirVersion, hexMirrors)
|
||||||
core.setOutput('elixir-version', elixirVersion)
|
core.setOutput('elixir-version', elixirVersion)
|
||||||
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
||||||
if (disableProblemMatchers === 'false') {
|
if (disableProblemMatchers === 'false') {
|
||||||
const matchersPath = __nccwpck_require__.ab + ".github"
|
const elixirMatchers = __nccwpck_require__.ab + "elixir-matchers.json"
|
||||||
console.log(
|
core.info(`##[add-matcher]${elixirMatchers}`)
|
||||||
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
core.addPath(`${os.homedir()}/.mix/escripts`)
|
core.addPath(`${os.homedir()}/.mix/escripts`)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -7363,9 +7359,9 @@ async function mix(shouldMix, what, hexMirrors) {
|
|||||||
if (shouldMix === 'true') {
|
if (shouldMix === 'true') {
|
||||||
const cmd = 'mix'
|
const cmd = 'mix'
|
||||||
const args = [`local.${what}`, '--force']
|
const args = [`local.${what}`, '--force']
|
||||||
console.log(`##[group]Running ${cmd} ${args}`)
|
core.startGroup(`Running ${cmd} ${args}`)
|
||||||
await mixWithMirrors(cmd, args, hexMirrors)
|
await mixWithMirrors(cmd, args, hexMirrors)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7374,11 +7370,11 @@ async function maybeInstallGleam(gleamSpec) {
|
|||||||
|
|
||||||
if (gleamSpec) {
|
if (gleamSpec) {
|
||||||
const gleamVersion = await getGleamVersion(gleamSpec)
|
const gleamVersion = await getGleamVersion(gleamSpec)
|
||||||
console.log(`##[group]Installing Gleam ${gleamVersion}`)
|
core.startGroup(`Installing Gleam ${gleamVersion}`)
|
||||||
await installer.installGleam(gleamVersion)
|
await installer.installGleam(gleamVersion)
|
||||||
core.setOutput('gleam-version', gleamVersion)
|
core.setOutput('gleam-version', gleamVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -7396,11 +7392,11 @@ async function maybeInstallRebar3(rebar3Spec) {
|
|||||||
} else {
|
} else {
|
||||||
rebar3Version = await getRebar3Version(rebar3Spec)
|
rebar3Version = await getRebar3Version(rebar3Spec)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
core.startGroup(`Installing rebar3 ${rebar3Version}`)
|
||||||
await installer.installRebar3(rebar3Version)
|
await installer.installRebar3(rebar3Version)
|
||||||
core.setOutput('rebar3-version', rebar3Version)
|
core.setOutput('rebar3-version', rebar3Version)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -7493,16 +7489,16 @@ async function getRebar3Version(r3Spec) {
|
|||||||
|
|
||||||
async function getOTPVersions(osVersion, hexMirrors) {
|
async function getOTPVersions(osVersion, hexMirrors) {
|
||||||
let otpVersionsListings
|
let otpVersionsListings
|
||||||
|
let originListing
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
otpVersionsListings = await getWithMirrors(
|
originListing = `/builds/otp/${osVersion}/builds.txt`
|
||||||
`/builds/otp/${osVersion}/builds.txt`,
|
otpVersionsListings = await getWithMirrors(originListing, hexMirrors)
|
||||||
hexMirrors,
|
|
||||||
)
|
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
const originListing =
|
originListing =
|
||||||
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
||||||
otpVersionsListings = await get(originListing, [1, 2, 3])
|
otpVersionsListings = await get(originListing, [1, 2, 3])
|
||||||
}
|
}
|
||||||
|
debugLog(`OTP versions listings from ${originListing}`, otpVersionsListings)
|
||||||
|
|
||||||
const otpVersions = new Map()
|
const otpVersions = new Map()
|
||||||
|
|
||||||
@@ -7519,7 +7515,7 @@ async function getOTPVersions(osVersion, hexMirrors) {
|
|||||||
})
|
})
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
otpVersionsListings.forEach((otpVersionsListing) => {
|
otpVersionsListings.forEach((otpVersionsListing) => {
|
||||||
jsonParse(otpVersionsListing)
|
jsonParseAsList(otpVersionsListing)
|
||||||
.map((x) => x.assets)
|
.map((x) => x.assets)
|
||||||
.flat()
|
.flat()
|
||||||
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
||||||
@@ -7566,7 +7562,7 @@ async function getGleamVersions() {
|
|||||||
)
|
)
|
||||||
const gleamVersionsListing = []
|
const gleamVersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
jsonParse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => gleamVersionsListing.push(v))
|
.forEach((v) => gleamVersionsListing.push(v))
|
||||||
@@ -7581,7 +7577,7 @@ async function getRebar3Versions() {
|
|||||||
)
|
)
|
||||||
const rebar3VersionsListing = []
|
const rebar3VersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
jsonParse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => rebar3VersionsListing.push(v))
|
.forEach((v) => rebar3VersionsListing.push(v))
|
||||||
@@ -7772,7 +7768,7 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
`The specified version file, ${versionFilePath0}, does not exist`,
|
`The specified version file, ${versionFilePath0}, does not exist`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Parsing version file at ${versionFilePath0}`)
|
core.startGroup(`Parsing version file at ${versionFilePath0}`)
|
||||||
const appVersions = new Map()
|
const appVersions = new Map()
|
||||||
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
||||||
// For the time being we parse .tool-versions
|
// For the time being we parse .tool-versions
|
||||||
@@ -7784,31 +7780,43 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
const app = appVersion[1]
|
const app = appVersion[1]
|
||||||
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
||||||
const [, , version] = appVersion
|
const [, , version] = appVersion
|
||||||
console.log(`Consuming ${app} at version ${version}`)
|
core.info(`Consuming ${app} at version ${version}`)
|
||||||
appVersions.set(app, version)
|
appVersions.set(app, version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (!appVersions.size) {
|
if (!appVersions.size) {
|
||||||
console.log('There was apparently nothing to consume')
|
core.info('There was apparently nothing to consume')
|
||||||
} else {
|
} else {
|
||||||
console.log('... done!')
|
core.info('... done!')
|
||||||
}
|
}
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
return appVersions
|
return appVersions
|
||||||
}
|
}
|
||||||
|
|
||||||
function jsonParse(maybeJson) {
|
function jsonParseAsList(maybeJson) {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(maybeJson)
|
const obj = JSON.parse(maybeJson)
|
||||||
|
if (!Array.isArray(obj)) {
|
||||||
|
throw new Error('expected a list!')
|
||||||
|
}
|
||||||
|
return obj
|
||||||
} catch (exc) {
|
} catch (exc) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Got an exception when trying to parse non-JSON ${maybeJson}: ${exc}`,
|
`Got an exception when trying to parse non-JSON list ${maybeJson}: ${exc}`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function debugLog(groupName, message) {
|
||||||
|
if (process.env.RUNNER_DEBUG) {
|
||||||
|
core.startGroup(`Debugging for ${groupName}`)
|
||||||
|
core.debug(message)
|
||||||
|
core.endGroup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getOTPVersion,
|
getOTPVersion,
|
||||||
getElixirVersion,
|
getElixirVersion,
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "elixir-mixCompileError",
|
||||||
|
"severity": "error",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^\\*\\* \\((\\w+)\\) (.*):(\\d+): (.*)$",
|
||||||
|
"file": 2,
|
||||||
|
"line": 3,
|
||||||
|
"message": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"owner": "elixir-mixCompileWarning",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^warning: (.*)$",
|
||||||
|
"message": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^ (.*):(\\d+).*$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"owner": "elixir-mixTestFailure",
|
||||||
|
"severity": "error",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^\\s*\\d+\\) (.*)$",
|
||||||
|
"message": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^\\s*(.*):(\\d+)$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"owner": "elixir-credoOutputDefault",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^\u2503\\s\\[\\w\\]\\s[\u2191|\u2197|\u2192|\u2198|\u2193]\\s(.*)$",
|
||||||
|
"message": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^\u2503\\s{7}(.*):(\\d+):(\\d+)\\s.*$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"column": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Generated
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.10.0",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
"@actions/http-client": "^2.1.0",
|
"@actions/http-client": "2.1.0",
|
||||||
"semver": "7.3.8"
|
"semver": "7.3.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
+3
-3
@@ -4,12 +4,12 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "ncc build src/setup-beam.js --no-cache",
|
"build": "ncc build src/setup-beam.js --no-cache",
|
||||||
"format": "prettier src/**/*.js --write && prettier __tests__/**/*.js --write",
|
"format": "prettier src/**/*.js --write && prettier test/**/*.js --write",
|
||||||
"jslint": "eslint src/**/*.js && eslint __tests__/**/*.js",
|
"jslint": "eslint src/**/*.js && eslint test/**/*.js",
|
||||||
"licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES",
|
"licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES",
|
||||||
"markdownlint": "markdownlint *.md",
|
"markdownlint": "markdownlint *.md",
|
||||||
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
||||||
"test": "node __tests__/setup-beam.test.js && node ./__tests__/problem-matchers.test.js",
|
"test": "node test/setup-beam.test.js && node ./test/problem-matchers.test.js",
|
||||||
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml",
|
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml",
|
||||||
"build-dist": "npm install && npm run build && npm run format && npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint"
|
"build-dist": "npm install && npm run build && npm run format && npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint"
|
||||||
},
|
},
|
||||||
|
|||||||
+44
-31
@@ -58,13 +58,11 @@ async function main() {
|
|||||||
|
|
||||||
async function installOTP(otpSpec, osVersion, hexMirrors) {
|
async function installOTP(otpSpec, osVersion, hexMirrors) {
|
||||||
const otpVersion = await getOTPVersion(otpSpec, osVersion, hexMirrors)
|
const otpVersion = await getOTPVersion(otpSpec, osVersion, hexMirrors)
|
||||||
console.log(
|
core.startGroup(`Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`)
|
||||||
`##[group]Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`,
|
|
||||||
)
|
|
||||||
await installer.installOTP(osVersion, otpVersion, hexMirrors)
|
await installer.installOTP(osVersion, otpVersion, hexMirrors)
|
||||||
core.setOutput('otp-version', otpVersion)
|
core.setOutput('otp-version', otpVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/otp/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/otp/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
return otpVersion
|
return otpVersion
|
||||||
}
|
}
|
||||||
@@ -78,19 +76,22 @@ async function maybeInstallElixir(elixirSpec, otpSpec, hexMirrors) {
|
|||||||
otpSpec,
|
otpSpec,
|
||||||
hexMirrors,
|
hexMirrors,
|
||||||
)
|
)
|
||||||
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
core.startGroup(`Installing Elixir ${elixirVersion}`)
|
||||||
await installer.installElixir(elixirVersion, hexMirrors)
|
await installer.installElixir(elixirVersion, hexMirrors)
|
||||||
core.setOutput('elixir-version', elixirVersion)
|
core.setOutput('elixir-version', elixirVersion)
|
||||||
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
||||||
if (disableProblemMatchers === 'false') {
|
if (disableProblemMatchers === 'false') {
|
||||||
const matchersPath = path.join(__dirname, '..', '.github')
|
const elixirMatchers = path.join(
|
||||||
console.log(
|
__dirname,
|
||||||
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
'..',
|
||||||
|
'matchers',
|
||||||
|
'elixir-matchers.json',
|
||||||
)
|
)
|
||||||
|
core.info(`##[add-matcher]${elixirMatchers}`)
|
||||||
}
|
}
|
||||||
core.addPath(`${os.homedir()}/.mix/escripts`)
|
core.addPath(`${os.homedir()}/.mix/escripts`)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -118,9 +119,9 @@ async function mix(shouldMix, what, hexMirrors) {
|
|||||||
if (shouldMix === 'true') {
|
if (shouldMix === 'true') {
|
||||||
const cmd = 'mix'
|
const cmd = 'mix'
|
||||||
const args = [`local.${what}`, '--force']
|
const args = [`local.${what}`, '--force']
|
||||||
console.log(`##[group]Running ${cmd} ${args}`)
|
core.startGroup(`Running ${cmd} ${args}`)
|
||||||
await mixWithMirrors(cmd, args, hexMirrors)
|
await mixWithMirrors(cmd, args, hexMirrors)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,11 +130,11 @@ async function maybeInstallGleam(gleamSpec) {
|
|||||||
|
|
||||||
if (gleamSpec) {
|
if (gleamSpec) {
|
||||||
const gleamVersion = await getGleamVersion(gleamSpec)
|
const gleamVersion = await getGleamVersion(gleamSpec)
|
||||||
console.log(`##[group]Installing Gleam ${gleamVersion}`)
|
core.startGroup(`Installing Gleam ${gleamVersion}`)
|
||||||
await installer.installGleam(gleamVersion)
|
await installer.installGleam(gleamVersion)
|
||||||
core.setOutput('gleam-version', gleamVersion)
|
core.setOutput('gleam-version', gleamVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -151,11 +152,11 @@ async function maybeInstallRebar3(rebar3Spec) {
|
|||||||
} else {
|
} else {
|
||||||
rebar3Version = await getRebar3Version(rebar3Spec)
|
rebar3Version = await getRebar3Version(rebar3Spec)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
core.startGroup(`Installing rebar3 ${rebar3Version}`)
|
||||||
await installer.installRebar3(rebar3Version)
|
await installer.installRebar3(rebar3Version)
|
||||||
core.setOutput('rebar3-version', rebar3Version)
|
core.setOutput('rebar3-version', rebar3Version)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -248,16 +249,16 @@ async function getRebar3Version(r3Spec) {
|
|||||||
|
|
||||||
async function getOTPVersions(osVersion, hexMirrors) {
|
async function getOTPVersions(osVersion, hexMirrors) {
|
||||||
let otpVersionsListings
|
let otpVersionsListings
|
||||||
|
let originListing
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
otpVersionsListings = await getWithMirrors(
|
originListing = `/builds/otp/${osVersion}/builds.txt`
|
||||||
`/builds/otp/${osVersion}/builds.txt`,
|
otpVersionsListings = await getWithMirrors(originListing, hexMirrors)
|
||||||
hexMirrors,
|
|
||||||
)
|
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
const originListing =
|
originListing =
|
||||||
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
||||||
otpVersionsListings = await get(originListing, [1, 2, 3])
|
otpVersionsListings = await get(originListing, [1, 2, 3])
|
||||||
}
|
}
|
||||||
|
debugLog(`OTP versions listings from ${originListing}`, otpVersionsListings)
|
||||||
|
|
||||||
const otpVersions = new Map()
|
const otpVersions = new Map()
|
||||||
|
|
||||||
@@ -274,7 +275,7 @@ async function getOTPVersions(osVersion, hexMirrors) {
|
|||||||
})
|
})
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
otpVersionsListings.forEach((otpVersionsListing) => {
|
otpVersionsListings.forEach((otpVersionsListing) => {
|
||||||
jsonParse(otpVersionsListing)
|
jsonParseAsList(otpVersionsListing)
|
||||||
.map((x) => x.assets)
|
.map((x) => x.assets)
|
||||||
.flat()
|
.flat()
|
||||||
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
||||||
@@ -321,7 +322,7 @@ async function getGleamVersions() {
|
|||||||
)
|
)
|
||||||
const gleamVersionsListing = []
|
const gleamVersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
jsonParse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => gleamVersionsListing.push(v))
|
.forEach((v) => gleamVersionsListing.push(v))
|
||||||
@@ -336,7 +337,7 @@ async function getRebar3Versions() {
|
|||||||
)
|
)
|
||||||
const rebar3VersionsListing = []
|
const rebar3VersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
jsonParse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => rebar3VersionsListing.push(v))
|
.forEach((v) => rebar3VersionsListing.push(v))
|
||||||
@@ -527,7 +528,7 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
`The specified version file, ${versionFilePath0}, does not exist`,
|
`The specified version file, ${versionFilePath0}, does not exist`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Parsing version file at ${versionFilePath0}`)
|
core.startGroup(`Parsing version file at ${versionFilePath0}`)
|
||||||
const appVersions = new Map()
|
const appVersions = new Map()
|
||||||
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
||||||
// For the time being we parse .tool-versions
|
// For the time being we parse .tool-versions
|
||||||
@@ -539,31 +540,43 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
const app = appVersion[1]
|
const app = appVersion[1]
|
||||||
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
||||||
const [, , version] = appVersion
|
const [, , version] = appVersion
|
||||||
console.log(`Consuming ${app} at version ${version}`)
|
core.info(`Consuming ${app} at version ${version}`)
|
||||||
appVersions.set(app, version)
|
appVersions.set(app, version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (!appVersions.size) {
|
if (!appVersions.size) {
|
||||||
console.log('There was apparently nothing to consume')
|
core.info('There was apparently nothing to consume')
|
||||||
} else {
|
} else {
|
||||||
console.log('... done!')
|
core.info('... done!')
|
||||||
}
|
}
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
return appVersions
|
return appVersions
|
||||||
}
|
}
|
||||||
|
|
||||||
function jsonParse(maybeJson) {
|
function jsonParseAsList(maybeJson) {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(maybeJson)
|
const obj = JSON.parse(maybeJson)
|
||||||
|
if (!Array.isArray(obj)) {
|
||||||
|
throw new Error('expected a list!')
|
||||||
|
}
|
||||||
|
return obj
|
||||||
} catch (exc) {
|
} catch (exc) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Got an exception when trying to parse non-JSON ${maybeJson}: ${exc}`,
|
`Got an exception when trying to parse non-JSON list ${maybeJson}: ${exc}`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function debugLog(groupName, message) {
|
||||||
|
if (process.env.RUNNER_DEBUG) {
|
||||||
|
core.startGroup(`Debugging for ${groupName}`)
|
||||||
|
core.debug(message)
|
||||||
|
core.endGroup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getOTPVersion,
|
getOTPVersion,
|
||||||
getElixirVersion,
|
getElixirVersion,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const { problemMatcher } = require('../.github/elixir-matchers.json')
|
const core = require('@actions/core')
|
||||||
|
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||||
|
|
||||||
async function all() {
|
async function all() {
|
||||||
await testElixirMixCompileError()
|
await testElixirMixCompileError()
|
||||||
@@ -76,6 +77,6 @@ async function testElixirCredoOutputDefault() {
|
|||||||
all()
|
all()
|
||||||
.then(() => process.exit(0))
|
.then(() => process.exit(0))
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error(err)
|
core.error(err)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -4,9 +4,11 @@ simulateInput('rebar3-version', '3.20')
|
|||||||
simulateInput('install-rebar', 'true')
|
simulateInput('install-rebar', 'true')
|
||||||
simulateInput('install-hex', 'true')
|
simulateInput('install-hex', 'true')
|
||||||
simulateInput('github-token', process.env.GITHUB_TOKEN)
|
simulateInput('github-token', process.env.GITHUB_TOKEN)
|
||||||
|
simulateInput('hexpm-mirrors', ['https://builds.hex.pm'])
|
||||||
|
|
||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const core = require('@actions/core')
|
||||||
const setupBeam = require('../src/setup-beam')
|
const setupBeam = require('../src/setup-beam')
|
||||||
const installer = require('../src/installer')
|
const installer = require('../src/installer')
|
||||||
|
|
||||||
@@ -174,6 +176,7 @@ async function testElixirVersions() {
|
|||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
let otpVersion
|
let otpVersion
|
||||||
|
let before
|
||||||
const hexMirrors = ['https://repo.hex.pm']
|
const hexMirrors = ['https://repo.hex.pm']
|
||||||
|
|
||||||
spec = '1.1.x'
|
spec = '1.1.x'
|
||||||
@@ -194,37 +197,37 @@ async function testElixirVersions() {
|
|||||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1.14.0'
|
spec = '1.14.0'
|
||||||
otpVersion = 'master'
|
otpVersion = 'master'
|
||||||
expected = 'v1.14.0'
|
expected = 'v1.14.0'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'v1.11.0-rc.0'
|
spec = 'v1.11.0-rc.0'
|
||||||
otpVersion = 'OTP-23'
|
otpVersion = 'OTP-23'
|
||||||
expected = 'v1.11.0-rc.0-otp-23'
|
expected = 'v1.11.0-rc.0-otp-23'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'v1.11.0'
|
spec = 'v1.11.0'
|
||||||
otpVersion = '22.3.4.2'
|
otpVersion = '22.3.4.2'
|
||||||
expected = 'v1.11.0-otp-22'
|
expected = 'v1.11.0-otp-22'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'main'
|
spec = 'main'
|
||||||
otpVersion = '23.1'
|
otpVersion = '23.1'
|
||||||
expected = 'main-otp-23'
|
expected = 'main-otp-23'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testGleamVersions() {
|
async function testGleamVersions() {
|
||||||
@@ -245,13 +248,13 @@ async function testGleamVersions() {
|
|||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
const before = simulateInput('version-type', 'strict')
|
||||||
spec = 'v0.14.0-rc2'
|
spec = 'v0.14.0-rc2'
|
||||||
otpVersion = 'OTP-22'
|
otpVersion = 'OTP-22'
|
||||||
expected = 'v0.14.0-rc2'
|
expected = 'v0.14.0-rc2'
|
||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testRebar3Versions() {
|
async function testRebar3Versions() {
|
||||||
@@ -279,6 +282,7 @@ async function testGetVersionFromSpec() {
|
|||||||
let got
|
let got
|
||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
|
let before
|
||||||
const versions = [
|
const versions = [
|
||||||
'3.2.30.5',
|
'3.2.30.5',
|
||||||
'3.2.3.5',
|
'3.2.3.5',
|
||||||
@@ -320,19 +324,19 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1'
|
spec = '1'
|
||||||
expected = '1'
|
expected = '1'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1.0'
|
spec = '1.0'
|
||||||
expected = '1.0'
|
expected = '1.0'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = '2'
|
spec = '2'
|
||||||
expected = '2.10'
|
expected = '2.10'
|
||||||
@@ -359,12 +363,12 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '24.0-rc3'
|
spec = '24.0-rc3'
|
||||||
expected = '24.0-rc3'
|
expected = '24.0-rc3'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = '24.0-rc2'
|
spec = '24.0-rc2'
|
||||||
expected = '24.0-rc2'
|
expected = '24.0-rc2'
|
||||||
@@ -391,24 +395,24 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'master'
|
spec = 'master'
|
||||||
expected = 'master'
|
expected = 'master'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = 'master'
|
spec = 'master'
|
||||||
expected = 'master'
|
expected = 'master'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '22.3.4.2'
|
spec = '22.3.4.2'
|
||||||
expected = '22.3.4.2'
|
expected = '22.3.4.2'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testParseVersionFile() {
|
async function testParseVersionFile() {
|
||||||
@@ -427,7 +431,7 @@ elixir ${elixir} # comment, with space
|
|||||||
not-gleam 0.23 # not picked up
|
not-gleam 0.23 # not picked up
|
||||||
gleam ${gleam}
|
gleam ${gleam}
|
||||||
rebar ${rebar3}`
|
rebar ${rebar3}`
|
||||||
const filename = '__tests__/.tool-versions'
|
const filename = 'test/.tool-versions'
|
||||||
fs.writeFileSync(filename, toolVersions)
|
fs.writeFileSync(filename, toolVersions)
|
||||||
process.env.GITHUB_WORKSPACE = ''
|
process.env.GITHUB_WORKSPACE = ''
|
||||||
const appVersions = setupBeam.parseVersionFile(filename)
|
const appVersions = setupBeam.parseVersionFile(filename)
|
||||||
@@ -454,13 +458,13 @@ rebar ${rebar3}`
|
|||||||
}
|
}
|
||||||
|
|
||||||
function unsimulateInput(key) {
|
function unsimulateInput(key) {
|
||||||
const before = process.env[input(key)]
|
return simulateInput(key, '')
|
||||||
simulateInput(key, '')
|
|
||||||
return before
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function simulateInput(key, value) {
|
function simulateInput(key, value) {
|
||||||
|
const before = process.env[input(key)]
|
||||||
process.env[input(key)] = value
|
process.env[input(key)] = value
|
||||||
|
return before
|
||||||
}
|
}
|
||||||
|
|
||||||
function input(key) {
|
function input(key) {
|
||||||
@@ -470,6 +474,6 @@ function input(key) {
|
|||||||
all()
|
all()
|
||||||
.then(() => process.exit(0))
|
.then(() => process.exit(0))
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error(err)
|
core.error(err)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
Reference in new issue
Block a user