Compare commits

...

13 Commits

Author SHA1 Message Date
GitHub Actions 8b9cac4c04 Automation: update setup-beam version output to 6c8deb6 2024-01-31 08:24:47 +00:00
Andrew Shu 6c8deb6007 Update action.yml to use node20 (was node16) (#249) 2024-01-31 08:24:20 +00:00
Paulo F. Oliveira 98ca4dce66 Have npm run build-dist _always_ recreate dist (#247) 2024-01-28 16:45:05 -06:00
GitHub Actions b8913643d6 Automation: update setup-beam version output to cf854bf 2024-01-28 18:53:13 +00:00
Paulo F. Oliveira cf854bf149 Fix "Windows workflow broken since recent commit" (#246) 2024-01-28 12:52:46 -06:00
GitHub Actions 4a641b1000 Automation: update setup-beam version output to 07193a0 2024-01-28 18:52:29 +00:00
Paulo F. Oliveira 07193a0ba2 Update outdated/deprecated actions (#244) 2024-01-28 12:52:05 -06:00
GitHub Actions 4c35984bbc Automation: update setup-beam version output to b60baf4 2024-01-25 22:07:33 +00:00
Paulo F. Oliveira b60baf4753 Add known branch exceptions to version matching (#242) 2024-01-17 23:37:13 +00:00
GitHub Actions 213ca2eceb Automation: update setup-beam version output to bc84950 2024-01-17 23:33:13 +00:00
Paulo F. Oliveira bc84950393 Bump semver to 7.5.4 (#240) 2024-01-17 23:32:48 +00:00
GitHub Actions 980f47ea52 Update setup-beam version output to 4678b57 2024-01-12 19:46:30 +00:00
Paulo F. Oliveira 4678b57fab Have the action output a versioning element so it could be used as part of the cache restore key (#239)
* Do a bit of YAMLlint'ing

* Ease consumer cache invalidation

By providing an output with the action version we ease
cache invalidation on consumer, due to the fact we can
now stop worrying about changes to the action's cache itself

Might also be interesting for self-hosted runners...

* Remove duplicates

* Do further validations for robustness
2024-01-12 13:46:16 -06:00
18 changed files with 141 additions and 272 deletions
+30 -9
View File
@@ -7,14 +7,35 @@ env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
jobs: jobs:
version:
name: Version with commit unique id
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Version it!
run: |
# We expect a string such as const setupBeamVersion = 'undefined' in the code
SHA=$(git rev-parse --short HEAD)
sed -i'.bak' \
-e "s/const setupBeamVersion = '.*'/const setupBeamVersion = '${SHA}'/g" \
src/setup-beam.js
npm run build-dist
git config user.name "GitHub Actions"
git config user.email "actions@user.noreply.github.com"
git add src/setup-beam.js
git add dist/index.js
git commit -m "Automation: update setup-beam version output to ${SHA}"
git push origin main
check_integrity: check_integrity:
name: Expected local npm actions name: Expected local npm actions
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref != 'refs/heads/main'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: '16' node-version: '20'
- run: npm run build-dist - run: npm run build-dist
- name: Check if build left artifacts - name: Check if build left artifacts
run: git diff --exit-code --ignore-space-at-eol run: git diff --exit-code --ignore-space-at-eol
@@ -23,10 +44,10 @@ jobs:
name: Unit tests (Ubuntu) name: Unit tests (Ubuntu)
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: '16' node-version: '20'
- run: npm ci - run: npm ci
- run: npm test - run: npm test
- name: .tool-versions test - name: .tool-versions test
@@ -40,9 +61,9 @@ jobs:
name: Unit tests (Windows) name: Unit tests (Windows)
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: '16' node-version: '20'
- run: npm install --production - run: npm install --production
- run: npm test - run: npm test
+1 -1
View File
@@ -16,7 +16,7 @@ jobs:
install-rebar: [true, false] install-rebar: [true, false]
install-hex: [true, false] install-hex: [true, false]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
+11 -27
View File
@@ -24,7 +24,7 @@ jobs:
os: 'ubuntu-latest' os: 'ubuntu-latest'
version-type: 'strict' version-type: 'strict'
- otp-version: '25.2' - otp-version: '25.2'
elixir-version: '1.14.3' elixir-version: '1.14.2'
os: 'ubuntu-latest' os: 'ubuntu-latest'
- otp-version: '25.2' - otp-version: '25.2'
elixir-version: '1.14.3' elixir-version: '1.14.3'
@@ -66,14 +66,6 @@ jobs:
otp-version: '21' otp-version: '21'
rebar3-version: '3.12' rebar3-version: '3.12'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
- elixir-version: 'v1.6'
otp-version: '21'
rebar3-version: '3.12'
os: 'ubuntu-20.04'
- elixir-version: 'v1.7'
otp-version: '22'
rebar3-version: '3.13'
os: 'ubuntu-20.04'
- elixir-version: 'v1.7' - elixir-version: 'v1.7'
otp-version: '22' otp-version: '22'
rebar3-version: '3.13' rebar3-version: '3.13'
@@ -86,18 +78,10 @@ jobs:
otp-version: '25.0.2' otp-version: '25.0.2'
rebar3-version: '3.19' rebar3-version: '3.19'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
- elixir-version: 'v1.10'
otp-version: '23'
rebar3-version: '3.14'
os: 'ubuntu-20.04'
- elixir-version: 'v1.12' - elixir-version: 'v1.12'
otp-version: '24' otp-version: '24'
rebar3-version: '3.15' rebar3-version: '3.15'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
- elixir-version: 'v1.13.4'
otp-version: '25.0.2'
rebar3-version: '3.19'
os: 'ubuntu-20.04'
- elixir-version: 'v1.11.0' - elixir-version: 'v1.11.0'
otp-version: '22.3.4.2' otp-version: '22.3.4.2'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
@@ -108,11 +92,11 @@ jobs:
version-type: 'strict' version-type: 'strict'
- elixir-version: 'main' - elixir-version: 'main'
otp-version: '23.1' otp-version: '23.1'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
version-type: 'strict' version-type: 'strict'
- elixir-version: 'main' - elixir-version: 'main'
otp-version: '25' otp-version: '25'
os: 'ubuntu-20.04' os: 'ubuntu-20.04'
version-type: 'strict' version-type: 'strict'
- gleam-version: '0.23' - gleam-version: '0.23'
otp-version: '24' otp-version: '24'
@@ -126,7 +110,7 @@ jobs:
otp-version: false otp-version: false
os: 'ubuntu-latest' os: 'ubuntu-latest'
disable_problem_matchers: true disable_problem_matchers: true
- gleam-version: '0.22.0' # Version with Gleam's old archive naming convention - gleam-version: '0.22.0' # Version with Gleam's old archive naming convention
otp-version: '24' otp-version: '24'
os: 'ubuntu-latest' os: 'ubuntu-latest'
disable_problem_matchers: true disable_problem_matchers: true
@@ -136,7 +120,7 @@ jobs:
escript_script: 'protoc-gen-elixir --version' escript_script: 'protoc-gen-elixir --version'
os: 'ubuntu-latest' os: 'ubuntu-latest'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -203,7 +187,7 @@ jobs:
rebar3-version: 'nightly' rebar3-version: 'nightly'
os: 'ubuntu-latest' os: 'ubuntu-latest'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -213,9 +197,9 @@ jobs:
gleam-version: ${{matrix.combo.gleam-version}} gleam-version: ${{matrix.combo.gleam-version}}
rebar3-version: ${{matrix.combo.rebar3-version}} rebar3-version: ${{matrix.combo.rebar3-version}}
- run: env - run: env
- name: List environment variables - name: Check environment variables
run: | run: |
[ -n "${INSTALL_DIR_FOR_ELIXIR}" ] && echo "${INSTALL_DIR_FOR_ELIXIR}" ${INSTALL_DIR_FOR_ELIXIR}/elixir --version
[ -n "${INSTALL_DIR_FOR_GLEAM}" ] && echo "${INSTALL_DIR_FOR_GLEAM}" ${INSTALL_DIR_FOR_GLEAM}/gleam --version
[ -n "${INSTALL_DIR_FOR_OTP}" ] && echo "${INSTALL_DIR_FOR_OTP}" ${INSTALL_DIR_FOR_OTP}/erl -version
[ -n "${INSTALL_DIR_FOR_REBAR3}" ] && echo "${INSTALL_DIR_FOR_REBAR3}" ${INSTALL_DIR_FOR_REBAR3}/rebar3 version
@@ -11,7 +11,7 @@ jobs:
name: Update 3rd party licenses name: Update 3rd party licenses
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- run: - run:
./.github/workflows/update_3rd_party_licenses.sh ./.github/workflows/update_3rd_party_licenses.sh
env: env:
+7 -7
View File
@@ -59,7 +59,7 @@ jobs:
escript_script: 'protoc-gen-elixir --version' escript_script: 'protoc-gen-elixir --version'
os: 'windows-latest' os: 'windows-latest'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -125,7 +125,7 @@ jobs:
rebar3-version: 'nightly' rebar3-version: 'nightly'
os: 'windows-latest' os: 'windows-latest'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -135,10 +135,10 @@ jobs:
gleam-version: ${{matrix.combo.gleam-version}} gleam-version: ${{matrix.combo.gleam-version}}
rebar3-version: ${{matrix.combo.rebar3-version}} rebar3-version: ${{matrix.combo.rebar3-version}}
- run: env - run: env
- name: List environment variables - name: Check environment variables
run: | run: |
[ -n "${INSTALL_DIR_FOR_ELIXIR}" ] && echo "${INSTALL_DIR_FOR_ELIXIR}" ${INSTALL_DIR_FOR_ELIXIR}/elixir --version
[ -n "${INSTALL_DIR_FOR_GLEAM}" ] && echo "${INSTALL_DIR_FOR_GLEAM}" ${INSTALL_DIR_FOR_GLEAM}/gleam --version
[ -n "${INSTALL_DIR_FOR_OTP}" ] && echo "${INSTALL_DIR_FOR_OTP}" ${INSTALL_DIR_FOR_OTP}/erl -version
[ -n "${INSTALL_DIR_FOR_REBAR3}" ] && echo "${INSTALL_DIR_FOR_REBAR3}" ${INSTALL_DIR_FOR_REBAR3}/rebar3 version
shell: bash shell: bash
+23 -8
View File
@@ -83,11 +83,26 @@ jobs:
env: env:
ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04 ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
... ...
``` ```
### Outputs
The action provides the following outputs:
| Output | Content
|- |-
| otp-version | The Erlang version, e.g. `OTP-26.0`
| elixir-version | The Elixir version, e.g. `v1.14-otp-26`
| gleam-version | The Gleam version, e.g. `v0.23.0`
| rebar3-version | The `rebar3` version, e.g. `3.18.0`
| setup-beam-version | The commit unique id of the executed action version, e.g. `a34c98f`
accessible as `${{steps.<setup-beam-step-id>.outputs.<Output>}}`,
e.g. `${{steps.setup-beam.outputs.erlang-version}}`
### Version file ### Version file
A version file is specified via input `version-file` (e.g.`.tool-versions`). This A version file is specified via input `version-file` (e.g.`.tool-versions`). This
@@ -128,7 +143,7 @@ jobs:
otp: ['20.3', '21.3', '22.2'] otp: ['20.3', '21.3', '22.2']
elixir: ['1.8.2', '1.9.4'] elixir: ['1.8.2', '1.9.4']
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: ${{matrix.otp}} otp-version: ${{matrix.otp}}
@@ -152,7 +167,7 @@ jobs:
otp: ['20.3', '21.3', '22.2'] otp: ['20.3', '21.3', '22.2']
rebar3: ['3.14.1', '3.14.3'] rebar3: ['3.14.1', '3.14.3']
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: ${{matrix.otp}} otp-version: ${{matrix.otp}}
@@ -170,7 +185,7 @@ jobs:
test: test:
runs-on: windows-2022 runs-on: windows-2022
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: '24' otp-version: '24'
@@ -188,7 +203,7 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: '24' otp-version: '24'
@@ -206,7 +221,7 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: false otp-version: false
@@ -230,7 +245,7 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: '25' otp-version: '25'
@@ -248,7 +263,7 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: '25' otp-version: '25'
+3 -1
View File
@@ -58,6 +58,8 @@ outputs:
description: Exact version of Gleam that was installed description: Exact version of Gleam that was installed
rebar3-version: rebar3-version:
description: Exact version of rebar3 that was installed description: Exact version of rebar3 that was installed
setup-beam-version:
description: The commit unique id of the execution action version
runs: runs:
using: node16 using: node20
main: dist/index.js main: dist/index.js
-62
View File
@@ -1,62 +0,0 @@
{
"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
}
]
}
]
}
+25 -10
View File
@@ -6161,7 +6161,7 @@ class Range {
this.set = this.raw this.set = this.raw
.split('||') .split('||')
// map the range to a 2d array of comparators // map the range to a 2d array of comparators
.map(r => this.parseRange(r)) .map(r => this.parseRange(r.trim()))
// throw out any comparator lists that are empty // throw out any comparator lists that are empty
// this generally means that it was not a valid range, which is allowed // this generally means that it was not a valid range, which is allowed
// in loose mode, but will still throw if the WHOLE range is invalid. // in loose mode, but will still throw if the WHOLE range is invalid.
@@ -7633,7 +7633,11 @@ module.exports = parseOptions
/***/ 9523: /***/ 9523:
/***/ ((module, exports, __nccwpck_require__) => { /***/ ((module, exports, __nccwpck_require__) => {
const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH } = __nccwpck_require__(2293) const {
MAX_SAFE_COMPONENT_LENGTH,
MAX_SAFE_BUILD_LENGTH,
MAX_LENGTH,
} = __nccwpck_require__(2293)
const debug = __nccwpck_require__(427) const debug = __nccwpck_require__(427)
exports = module.exports = {} exports = module.exports = {}
@@ -7654,7 +7658,7 @@ const LETTERDASHNUMBER = '[a-zA-Z0-9-]'
// all input should have extra whitespace removed. // all input should have extra whitespace removed.
const safeRegexReplacements = [ const safeRegexReplacements = [
['\\s', 1], ['\\s', 1],
['\\d', MAX_SAFE_COMPONENT_LENGTH], ['\\d', MAX_LENGTH],
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],
] ]
@@ -9868,6 +9872,10 @@ async function main() {
await maybeInstallGleam(gleamSpec) await maybeInstallGleam(gleamSpec)
await maybeInstallRebar3(rebar3Spec) await maybeInstallRebar3(rebar3Spec)
// undefined is replaced by a function, post- main branch merge
const setupBeamVersion = '6c8deb6'
core.setOutput('setup-beam-version', setupBeamVersion)
} }
async function installOTP(otpSpec, osVersion) { async function installOTP(otpSpec, osVersion) {
@@ -10216,7 +10224,7 @@ function getVersionFromSpec(spec0, versions0) {
const rangeMax = semver.maxSatisfying(versions, rangeForMax) const rangeMax = semver.maxSatisfying(versions, rangeForMax)
let version = null let version = null
if (isStrictVersion() || isRC(spec0)) { if (isStrictVersion() || isRC(spec0) || isKnownBranch(spec0)) {
if (versions0[spec]) { if (versions0[spec]) {
// If `version-type: strict` or version is RC, we obtain it directly // If `version-type: strict` or version is RC, we obtain it directly
version = versions0[spec] version = versions0[spec]
@@ -10288,6 +10296,10 @@ function isRC(ver) {
return ver.match(xyzAbcVersion('^', '(?:-rc\\.?\\d+)')) return ver.match(xyzAbcVersion('^', '(?:-rc\\.?\\d+)'))
} }
function isKnownBranch(ver) {
return ['main', 'master', 'maint'].includes(ver)
}
function getRunnerOSVersion() { function getRunnerOSVersion() {
const ImageOSToContainer = { const ImageOSToContainer = {
ubuntu18: 'ubuntu-18.04', ubuntu18: 'ubuntu-18.04',
@@ -10711,16 +10723,18 @@ async function install(toolName, opts) {
postExtract: async (cachePath) => { postExtract: async (cachePath) => {
const bindir = path.join(cachePath, 'bin') const bindir = path.join(cachePath, 'bin')
const oldPath = path.join(cachePath, 'rebar3') const oldPath = path.join(cachePath, 'rebar3')
const newPath = path.join(bindir, 'rebar3')
fs.mkdirSync(bindir) fs.mkdirSync(bindir)
fs.chmodSync(oldPath, 0o755) fs.renameSync(oldPath, newPath)
fs.chmodSync(newPath, 0o755)
const ps1Filename = path.join(bindir, 'rebar3.ps1') const ps1Filename = path.join(bindir, 'rebar3.ps1')
fs.writeFileSync(ps1Filename, `& escript.exe ${oldPath} \${args}`) fs.writeFileSync(ps1Filename, `& escript.exe ${newPath} \${args}`)
const cmdFilename = path.join(bindir, 'rebar3.cmd') const cmdFilename = path.join(bindir, 'rebar3.cmd')
fs.writeFileSync( fs.writeFileSync(
cmdFilename, cmdFilename,
`@echo off\r\nescript.exe ${oldPath} %*`, `@echo off\r\nescript.exe ${newPath} %*`,
) )
}, },
reportVersion: () => { reportVersion: () => {
@@ -10764,11 +10778,12 @@ async function installTool(opts) {
await platformOpts.postExtract(cachePath) await platformOpts.postExtract(cachePath)
core.debug(`Adding ${cachePath}'s bin to system path`) core.debug(`Adding ${cachePath}'s bin to system path`)
core.addPath(path.join(cachePath, 'bin')) const catchPathBin = path.join(cachePath, 'bin')
core.addPath(catchPathBin)
const installDirForVarName = `INSTALL_DIR_FOR_${toolName}`.toUpperCase() const installDirForVarName = `INSTALL_DIR_FOR_${toolName}`.toUpperCase()
core.debug(`Exporting ${installDirForVarName} as ${cachePath}`) core.debug(`Exporting ${installDirForVarName} as ${catchPathBin}`)
core.exportVariable(installDirForVarName, cachePath) core.exportVariable(installDirForVarName, catchPathBin)
core.info(`Installed ${installOpts.tool} version`) core.info(`Installed ${installOpts.tool} version`)
const [cmd, args] = platformOpts.reportVersion() const [cmd, args] = platformOpts.reportVersion()
-37
View File
@@ -1,37 +0,0 @@
param([Parameter(Mandatory=$true)][string]${VSN})
$ErrorActionPreference="Stop"
Set-Location ${Env:RUNNER_TEMP}
$FILE_OUTPUT="gleam.zip"
$DIR_FOR_BIN=".setup-beam/gleam"
function Version-Greater-Than([string]${THIS_ONE}, [string]${REFERENCE}) {
$THIS_ONE=$THIS_ONE.replace('v', '')
$THIS_ONE=$THIS_ONE.replace('rc', '')
$THIS_ONE=$THIS_ONE.replace('-', '')
return [version]${THIS_ONE} -gt [version]${REFERENCE}
}
function Uses-LLVM-Triplets([string]${THIS_VSN}) {
return "${THIS_VSN}" -eq "nightly" -or (Version-Greater-Than "${THIS_VSN}" "0.22.1")
}
if (Uses-LLVM-Triplets "$VSN") {
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
} else {
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
}
$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}/bin" -ItemType Directory | Out-Null
$ProgressPreference="SilentlyContinue"
Expand-Archive -DestinationPath "${DIR_FOR_BIN}/bin" -Path "${FILE_OUTPUT}"
$ProgressPreference="Continue"
Write-Output "Installed Gleam version follows"
& "${DIR_FOR_BIN}/bin/gleam" "--version" | Write-Output
"INSTALL_DIR_FOR_GLEAM=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
-35
View File
@@ -1,35 +0,0 @@
#!/bin/bash
set -eo pipefail
cd "${RUNNER_TEMP}"
VSN="$1"
FILE_OUTPUT=gleam.tar.gz
DIR_FOR_BIN=.setup-beam/gleam
version_gt() {
REFERENCE=$1
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$REFERENCE"
}
uses_llvm_triplets() {
local VERSION="$1"
test "${VERSION}" = "nightly" || version_gt "${VERSION}" "v0.22.1"
}
if uses_llvm_triplets "$VSN"
then
FILE_INPUT="gleam-${VSN}-x86_64-unknown-linux-musl.tar.gz"
else
FILE_INPUT="gleam-${VSN}-linux-amd64.tar.gz"
fi
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
mkdir -p "${DIR_FOR_BIN}/bin"
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}/bin"
echo "Installed Gleam version follows"
${DIR_FOR_BIN}/bin/gleam --version
echo "INSTALL_DIR_FOR_GLEAM=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
-32
View File
@@ -1,32 +0,0 @@
param([Parameter(Mandatory=$true)][string]${VSN})
$ErrorActionPreference="Stop"
Set-Location ${Env:RUNNER_TEMP}
$FILE_INPUT="rebar3"
$FILE_OUTPUT="rebar3"
$FILE_OUTPUT_PS1="rebar3.ps1"
$FILE_OUTPUT_CMD="rebar3.cmd"
$DIR_FOR_BIN=".setup-beam/rebar3"
$ProgressPreference="SilentlyContinue"
$REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
$REBAR3_NIGHTLY=""
If ( ${VSN} -eq "nightly" )
{
$REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
$REBAR3_NIGHTLY=" (from nightly build)"
}
Invoke-WebRequest "${REBAR3_TARGET}" -OutFile "${FILE_OUTPUT}"
$ProgressPreference="Continue"
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
Write-Output "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append
Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} %*" | Out-File -FilePath "${FILE_OUTPUT_CMD}" -Encoding utf8 -Append
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin"
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
& "${DIR_FOR_BIN}/bin/rebar3.cmd" "version" | Write-Output
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
-25
View File
@@ -1,25 +0,0 @@
#!/bin/bash
set -eo pipefail
cd "${RUNNER_TEMP}"
VSN=${1}
FILE_INPUT=rebar3
FILE_OUTPUT=rebar3
DIR_FOR_BIN=.setup-beam/rebar3
REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
REBAR3_NIGHTLY=""
if [ "${VSN}" == "nightly" ]; then
REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
REBAR3_NIGHTLY=" (from nightly build)"
fi
wget -q -O "${FILE_OUTPUT}" "${REBAR3_TARGET}"
mkdir -p "${DIR_FOR_BIN}/bin"
chmod +x "${FILE_OUTPUT}"
mv "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
echo "Installed rebar3 version${REBAR3_NIGHTLY} follows"
${DIR_FOR_BIN}/bin/rebar3 version
echo "INSTALL_DIR_FOR_REBAR3=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
+5 -5
View File
@@ -11,7 +11,7 @@
"@actions/exec": "1.1.1", "@actions/exec": "1.1.1",
"@actions/http-client": "2.1.0", "@actions/http-client": "2.1.0",
"@actions/tool-cache": "2.0.1", "@actions/tool-cache": "2.0.1",
"semver": "7.5.3" "semver": "7.5.4"
}, },
"devDependencies": { "devDependencies": {
"@vercel/ncc": "0.36.1", "@vercel/ncc": "0.36.1",
@@ -23,7 +23,7 @@
"yarn": "1.22.19" "yarn": "1.22.19"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=20"
} }
}, },
"node_modules/@actions/core": { "node_modules/@actions/core": {
@@ -2290,9 +2290,9 @@
} }
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.5.3", "version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dependencies": { "dependencies": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
}, },
+3 -3
View File
@@ -11,14 +11,14 @@
"shellcheck": "shellcheck .github/workflows/*.sh", "shellcheck": "shellcheck .github/workflows/*.sh",
"test": "node test/setup-beam.test.js", "test": "node test/setup-beam.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": "rm -rf ./dist && npm install && npm run build && npm run format && npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint"
}, },
"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",
"@actions/tool-cache": "2.0.1", "@actions/tool-cache": "2.0.1",
"semver": "7.5.3" "semver": "7.5.4"
}, },
"devDependencies": { "devDependencies": {
"@vercel/ncc": "0.36.1", "@vercel/ncc": "0.36.1",
@@ -30,6 +30,6 @@
"yarn": "1.22.19" "yarn": "1.22.19"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=20"
} }
} }
+18 -7
View File
@@ -47,6 +47,10 @@ async function main() {
await maybeInstallGleam(gleamSpec) await maybeInstallGleam(gleamSpec)
await maybeInstallRebar3(rebar3Spec) await maybeInstallRebar3(rebar3Spec)
// undefined is replaced by a function, post- main branch merge
const setupBeamVersion = '6c8deb6'
core.setOutput('setup-beam-version', setupBeamVersion)
} }
async function installOTP(otpSpec, osVersion) { async function installOTP(otpSpec, osVersion) {
@@ -400,7 +404,7 @@ function getVersionFromSpec(spec0, versions0) {
const rangeMax = semver.maxSatisfying(versions, rangeForMax) const rangeMax = semver.maxSatisfying(versions, rangeForMax)
let version = null let version = null
if (isStrictVersion() || isRC(spec0)) { if (isStrictVersion() || isRC(spec0) || isKnownBranch(spec0)) {
if (versions0[spec]) { if (versions0[spec]) {
// If `version-type: strict` or version is RC, we obtain it directly // If `version-type: strict` or version is RC, we obtain it directly
version = versions0[spec] version = versions0[spec]
@@ -472,6 +476,10 @@ function isRC(ver) {
return ver.match(xyzAbcVersion('^', '(?:-rc\\.?\\d+)')) return ver.match(xyzAbcVersion('^', '(?:-rc\\.?\\d+)'))
} }
function isKnownBranch(ver) {
return ['main', 'master', 'maint'].includes(ver)
}
function getRunnerOSVersion() { function getRunnerOSVersion() {
const ImageOSToContainer = { const ImageOSToContainer = {
ubuntu18: 'ubuntu-18.04', ubuntu18: 'ubuntu-18.04',
@@ -895,16 +903,18 @@ async function install(toolName, opts) {
postExtract: async (cachePath) => { postExtract: async (cachePath) => {
const bindir = path.join(cachePath, 'bin') const bindir = path.join(cachePath, 'bin')
const oldPath = path.join(cachePath, 'rebar3') const oldPath = path.join(cachePath, 'rebar3')
const newPath = path.join(bindir, 'rebar3')
fs.mkdirSync(bindir) fs.mkdirSync(bindir)
fs.chmodSync(oldPath, 0o755) fs.renameSync(oldPath, newPath)
fs.chmodSync(newPath, 0o755)
const ps1Filename = path.join(bindir, 'rebar3.ps1') const ps1Filename = path.join(bindir, 'rebar3.ps1')
fs.writeFileSync(ps1Filename, `& escript.exe ${oldPath} \${args}`) fs.writeFileSync(ps1Filename, `& escript.exe ${newPath} \${args}`)
const cmdFilename = path.join(bindir, 'rebar3.cmd') const cmdFilename = path.join(bindir, 'rebar3.cmd')
fs.writeFileSync( fs.writeFileSync(
cmdFilename, cmdFilename,
`@echo off\r\nescript.exe ${oldPath} %*`, `@echo off\r\nescript.exe ${newPath} %*`,
) )
}, },
reportVersion: () => { reportVersion: () => {
@@ -948,11 +958,12 @@ async function installTool(opts) {
await platformOpts.postExtract(cachePath) await platformOpts.postExtract(cachePath)
core.debug(`Adding ${cachePath}'s bin to system path`) core.debug(`Adding ${cachePath}'s bin to system path`)
core.addPath(path.join(cachePath, 'bin')) const catchPathBin = path.join(cachePath, 'bin')
core.addPath(catchPathBin)
const installDirForVarName = `INSTALL_DIR_FOR_${toolName}`.toUpperCase() const installDirForVarName = `INSTALL_DIR_FOR_${toolName}`.toUpperCase()
core.debug(`Exporting ${installDirForVarName} as ${cachePath}`) core.debug(`Exporting ${installDirForVarName} as ${catchPathBin}`)
core.exportVariable(installDirForVarName, cachePath) core.exportVariable(installDirForVarName, catchPathBin)
core.info(`Installed ${installOpts.tool} version`) core.info(`Installed ${installOpts.tool} version`)
const [cmd, args] = platformOpts.reportVersion() const [cmd, args] = platformOpts.reportVersion()
+2 -2
View File
@@ -11,8 +11,8 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2.0.0 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1.9.0 - uses: erlef/setup-beam@v1
with: with:
otp-version: "23.2" otp-version: "23.2"
gleam-version: "0.23.0-rc1" gleam-version: "0.23.0-rc1"
+12
View File
@@ -182,6 +182,18 @@ async function testOTPVersions() {
expected = 'OTP-20.0.5' expected = 'OTP-20.0.5'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = 'maint'
osVersion = 'ubuntu-22.04'
expected = 'maint'
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
assert.deepStrictEqual(got, expected)
spec = 'master'
osVersion = 'ubuntu-22.04'
expected = 'master'
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
assert.deepStrictEqual(got, expected)
} }
if (process.platform === 'win32') { if (process.platform === 'win32') {