56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
|
|
const core = require('@actions/core')
|
||
|
|
const {exec} = require('@actions/exec')
|
||
|
|
const {installElixir, installOTP} = require('./installer')
|
||
|
|
const {readFile} = require('fs').promises
|
||
|
|
const path = require('path')
|
||
|
|
const semver = require('semver')
|
||
|
|
|
||
|
|
main().catch(err => {
|
||
|
|
core.setFailed(err.message)
|
||
|
|
})
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
checkPlatform()
|
||
|
|
|
||
|
|
const otpSpec = core.getInput('otp-version', {required: true})
|
||
|
|
const elixirSpec = core.getInput('elixir-version', {required: true})
|
||
|
|
const otpVersion = await getVersion(
|
||
|
|
otpSpec,
|
||
|
|
path.join(__dirname, 'erlang-versions.txt')
|
||
|
|
)
|
||
|
|
const elixirVersion = await getVersion(
|
||
|
|
elixirSpec,
|
||
|
|
path.join(__dirname, 'elixir-versions.txt')
|
||
|
|
)
|
||
|
|
|
||
|
|
let installHex = core.getInput('install-hex')
|
||
|
|
installHex = installHex == null ? true : installHex
|
||
|
|
let installRebar = core.getInput('install-rebar')
|
||
|
|
installRebar = installRebar == null ? true : installRebar
|
||
|
|
|
||
|
|
console.log(`##[group]Installing OTP ${otpVersion}`)
|
||
|
|
await installOTP(otpVersion)
|
||
|
|
console.log(`##[endgroup]`)
|
||
|
|
|
||
|
|
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
||
|
|
await installElixir(elixirVersion)
|
||
|
|
console.log(`##[endgroup]`)
|
||
|
|
|
||
|
|
if (installRebar) await exec('mix local.rebar --force')
|
||
|
|
if (installHex) await exec('mix local.hex --force')
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkPlatform() {
|
||
|
|
if (process.platform !== 'linux')
|
||
|
|
throw new Error(
|
||
|
|
'@actions/setup-elixir only supports Ubuntu Linux at this time'
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
async function getVersion(spec, versionFile) {
|
||
|
|
const range = semver.validRange(spec)
|
||
|
|
const versions = (await readFile(versionFile)).toString().split('\n')
|
||
|
|
const version = semver.maxSatisfying(versions, range)
|
||
|
|
return version || spec
|
||
|
|
}
|