mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 07:06:07 +00:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f0cc07b4b | |||
| c36fc0ca1b | |||
| 7c4882bbdd | |||
| cdb7a12eb6 | |||
| 904c511e63 | |||
| 4f558159e6 | |||
| 0430fb6cc6 | |||
| 48f1d0ccc2 | |||
| 4ec4e80c33 | |||
| a23b1fc445 | |||
| eb31c4c998 | |||
| 726c8cb9ac | |||
| 951dd857ae | |||
| f2c1b65313 | |||
| 0352ab2e65 | |||
| 8b9cac4c04 | |||
| 6c8deb6007 | |||
| 98ca4dce66 | |||
| b8913643d6 | |||
| cf854bf149 | |||
| 4a641b1000 | |||
| 07193a0ba2 | |||
| 4c35984bbc | |||
| b60baf4753 | |||
| 213ca2eceb | |||
| bc84950393 | |||
| 980f47ea52 | |||
| 4678b57fab | |||
| a34c98fd51 | |||
| a1c4bb2505 | |||
| 508b7402b1 | |||
| 4f96fbfbc0 | |||
| 5462be1110 | |||
| 673a8fbd6e | |||
| 2a21db5504 | |||
| f35f714d23 | |||
| afb8586fc4 | |||
| 3ba5b86a2a | |||
| f6a73a7bf1 | |||
| efc884ac2f | |||
| e3b13dc873 | |||
| fa5c1c2428 | |||
| 7960f20020 | |||
| 3401fe12ae | |||
| 145c80cf85 | |||
| 61e01a43a5 | |||
| df9a60921b | |||
| 54d4f15c75 | |||
| ea13066252 | |||
| 53bf0a5069 | |||
| 977eee5f6e | |||
| 51905b8795 | |||
| b9783cdeea | |||
| cf692c3264 | |||
| 9641cb96c1 | |||
| 94b8820fed | |||
| c2e02f777c | |||
| 2595a954a1 | |||
| a255120a82 | |||
| ffd9affe89 | |||
| 049962787b | |||
| 1f06ac36d3 | |||
| e3f6ffe287 | |||
| 81d8403713 | |||
| c10774ce0f | |||
| 37ac1c5116 | |||
| 2d314bc413 | |||
| aee3f52e58 | |||
| 96fce952fd | |||
| 35850967ef | |||
| b980a5ac9b | |||
| c373088147 | |||
| 529221db21 | |||
| f19acc5287 | |||
| 00a8fc1243 | |||
| 713cc2ffe3 | |||
| 8d31e4db55 | |||
| 4c52669fda | |||
| 6a5f23a6f0 | |||
| 8bfa104bdd |
+6
-9
@@ -1,21 +1,18 @@
|
|||||||
---
|
---
|
||||||
env:
|
env:
|
||||||
node: true
|
node: true
|
||||||
es2021: true
|
es2022: true
|
||||||
extends:
|
extends:
|
||||||
- airbnb
|
- eslint:recommended
|
||||||
parserOptions:
|
parserOptions:
|
||||||
ecmaVersion: 12
|
ecmaVersion: 2022
|
||||||
rules:
|
rules:
|
||||||
indent: ["warn", 2]
|
indent: [warn, 2, {SwitchCase: 1}]
|
||||||
max-len: ["warn", 100]
|
max-len: [warn, 100]
|
||||||
no-console: 0
|
|
||||||
no-undef: "error"
|
|
||||||
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
|
||||||
no-use-before-define: 0
|
no-use-before-define: 0
|
||||||
operator-linebreak: 0
|
operator-linebreak: 0
|
||||||
require-jsdoc: 0
|
|
||||||
semi: 0
|
semi: 0
|
||||||
|
implicit-arrow-linebreak: 0
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
react:
|
react:
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Report a bug to improve this project
|
||||||
|
title: ''
|
||||||
|
labels: 'bug'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### The bug
|
||||||
|
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
#### Software versions
|
||||||
|
|
||||||
|
A list of software versions where the bug is apparent, as detailed as possible:
|
||||||
|
|
||||||
|
* `setup-beam`: ...
|
||||||
|
* other (where applicable): ...
|
||||||
|
|
||||||
|
#### How to replicate
|
||||||
|
|
||||||
|
An ordered list of steps to replicate the bug:
|
||||||
|
|
||||||
|
1. run `...`
|
||||||
|
2. search for `...` in the error output
|
||||||
|
3. look at file `...`
|
||||||
|
|
||||||
|
#### Expected behaviour
|
||||||
|
|
||||||
|
What's expected to happen when you follow the steps listed above.
|
||||||
|
|
||||||
|
#### Additional context
|
||||||
|
|
||||||
|
Any other context about the bug.
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Request a feature for this project
|
||||||
|
title: ''
|
||||||
|
labels: 'feature'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Is your feature request related to a problem?
|
||||||
|
|
||||||
|
A clear and concise description of what the problem is, e.g. "I'm always frustrated
|
||||||
|
when ..."
|
||||||
|
|
||||||
|
#### Describe the feature you'd like
|
||||||
|
|
||||||
|
A clear and concise description of what you want to happen after the new feature
|
||||||
|
is implemented.
|
||||||
|
|
||||||
|
#### Describe alternatives you've considered
|
||||||
|
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
#### Additional context
|
||||||
|
|
||||||
|
Any other context about the feature request.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Description
|
||||||
|
|
||||||
|
A brief description of your changes.
|
||||||
|
|
||||||
|
Closes #<issue>.
|
||||||
|
|
||||||
|
- [ ] I have performed a self-review of my changes
|
||||||
|
- [ ] I have read and understood the [contributing guidelines](/erlef/setup-beam/blob/main/CONTRIBUTING.md)
|
||||||
@@ -7,47 +7,71 @@ on:
|
|||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- "*"
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
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@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '20'
|
||||||
- run: npm install -g npm
|
- run: npm run build-dist
|
||||||
- run: npm install
|
|
||||||
- run: npm run build
|
|
||||||
- run: npm run format
|
|
||||||
- run: npm install -g markdownlint-cli
|
|
||||||
- run: npm run markdownlint
|
|
||||||
- run: npm run shellcheck
|
|
||||||
- run: npm run yamllint
|
|
||||||
- run: npm run jslint
|
|
||||||
- name: Check if build left artifacts
|
- name: Check if build left artifacts
|
||||||
run: git diff --exit-code
|
run: git diff --exit-code --ignore-space-at-eol
|
||||||
|
|
||||||
unit_tests_ubuntu:
|
unit_tests_ubuntu:
|
||||||
name: Unit tests (Ubuntu)
|
name: Unit tests (Ubuntu)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '20'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
- name: .tool-versions test
|
||||||
|
id: setup-beam
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
version-file: test/.tool-versions
|
||||||
|
version-type: strict
|
||||||
|
|
||||||
unit_tests_windows:
|
unit_tests_windows:
|
||||||
name: Unit tests (Windows)
|
name: Unit tests (Windows)
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '20'
|
||||||
- run: npm install --production
|
- run: npm install --production
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
name: hexpm-mirrors
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- "*"
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-failing-first-mirror:
|
||||||
|
name: Test option hexpm-mirrors with a dummy first mirror
|
||||||
|
runs-on: ${{matrix.os}}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: ['ubuntu-22.04', 'windows-2022']
|
||||||
|
otp-version: ['24']
|
||||||
|
elixir-version: ['v1.14', '']
|
||||||
|
install-rebar: [true, false]
|
||||||
|
install-hex: [true, false]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Use erlef/setup-beam
|
||||||
|
id: setup-beam
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
otp-version: ${{matrix.otp-version}}
|
||||||
|
elixir-version: ${{matrix.elixir-version}}
|
||||||
|
install-rebar: ${{matrix.install-rebar}}
|
||||||
|
install-hex: ${{matrix.install-hex}}
|
||||||
|
hexpm-mirrors: |
|
||||||
|
https://mirror.invalid
|
||||||
|
https://cdn.jsdelivr.net/hex
|
||||||
|
https://builds.hex.pm
|
||||||
@@ -7,7 +7,8 @@ on:
|
|||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- "*"
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -21,6 +22,23 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
combo:
|
||||||
|
- otp-version: 'OTP-27.0-rc1'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
- otp-version: '26.0'
|
||||||
|
elixir-version: 'v1.14-otp-25'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
version-type: 'strict'
|
||||||
|
- otp-version: '26.0'
|
||||||
|
elixir-version: '1.14.5'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
version-type: 'strict'
|
||||||
|
- otp-version: '25.2'
|
||||||
|
elixir-version: '1.14.2'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
- otp-version: '25.2'
|
||||||
|
elixir-version: '1.14.3'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
version-type: 'strict'
|
||||||
- otp-version: '25'
|
- otp-version: '25'
|
||||||
elixir-version: '1'
|
elixir-version: '1'
|
||||||
rebar3-version: '3'
|
rebar3-version: '3'
|
||||||
@@ -45,36 +63,18 @@ jobs:
|
|||||||
- otp-version: '24'
|
- otp-version: '24'
|
||||||
rebar3-version: 'nightly'
|
rebar3-version: 'nightly'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
- elixir-version: 'v1.0'
|
|
||||||
otp-version: '17'
|
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- elixir-version: 'v1.1'
|
|
||||||
otp-version: '18'
|
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- elixir-version: 'v1.2'
|
|
||||||
otp-version: '19'
|
|
||||||
rebar3-version: '3.10'
|
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- 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-18.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.4'
|
- elixir-version: 'v1.4'
|
||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
rebar3-version: '3.11'
|
rebar3-version: '3.11'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.6'
|
|
||||||
otp-version: '21'
|
|
||||||
rebar3-version: '3.12'
|
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- elixir-version: 'v1.6'
|
- elixir-version: 'v1.6'
|
||||||
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.7'
|
|
||||||
otp-version: '22'
|
|
||||||
rebar3-version: '3.13'
|
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- elixir-version: 'v1.7'
|
- elixir-version: 'v1.7'
|
||||||
otp-version: '22'
|
otp-version: '22'
|
||||||
rebar3-version: '3.13'
|
rebar3-version: '3.13'
|
||||||
@@ -82,23 +82,15 @@ jobs:
|
|||||||
- elixir-version: 'v1.10'
|
- elixir-version: 'v1.10'
|
||||||
otp-version: '23'
|
otp-version: '23'
|
||||||
rebar3-version: '3.14'
|
rebar3-version: '3.14'
|
||||||
os: 'ubuntu-18.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.13.4'
|
- elixir-version: 'v1.13.4'
|
||||||
otp-version: '25.0.2'
|
otp-version: '25.0.2'
|
||||||
rebar3-version: '3.19'
|
rebar3-version: '3.19'
|
||||||
os: 'ubuntu-18.04'
|
|
||||||
- elixir-version: 'v1.10'
|
|
||||||
otp-version: '23'
|
|
||||||
rebar3-version: '3.14'
|
|
||||||
os: 'ubuntu-20.04'
|
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'
|
||||||
@@ -107,32 +99,37 @@ jobs:
|
|||||||
otp-version: '22.3.4.1'
|
otp-version: '22.3.4.1'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
version-type: 'strict'
|
version-type: 'strict'
|
||||||
- elixir-version: '1.10.3'
|
- elixir-version: 'main'
|
||||||
otp-version: '22.3.4.1'
|
|
||||||
os: 'ubuntu-20.04'
|
|
||||||
- elixir-version: 'master'
|
|
||||||
otp-version: '23.1'
|
otp-version: '23.1'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'master'
|
version-type: 'strict'
|
||||||
|
- 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: 'nightly'
|
|
||||||
otp-version: '24'
|
|
||||||
- gleam-version: '0.23'
|
- gleam-version: '0.23'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
|
disable_problem_matchers: true
|
||||||
- gleam-version: '0.23.0-rc1'
|
- gleam-version: '0.23.0-rc1'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
|
disable_problem_matchers: true
|
||||||
- gleam-version: '0.23.0-rc1'
|
- gleam-version: '0.23.0-rc1'
|
||||||
otp-version: false
|
otp-version: false
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
|
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
|
||||||
|
- elixir-version: 'v1.13'
|
||||||
|
otp-version: '24'
|
||||||
|
escript_packages: 'hex protobuf'
|
||||||
|
escript_script: 'protoc-gen-elixir --version'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -162,25 +159,31 @@ 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: Type check 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 check
|
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
|
||||||
|
run: |
|
||||||
|
mix escript.install --force ${{matrix.combo.escript_packages}}
|
||||||
|
${{matrix.combo.escript_script}}
|
||||||
|
if: ${{matrix.combo.escript_packages && matrix.combo.escript_script}}
|
||||||
|
|
||||||
environment_variables:
|
environment_variables:
|
||||||
name: Environment variables
|
name: Environment variables
|
||||||
runs-on: ${{matrix.combo.os}}
|
runs-on: ${{matrix.combo.os}}
|
||||||
@@ -194,7 +197,7 @@ jobs:
|
|||||||
rebar3-version: 'nightly'
|
rebar3-version: 'nightly'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -204,9 +207,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: |
|
||||||
echo "${{env.INSTALL_DIR_FOR_ELIXIR}}"
|
${INSTALL_DIR_FOR_ELIXIR}/bin/elixir -v
|
||||||
echo "${{env.INSTALL_DIR_FOR_GLEAM}}"
|
${INSTALL_DIR_FOR_GLEAM}/bin/gleam --version
|
||||||
echo "${{env.INSTALL_DIR_FOR_OTP}}"
|
${INSTALL_DIR_FOR_OTP}/bin/erl -version
|
||||||
echo "${{env.INSTALL_DIR_FOR_REBAR3}}"
|
${INSTALL_DIR_FOR_REBAR3}/bin/rebar3 version
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: update_3rd_party_licenses
|
name: Update 3rd party licenses (automation)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
@@ -11,11 +11,8 @@ jobs:
|
|||||||
name: Update 3rd party licenses
|
name: Update 3rd party licenses
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: '14'
|
|
||||||
- run:
|
- run:
|
||||||
./.github/workflows/update_3rd_party_licenses.sh
|
./.github/workflows/update_3rd_party_licenses.sh
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ on:
|
|||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- "*"
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -21,6 +22,20 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
combo:
|
||||||
|
- otp-version: 'OTP-27.0-rc1'
|
||||||
|
os: 'windows-latest'
|
||||||
|
- otp-version: '26.0'
|
||||||
|
elixir-version: 'main'
|
||||||
|
os: 'windows-latest'
|
||||||
|
version-type: 'strict'
|
||||||
|
- otp-version: '26.0'
|
||||||
|
elixir-version: 'v1.14-otp-25'
|
||||||
|
os: 'windows-latest'
|
||||||
|
version-type: 'strict'
|
||||||
|
- otp-version: '26.0'
|
||||||
|
elixir-version: '1.14.5'
|
||||||
|
os: 'windows-latest'
|
||||||
|
version-type: 'strict'
|
||||||
- otp-version: '25'
|
- otp-version: '25'
|
||||||
rebar3-version: 'nightly'
|
rebar3-version: 'nightly'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
@@ -37,16 +52,23 @@ jobs:
|
|||||||
otp-version: '23'
|
otp-version: '23'
|
||||||
rebar3-version: '3.14'
|
rebar3-version: '3.14'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
- elixir-version: 'v1.11'
|
- elixir-version: 'v1.13'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.15'
|
rebar3-version: '3.15'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
|
- gleam-version: '0.19.0-rc3'
|
||||||
|
otp-version: '24'
|
||||||
|
os: 'windows-latest'
|
||||||
- gleam-version: '0.23.0-rc1'
|
- gleam-version: '0.23.0-rc1'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.16'
|
os: 'windows-latest'
|
||||||
|
- elixir-version: 'v1.13'
|
||||||
|
otp-version: '24'
|
||||||
|
escript_packages: 'hex protobuf'
|
||||||
|
escript_script: 'protoc-gen-elixir --version'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -55,6 +77,7 @@ jobs:
|
|||||||
elixir-version: ${{matrix.combo.elixir-version}}
|
elixir-version: ${{matrix.combo.elixir-version}}
|
||||||
gleam-version: ${{matrix.combo.gleam-version}}
|
gleam-version: ${{matrix.combo.gleam-version}}
|
||||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||||
|
version-type: ${{matrix.combo.version-type}}
|
||||||
- name: Erlang/OTP version (action)
|
- name: Erlang/OTP version (action)
|
||||||
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
||||||
- name: Elixir version (action)
|
- name: Elixir version (action)
|
||||||
@@ -65,6 +88,17 @@ jobs:
|
|||||||
if: ${{matrix.combo.gleam-version}}
|
if: ${{matrix.combo.gleam-version}}
|
||||||
- name: rebar3 version (action)
|
- name: rebar3 version (action)
|
||||||
run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}"
|
run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}"
|
||||||
|
- name: Run rebar3 and rebar3.cmd
|
||||||
|
run: |
|
||||||
|
# Should not fail
|
||||||
|
rebar3 version
|
||||||
|
rebar3.cmd version
|
||||||
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
|
- name: rebar3 from Rust
|
||||||
|
run: |
|
||||||
|
cd test/projects/rust_rebar3_cmd
|
||||||
|
cargo test -- --nocapture
|
||||||
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: mix version and help (CLI)
|
- name: mix version and help (CLI)
|
||||||
run: |
|
run: |
|
||||||
mix -v
|
mix -v
|
||||||
@@ -73,15 +107,21 @@ 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
|
||||||
|
run: |
|
||||||
|
mix escript.install --force ${{matrix.combo.escript_packages}}
|
||||||
|
${{matrix.combo.escript_script}}
|
||||||
|
if: ${{matrix.combo.escript_packages && matrix.combo.escript_script}}
|
||||||
|
|
||||||
environment_variables:
|
environment_variables:
|
||||||
name: Environment variables
|
name: Environment variables
|
||||||
runs-on: ${{matrix.combo.os}}
|
runs-on: ${{matrix.combo.os}}
|
||||||
@@ -95,7 +135,7 @@ jobs:
|
|||||||
rebar3-version: 'nightly'
|
rebar3-version: 'nightly'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -105,9 +145,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: |
|
||||||
echo "${{env.INSTALL_DIR_FOR_ELIXIR}}"
|
& "$Env:INSTALL_DIR_FOR_ELIXIR/bin/elixir" "-v"
|
||||||
echo "${{env.INSTALL_DIR_FOR_GLEAM}}"
|
& "$Env:INSTALL_DIR_FOR_GLEAM/bin/gleam.exe" "--version"
|
||||||
echo "${{env.INSTALL_DIR_FOR_OTP}}"
|
& "$Env:INSTALL_DIR_FOR_OTP/bin/erl.exe" "+V"
|
||||||
echo "${{env.INSTALL_DIR_FOR_REBAR3}}"
|
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.cmd" "version"
|
||||||
|
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.ps1" "version"
|
||||||
|
|||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
node_modules/**
|
node_modules/**
|
||||||
dist/.github/workflows
|
test/.tool-versions
|
||||||
|
|||||||
+1578
-1569
File diff suppressed because it is too large
Load Diff
+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):
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- markdownlint-disable MD013 -->
|
<!-- markdownlint-disable MD013 -->
|
||||||
# setup-beam [![GitHub Actions][action-img]][action] [![GitHub Actions][ubuntu-img]][ubuntu] [![GitHub Actions][windows-img]][windows]
|
# setup-beam [![GitHub Actions][action-img]][action] [![GitHub Actions][ubuntu-img]][ubuntu] [![GitHub Actions][windows-img]][windows]
|
||||||
|
|
||||||
[action]: https://github.com/erlef/setup-beam
|
[action]: https://github.com/erlef/setup-beam/actions/workflows/action.yml
|
||||||
[action-img]: https://github.com/erlef/setup-beam/workflows/action/badge.svg
|
[action-img]: https://github.com/erlef/setup-beam/actions/workflows/action.yml/badge.svg
|
||||||
[ubuntu]: https://github.com/erlef/setup-beam
|
[ubuntu]: https://github.com/erlef/setup-beam/actions/workflows/ubuntu.yml
|
||||||
[ubuntu-img]: https://github.com/erlef/setup-beam/workflows/ubuntu/badge.svg
|
[ubuntu-img]: https://github.com/erlef/setup-beam/actions/workflows/ubuntu.yml/badge.svg
|
||||||
[windows]: https://github.com/erlef/setup-beam
|
[windows]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml
|
||||||
[windows-img]: https://github.com/erlef/setup-beam/workflows/windows/badge.svg
|
[windows-img]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml/badge.svg
|
||||||
|
|
||||||
This action sets up an Erlang/OTP environment for use in a GitHub Actions
|
This action sets up an Erlang/OTP environment for use in a GitHub Actions
|
||||||
workflow by:
|
workflow by:
|
||||||
@@ -16,9 +16,11 @@ workflow by:
|
|||||||
- optionally, installing [Gleam](https://gleam.run/)
|
- optionally, installing [Gleam](https://gleam.run/)
|
||||||
- optionally, installing [`rebar3`](https://www.rebar3.org/)
|
- optionally, installing [`rebar3`](https://www.rebar3.org/)
|
||||||
- optionally, installing [`hex`](https://hex.pm/)
|
- optionally, installing [`hex`](https://hex.pm/)
|
||||||
|
- optionally, opting for strict or loose version matching
|
||||||
- optionally, having
|
- optionally, having
|
||||||
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show
|
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show
|
||||||
warnings and errors on pull requests
|
warnings and errors on pull requests
|
||||||
|
- optionally, using a version file (as explained in "Version file", below), to identify versions
|
||||||
|
|
||||||
**Note**: currently, this action only supports Actions' `ubuntu-` and `windows-` runtimes.
|
**Note**: currently, this action only supports Actions' `ubuntu-` and `windows-` runtimes.
|
||||||
|
|
||||||
@@ -51,9 +53,9 @@ and Erlang/OTP.
|
|||||||
|- |- |-
|
|- |- |-
|
||||||
| ubuntu-18.04 | 17 - 25 | ✅
|
| ubuntu-18.04 | 17 - 25 | ✅
|
||||||
| ubuntu-20.04 | 20 - 25 | ✅
|
| ubuntu-20.04 | 20 - 25 | ✅
|
||||||
| ubuntu-22.04 | 24.2 - 25 | ✅
|
| ubuntu-22.04 | 24.2 - 26 | ✅
|
||||||
| windows-2019 | 21* - 25 | ✅
|
| windows-2019 | 21* - 25 | ✅
|
||||||
| windows-2022 | 21* - 25 | ✅
|
| windows-2022 | 21* - 26 | ✅
|
||||||
|
|
||||||
**Note** *: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, 22.0, etc.
|
**Note** *: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, 22.0, etc.
|
||||||
|
|
||||||
@@ -81,11 +83,51 @@ 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@v2
|
- 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
|
||||||
|
|
||||||
|
A version file is specified via input `version-file` (e.g.`.tool-versions`). This
|
||||||
|
allows not having to use YML input for versions, though the action does check (and
|
||||||
|
will exit with error) if both inputs are set.
|
||||||
|
|
||||||
|
**Note**: if you're using a version file, option `version-type` is checked to be `strict`,
|
||||||
|
and will make the action exit with error otherwise.
|
||||||
|
|
||||||
|
The following version file formats are supported:
|
||||||
|
|
||||||
|
- `.tool-versions`, as specified by [asdf: Configuration](https://asdf-vm.com/manage/configuration.html)
|
||||||
|
|
||||||
|
Supported version elements are the same as the ones defined for the YML portion of the action,
|
||||||
|
with the following correspondence.
|
||||||
|
|
||||||
|
#### `.tool-versions` format
|
||||||
|
|
||||||
|
| YML | `.tool-versions` |
|
||||||
|
|- |- |
|
||||||
|
| `otp-version` | `erlang` |
|
||||||
|
| `elixir-version` | `elixir` |
|
||||||
|
| `gleam-version` | `gleam` |
|
||||||
|
| `rebar3-version` | `rebar` |
|
||||||
|
|
||||||
### Example (Erlang/OTP + Elixir, on Ubuntu)
|
### Example (Erlang/OTP + Elixir, on Ubuntu)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -94,14 +136,14 @@ on: push
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
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@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.otp}}
|
otp-version: ${{matrix.otp}}
|
||||||
@@ -118,14 +160,14 @@ on: push
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
|
name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
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@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.otp}}
|
otp-version: ${{matrix.otp}}
|
||||||
@@ -143,7 +185,7 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
@@ -161,7 +203,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: '24'
|
otp-version: '24'
|
||||||
@@ -179,7 +221,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: false
|
otp-version: false
|
||||||
@@ -189,6 +231,47 @@ jobs:
|
|||||||
|
|
||||||
**Note**: the `otp-version: false` input is only applicable when installing Gleam.
|
**Note**: the `otp-version: false` input is only applicable when installing Gleam.
|
||||||
|
|
||||||
|
## Alternative hex.pm mirrors
|
||||||
|
|
||||||
|
It is possible to use alternative hex.pm mirror(s), in their declared order, with
|
||||||
|
option `hexpm-mirrors`. By default, the action will use `builds.hex.pm`.
|
||||||
|
To use other alternative mirrors, add one per line, as shown below.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# create this in .github/workflows/ci.yml
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: erlef/setup-beam@v1
|
||||||
|
with:
|
||||||
|
otp-version: '26'
|
||||||
|
# Use `cdn.jsdelivr.net/hex` as an alternative to `builds.hex.pm`
|
||||||
|
hexpm-mirrors: https://cdn.jsdelivr.net/hex
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you may try `cdn.jsdelivr.net/hex` if `builds.hex.pm` fails:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# create this in .github/workflows/ci.yml
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: erlef/setup-beam@v1
|
||||||
|
with:
|
||||||
|
otp-version: '26'
|
||||||
|
hexpm-mirrors: |
|
||||||
|
https://builds.hex.pm
|
||||||
|
https://cdn.jsdelivr.net/hex
|
||||||
|
```
|
||||||
|
|
||||||
## Environment variables
|
## Environment variables
|
||||||
|
|
||||||
Base installation folders (useful for e.g. fetching headers for NIFs) are available in the following
|
Base installation folders (useful for e.g. fetching headers for NIFs) are available in the following
|
||||||
@@ -199,6 +282,9 @@ environment variables:
|
|||||||
- `INSTALL_DIR_FOR_GLEAM`: base folder for Gleam
|
- `INSTALL_DIR_FOR_GLEAM`: base folder for Gleam
|
||||||
- `INSTALL_DIR_FOR_REBAR3`: base folder for `rebar3`
|
- `INSTALL_DIR_FOR_REBAR3`: base folder for `rebar3`
|
||||||
|
|
||||||
|
In each of these you'll find folder `bin` where the appropriate binaries, platform-dependant,
|
||||||
|
are found (i.e. `erl`, `erl.exe`, `rebar3`, `rebar3.exe`, ...).
|
||||||
|
|
||||||
## Elixir Problem Matchers
|
## Elixir Problem Matchers
|
||||||
|
|
||||||
The Elixir Problem Matchers in this repository are adapted from
|
The Elixir Problem Matchers in this repository are adapted from
|
||||||
|
|||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
# Security policy
|
||||||
|
|
||||||
|
Thanks for helping make `setup-beam` safer for everyone.
|
||||||
|
|
||||||
|
Find below updated information on our security policy.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
We take the security of this software seriously.
|
||||||
|
|
||||||
|
We don't implement a bug bounty program or bounty rewards, but will work with
|
||||||
|
you to ensure that your findings get the appropriate handling.
|
||||||
|
|
||||||
|
## Reporting Security Issues
|
||||||
|
|
||||||
|
If you believe you have found a security vulnerability in this repository,
|
||||||
|
please report it to <bryan.paxton@erlef.org>.
|
||||||
|
|
||||||
|
Please do not report security vulnerabilities through public channels, like
|
||||||
|
GitHub issues, discussions, or pull requests.
|
||||||
|
|
||||||
|
Please include as much of the information listed below as you can to help us
|
||||||
|
better understand and resolve the issue:
|
||||||
|
|
||||||
|
- the type of issue (e.g., buffer overflow, SQL injection, or cross-site
|
||||||
|
scripting)
|
||||||
|
- full paths of source file(s) related to the manifestation of the issue
|
||||||
|
- the location of the affected source code (tag/branch/commit or direct URL)
|
||||||
|
- any special configuration required to reproduce the issue
|
||||||
|
- step-by-step instructions to reproduce the issue
|
||||||
|
- proof-of-concept or exploit code (if possible)
|
||||||
|
- impact of the issue, including how an attacker might exploit the issue
|
||||||
|
|
||||||
|
This information will help us triage your report more quickly.
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
const assert = require('assert')
|
|
||||||
const { problemMatcher } = require('../.github/elixir-matchers.json')
|
|
||||||
|
|
||||||
async function all() {
|
|
||||||
await testElixirMixCompileError()
|
|
||||||
await testElixirMixCompileWarning()
|
|
||||||
await testElixirMixTestFailure()
|
|
||||||
await testElixirCredoOutputDefault()
|
|
||||||
await testElixirDialyzerOutputDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirMixCompileError() {
|
|
||||||
const [matcher] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-mixCompileError',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const output = '** (CompileError) lib/test.ex:16: undefined function err/0'
|
|
||||||
const [message, , file, line] = output.match(matcher.regexp)
|
|
||||||
assert.equal(file, 'lib/test.ex')
|
|
||||||
assert.equal(line, '16')
|
|
||||||
assert.equal(message, output)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirMixCompileWarning() {
|
|
||||||
const [messagePattern, filePattern] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-mixCompileWarning',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const firstOutput =
|
|
||||||
'warning: variable "err" does not exist and is being expanded to "err()"'
|
|
||||||
const secondOutput = ' lib/test.ex:16: Test.hello/0'
|
|
||||||
|
|
||||||
const [, message] = firstOutput.match(messagePattern.regexp)
|
|
||||||
assert.equal(
|
|
||||||
message,
|
|
||||||
'variable "err" does not exist and is being expanded to "err()"',
|
|
||||||
)
|
|
||||||
|
|
||||||
const [, file, line] = secondOutput.match(filePattern.regexp)
|
|
||||||
assert.equal(file, 'lib/test.ex')
|
|
||||||
assert.equal(line, '16')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirMixTestFailure() {
|
|
||||||
const [messagePattern, filePattern] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-mixTestFailure',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const firstOutput = '1) test throws (TestTest)'
|
|
||||||
const secondOutput = ' test/test_test.exs:9'
|
|
||||||
|
|
||||||
const [, message] = firstOutput.match(messagePattern.regexp)
|
|
||||||
assert.equal(message, 'test throws (TestTest)')
|
|
||||||
|
|
||||||
const [, file, line] = secondOutput.match(filePattern.regexp)
|
|
||||||
assert.equal(file, 'test/test_test.exs')
|
|
||||||
assert.equal(line, '9')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirCredoOutputDefault() {
|
|
||||||
const [messagePattern, filePattern] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-credoOutputDefault',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const firstOutput = '┃ [F] → Function is too complex (CC is 29, max is 9).'
|
|
||||||
const secondOutput = '┃ lib/test.ex:15:7 #(Test.hello)'
|
|
||||||
|
|
||||||
const [, message] = firstOutput.match(messagePattern.regexp)
|
|
||||||
assert.equal(message, 'Function is too complex (CC is 29, max is 9).')
|
|
||||||
|
|
||||||
const [, file, line, column] = secondOutput.match(filePattern.regexp)
|
|
||||||
assert.equal(file, 'lib/test.ex')
|
|
||||||
assert.equal(line, '15')
|
|
||||||
assert.equal(column, '7')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirDialyzerOutputDefault() {
|
|
||||||
const [messagePattern, filePattern] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-dialyzerOutputDefault',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const firstOutput = 'lib/test.ex:15:invalid_contract'
|
|
||||||
const secondOutput =
|
|
||||||
'The @spec for the function does not match the success typing of the function.'
|
|
||||||
|
|
||||||
const [, file, line, code] = firstOutput.match(messagePattern.regexp)
|
|
||||||
assert.equal(file, 'lib/test.ex')
|
|
||||||
assert.equal(line, '15')
|
|
||||||
assert.equal(code, 'invalid_contract')
|
|
||||||
|
|
||||||
const [, message] = secondOutput.match(filePattern.regexp)
|
|
||||||
assert.equal(message, secondOutput)
|
|
||||||
}
|
|
||||||
|
|
||||||
all()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((err) => {
|
|
||||||
console.error(err)
|
|
||||||
process.exit(1)
|
|
||||||
})
|
|
||||||
@@ -1,409 +0,0 @@
|
|||||||
simulateInput('otp-version', '23.2')
|
|
||||||
simulateInput('elixir-version', '1.11')
|
|
||||||
simulateInput('rebar3-version', '3.14')
|
|
||||||
simulateInput('install-rebar', 'true')
|
|
||||||
simulateInput('install-hex', 'true')
|
|
||||||
|
|
||||||
const assert = require('assert')
|
|
||||||
const setupBeam = require('../src/setup-beam')
|
|
||||||
const installer = require('../src/installer')
|
|
||||||
|
|
||||||
async function all() {
|
|
||||||
await testFailInstallOTP()
|
|
||||||
await testFailInstallElixir()
|
|
||||||
await testFailInstallGleam()
|
|
||||||
await testFailInstallRebar3()
|
|
||||||
|
|
||||||
await testOTPVersions()
|
|
||||||
await testElixirVersions()
|
|
||||||
await testGleamVersions()
|
|
||||||
await testRebar3Versions()
|
|
||||||
|
|
||||||
await testGetVersionFromSpec()
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testFailInstallOTP() {
|
|
||||||
const otpOSVersion = 'ubuntu-08.04'
|
|
||||||
const otpVersion = 'OTP-23.2'
|
|
||||||
assert.rejects(
|
|
||||||
async () => {
|
|
||||||
await installer.installOTP(otpOSVersion, otpVersion)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
assert.ok(err instanceof Error)
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
`Installing Erlang/OTP ${otpVersion} over ${otpOSVersion} is supposed to fail`,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testFailInstallElixir() {
|
|
||||||
let exVersion
|
|
||||||
|
|
||||||
exVersion = '0.11'
|
|
||||||
assert.rejects(
|
|
||||||
async () => {
|
|
||||||
await installer.installElixir(exVersion)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
assert.ok(err instanceof Error)
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
`Installing Elixir ${exVersion} is supposed to fail`,
|
|
||||||
)
|
|
||||||
|
|
||||||
exVersion = 'v1.0.0-otp-17'
|
|
||||||
assert.rejects(
|
|
||||||
async () => {
|
|
||||||
await installer.installElixir(exVersion)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
assert.ok(err instanceof Error)
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
`Installing Elixir ${exVersion} is supposed to fail`,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testFailInstallGleam() {
|
|
||||||
const gleamVersion = '0.1.3'
|
|
||||||
assert.rejects(
|
|
||||||
async () => {
|
|
||||||
await installer.installGleam(gleamVersion)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
assert.ok(err instanceof Error)
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
`Installing Gleam ${gleamVersion} is supposed to fail`,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testFailInstallRebar3() {
|
|
||||||
const r3Version = '0.14.4'
|
|
||||||
assert.rejects(
|
|
||||||
async () => {
|
|
||||||
await installer.installRebar3(r3Version)
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
assert.ok(err instanceof Error)
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
`Installing rebar3 ${r3Version} is supposed to fail`,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testOTPVersions() {
|
|
||||||
let got
|
|
||||||
let expected
|
|
||||||
let spec
|
|
||||||
let osVersion
|
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
|
||||||
spec = '19.3.x'
|
|
||||||
osVersion = 'ubuntu-16.04'
|
|
||||||
expected = 'OTP-19.3.6.13'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '^19.3.6'
|
|
||||||
osVersion = 'ubuntu-16.04'
|
|
||||||
expected = 'OTP-19.3.6.13'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '^19.3'
|
|
||||||
osVersion = 'ubuntu-18.04'
|
|
||||||
expected = 'OTP-19.3.6.13'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '20'
|
|
||||||
osVersion = 'ubuntu-20.04'
|
|
||||||
expected = 'OTP-20.3.8.26'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '20.x'
|
|
||||||
osVersion = 'ubuntu-20.04'
|
|
||||||
expected = 'OTP-20.3.8.26'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '20.0'
|
|
||||||
osVersion = 'ubuntu-20.04'
|
|
||||||
expected = 'OTP-20.0.5'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '20.0.x'
|
|
||||||
osVersion = 'ubuntu-20.04'
|
|
||||||
expected = 'OTP-20.0.5'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
|
||||||
spec = '24.0.1'
|
|
||||||
osVersion = 'windows-latest'
|
|
||||||
expected = '24.0.1'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '23.2.x'
|
|
||||||
osVersion = 'windows-2016'
|
|
||||||
expected = '23.2.7'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '23.0'
|
|
||||||
osVersion = 'windows-2019'
|
|
||||||
expected = '23.0.4'
|
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testElixirVersions() {
|
|
||||||
let got
|
|
||||||
let expected
|
|
||||||
let spec
|
|
||||||
let otpVersion
|
|
||||||
|
|
||||||
spec = '1.1.x'
|
|
||||||
otpVersion = 'OTP-17'
|
|
||||||
expected = 'v1.1.1-otp-17'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '1.10.4'
|
|
||||||
otpVersion = 'OTP-23'
|
|
||||||
expected = 'v1.10.4-otp-23'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '1.12.1'
|
|
||||||
otpVersion = 'OTP-24.0.2'
|
|
||||||
expected = 'v1.12.1-otp-24'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = 'v1.11.0-rc.0'
|
|
||||||
otpVersion = 'OTP-23'
|
|
||||||
expected = 'v1.11.0-rc.0-otp-23'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = 'v1.11.0'
|
|
||||||
otpVersion = '22.3.4.2'
|
|
||||||
expected = 'v1.11.0-otp-22'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = 'master'
|
|
||||||
otpVersion = '23.1'
|
|
||||||
expected = 'master-otp-23'
|
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testGleamVersions() {
|
|
||||||
let got
|
|
||||||
let expected
|
|
||||||
let spec
|
|
||||||
let otpVersion
|
|
||||||
|
|
||||||
spec = 'v0.3.0'
|
|
||||||
otpVersion = 'OTP-23'
|
|
||||||
expected = 'v0.3.0'
|
|
||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '0.13.2'
|
|
||||||
otpVersion = 'OTP-24'
|
|
||||||
expected = 'v0.13.2'
|
|
||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = 'v0.14.0-rc2'
|
|
||||||
otpVersion = 'OTP-22'
|
|
||||||
expected = 'v0.14.0-rc2'
|
|
||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testRebar3Versions() {
|
|
||||||
let got
|
|
||||||
let expected
|
|
||||||
let spec
|
|
||||||
|
|
||||||
spec = '3.10.x'
|
|
||||||
expected = '3.10.0'
|
|
||||||
got = await setupBeam.getRebar3Version(spec)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '3.11'
|
|
||||||
expected = '3.11.1'
|
|
||||||
got = await setupBeam.getRebar3Version(spec)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '3.10'
|
|
||||||
expected = '3.10.0'
|
|
||||||
got = await setupBeam.getRebar3Version(spec)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function testGetVersionFromSpec() {
|
|
||||||
let got
|
|
||||||
let expected
|
|
||||||
let spec
|
|
||||||
const versions = [
|
|
||||||
'3.2.30.5',
|
|
||||||
'3.2.3.5',
|
|
||||||
'1',
|
|
||||||
'2',
|
|
||||||
'3.2.3.4.1',
|
|
||||||
'1.0.9',
|
|
||||||
'3.2.3.40.1',
|
|
||||||
'1.0.2',
|
|
||||||
'2.0',
|
|
||||||
'2.10',
|
|
||||||
'2.9',
|
|
||||||
'1.0',
|
|
||||||
'3.2.3.4.2',
|
|
||||||
'1.1.0',
|
|
||||||
'3.4.5.4',
|
|
||||||
'3.4.5.3',
|
|
||||||
'3.4.5.4.1',
|
|
||||||
'24.0-rc3',
|
|
||||||
'24.0-rc2',
|
|
||||||
'24.0',
|
|
||||||
'23.3.4',
|
|
||||||
'23.3.3',
|
|
||||||
'22.3.4.9.1',
|
|
||||||
'22.3.4.12.1',
|
|
||||||
'22.3.4.10.1',
|
|
||||||
'master',
|
|
||||||
'v11.11.0-rc.0-otp-23',
|
|
||||||
'22.3.4.2',
|
|
||||||
]
|
|
||||||
|
|
||||||
spec = '1'
|
|
||||||
expected = '1.1.0'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '1.0'
|
|
||||||
expected = '1.0.9'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = '1'
|
|
||||||
expected = '1'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = '1.0'
|
|
||||||
expected = '1.0'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
spec = '2'
|
|
||||||
expected = '2.10'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '3'
|
|
||||||
expected = '3.4.5.4.1'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '3.2'
|
|
||||||
expected = '3.2.30.5'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '>20'
|
|
||||||
expected = '24.0'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '24.0'
|
|
||||||
expected = '24.0'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = '24.0-rc3'
|
|
||||||
expected = '24.0-rc3'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
spec = '24.0-rc2'
|
|
||||||
expected = '24.0-rc2'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '22.3'
|
|
||||||
expected = '22.3.4.12.1'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '23.3.3'
|
|
||||||
expected = '23.3.3'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '24'
|
|
||||||
expected = '24.0'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
spec = '23.3'
|
|
||||||
expected = '23.3.4'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = 'master'
|
|
||||||
expected = 'master'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
|
|
||||||
spec = 'master'
|
|
||||||
expected = 'master'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = '22.3.4.2'
|
|
||||||
expected = '22.3.4.2'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
simulateInput('version-type', 'loose')
|
|
||||||
}
|
|
||||||
|
|
||||||
function simulateInput(key, value) {
|
|
||||||
process.env[`INPUT_${key.replace(/ /g, '_').toUpperCase()}`] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
all()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((err) => {
|
|
||||||
console.error(err)
|
|
||||||
process.exit(1)
|
|
||||||
})
|
|
||||||
+21
-3
@@ -8,10 +8,18 @@ branding:
|
|||||||
color: blue
|
color: blue
|
||||||
icon: code
|
icon: code
|
||||||
inputs:
|
inputs:
|
||||||
|
github-token:
|
||||||
|
description: >
|
||||||
|
A GitHub token used to access the GitHub REST API for retrieving release and version information.
|
||||||
|
While this action will never perform anything more than read operations against the GitHub REST API,
|
||||||
|
we do not recommend providing a self-generated personal access token which may provide more access than is
|
||||||
|
required of this action. This input instead is merely a convenience so that users of this action do not
|
||||||
|
have to manually pass an automatically generated token via their environment settings within a workflow.
|
||||||
|
[Learn more about automatically generated tokens](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)
|
||||||
|
default: ${{ github.token }}
|
||||||
otp-version:
|
otp-version:
|
||||||
description: Version range or exact version of Erlang/OTP to use,
|
description: Version range or exact version of Erlang/OTP to use,
|
||||||
or false when installing only Gleam without OTP
|
or false when installing only Gleam without OTP
|
||||||
required: true
|
|
||||||
elixir-version:
|
elixir-version:
|
||||||
description: Version range or exact version of Elixir to use
|
description: Version range or exact version of Elixir to use
|
||||||
gleam-version:
|
gleam-version:
|
||||||
@@ -31,8 +39,16 @@ inputs:
|
|||||||
to guess versions based on semver rules
|
to guess versions based on semver rules
|
||||||
default: loose
|
default: loose
|
||||||
disable_problem_matchers:
|
disable_problem_matchers:
|
||||||
description: whether to have the problem matchers present in the results (or not)
|
description: whether to have the problem matchers present in the results
|
||||||
|
(or not)
|
||||||
default: false
|
default: false
|
||||||
|
version-file:
|
||||||
|
description: a versions file (e.g. as used by `asdf`), which defines inputs
|
||||||
|
default: ''
|
||||||
|
hexpm-mirrors:
|
||||||
|
description: mirror(s) for hex.pm, one per line
|
||||||
|
default: |
|
||||||
|
https://builds.hex.pm
|
||||||
outputs:
|
outputs:
|
||||||
elixir-version:
|
elixir-version:
|
||||||
description: Exact version of Elixir that was installed
|
description: Exact version of Elixir that was installed
|
||||||
@@ -42,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
|
||||||
|
|||||||
@@ -57,22 +57,6 @@
|
|||||||
"column": 3
|
"column": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "elixir-dialyzerOutputDefault",
|
|
||||||
"severity": "warning",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^(.*):(\\d+):(.*)",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"code": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"regexp": "^(.*)$",
|
|
||||||
"message": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Vendored
+4428
-1231
File diff suppressed because it is too large
Load Diff
Vendored
-21
@@ -1,21 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="${VSN}.zip"
|
|
||||||
$FILE_OUTPUT="elixir.zip"
|
|
||||||
$DIR_FOR_BIN=".setup-beam/elixir"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://repo.hex.pm/builds/elixir/${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 Elixir version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/elixir" "-v" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_ELIXIR=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
VSN=${1}
|
|
||||||
FILE_INPUT="${VSN}.zip"
|
|
||||||
FILE_OUTPUT=elixir.zip
|
|
||||||
DIR_FOR_BIN=.setup-beam/elixir
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
unzip -q -o -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
|
||||||
echo "Installed Elixir version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/elixir -v
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
Vendored
-21
@@ -1,21 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
|
||||||
$FILE_OUTPUT="gleam.zip"
|
|
||||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
|
||||||
|
|
||||||
$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
|
|
||||||
Vendored
-34
@@ -1,34 +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() {
|
|
||||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
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}"
|
|
||||||
Vendored
-17
@@ -1,17 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$ERL_ROOT = "${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/otp_win64_${VSN}.exe" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${ERL_ROOT}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${ERL_ROOT}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${ERL_ROOT}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
OS=${1}
|
|
||||||
VSN=${2}
|
|
||||||
FILE_INPUT="${VSN}.tar.gz"
|
|
||||||
FILE_OUTPUT=otp.tar.gz
|
|
||||||
DIR_FOR_BIN=.setup-beam/otp
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/otp/${OS}/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}" --strip-components=1
|
|
||||||
"${DIR_FOR_BIN}/Install" -minimal "$(pwd)/${DIR_FOR_BIN}"
|
|
||||||
echo "Installed Erlang/OTP version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/erl -version
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_OTP=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
Vendored
-30
@@ -1,30 +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"
|
|
||||||
$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
|
|
||||||
type ${FILE_OUTPUT_PS1}
|
|
||||||
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
|
||||||
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/rebar3" "version" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
Vendored
-25
@@ -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}"
|
|
||||||
@@ -57,22 +57,6 @@
|
|||||||
"column": 3
|
"column": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "elixir-dialyzerOutputDefault",
|
|
||||||
"severity": "warning",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^(.*):(\\d+):(.*)",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"code": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"regexp": "^(.*)$",
|
|
||||||
"message": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Generated
+1346
-3357
File diff suppressed because it is too large
Load Diff
+20
-26
@@ -4,40 +4,34 @@
|
|||||||
"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 ./github/**/*.md",
|
||||||
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
"shellcheck": "shellcheck .github/workflows/*.sh",
|
||||||
"test": "node __tests__/setup-beam.test.js && node ./__tests__/problem-matchers.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"
|
"clean-dist": "rm -rf ./dist",
|
||||||
},
|
"lint": "npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint",
|
||||||
"husky": {
|
"build-dist": "npm run clean-dist && npm install && npm run build && npm run format && npm run lint"
|
||||||
"hooks": {
|
|
||||||
"pre-commit": "npm run format -- --check && npm run build && git add dist/"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.9.1",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
"semver": "7.3.6"
|
"@actions/http-client": "2.1.0",
|
||||||
|
"@actions/tool-cache": "2.0.1",
|
||||||
|
"semver": "7.5.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vercel/ncc": "0.33.4",
|
"@vercel/ncc": "0.36.1",
|
||||||
"eslint": "8.14.0",
|
"eslint": "8.43.0",
|
||||||
"eslint-config-airbnb": "19.0.4",
|
"markdownlint-cli": "0.35.0",
|
||||||
"eslint-plugin-import": "2.26.0",
|
"prettier": "2.8.8",
|
||||||
"eslint-plugin-jsx-a11y": "6.5.1",
|
"shellcheck": "2.2.0",
|
||||||
"eslint-plugin-react": "7.29.0",
|
"yaml-lint": "1.7.0",
|
||||||
"husky": "7.0.4",
|
"yarn": "1.22.19"
|
||||||
"markdownlint": "0.25.1",
|
|
||||||
"prettier": "2.6.2",
|
|
||||||
"shellcheck": "1.1.0",
|
|
||||||
"yaml-lint": "1.3.0",
|
|
||||||
"yarn": "1.22.18"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=20"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="${VSN}.zip"
|
|
||||||
$FILE_OUTPUT="elixir.zip"
|
|
||||||
$DIR_FOR_BIN=".setup-beam/elixir"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://repo.hex.pm/builds/elixir/${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 Elixir version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/elixir" "-v" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_ELIXIR=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
VSN=${1}
|
|
||||||
FILE_INPUT="${VSN}.zip"
|
|
||||||
FILE_OUTPUT=elixir.zip
|
|
||||||
DIR_FOR_BIN=.setup-beam/elixir
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
unzip -q -o -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
|
||||||
echo "Installed Elixir version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/elixir -v
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
|
||||||
$FILE_OUTPUT="gleam.zip"
|
|
||||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
|
||||||
|
|
||||||
$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
|
|
||||||
@@ -1,34 +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() {
|
|
||||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
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}"
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$ERL_ROOT = "${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/otp_win64_${VSN}.exe" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${ERL_ROOT}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${ERL_ROOT}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${ERL_ROOT}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
OS=${1}
|
|
||||||
VSN=${2}
|
|
||||||
FILE_INPUT="${VSN}.tar.gz"
|
|
||||||
FILE_OUTPUT=otp.tar.gz
|
|
||||||
DIR_FOR_BIN=.setup-beam/otp
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/otp/${OS}/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}" --strip-components=1
|
|
||||||
"${DIR_FOR_BIN}/Install" -minimal "$(pwd)/${DIR_FOR_BIN}"
|
|
||||||
echo "Installed Erlang/OTP version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/erl -version
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_OTP=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
@@ -1,30 +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"
|
|
||||||
$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
|
|
||||||
type ${FILE_OUTPUT_PS1}
|
|
||||||
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
|
||||||
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/rebar3" "version" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
@@ -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}"
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
const { exec } = require('@actions/exec')
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Install Erlang/OTP.
|
|
||||||
*
|
|
||||||
* @param {string} osVersion
|
|
||||||
* @param {string} otpVersion
|
|
||||||
*/
|
|
||||||
async function installOTP(osVersion, otpVersion) {
|
|
||||||
const OS = process.platform
|
|
||||||
if (OS === 'linux') {
|
|
||||||
await exec(path.join(__dirname, 'install-otp.sh'), [osVersion, otpVersion])
|
|
||||||
} else if (OS === 'win32') {
|
|
||||||
const script = path.join(__dirname, 'install-otp.ps1')
|
|
||||||
await exec(`pwsh.exe ${script} -VSN:${otpVersion}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Install Elixir.
|
|
||||||
*
|
|
||||||
* @param {string} elixirVersion
|
|
||||||
*/
|
|
||||||
async function installElixir(elixirVersion) {
|
|
||||||
const OS = process.platform
|
|
||||||
if (OS === 'linux') {
|
|
||||||
await exec(path.join(__dirname, 'install-elixir.sh'), [elixirVersion])
|
|
||||||
} else if (OS === 'win32') {
|
|
||||||
const script = path.join(__dirname, 'install-elixir.ps1')
|
|
||||||
await exec(`pwsh.exe ${script} -VSN:${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.
|
|
||||||
*
|
|
||||||
* @param {string} rebar3Version
|
|
||||||
*/
|
|
||||||
async function installRebar3(rebar3Version) {
|
|
||||||
const OS = process.platform
|
|
||||||
if (OS === 'linux') {
|
|
||||||
await exec(path.join(__dirname, 'install-rebar3.sh'), [rebar3Version])
|
|
||||||
} else if (OS === 'win32') {
|
|
||||||
const script = path.join(__dirname, 'install-rebar3.ps1')
|
|
||||||
await exec(`pwsh.exe ${script} -VSN:${rebar3Version}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkPlatform() {
|
|
||||||
if (process.platform !== 'linux' && process.platform !== 'win32') {
|
|
||||||
throw new Error(
|
|
||||||
'@erlef/setup-beam only supports Ubuntu and Windows at this time',
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
installOTP,
|
|
||||||
installElixir,
|
|
||||||
installGleam,
|
|
||||||
installRebar3,
|
|
||||||
checkPlatform,
|
|
||||||
}
|
|
||||||
+720
-192
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -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"
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
/target/
|
||||||
|
main
|
||||||
Generated
+7
@@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rust_rebar3_cmd"
|
||||||
|
version = "0.1.0"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "rust_rebar3_cmd"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::process;
|
||||||
|
use std::string;
|
||||||
|
|
||||||
|
// an example function...
|
||||||
|
fn main() {
|
||||||
|
let key = "PATH";
|
||||||
|
match env::var(key) {
|
||||||
|
Ok(val) => println!("{key}: {val:?}"),
|
||||||
|
Err(e) => println!("couldn't interpret {key}: {e}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn rebar3_cmd_version() -> Result<String, string::FromUtf8Error> {
|
||||||
|
println!("going for rebar3.cmd");
|
||||||
|
let output = process::Command::new("rebar3.cmd")
|
||||||
|
.arg("version")
|
||||||
|
.output()
|
||||||
|
.expect("error");
|
||||||
|
return String::from_utf8(output.stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_works() {
|
||||||
|
rebar3_cmd_version().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,660 @@
|
|||||||
|
simulateInput('otp-version', '25.1.2')
|
||||||
|
simulateInput('elixir-version', '1.14.2')
|
||||||
|
simulateInput('rebar3-version', '3.20')
|
||||||
|
simulateInput('install-rebar', 'true')
|
||||||
|
simulateInput('install-hex', 'true')
|
||||||
|
simulateInput('github-token', process.env.GITHUB_TOKEN)
|
||||||
|
simulateInput('hexpm-mirrors', 'https://builds.hex.pm', { multiline: true })
|
||||||
|
|
||||||
|
const assert = require('assert')
|
||||||
|
const fs = require('fs')
|
||||||
|
const os = require('os')
|
||||||
|
const path = require('path')
|
||||||
|
const core = require('@actions/core')
|
||||||
|
const setupBeam = require('../src/setup-beam')
|
||||||
|
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||||
|
|
||||||
|
async function all() {
|
||||||
|
await testFailInstallOTP()
|
||||||
|
await testFailInstallElixir()
|
||||||
|
await testFailInstallGleam()
|
||||||
|
await testFailInstallRebar3()
|
||||||
|
|
||||||
|
await testOTPVersions()
|
||||||
|
await testElixirVersions()
|
||||||
|
await testGleamVersions()
|
||||||
|
await testRebar3Versions()
|
||||||
|
|
||||||
|
await testGetVersionFromSpec()
|
||||||
|
|
||||||
|
await testParseVersionFile()
|
||||||
|
|
||||||
|
await testElixirMixCompileError()
|
||||||
|
await testElixirMixCompileWarning()
|
||||||
|
await testElixirMixTestFailure()
|
||||||
|
await testElixirCredoOutputDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testFailInstallOTP() {
|
||||||
|
const otpOSVersion = 'ubuntu-08.04'
|
||||||
|
const otpVersion = 'OTP-23.2'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await setupBeam.install('otp', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
otpOSVersion,
|
||||||
|
otpVersion,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing Erlang/OTP ${otpVersion} over ${otpOSVersion} is supposed to fail`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testFailInstallElixir() {
|
||||||
|
let exVersion
|
||||||
|
|
||||||
|
exVersion = '0.11'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await setupBeam.install('elixir', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
exVersion,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing Elixir ${exVersion} is supposed to fail`,
|
||||||
|
)
|
||||||
|
|
||||||
|
exVersion = 'v1.0.0-otp-17'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await setupBeam.install('elixir', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
exVersion,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing Elixir ${exVersion} is supposed to fail`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testFailInstallGleam() {
|
||||||
|
const gleamVersion = '0.1.3'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await setupBeam.install('gleam', { gleamVersion })
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing Gleam ${gleamVersion} is supposed to fail`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testFailInstallRebar3() {
|
||||||
|
const r3Version = '0.14.4'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await setupBeam.install('rebar3', { r3Version })
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing rebar3 ${r3Version} is supposed to fail`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testOTPVersions() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
let osVersion
|
||||||
|
let before
|
||||||
|
const hexMirrors = simulateInput(
|
||||||
|
'hexpm-mirrors',
|
||||||
|
'https://repo.hex.pm, https://cdn.jsdelivr.net/hex',
|
||||||
|
{ multiline: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
if (process.platform === 'linux') {
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '25.3.2.1'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-25.3.2.1'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
spec = '19.3.x'
|
||||||
|
osVersion = 'ubuntu-16.04'
|
||||||
|
expected = 'OTP-19.3.6.13'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '^19.3.6'
|
||||||
|
osVersion = 'ubuntu-16.04'
|
||||||
|
expected = 'OTP-19.3.6.13'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '^19.3'
|
||||||
|
osVersion = 'ubuntu-18.04'
|
||||||
|
expected = 'OTP-19.3.6.13'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '20'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-20.3.8.26'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '20.3.8.26'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-20.3.8.26'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '20.x'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-20.3.8.26'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '20.0'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-20.0.5'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '20.0.x'
|
||||||
|
osVersion = 'ubuntu-20.04'
|
||||||
|
expected = 'OTP-20.0.5'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
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') {
|
||||||
|
spec = '24.0.1'
|
||||||
|
osVersion = 'windows-latest'
|
||||||
|
expected = '24.0.1'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '23.2.x'
|
||||||
|
osVersion = 'windows-2016'
|
||||||
|
expected = '23.2.7'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '23.0'
|
||||||
|
osVersion = 'windows-2019'
|
||||||
|
expected = '23.0.4'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirVersions() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
let otpVersion
|
||||||
|
let before
|
||||||
|
const hexMirrors = simulateInput('hexpm-mirrors', 'https://repo.hex.pm', {
|
||||||
|
multiline: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
spec = '1.1.x'
|
||||||
|
otpVersion = 'OTP-17'
|
||||||
|
expected = 'v1.1.1-otp-17'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '1.10.4'
|
||||||
|
otpVersion = 'OTP-23'
|
||||||
|
expected = 'v1.10.4-otp-23'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '1.12.1'
|
||||||
|
otpVersion = 'OTP-24.0.2'
|
||||||
|
expected = 'v1.12.1-otp-24'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '1.14.0'
|
||||||
|
otpVersion = 'main'
|
||||||
|
expected = 'v1.14.0'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'v1.11.0-rc.0'
|
||||||
|
otpVersion = 'OTP-23'
|
||||||
|
expected = 'v1.11.0-rc.0-otp-23'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'v1.11.0-rc.0-otp-23'
|
||||||
|
otpVersion = 'OTP-23'
|
||||||
|
expected = 'v1.11.0-rc.0-otp-23'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'v1.11.0'
|
||||||
|
otpVersion = '22.3.4.2'
|
||||||
|
expected = 'v1.11.0-otp-22'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'main'
|
||||||
|
otpVersion = '23.1'
|
||||||
|
expected = 'main-otp-23'
|
||||||
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testGleamVersions() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
let otpVersion
|
||||||
|
|
||||||
|
spec = 'v0.3.0'
|
||||||
|
otpVersion = 'OTP-23'
|
||||||
|
expected = 'v0.3.0'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '0.13.2'
|
||||||
|
otpVersion = 'OTP-24'
|
||||||
|
expected = 'v0.13.2'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
const before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'v0.14.0-rc2'
|
||||||
|
otpVersion = 'OTP-22'
|
||||||
|
expected = 'v0.14.0-rc2'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testRebar3Versions() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
|
||||||
|
spec = '3.10.x'
|
||||||
|
expected = '3.10.0'
|
||||||
|
got = await setupBeam.getRebar3Version(spec)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '3.11'
|
||||||
|
expected = '3.11.1'
|
||||||
|
got = await setupBeam.getRebar3Version(spec)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '3.10'
|
||||||
|
expected = '3.10.0'
|
||||||
|
got = await setupBeam.getRebar3Version(spec)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testGetVersionFromSpec() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
let before
|
||||||
|
const versions0 = [
|
||||||
|
'3.2.30.5',
|
||||||
|
'3.2.3.5',
|
||||||
|
'1',
|
||||||
|
'2',
|
||||||
|
'3.2.3.4.1',
|
||||||
|
'1.0.9',
|
||||||
|
'3.2.3.40.1',
|
||||||
|
'1.0.2',
|
||||||
|
'2.0',
|
||||||
|
'2.10',
|
||||||
|
'2.9',
|
||||||
|
'1.0',
|
||||||
|
'3.2.3.4.2',
|
||||||
|
'1.1.0',
|
||||||
|
'3.4.5.4',
|
||||||
|
'3.4.5.3',
|
||||||
|
'3.4.5.4.1',
|
||||||
|
'24.0-rc3',
|
||||||
|
'24.0-rc2',
|
||||||
|
'24.0',
|
||||||
|
'23.3.4',
|
||||||
|
'23.3.3',
|
||||||
|
'22.3.4.9.1',
|
||||||
|
'22.3.4.12.1',
|
||||||
|
'22.3.4.10.1',
|
||||||
|
'22.3.4.2',
|
||||||
|
'main',
|
||||||
|
'v11.11.0-rc.0-otp-23',
|
||||||
|
'22.3.4.2.1.0',
|
||||||
|
'12.1.2.2',
|
||||||
|
'12.1.2.4',
|
||||||
|
'12.1.2.0',
|
||||||
|
'12.1.2.3',
|
||||||
|
'12.1.2.3.0',
|
||||||
|
]
|
||||||
|
const versions = {}
|
||||||
|
versions0.forEach((version) => {
|
||||||
|
versions[version] = version
|
||||||
|
})
|
||||||
|
|
||||||
|
spec = '1'
|
||||||
|
expected = '1.1.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '1.0'
|
||||||
|
expected = '1.0.9'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '1'
|
||||||
|
expected = '1'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '1.0'
|
||||||
|
expected = '1.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
spec = '2'
|
||||||
|
expected = '2.10'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '3'
|
||||||
|
expected = '3.4.5.4.1'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '3.2'
|
||||||
|
expected = '3.2.30.5'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '>20'
|
||||||
|
expected = '24.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '24.0'
|
||||||
|
expected = '24.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '24.0-rc3'
|
||||||
|
expected = '24.0-rc3'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
spec = '24.0-rc2'
|
||||||
|
expected = '24.0-rc2'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '22.3'
|
||||||
|
expected = '22.3.4.12.1'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '23.3.3'
|
||||||
|
expected = '23.3.3'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '24'
|
||||||
|
expected = '24.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '23.3'
|
||||||
|
expected = '23.3.4'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = 'main'
|
||||||
|
expected = 'main'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '22.3.4.2'
|
||||||
|
expected = '22.3.4.2'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
spec = '22.3.4.2'
|
||||||
|
expected = '22.3.4.2.1.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '22.3.4.2.1'
|
||||||
|
expected = '22.3.4.2.1.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '22.3.4.2.1.0'
|
||||||
|
expected = '22.3.4.2.1.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '12.1.2.3'
|
||||||
|
expected = '12.1.2.3.0'
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '22.3.4.2.1.0.1'
|
||||||
|
expected = null
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
before = simulateInput('version-type', 'strict')
|
||||||
|
spec = '22.3.4.3'
|
||||||
|
expected = null
|
||||||
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', before)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testParseVersionFile() {
|
||||||
|
const otpVersion = unsimulateInput('otp-version')
|
||||||
|
const elixirVersion = unsimulateInput('elixir-version')
|
||||||
|
const gleamVersion = unsimulateInput('gleam-version')
|
||||||
|
const rebar3Version = unsimulateInput('rebar3-version')
|
||||||
|
|
||||||
|
const erlang = '25.1.1'
|
||||||
|
const elixir = '1.14.1'
|
||||||
|
const gleam = '0.23.0'
|
||||||
|
const rebar3 = '3.16.0'
|
||||||
|
const toolVersions = `# a comment
|
||||||
|
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}
|
||||||
|
rebar ${rebar3}`
|
||||||
|
const filename = 'test/.tool-versions'
|
||||||
|
fs.writeFileSync(filename, toolVersions)
|
||||||
|
process.env.GITHUB_WORKSPACE = ''
|
||||||
|
const appVersions = setupBeam.parseVersionFile(filename)
|
||||||
|
assert.strictEqual(appVersions.get('erlang'), erlang)
|
||||||
|
assert.strictEqual(appVersions.get('elixir'), elixir)
|
||||||
|
|
||||||
|
const absoluteFilename = path.join(os.tmpdir(), '.tool-versions')
|
||||||
|
fs.writeFileSync(absoluteFilename, toolVersions)
|
||||||
|
|
||||||
|
process.env.GITHUB_WORKSPACE = process.cwd()
|
||||||
|
const absoluteAppVersions = setupBeam.parseVersionFile(absoluteFilename)
|
||||||
|
assert.strictEqual(absoluteAppVersions.get('erlang'), erlang)
|
||||||
|
assert.strictEqual(absoluteAppVersions.get('elixir'), elixir)
|
||||||
|
|
||||||
|
assert.ok(async () => {
|
||||||
|
await setupBeam.install('otp', { toolVersion: erlang })
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await setupBeam.install('elixir', { toolVersion: elixir })
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await setupBeam.install('gleam', { toolVersion: gleam })
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await setupBeam.install('rebar3', { toolVersion: rebar3 })
|
||||||
|
})
|
||||||
|
|
||||||
|
simulateInput('otp-version', otpVersion)
|
||||||
|
simulateInput('elixir-version', elixirVersion)
|
||||||
|
simulateInput('gleam-version', gleamVersion)
|
||||||
|
simulateInput('rebar3-version', rebar3Version)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixCompileError() {
|
||||||
|
const [matcher] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixCompileError',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const output = '** (CompileError) lib/test.ex:16: undefined function err/0'
|
||||||
|
const [message, , file, line] = output.match(matcher.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '16')
|
||||||
|
assert.equal(message, output)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixCompileWarning() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixCompileWarning',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput =
|
||||||
|
'warning: variable "err" does not exist and is being expanded to "err()"'
|
||||||
|
const secondOutput = ' lib/test.ex:16: Test.hello/0'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(
|
||||||
|
message,
|
||||||
|
'variable "err" does not exist and is being expanded to "err()"',
|
||||||
|
)
|
||||||
|
|
||||||
|
const [, file, line] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '16')
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixTestFailure() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixTestFailure',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput = '1) test throws (TestTest)'
|
||||||
|
const secondOutput = ' test/test_test.exs:9'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(message, 'test throws (TestTest)')
|
||||||
|
|
||||||
|
const [, file, line] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'test/test_test.exs')
|
||||||
|
assert.equal(line, '9')
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirCredoOutputDefault() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-credoOutputDefault',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput = '┃ [F] → Function is too complex (CC is 29, max is 9).'
|
||||||
|
const secondOutput = '┃ lib/test.ex:15:7 #(Test.hello)'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(message, 'Function is too complex (CC is 29, max is 9).')
|
||||||
|
|
||||||
|
const [, file, line, column] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '15')
|
||||||
|
assert.equal(column, '7')
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsimulateInput(key) {
|
||||||
|
return simulateInput(key, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
function simulateInput(key, value0, opts) {
|
||||||
|
const { multiline } = opts || {}
|
||||||
|
const before = process.env[input(key, opts)]
|
||||||
|
let value = value0
|
||||||
|
if (multiline) {
|
||||||
|
if (value.indexOf(', ') !== -1) {
|
||||||
|
value = value0.replace(/, /g, '\n')
|
||||||
|
} else {
|
||||||
|
value = value0.replace(/\n/g, ', ')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
process.env[input(key)] = value
|
||||||
|
return before
|
||||||
|
}
|
||||||
|
|
||||||
|
function input(key) {
|
||||||
|
return `INPUT_${key.replace(/ /g, '_').toUpperCase()}`
|
||||||
|
}
|
||||||
|
|
||||||
|
all()
|
||||||
|
.then(() => process.exit(0))
|
||||||
|
.catch((err) => {
|
||||||
|
core.error(err)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user