Add Gleam (#67)

This commit is contained in:
Paulo F. Oliveira
2021-08-03 18:56:12 +01:00
committed by GitHub
parent 4fbbcf2e6c
commit c988d89031
39 changed files with 442 additions and 64 deletions
+1 -1
View File
@@ -15,5 +15,5 @@ New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
$ProgressPreference="SilentlyContinue"
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
$ProgressPreference="Continue"
Write-Output "Installed Erlang/OTP version follows"
Write-Output "Installed Elixir version follows"
& "$DIR_FOR_BIN/bin/iex" "-v" | Write-Output
+19
View File
@@ -0,0 +1,19 @@
param([Parameter(Mandatory=$true)][string]$VSN)
$ErrorActionPreference="Stop"
Set-Location $Env:RUNNER_TEMP
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
$FILE_OUTPUT="gleam.zip"
$DIR_FOR_BIN=".setup-beam/gleam/bin"
$ProgressPreference="SilentlyContinue"
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "$FILE_OUTPUT"
$ProgressPreference="Continue"
New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
$ProgressPreference="SilentlyContinue"
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
$ProgressPreference="Continue"
Write-Output "Installed Gleam version follows"
& "$DIR_FOR_BIN/gleam" "--version" | Write-Output
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
set -eo pipefail
cd "$RUNNER_TEMP"
VSN=${1}
FILE_INPUT=gleam-${VSN}-linux-amd64.tar.gz
FILE_OUTPUT=gleam.tar.gz
DIR_FOR_BIN=.setup-beam/gleam/bin
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
mkdir -p "${DIR_FOR_BIN}"
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}"
echo "Installed Gleam version follows"
${DIR_FOR_BIN}/gleam --version
+16
View File
@@ -32,6 +32,21 @@ async function installElixir(elixirVersion) {
}
}
/**
* Install Gleam.
*
* @param {string} gleamVersion
*/
async function installGleam(gleamVersion) {
const OS = process.platform
if (OS === 'linux') {
await exec(path.join(__dirname, 'install-gleam.sh'), [gleamVersion])
} else if (OS === 'win32') {
const script = path.join(__dirname, 'install-gleam.ps1')
await exec(`pwsh.exe ${script} -VSN:${gleamVersion}`)
}
}
/**
* Install rebar3.
*
@@ -58,6 +73,7 @@ function checkPlatform() {
module.exports = {
installOTP,
installElixir,
installGleam,
installRebar3,
checkPlatform,
}
+59 -5
View File
@@ -30,6 +30,9 @@ async function main() {
await mix(shouldMixHex, 'hex')
}
const gleamSpec = core.getInput('gleam-version', { required: false })
await maybeInstallGleam(gleamSpec)
const rebar3Spec = core.getInput('rebar3-version', { required: false })
await maybeInstallRebar3(rebar3Spec)
}
@@ -86,6 +89,23 @@ async function mix(shouldMix, what) {
}
}
async function maybeInstallGleam(gleamSpec) {
let installed = false
if (gleamSpec) {
const gleamVersion = await getGleamVersion(gleamSpec)
console.log(`##[group]Installing Gleam ${gleamVersion}`)
await installer.installGleam(gleamVersion)
core.setOutput('gleam-version', gleamVersion)
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
console.log('##[endgroup]')
installed = true
}
return installed
}
async function maybeInstallRebar3(rebar3Spec) {
let installed = false
@@ -174,10 +194,21 @@ async function getElixirVersion(exSpec0, otpVersion) {
)
}
const DigitStart = new RegExp('^\\d+')
return DigitStart.test(elixirVersion)
? `v${elixirVersionWithOTP}`
: elixirVersionWithOTP
return maybePrependWithV(elixirVersionWithOTP, elixirVersion)
}
async function getGleamVersion(gleamSpec0) {
const gleamSpec = gleamSpec0.match(/^v?(.+)/)
const gleamVersions = await getGleamVersions()
const gleamVersion = getVersionFromSpec(gleamSpec[1], gleamVersions)
if (gleamVersion === null) {
throw new Error(
`Requested Gleam version (${gleamSpec0}) not found in version list ` +
"(should you be using option 'version-type': 'strict'?)",
)
}
return maybePrependWithV(gleamVersion, gleamVersion)
}
async function getRebar3Version(r3Spec) {
@@ -260,6 +291,21 @@ async function getElixirVersions() {
return otpVersionsForElixirMap
}
async function getGleamVersions() {
const resultJSONs = await get(
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100',
[1, 2, 3],
)
const gleamVersionsListing = []
resultJSONs.forEach((resultJSON) => {
JSON.parse(resultJSON)
.map((x) => x.tag_name)
.sort()
.forEach((v) => gleamVersionsListing.push(v))
})
return gleamVersionsListing
}
async function getRebar3Versions() {
const resultJSONs = await get(
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
@@ -303,7 +349,7 @@ function getVersionFromSpec(spec, versions) {
}
}
return version
return version === null || version === undefined ? null : version
}
function maybeCoerced(v) {
@@ -410,9 +456,17 @@ async function get(url0, pageIdxs) {
return ret
}
function maybePrependWithV(versionToPrepend, specVersion) {
const digitStart = new RegExp('^\\d+')
return digitStart.test(specVersion)
? `v${versionToPrepend}`
: versionToPrepend
}
module.exports = {
getOTPVersion,
getElixirVersion,
getGleamVersion,
getRebar3Version,
getVersionFromSpec,
}