mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 07:06:07 +00:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
+6
-8
@@ -1,20 +1,18 @@
|
||||
---
|
||||
env:
|
||||
node: true
|
||||
es2021: true
|
||||
es2022: true
|
||||
extends:
|
||||
- airbnb
|
||||
- eslint:recommended
|
||||
parserOptions:
|
||||
ecmaVersion: 12
|
||||
ecmaVersion: 2022
|
||||
rules:
|
||||
indent: ["warn", 2]
|
||||
max-len: ["warn", 100]
|
||||
no-undef: "error"
|
||||
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
||||
indent: [warn, 2, {SwitchCase: 1}]
|
||||
max-len: [warn, 100]
|
||||
no-use-before-define: 0
|
||||
operator-linebreak: 0
|
||||
require-jsdoc: 0
|
||||
semi: 0
|
||||
implicit-arrow-linebreak: 0
|
||||
|
||||
settings:
|
||||
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)
|
||||
@@ -6,29 +6,45 @@ on:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
branches:
|
||||
- "*"
|
||||
workflow_dispatch: {}
|
||||
|
||||
env:
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
|
||||
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:
|
||||
name: Expected local npm actions
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref != 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '14'
|
||||
- run: npm install -g npm
|
||||
- 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
|
||||
node-version: '20'
|
||||
- run: npm run build-dist
|
||||
- name: Check if build left artifacts
|
||||
run: git diff --exit-code --ignore-space-at-eol
|
||||
|
||||
@@ -36,10 +52,10 @@ jobs:
|
||||
name: Unit tests (Ubuntu)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '14'
|
||||
node-version: '20'
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
- name: .tool-versions test
|
||||
@@ -53,9 +69,9 @@ jobs:
|
||||
name: Unit tests (Windows)
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '14'
|
||||
node-version: '20'
|
||||
- run: npm install --production
|
||||
- run: npm test
|
||||
|
||||
@@ -7,7 +7,8 @@ on:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- "*"
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
test-failing-first-mirror:
|
||||
@@ -22,7 +23,7 @@ jobs:
|
||||
install-rebar: [true, false]
|
||||
install-hex: [true, false]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
|
||||
@@ -6,7 +6,9 @@ on:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
branches:
|
||||
- "*"
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
integration_test:
|
||||
@@ -20,8 +22,16 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
- 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.3'
|
||||
elixir-version: '1.14.2'
|
||||
os: 'ubuntu-latest'
|
||||
- otp-version: '25.2'
|
||||
elixir-version: '1.14.3'
|
||||
@@ -63,14 +73,6 @@ jobs:
|
||||
otp-version: '21'
|
||||
rebar3-version: '3.12'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.6'
|
||||
otp-version: '21'
|
||||
rebar3-version: '3.12'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.7'
|
||||
otp-version: '22'
|
||||
rebar3-version: '3.13'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.7'
|
||||
otp-version: '22'
|
||||
rebar3-version: '3.13'
|
||||
@@ -83,18 +85,10 @@ jobs:
|
||||
otp-version: '25.0.2'
|
||||
rebar3-version: '3.19'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.10'
|
||||
otp-version: '23'
|
||||
rebar3-version: '3.14'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.12'
|
||||
otp-version: '24'
|
||||
rebar3-version: '3.15'
|
||||
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'
|
||||
otp-version: '22.3.4.2'
|
||||
os: 'ubuntu-20.04'
|
||||
@@ -103,15 +97,13 @@ jobs:
|
||||
otp-version: '22.3.4.1'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- elixir-version: '1.10.3'
|
||||
otp-version: '22.3.4.1'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'master'
|
||||
- elixir-version: 'main'
|
||||
otp-version: '23.1'
|
||||
os: 'ubuntu-20.04'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- elixir-version: 'main'
|
||||
otp-version: '25'
|
||||
os: 'ubuntu-20.04'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- gleam-version: '0.23'
|
||||
otp-version: '24'
|
||||
@@ -125,7 +117,7 @@ jobs:
|
||||
otp-version: false
|
||||
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'
|
||||
os: 'ubuntu-latest'
|
||||
disable_problem_matchers: true
|
||||
@@ -135,7 +127,7 @@ jobs:
|
||||
escript_script: 'protoc-gen-elixir --version'
|
||||
os: 'ubuntu-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -189,6 +181,7 @@ jobs:
|
||||
mix escript.install --force ${{matrix.combo.escript_packages}}
|
||||
${{matrix.combo.escript_script}}
|
||||
if: ${{matrix.combo.escript_packages && matrix.combo.escript_script}}
|
||||
|
||||
environment_variables:
|
||||
name: Environment variables
|
||||
runs-on: ${{matrix.combo.os}}
|
||||
@@ -202,7 +195,7 @@ jobs:
|
||||
rebar3-version: 'nightly'
|
||||
os: 'ubuntu-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -212,9 +205,9 @@ jobs:
|
||||
gleam-version: ${{matrix.combo.gleam-version}}
|
||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||
- run: env
|
||||
- name: List environment variables
|
||||
- name: Check environment variables
|
||||
run: |
|
||||
[ -n "${INSTALL_DIR_FOR_ELIXIR}" ] && echo "${INSTALL_DIR_FOR_ELIXIR}"
|
||||
[ -n "${INSTALL_DIR_FOR_GLEAM}" ] && echo "${INSTALL_DIR_FOR_GLEAM}"
|
||||
[ -n "${INSTALL_DIR_FOR_OTP}" ] && echo "${INSTALL_DIR_FOR_OTP}"
|
||||
[ -n "${INSTALL_DIR_FOR_REBAR3}" ] && echo "${INSTALL_DIR_FOR_REBAR3}"
|
||||
${INSTALL_DIR_FOR_ELIXIR}/bin/elixir -v
|
||||
${INSTALL_DIR_FOR_GLEAM}/bin/gleam --version
|
||||
${INSTALL_DIR_FOR_OTP}/bin/erl -version
|
||||
${INSTALL_DIR_FOR_REBAR3}/bin/rebar3 version
|
||||
|
||||
@@ -11,10 +11,7 @@ jobs:
|
||||
name: Update 3rd party licenses
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '14'
|
||||
- uses: actions/checkout@v4
|
||||
- run:
|
||||
./.github/workflows/update_3rd_party_licenses.sh
|
||||
env:
|
||||
|
||||
@@ -6,7 +6,9 @@ on:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
branches:
|
||||
- "*"
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
integration_test:
|
||||
@@ -20,6 +22,18 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
- 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'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'windows-latest'
|
||||
@@ -52,7 +66,7 @@ jobs:
|
||||
escript_script: 'protoc-gen-elixir --version'
|
||||
os: 'windows-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -61,6 +75,7 @@ jobs:
|
||||
elixir-version: ${{matrix.combo.elixir-version}}
|
||||
gleam-version: ${{matrix.combo.gleam-version}}
|
||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||
version-type: ${{matrix.combo.version-type}}
|
||||
- name: Erlang/OTP version (action)
|
||||
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
||||
- name: Elixir version (action)
|
||||
@@ -104,6 +119,7 @@ jobs:
|
||||
mix escript.install --force ${{matrix.combo.escript_packages}}
|
||||
${{matrix.combo.escript_script}}
|
||||
if: ${{matrix.combo.escript_packages && matrix.combo.escript_script}}
|
||||
|
||||
environment_variables:
|
||||
name: Environment variables
|
||||
runs-on: ${{matrix.combo.os}}
|
||||
@@ -117,7 +133,7 @@ jobs:
|
||||
rebar3-version: 'nightly'
|
||||
os: 'windows-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -127,10 +143,10 @@ jobs:
|
||||
gleam-version: ${{matrix.combo.gleam-version}}
|
||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||
- run: env
|
||||
- name: List environment variables
|
||||
- name: Check environment variables
|
||||
run: |
|
||||
[ -n "${INSTALL_DIR_FOR_ELIXIR}" ] && echo "${INSTALL_DIR_FOR_ELIXIR}"
|
||||
[ -n "${INSTALL_DIR_FOR_GLEAM}" ] && echo "${INSTALL_DIR_FOR_GLEAM}"
|
||||
[ -n "${INSTALL_DIR_FOR_OTP}" ] && echo "${INSTALL_DIR_FOR_OTP}"
|
||||
[ -n "${INSTALL_DIR_FOR_REBAR3}" ] && echo "${INSTALL_DIR_FOR_REBAR3}"
|
||||
shell: bash
|
||||
& "$Env:INSTALL_DIR_FOR_ELIXIR/bin/elixir" "-v"
|
||||
& "$Env:INSTALL_DIR_FOR_GLEAM/bin/gleam.exe" "--version"
|
||||
& "$Env:INSTALL_DIR_FOR_OTP/bin/erl.exe" "+V"
|
||||
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.cmd" "version"
|
||||
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.ps1" "version"
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
node_modules/**
|
||||
dist/.github/workflows
|
||||
test/.tool-versions
|
||||
|
||||
+1177
-1642
File diff suppressed because it is too large
Load Diff
@@ -83,11 +83,26 @@ jobs:
|
||||
env:
|
||||
ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- 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
|
||||
@@ -128,7 +143,7 @@ jobs:
|
||||
otp: ['20.3', '21.3', '22.2']
|
||||
elixir: ['1.8.2', '1.9.4']
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{matrix.otp}}
|
||||
@@ -152,7 +167,7 @@ jobs:
|
||||
otp: ['20.3', '21.3', '22.2']
|
||||
rebar3: ['3.14.1', '3.14.3']
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{matrix.otp}}
|
||||
@@ -170,7 +185,7 @@ jobs:
|
||||
test:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '24'
|
||||
@@ -188,7 +203,7 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '24'
|
||||
@@ -206,7 +221,7 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: false
|
||||
@@ -230,7 +245,7 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '25'
|
||||
@@ -248,7 +263,7 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '25'
|
||||
@@ -267,6 +282,9 @@ environment variables:
|
||||
- `INSTALL_DIR_FOR_GLEAM`: base folder for Gleam
|
||||
- `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
|
||||
|
||||
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.
|
||||
+3
-1
@@ -58,6 +58,8 @@ outputs:
|
||||
description: Exact version of Gleam that was installed
|
||||
rebar3-version:
|
||||
description: Exact version of rebar3 that was installed
|
||||
setup-beam-version:
|
||||
description: The commit unique id of the execution action version
|
||||
runs:
|
||||
using: node16
|
||||
using: node20
|
||||
main: dist/index.js
|
||||
|
||||
Vendored
-62
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "elixir-mixCompileError",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\\*\\* \\((\\w+)\\) (.*):(\\d+): (.*)$",
|
||||
"file": 2,
|
||||
"line": 3,
|
||||
"message": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "elixir-mixCompileWarning",
|
||||
"severity": "warning",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^warning: (.*)$",
|
||||
"message": 1
|
||||
},
|
||||
{
|
||||
"regexp": "^ (.*):(\\d+).*$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "elixir-mixTestFailure",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\\s*\\d+\\) (.*)$",
|
||||
"message": 1
|
||||
},
|
||||
{
|
||||
"regexp": "^\\s*(.*):(\\d+)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "elixir-credoOutputDefault",
|
||||
"severity": "warning",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\u2503\\s\\[\\w\\]\\s[\u2191|\u2197|\u2192|\u2198|\u2193]\\s(.*)$",
|
||||
"message": 1
|
||||
},
|
||||
{
|
||||
"regexp": "^\u2503\\s{7}(.*):(\\d+):(\\d+)\\s.*$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+2545
-2176
File diff suppressed because it is too large
Load Diff
Vendored
-37
@@ -1,37 +0,0 @@
|
||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
||||
|
||||
$ErrorActionPreference="Stop"
|
||||
|
||||
Set-Location ${Env:RUNNER_TEMP}
|
||||
|
||||
$FILE_OUTPUT="gleam.zip"
|
||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
||||
|
||||
function Version-Greater-Than([string]${THIS_ONE}, [string]${REFERENCE}) {
|
||||
$THIS_ONE=$THIS_ONE.replace('v', '')
|
||||
$THIS_ONE=$THIS_ONE.replace('rc', '')
|
||||
$THIS_ONE=$THIS_ONE.replace('-', '')
|
||||
return [version]${THIS_ONE} -gt [version]${REFERENCE}
|
||||
}
|
||||
|
||||
function Uses-LLVM-Triplets([string]${THIS_VSN}) {
|
||||
return "${THIS_VSN}" -eq "nightly" -or (Version-Greater-Than "${THIS_VSN}" "0.22.1")
|
||||
}
|
||||
|
||||
if (Uses-LLVM-Triplets "$VSN") {
|
||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
||||
} else {
|
||||
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
|
||||
}
|
||||
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}/bin" -Path "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
Write-Output "Installed Gleam version follows"
|
||||
& "${DIR_FOR_BIN}/bin/gleam" "--version" | Write-Output
|
||||
|
||||
"INSTALL_DIR_FOR_GLEAM=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
||||
Vendored
-35
@@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
cd "${RUNNER_TEMP}"
|
||||
|
||||
VSN="$1"
|
||||
FILE_OUTPUT=gleam.tar.gz
|
||||
DIR_FOR_BIN=.setup-beam/gleam
|
||||
|
||||
version_gt() {
|
||||
REFERENCE=$1
|
||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$REFERENCE"
|
||||
}
|
||||
|
||||
uses_llvm_triplets() {
|
||||
local VERSION="$1"
|
||||
test "${VERSION}" = "nightly" || version_gt "${VERSION}" "v0.22.1"
|
||||
}
|
||||
|
||||
if uses_llvm_triplets "$VSN"
|
||||
then
|
||||
FILE_INPUT="gleam-${VSN}-x86_64-unknown-linux-musl.tar.gz"
|
||||
else
|
||||
FILE_INPUT="gleam-${VSN}-linux-amd64.tar.gz"
|
||||
fi
|
||||
|
||||
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
|
||||
mkdir -p "${DIR_FOR_BIN}/bin"
|
||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}/bin"
|
||||
|
||||
echo "Installed Gleam version follows"
|
||||
${DIR_FOR_BIN}/bin/gleam --version
|
||||
|
||||
echo "INSTALL_DIR_FOR_GLEAM=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
||||
Vendored
-32
@@ -1,32 +0,0 @@
|
||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
||||
|
||||
$ErrorActionPreference="Stop"
|
||||
|
||||
Set-Location ${Env:RUNNER_TEMP}
|
||||
|
||||
$FILE_INPUT="rebar3"
|
||||
$FILE_OUTPUT="rebar3"
|
||||
$FILE_OUTPUT_PS1="rebar3.ps1"
|
||||
$FILE_OUTPUT_CMD="rebar3.cmd"
|
||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
$REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||
$REBAR3_NIGHTLY=""
|
||||
If ( ${VSN} -eq "nightly" )
|
||||
{
|
||||
$REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||
$REBAR3_NIGHTLY=" (from nightly build)"
|
||||
}
|
||||
Invoke-WebRequest "${REBAR3_TARGET}" -OutFile "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||
Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
||||
Write-Output "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append
|
||||
Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} %*" | Out-File -FilePath "${FILE_OUTPUT_CMD}" -Encoding utf8 -Append
|
||||
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
||||
Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin"
|
||||
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
||||
& "${DIR_FOR_BIN}/bin/rebar3.cmd" "version" | Write-Output
|
||||
|
||||
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
||||
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}"
|
||||
Generated
+1249
-3519
File diff suppressed because it is too large
Load Diff
+14
-22
@@ -7,39 +7,31 @@
|
||||
"format": "prettier src/**/*.js --write && prettier test/**/*.js --write",
|
||||
"jslint": "eslint src/**/*.js && eslint test/**/*.js",
|
||||
"licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES",
|
||||
"markdownlint": "markdownlint *.md",
|
||||
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
||||
"test": "node test/setup-beam.test.js && node ./test/problem-matchers.test.js",
|
||||
"markdownlint": "markdownlint *.md ./github/**/*.md",
|
||||
"shellcheck": "shellcheck .github/workflows/*.sh",
|
||||
"test": "node test/setup-beam.test.js",
|
||||
"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"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "npm run format -- --check && npm run build && git add dist/"
|
||||
}
|
||||
"clean-dist": "rm -rf ./dist",
|
||||
"lint": "npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint",
|
||||
"build-dist": "npm run clean-dist && npm install && npm run build && npm run format && npm run lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": "1.10.0",
|
||||
"@actions/exec": "1.1.1",
|
||||
"@actions/http-client": "2.1.0",
|
||||
"@actions/tool-cache": "^2.0.1",
|
||||
"semver": "7.3.8"
|
||||
"@actions/tool-cache": "2.0.1",
|
||||
"semver": "7.5.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vercel/ncc": "0.34.0",
|
||||
"eslint": "8.25.0",
|
||||
"eslint-config-airbnb": "19.0.4",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"eslint-plugin-jsx-a11y": "6.6.1",
|
||||
"eslint-plugin-react": "7.31.10",
|
||||
"husky": "8.0.1",
|
||||
"markdownlint": "0.26.2",
|
||||
"prettier": "2.7.1",
|
||||
"shellcheck": "1.1.0",
|
||||
"@vercel/ncc": "0.36.1",
|
||||
"eslint": "8.43.0",
|
||||
"markdownlint-cli": "0.35.0",
|
||||
"prettier": "2.8.8",
|
||||
"shellcheck": "2.2.0",
|
||||
"yaml-lint": "1.7.0",
|
||||
"yarn": "1.22.19"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
"node": ">=20"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
||||
|
||||
$ErrorActionPreference="Stop"
|
||||
|
||||
Set-Location ${Env:RUNNER_TEMP}
|
||||
|
||||
$FILE_OUTPUT="gleam.zip"
|
||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
||||
|
||||
function Version-Greater-Than([string]${THIS_ONE}, [string]${REFERENCE}) {
|
||||
$THIS_ONE=$THIS_ONE.replace('v', '')
|
||||
$THIS_ONE=$THIS_ONE.replace('rc', '')
|
||||
$THIS_ONE=$THIS_ONE.replace('-', '')
|
||||
return [version]${THIS_ONE} -gt [version]${REFERENCE}
|
||||
}
|
||||
|
||||
function Uses-LLVM-Triplets([string]${THIS_VSN}) {
|
||||
return "${THIS_VSN}" -eq "nightly" -or (Version-Greater-Than "${THIS_VSN}" "0.22.1")
|
||||
}
|
||||
|
||||
if (Uses-LLVM-Triplets "$VSN") {
|
||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
||||
} else {
|
||||
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
|
||||
}
|
||||
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}/bin" -Path "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
Write-Output "Installed Gleam version follows"
|
||||
& "${DIR_FOR_BIN}/bin/gleam" "--version" | Write-Output
|
||||
|
||||
"INSTALL_DIR_FOR_GLEAM=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
||||
@@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
cd "${RUNNER_TEMP}"
|
||||
|
||||
VSN="$1"
|
||||
FILE_OUTPUT=gleam.tar.gz
|
||||
DIR_FOR_BIN=.setup-beam/gleam
|
||||
|
||||
version_gt() {
|
||||
REFERENCE=$1
|
||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$REFERENCE"
|
||||
}
|
||||
|
||||
uses_llvm_triplets() {
|
||||
local VERSION="$1"
|
||||
test "${VERSION}" = "nightly" || version_gt "${VERSION}" "v0.22.1"
|
||||
}
|
||||
|
||||
if uses_llvm_triplets "$VSN"
|
||||
then
|
||||
FILE_INPUT="gleam-${VSN}-x86_64-unknown-linux-musl.tar.gz"
|
||||
else
|
||||
FILE_INPUT="gleam-${VSN}-linux-amd64.tar.gz"
|
||||
fi
|
||||
|
||||
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
|
||||
mkdir -p "${DIR_FOR_BIN}/bin"
|
||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}/bin"
|
||||
|
||||
echo "Installed Gleam version follows"
|
||||
${DIR_FOR_BIN}/bin/gleam --version
|
||||
|
||||
echo "INSTALL_DIR_FOR_GLEAM=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
||||
@@ -1,32 +0,0 @@
|
||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
||||
|
||||
$ErrorActionPreference="Stop"
|
||||
|
||||
Set-Location ${Env:RUNNER_TEMP}
|
||||
|
||||
$FILE_INPUT="rebar3"
|
||||
$FILE_OUTPUT="rebar3"
|
||||
$FILE_OUTPUT_PS1="rebar3.ps1"
|
||||
$FILE_OUTPUT_CMD="rebar3.cmd"
|
||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
$REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||
$REBAR3_NIGHTLY=""
|
||||
If ( ${VSN} -eq "nightly" )
|
||||
{
|
||||
$REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||
$REBAR3_NIGHTLY=" (from nightly build)"
|
||||
}
|
||||
Invoke-WebRequest "${REBAR3_TARGET}" -OutFile "${FILE_OUTPUT}"
|
||||
$ProgressPreference="Continue"
|
||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||
Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
||||
Write-Output "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append
|
||||
Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} %*" | Out-File -FilePath "${FILE_OUTPUT_CMD}" -Encoding utf8 -Append
|
||||
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
||||
Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin"
|
||||
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
||||
& "${DIR_FOR_BIN}/bin/rebar3.cmd" "version" | Write-Output
|
||||
|
||||
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
||||
@@ -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,164 +0,0 @@
|
||||
const core = require('@actions/core')
|
||||
const { exec } = require('@actions/exec')
|
||||
const tc = require('@actions/tool-cache')
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
|
||||
/**
|
||||
* Install Erlang/OTP.
|
||||
*
|
||||
* @param {string} osVersion
|
||||
* @param {string} otpVersion
|
||||
* @param {string[]} hexMirrors
|
||||
*/
|
||||
async function installOTP(osVersion, otpVersion, hexMirrors) {
|
||||
if (hexMirrors.length === 0) {
|
||||
throw new Error(
|
||||
`Could not install Erlang/OTP ${otpVersion} from any hex.pm mirror`,
|
||||
)
|
||||
}
|
||||
|
||||
const [hexMirror, ...hexMirrorsT] = hexMirrors
|
||||
const fullVersion = `${osVersion}/${otpVersion}`
|
||||
let cachedPath = tc.find('otp', fullVersion)
|
||||
const OS = process.platform
|
||||
|
||||
try {
|
||||
if (OS === 'linux') {
|
||||
if (!cachedPath) {
|
||||
const tarPath = await tc.downloadTool(
|
||||
`https://builds.hex.pm/builds/otp/${fullVersion}.tar.gz`,
|
||||
)
|
||||
const extractPath = await tc.extractTar(tarPath, undefined, [
|
||||
'zx',
|
||||
'--strip-components=1',
|
||||
])
|
||||
cachedPath = await tc.cacheDir(extractPath, 'otp', fullVersion)
|
||||
}
|
||||
|
||||
await exec(path.join(cachedPath, 'Install'), ['-minimal', cachedPath])
|
||||
|
||||
const otpPath = path.join(cachedPath, 'bin')
|
||||
|
||||
core.addPath(otpPath)
|
||||
core.exportVariable('INSTALL_DIR_FOR_OTP', cachedPath)
|
||||
|
||||
core.info('Installed Erlang/OTP version')
|
||||
await exec(path.join(otpPath, 'erl'), ['-version'])
|
||||
} else if (OS === 'win32') {
|
||||
if (!cachedPath) {
|
||||
const exePath = await tc.downloadTool(
|
||||
'https://github.com/erlang/otp/releases/download/' +
|
||||
`OTP-${otpVersion}/otp_win64_${otpVersion}.exe`,
|
||||
)
|
||||
cachedPath = await tc.cacheFile(exePath, 'otp.exe', 'otp', fullVersion)
|
||||
}
|
||||
|
||||
const otpDir = path.join(process.env.RUNNER_TEMP, '.setup-beam', 'otp')
|
||||
const otpPath = path.join(otpDir, 'bin')
|
||||
|
||||
await fs.promises.mkdir(otpDir, { recursive: true })
|
||||
await exec(path.join(cachedPath, 'otp.exe'), ['/S', `/D=${otpDir}`])
|
||||
|
||||
core.addPath(otpPath)
|
||||
core.exportVariable('INSTALL_DIR_FOR_OTP', otpDir)
|
||||
|
||||
core.info('Installed Erlang/OTP version')
|
||||
await exec(path.join(otpPath, 'erl'), ['+V'])
|
||||
}
|
||||
} catch (err) {
|
||||
core.info(`Install OTP failed for mirror ${hexMirror}`)
|
||||
core.info(`${err}\n${err.stack}`)
|
||||
await installOTP(osVersion, otpVersion, hexMirrorsT)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Install Elixir.
|
||||
*
|
||||
* @param {string} elixirVersion
|
||||
* @param {string[]} hexMirrors
|
||||
*/
|
||||
async function installElixir(elixirVersion, hexMirrors) {
|
||||
if (hexMirrors.length === 0) {
|
||||
throw new Error(
|
||||
`Could not install Elixir ${elixirVersion} from any hex.pm mirror`,
|
||||
)
|
||||
}
|
||||
const [hexMirror, ...hexMirrorsT] = hexMirrors
|
||||
|
||||
try {
|
||||
let cachedPath = tc.find('elixir', elixirVersion)
|
||||
|
||||
if (!cachedPath) {
|
||||
const zipPath = await tc.downloadTool(
|
||||
`${hexMirror}/builds/elixir/${elixirVersion}.zip`,
|
||||
)
|
||||
const extractPath = await tc.extractZip(zipPath)
|
||||
cachedPath = await tc.cacheDir(extractPath, 'elixir', elixirVersion)
|
||||
}
|
||||
|
||||
const elixirPath = path.join(cachedPath, 'bin')
|
||||
const escriptsPath = path.join(os.homedir(), '.mix', 'escripts')
|
||||
|
||||
core.addPath(elixirPath)
|
||||
core.addPath(escriptsPath)
|
||||
core.exportVariable('INSTALL_DIR_FOR_ELIXIR', cachedPath)
|
||||
|
||||
core.info('Installed Elixir version')
|
||||
await exec(path.join(elixirPath, 'elixir'), ['-v'])
|
||||
|
||||
await fs.promises.mkdir(escriptsPath, { recursive: true })
|
||||
} catch (err) {
|
||||
core.info(`Elixir install failed for mirror ${hexMirror}`)
|
||||
core.info(`${err}\n${err.stack}`)
|
||||
await installElixir(elixirVersion, hexMirrorsT)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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,
|
||||
}
|
||||
+572
-162
File diff suppressed because it is too large
Load Diff
@@ -1,82 +0,0 @@
|
||||
const assert = require('assert')
|
||||
const core = require('@actions/core')
|
||||
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||
|
||||
async function all() {
|
||||
await testElixirMixCompileError()
|
||||
await testElixirMixCompileWarning()
|
||||
await testElixirMixTestFailure()
|
||||
await testElixirCredoOutputDefault()
|
||||
}
|
||||
|
||||
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')
|
||||
}
|
||||
|
||||
all()
|
||||
.then(() => process.exit(0))
|
||||
.catch((err) => {
|
||||
core.error(err)
|
||||
process.exit(1)
|
||||
})
|
||||
+2
-2
@@ -11,8 +11,8 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2.0.0
|
||||
- uses: erlef/setup-beam@v1.9.0
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: "23.2"
|
||||
gleam-version: "0.23.0-rc1"
|
||||
|
||||
+217
-43
@@ -4,13 +4,15 @@ 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'])
|
||||
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 installer = require('../src/installer')
|
||||
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||
|
||||
async function all() {
|
||||
await testFailInstallOTP()
|
||||
@@ -26,6 +28,11 @@ async function all() {
|
||||
await testGetVersionFromSpec()
|
||||
|
||||
await testParseVersionFile()
|
||||
|
||||
await testElixirMixCompileError()
|
||||
await testElixirMixCompileWarning()
|
||||
await testElixirMixTestFailure()
|
||||
await testElixirCredoOutputDefault()
|
||||
}
|
||||
|
||||
async function testFailInstallOTP() {
|
||||
@@ -33,7 +40,11 @@ async function testFailInstallOTP() {
|
||||
const otpVersion = 'OTP-23.2'
|
||||
assert.rejects(
|
||||
async () => {
|
||||
await installer.installOTP(otpOSVersion, otpVersion)
|
||||
await setupBeam.install('otp', {
|
||||
hexMirror: 'https://builds.hex.pm',
|
||||
otpOSVersion,
|
||||
otpVersion,
|
||||
})
|
||||
},
|
||||
(err) => {
|
||||
assert.ok(err instanceof Error)
|
||||
@@ -49,7 +60,10 @@ async function testFailInstallElixir() {
|
||||
exVersion = '0.11'
|
||||
assert.rejects(
|
||||
async () => {
|
||||
await installer.installElixir(exVersion)
|
||||
await setupBeam.install('elixir', {
|
||||
hexMirror: 'https://builds.hex.pm',
|
||||
exVersion,
|
||||
})
|
||||
},
|
||||
(err) => {
|
||||
assert.ok(err instanceof Error)
|
||||
@@ -61,7 +75,10 @@ async function testFailInstallElixir() {
|
||||
exVersion = 'v1.0.0-otp-17'
|
||||
assert.rejects(
|
||||
async () => {
|
||||
await installer.installElixir(exVersion)
|
||||
await setupBeam.install('elixir', {
|
||||
hexMirror: 'https://builds.hex.pm',
|
||||
exVersion,
|
||||
})
|
||||
},
|
||||
(err) => {
|
||||
assert.ok(err instanceof Error)
|
||||
@@ -75,7 +92,7 @@ async function testFailInstallGleam() {
|
||||
const gleamVersion = '0.1.3'
|
||||
assert.rejects(
|
||||
async () => {
|
||||
await installer.installGleam(gleamVersion)
|
||||
await setupBeam.install('gleam', { gleamVersion })
|
||||
},
|
||||
(err) => {
|
||||
assert.ok(err instanceof Error)
|
||||
@@ -89,7 +106,7 @@ async function testFailInstallRebar3() {
|
||||
const r3Version = '0.14.4'
|
||||
assert.rejects(
|
||||
async () => {
|
||||
await installer.installRebar3(r3Version)
|
||||
await setupBeam.install('rebar3', { r3Version })
|
||||
},
|
||||
(err) => {
|
||||
assert.ok(err instanceof Error)
|
||||
@@ -104,48 +121,79 @@ async function testOTPVersions() {
|
||||
let expected
|
||||
let spec
|
||||
let osVersion
|
||||
const hexMirrors = ['https://repo.hex.pm', 'https://cdn.jsdelivr.net/hex']
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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)
|
||||
}
|
||||
@@ -154,21 +202,23 @@ async function testOTPVersions() {
|
||||
spec = '24.0.1'
|
||||
osVersion = 'windows-latest'
|
||||
expected = '24.0.1'
|
||||
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
}
|
||||
|
||||
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||
}
|
||||
|
||||
async function testElixirVersions() {
|
||||
@@ -177,31 +227,33 @@ async function testElixirVersions() {
|
||||
let spec
|
||||
let otpVersion
|
||||
let before
|
||||
const hexMirrors = ['https://repo.hex.pm']
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
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, hexMirrors)
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
|
||||
before = simulateInput('version-type', 'strict')
|
||||
spec = '1.14.0'
|
||||
otpVersion = 'master'
|
||||
otpVersion = 'main'
|
||||
expected = 'v1.14.0'
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
simulateInput('version-type', before)
|
||||
|
||||
@@ -209,7 +261,15 @@ async function testElixirVersions() {
|
||||
spec = 'v1.11.0-rc.0'
|
||||
otpVersion = 'OTP-23'
|
||||
expected = 'v1.11.0-rc.0-otp-23'
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||
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)
|
||||
|
||||
@@ -217,7 +277,7 @@ async function testElixirVersions() {
|
||||
spec = 'v1.11.0'
|
||||
otpVersion = '22.3.4.2'
|
||||
expected = 'v1.11.0-otp-22'
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
simulateInput('version-type', before)
|
||||
|
||||
@@ -225,9 +285,11 @@ async function testElixirVersions() {
|
||||
spec = 'main'
|
||||
otpVersion = '23.1'
|
||||
expected = 'main-otp-23'
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
simulateInput('version-type', before)
|
||||
|
||||
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||
}
|
||||
|
||||
async function testGleamVersions() {
|
||||
@@ -283,7 +345,7 @@ async function testGetVersionFromSpec() {
|
||||
let expected
|
||||
let spec
|
||||
let before
|
||||
const versions = [
|
||||
const versions0 = [
|
||||
'3.2.30.5',
|
||||
'3.2.3.5',
|
||||
'1',
|
||||
@@ -309,10 +371,20 @@ async function testGetVersionFromSpec() {
|
||||
'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',
|
||||
'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'
|
||||
@@ -396,17 +468,12 @@ async function testGetVersionFromSpec() {
|
||||
assert.deepStrictEqual(got, expected)
|
||||
|
||||
before = simulateInput('version-type', 'strict')
|
||||
spec = 'master'
|
||||
expected = 'master'
|
||||
spec = 'main'
|
||||
expected = 'main'
|
||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
simulateInput('version-type', before)
|
||||
|
||||
spec = 'master'
|
||||
expected = 'master'
|
||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||
assert.deepStrictEqual(got, expected)
|
||||
|
||||
before = simulateInput('version-type', 'strict')
|
||||
spec = '22.3.4.2'
|
||||
expected = '22.3.4.2'
|
||||
@@ -414,6 +481,31 @@ async function testGetVersionFromSpec() {
|
||||
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
|
||||
@@ -433,8 +525,8 @@ async function testParseVersionFile() {
|
||||
const gleam = '0.23.0'
|
||||
const rebar3 = '3.16.0'
|
||||
const toolVersions = `# a comment
|
||||
erlang ${erlang}# comment, no space
|
||||
elixir ${elixir} # comment, with space
|
||||
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}`
|
||||
@@ -445,17 +537,25 @@ rebar ${rebar3}`
|
||||
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 installer.installOTP(erlang)
|
||||
await setupBeam.install('otp', { toolVersion: erlang })
|
||||
})
|
||||
assert.ok(async () => {
|
||||
await installer.installElixir(elixir)
|
||||
await setupBeam.install('elixir', { toolVersion: elixir })
|
||||
})
|
||||
assert.ok(async () => {
|
||||
await installer.installGleam(gleam)
|
||||
await setupBeam.install('gleam', { toolVersion: gleam })
|
||||
})
|
||||
assert.ok(async () => {
|
||||
await installer.installRebar3(rebar3)
|
||||
await setupBeam.install('rebar3', { toolVersion: rebar3 })
|
||||
})
|
||||
|
||||
simulateInput('otp-version', otpVersion)
|
||||
@@ -464,12 +564,86 @@ rebar ${rebar3}`
|
||||
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, value) {
|
||||
const before = process.env[input(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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user