mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 07:06:07 +00:00
Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
+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)
|
||||||
@@ -1,34 +1,42 @@
|
|||||||
---
|
---
|
||||||
name: action
|
name: action
|
||||||
|
|
||||||
on:
|
on: [push, workflow_dispatch]
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize]
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
version:
|
||||||
|
name: Version with commit unique id
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/main'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Version it!
|
||||||
|
run: |
|
||||||
|
# We expect a string such as const setupBeamVersion = 'undefined' in the code
|
||||||
|
SHA=$(git rev-parse --short HEAD)
|
||||||
|
sed -i'.bak' \
|
||||||
|
-e "s/const setupBeamVersion = '.*'/const setupBeamVersion = '${SHA}'/g" \
|
||||||
|
src/setup-beam.js
|
||||||
|
npm run build-dist
|
||||||
|
git config user.name "GitHub Actions"
|
||||||
|
git config user.email "actions@user.noreply.github.com"
|
||||||
|
git add src/setup-beam.js
|
||||||
|
git add dist/index.js
|
||||||
|
git commit -m "Automation: update setup-beam version output to ${SHA}"
|
||||||
|
git push origin main
|
||||||
check_integrity:
|
check_integrity:
|
||||||
name: Expected local npm actions
|
name: Expected local npm actions
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref != 'refs/heads/main'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '16'
|
||||||
- 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 --ignore-space-at-eol
|
run: git diff --exit-code --ignore-space-at-eol
|
||||||
|
|
||||||
@@ -39,14 +47,14 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '16'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
- name: .tool-versions test
|
- name: .tool-versions test
|
||||||
id: setup-beam
|
id: setup-beam
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
version-file: __tests__/.tool-versions
|
version-file: test/.tool-versions
|
||||||
version-type: strict
|
version-type: strict
|
||||||
|
|
||||||
unit_tests_windows:
|
unit_tests_windows:
|
||||||
@@ -56,6 +64,6 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '16'
|
||||||
- run: npm install --production
|
- run: npm install --production
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
name: hexpm-mirrors
|
||||||
|
|
||||||
|
on: [push, 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@v3
|
||||||
|
- 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
|
||||||
@@ -1,12 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: ubuntu
|
name: ubuntu
|
||||||
|
|
||||||
on:
|
on: [push, workflow_dispatch]
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -20,8 +15,16 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
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'
|
- otp-version: '25.2'
|
||||||
elixir-version: '1.14.3'
|
elixir-version: '1.14.2'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
- otp-version: '25.2'
|
- otp-version: '25.2'
|
||||||
elixir-version: '1.14.3'
|
elixir-version: '1.14.3'
|
||||||
@@ -53,7 +56,7 @@ jobs:
|
|||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
- 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-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.4'
|
- elixir-version: 'v1.4'
|
||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
@@ -63,14 +66,6 @@ jobs:
|
|||||||
otp-version: '21'
|
otp-version: '21'
|
||||||
rebar3-version: '3.12'
|
rebar3-version: '3.12'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.6'
|
|
||||||
otp-version: '21'
|
|
||||||
rebar3-version: '3.12'
|
|
||||||
os: 'ubuntu-20.04'
|
|
||||||
- elixir-version: 'v1.7'
|
|
||||||
otp-version: '22'
|
|
||||||
rebar3-version: '3.13'
|
|
||||||
os: 'ubuntu-20.04'
|
|
||||||
- elixir-version: 'v1.7'
|
- elixir-version: 'v1.7'
|
||||||
otp-version: '22'
|
otp-version: '22'
|
||||||
rebar3-version: '3.13'
|
rebar3-version: '3.13'
|
||||||
@@ -83,18 +78,10 @@ jobs:
|
|||||||
otp-version: '25.0.2'
|
otp-version: '25.0.2'
|
||||||
rebar3-version: '3.19'
|
rebar3-version: '3.19'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.10'
|
|
||||||
otp-version: '23'
|
|
||||||
rebar3-version: '3.14'
|
|
||||||
os: 'ubuntu-20.04'
|
|
||||||
- elixir-version: 'v1.12'
|
- elixir-version: 'v1.12'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.15'
|
rebar3-version: '3.15'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.13.4'
|
|
||||||
otp-version: '25.0.2'
|
|
||||||
rebar3-version: '3.19'
|
|
||||||
os: 'ubuntu-20.04'
|
|
||||||
- elixir-version: 'v1.11.0'
|
- elixir-version: 'v1.11.0'
|
||||||
otp-version: '22.3.4.2'
|
otp-version: '22.3.4.2'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
@@ -103,15 +90,13 @@ 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'
|
||||||
|
version-type: 'strict'
|
||||||
- elixir-version: 'main'
|
- elixir-version: 'main'
|
||||||
otp-version: '25'
|
otp-version: '25'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
version-type: 'strict'
|
version-type: 'strict'
|
||||||
- gleam-version: '0.23'
|
- gleam-version: '0.23'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
@@ -125,7 +110,7 @@ jobs:
|
|||||||
otp-version: false
|
otp-version: false
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
disable_problem_matchers: true
|
disable_problem_matchers: true
|
||||||
- gleam-version: '0.22.0' # Version with Gleam's old archive naming convention
|
- gleam-version: '0.22.0' # Version with Gleam's old archive naming convention
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
disable_problem_matchers: true
|
disable_problem_matchers: true
|
||||||
@@ -165,23 +150,23 @@ 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: Format 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 format
|
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
|
- name: Run escript
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: update_3rd_party_licenses
|
name: Update 3rd party licenses (automation)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
@@ -12,8 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: '14'
|
|
||||||
- run:
|
- run:
|
||||||
./.github/workflows/update_3rd_party_licenses.sh
|
./.github/workflows/update_3rd_party_licenses.sh
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: windows
|
name: windows
|
||||||
|
|
||||||
on:
|
on: [push, workflow_dispatch]
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -20,6 +15,18 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
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'
|
- otp-version: '25'
|
||||||
rebar3-version: 'nightly'
|
rebar3-version: 'nightly'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
@@ -61,6 +68,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)
|
||||||
@@ -79,7 +87,7 @@ jobs:
|
|||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: rebar3 from Rust
|
- name: rebar3 from Rust
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/rust_rebar3_cmd
|
cd test/projects/rust_rebar3_cmd
|
||||||
cargo test -- --nocapture
|
cargo test -- --nocapture
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: mix version and help (CLI)
|
- name: mix version and help (CLI)
|
||||||
@@ -90,13 +98,13 @@ 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
|
- name: Run escript
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
node_modules/**
|
node_modules/**
|
||||||
dist/.github/workflows
|
dist/.github/workflows
|
||||||
__tests__/.tool-versions
|
test/.tool-versions
|
||||||
|
|||||||
+1202
-1667
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):
|
||||||
|
|
||||||
|
|||||||
@@ -88,6 +88,21 @@ jobs:
|
|||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Outputs
|
||||||
|
|
||||||
|
The action provides the following outputs:
|
||||||
|
|
||||||
|
| Output | Content
|
||||||
|
|- |-
|
||||||
|
| otp-version | The Erlang version, e.g. `OTP-26.0`
|
||||||
|
| elixir-version | The Elixir version, e.g. `v1.14-otp-26`
|
||||||
|
| gleam-version | The Gleam version, e.g. `v0.23.0`
|
||||||
|
| rebar3-version | The `rebar3` version, e.g. `3.18.0`
|
||||||
|
| setup-beam-version | The commit unique id of the executed action version, e.g. `a34c98f`
|
||||||
|
|
||||||
|
accessible as `${{steps.<setup-beam-step-id>.outputs.<Output>}}`,
|
||||||
|
e.g. `${{steps.setup-beam.outputs.erlang-version}}`
|
||||||
|
|
||||||
### Version file
|
### Version file
|
||||||
|
|
||||||
A version file is specified via input `version-file` (e.g.`.tool-versions`). This
|
A version file is specified via input `version-file` (e.g.`.tool-versions`). This
|
||||||
@@ -121,7 +136,7 @@ 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:
|
||||||
@@ -145,7 +160,7 @@ 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:
|
||||||
@@ -216,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@v2
|
||||||
|
- uses: erlef/setup-beam@v1
|
||||||
|
with:
|
||||||
|
otp-version: '25'
|
||||||
|
# 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@v2
|
||||||
|
- uses: erlef/setup-beam@v1
|
||||||
|
with:
|
||||||
|
otp-version: '25'
|
||||||
|
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
|
||||||
|
|||||||
+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,81 +0,0 @@
|
|||||||
const assert = require('assert')
|
|
||||||
const { problemMatcher } = require('../.github/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) => {
|
|
||||||
console.error(err)
|
|
||||||
process.exit(1)
|
|
||||||
})
|
|
||||||
@@ -45,6 +45,10 @@ inputs:
|
|||||||
version-file:
|
version-file:
|
||||||
description: a versions file (e.g. as used by `asdf`), which defines inputs
|
description: a versions file (e.g. as used by `asdf`), which defines inputs
|
||||||
default: ''
|
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
|
||||||
@@ -54,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: node16
|
||||||
main: dist/index.js
|
main: dist/index.js
|
||||||
|
|||||||
Vendored
+3472
-393
File diff suppressed because it is too large
Load Diff
Vendored
-24
@@ -1,24 +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://builds.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
|
|
||||||
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "%UserProfile%/.mix/escripts" -ItemType Directory | Out-Null
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_ELIXIR=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
Vendored
-20
@@ -1,20 +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://builds.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
|
|
||||||
|
|
||||||
mkdir -p "${HOME}/.mix/escripts"
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="otp_win64_${VSN}.exe"
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$DIR_FOR_BIN="${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "${DIR_FOR_BIN}" -ItemType Directory | Out-Null
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${DIR_FOR_BIN}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${DIR_FOR_BIN}" | 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://builds.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
+1
-1
@@ -27,6 +27,6 @@ Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT}
|
|||||||
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin"
|
||||||
Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin"
|
Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin"
|
||||||
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows"
|
||||||
& "${DIR_FOR_BIN}/bin/rebar3" "version" | Write-Output
|
& "${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
|
"INSTALL_DIR_FOR_REBAR3=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Generated
+1004
-3390
File diff suppressed because it is too large
Load Diff
+13
-21
@@ -4,36 +4,28 @@
|
|||||||
"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"
|
"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/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.10.0",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
"semver": "7.3.8"
|
"@actions/http-client": "2.1.0",
|
||||||
|
"@actions/tool-cache": "2.0.1",
|
||||||
|
"semver": "7.5.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vercel/ncc": "0.34.0",
|
"@vercel/ncc": "0.36.1",
|
||||||
"eslint": "8.25.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.6.1",
|
"shellcheck": "2.2.0",
|
||||||
"eslint-plugin-react": "7.31.10",
|
|
||||||
"husky": "8.0.1",
|
|
||||||
"markdownlint": "0.26.2",
|
|
||||||
"prettier": "2.7.1",
|
|
||||||
"shellcheck": "1.1.0",
|
|
||||||
"yaml-lint": "1.7.0",
|
"yaml-lint": "1.7.0",
|
||||||
"yarn": "1.22.19"
|
"yarn": "1.22.19"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,24 +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://builds.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
|
|
||||||
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "%UserProfile%/.mix/escripts" -ItemType Directory | Out-Null
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_ELIXIR=${Env:RUNNER_TEMP}/${DIR_FOR_BIN}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
@@ -1,20 +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://builds.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
|
|
||||||
|
|
||||||
mkdir -p "${HOME}/.mix/escripts"
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
@@ -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,20 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_INPUT="otp_win64_${VSN}.exe"
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$DIR_FOR_BIN="${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "${DIR_FOR_BIN}" -ItemType Directory | Out-Null
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${DIR_FOR_BIN}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${DIR_FOR_BIN}" | 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://builds.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,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" "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,
|
|
||||||
}
|
|
||||||
+611
-167
File diff suppressed because it is too large
Load Diff
@@ -4,11 +4,13 @@ simulateInput('rebar3-version', '3.20')
|
|||||||
simulateInput('install-rebar', 'true')
|
simulateInput('install-rebar', 'true')
|
||||||
simulateInput('install-hex', 'true')
|
simulateInput('install-hex', 'true')
|
||||||
simulateInput('github-token', process.env.GITHUB_TOKEN)
|
simulateInput('github-token', process.env.GITHUB_TOKEN)
|
||||||
|
simulateInput('hexpm-mirrors', 'https://builds.hex.pm', { multiline: true })
|
||||||
|
|
||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const core = require('@actions/core')
|
||||||
const setupBeam = require('../src/setup-beam')
|
const setupBeam = require('../src/setup-beam')
|
||||||
const installer = require('../src/installer')
|
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||||
|
|
||||||
async function all() {
|
async function all() {
|
||||||
await testFailInstallOTP()
|
await testFailInstallOTP()
|
||||||
@@ -24,6 +26,11 @@ async function all() {
|
|||||||
await testGetVersionFromSpec()
|
await testGetVersionFromSpec()
|
||||||
|
|
||||||
await testParseVersionFile()
|
await testParseVersionFile()
|
||||||
|
|
||||||
|
await testElixirMixCompileError()
|
||||||
|
await testElixirMixCompileWarning()
|
||||||
|
await testElixirMixTestFailure()
|
||||||
|
await testElixirCredoOutputDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testFailInstallOTP() {
|
async function testFailInstallOTP() {
|
||||||
@@ -31,7 +38,11 @@ async function testFailInstallOTP() {
|
|||||||
const otpVersion = 'OTP-23.2'
|
const otpVersion = 'OTP-23.2'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
async () => {
|
async () => {
|
||||||
await installer.installOTP(otpOSVersion, otpVersion)
|
await setupBeam.install('otp', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
otpOSVersion,
|
||||||
|
otpVersion,
|
||||||
|
})
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
assert.ok(err instanceof Error)
|
assert.ok(err instanceof Error)
|
||||||
@@ -47,7 +58,10 @@ async function testFailInstallElixir() {
|
|||||||
exVersion = '0.11'
|
exVersion = '0.11'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
async () => {
|
async () => {
|
||||||
await installer.installElixir(exVersion)
|
await setupBeam.install('elixir', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
exVersion,
|
||||||
|
})
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
assert.ok(err instanceof Error)
|
assert.ok(err instanceof Error)
|
||||||
@@ -59,7 +73,10 @@ async function testFailInstallElixir() {
|
|||||||
exVersion = 'v1.0.0-otp-17'
|
exVersion = 'v1.0.0-otp-17'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
async () => {
|
async () => {
|
||||||
await installer.installElixir(exVersion)
|
await setupBeam.install('elixir', {
|
||||||
|
hexMirror: 'https://builds.hex.pm',
|
||||||
|
exVersion,
|
||||||
|
})
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
assert.ok(err instanceof Error)
|
assert.ok(err instanceof Error)
|
||||||
@@ -73,7 +90,7 @@ async function testFailInstallGleam() {
|
|||||||
const gleamVersion = '0.1.3'
|
const gleamVersion = '0.1.3'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
async () => {
|
async () => {
|
||||||
await installer.installGleam(gleamVersion)
|
await setupBeam.install('gleam', { gleamVersion })
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
assert.ok(err instanceof Error)
|
assert.ok(err instanceof Error)
|
||||||
@@ -87,7 +104,7 @@ async function testFailInstallRebar3() {
|
|||||||
const r3Version = '0.14.4'
|
const r3Version = '0.14.4'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
async () => {
|
async () => {
|
||||||
await installer.installRebar3(r3Version)
|
await setupBeam.install('rebar3', { r3Version })
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
assert.ok(err instanceof Error)
|
assert.ok(err instanceof Error)
|
||||||
@@ -102,8 +119,22 @@ async function testOTPVersions() {
|
|||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
let osVersion
|
let osVersion
|
||||||
|
let before
|
||||||
|
const hexMirrors = simulateInput(
|
||||||
|
'hexpm-mirrors',
|
||||||
|
'https://repo.hex.pm, https://cdn.jsdelivr.net/hex',
|
||||||
|
{ multiline: true },
|
||||||
|
)
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
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'
|
spec = '19.3.x'
|
||||||
osVersion = 'ubuntu-16.04'
|
osVersion = 'ubuntu-16.04'
|
||||||
expected = 'OTP-19.3.6.13'
|
expected = 'OTP-19.3.6.13'
|
||||||
@@ -128,6 +159,12 @@ async function testOTPVersions() {
|
|||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
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'
|
spec = '20.x'
|
||||||
osVersion = 'ubuntu-20.04'
|
osVersion = 'ubuntu-20.04'
|
||||||
expected = 'OTP-20.3.8.26'
|
expected = 'OTP-20.3.8.26'
|
||||||
@@ -145,6 +182,18 @@ async function testOTPVersions() {
|
|||||||
expected = 'OTP-20.0.5'
|
expected = 'OTP-20.0.5'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = 'maint'
|
||||||
|
osVersion = 'ubuntu-22.04'
|
||||||
|
expected = 'maint'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = 'master'
|
||||||
|
osVersion = 'ubuntu-22.04'
|
||||||
|
expected = 'master'
|
||||||
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
@@ -166,6 +215,8 @@ async function testOTPVersions() {
|
|||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testElixirVersions() {
|
async function testElixirVersions() {
|
||||||
@@ -173,6 +224,10 @@ async function testElixirVersions() {
|
|||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
let otpVersion
|
let otpVersion
|
||||||
|
let before
|
||||||
|
const hexMirrors = simulateInput('hexpm-mirrors', 'https://repo.hex.pm', {
|
||||||
|
multiline: true,
|
||||||
|
})
|
||||||
|
|
||||||
spec = '1.1.x'
|
spec = '1.1.x'
|
||||||
otpVersion = 'OTP-17'
|
otpVersion = 'OTP-17'
|
||||||
@@ -192,37 +247,47 @@ async function testElixirVersions() {
|
|||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1.14.0'
|
spec = '1.14.0'
|
||||||
otpVersion = 'master'
|
otpVersion = 'main'
|
||||||
expected = 'v1.14.0'
|
expected = 'v1.14.0'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'v1.11.0-rc.0'
|
spec = 'v1.11.0-rc.0'
|
||||||
otpVersion = 'OTP-23'
|
otpVersion = 'OTP-23'
|
||||||
expected = 'v1.11.0-rc.0-otp-23'
|
expected = 'v1.11.0-rc.0-otp-23'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
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'
|
spec = 'v1.11.0'
|
||||||
otpVersion = '22.3.4.2'
|
otpVersion = '22.3.4.2'
|
||||||
expected = 'v1.11.0-otp-22'
|
expected = 'v1.11.0-otp-22'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'main'
|
spec = 'main'
|
||||||
otpVersion = '23.1'
|
otpVersion = '23.1'
|
||||||
expected = 'main-otp-23'
|
expected = 'main-otp-23'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
|
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testGleamVersions() {
|
async function testGleamVersions() {
|
||||||
@@ -243,13 +308,13 @@ async function testGleamVersions() {
|
|||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
const before = simulateInput('version-type', 'strict')
|
||||||
spec = 'v0.14.0-rc2'
|
spec = 'v0.14.0-rc2'
|
||||||
otpVersion = 'OTP-22'
|
otpVersion = 'OTP-22'
|
||||||
expected = 'v0.14.0-rc2'
|
expected = 'v0.14.0-rc2'
|
||||||
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testRebar3Versions() {
|
async function testRebar3Versions() {
|
||||||
@@ -277,7 +342,8 @@ async function testGetVersionFromSpec() {
|
|||||||
let got
|
let got
|
||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
const versions = [
|
let before
|
||||||
|
const versions0 = [
|
||||||
'3.2.30.5',
|
'3.2.30.5',
|
||||||
'3.2.3.5',
|
'3.2.3.5',
|
||||||
'1',
|
'1',
|
||||||
@@ -303,10 +369,20 @@ async function testGetVersionFromSpec() {
|
|||||||
'22.3.4.9.1',
|
'22.3.4.9.1',
|
||||||
'22.3.4.12.1',
|
'22.3.4.12.1',
|
||||||
'22.3.4.10.1',
|
'22.3.4.10.1',
|
||||||
'master',
|
|
||||||
'v11.11.0-rc.0-otp-23',
|
|
||||||
'22.3.4.2',
|
'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'
|
spec = '1'
|
||||||
expected = '1.1.0'
|
expected = '1.1.0'
|
||||||
@@ -318,19 +394,19 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1'
|
spec = '1'
|
||||||
expected = '1'
|
expected = '1'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '1.0'
|
spec = '1.0'
|
||||||
expected = '1.0'
|
expected = '1.0'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = '2'
|
spec = '2'
|
||||||
expected = '2.10'
|
expected = '2.10'
|
||||||
@@ -357,12 +433,12 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = '24.0-rc3'
|
spec = '24.0-rc3'
|
||||||
expected = '24.0-rc3'
|
expected = '24.0-rc3'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = '24.0-rc2'
|
spec = '24.0-rc2'
|
||||||
expected = '24.0-rc2'
|
expected = '24.0-rc2'
|
||||||
@@ -389,24 +465,51 @@ async function testGetVersionFromSpec() {
|
|||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
before = simulateInput('version-type', 'strict')
|
||||||
spec = 'master'
|
spec = 'main'
|
||||||
expected = 'master'
|
expected = 'main'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
|
|
||||||
spec = 'master'
|
before = simulateInput('version-type', 'strict')
|
||||||
expected = 'master'
|
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
|
||||||
assert.deepStrictEqual(got, expected)
|
|
||||||
|
|
||||||
simulateInput('version-type', 'strict')
|
|
||||||
spec = '22.3.4.2'
|
spec = '22.3.4.2'
|
||||||
expected = '22.3.4.2'
|
expected = '22.3.4.2'
|
||||||
got = setupBeam.getVersionFromSpec(spec, versions)
|
got = setupBeam.getVersionFromSpec(spec, versions)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
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() {
|
async function testParseVersionFile() {
|
||||||
@@ -420,12 +523,12 @@ async function testParseVersionFile() {
|
|||||||
const gleam = '0.23.0'
|
const gleam = '0.23.0'
|
||||||
const rebar3 = '3.16.0'
|
const rebar3 = '3.16.0'
|
||||||
const toolVersions = `# a comment
|
const toolVersions = `# a comment
|
||||||
erlang ${erlang}# comment, no space
|
erlang ref:v${erlang}# comment, no space, and ref:v
|
||||||
elixir ${elixir} # comment, with space
|
elixir ref:${elixir} # comment, with space and ref:
|
||||||
not-gleam 0.23 # not picked up
|
not-gleam 0.23 # not picked up
|
||||||
gleam ${gleam}
|
gleam ${gleam}
|
||||||
rebar ${rebar3}`
|
rebar ${rebar3}`
|
||||||
const filename = '__tests__/.tool-versions'
|
const filename = 'test/.tool-versions'
|
||||||
fs.writeFileSync(filename, toolVersions)
|
fs.writeFileSync(filename, toolVersions)
|
||||||
process.env.GITHUB_WORKSPACE = ''
|
process.env.GITHUB_WORKSPACE = ''
|
||||||
const appVersions = setupBeam.parseVersionFile(filename)
|
const appVersions = setupBeam.parseVersionFile(filename)
|
||||||
@@ -433,16 +536,16 @@ rebar ${rebar3}`
|
|||||||
assert.strictEqual(appVersions.get('elixir'), elixir)
|
assert.strictEqual(appVersions.get('elixir'), elixir)
|
||||||
|
|
||||||
assert.ok(async () => {
|
assert.ok(async () => {
|
||||||
await installer.installOTP(erlang)
|
await setupBeam.install('otp', { toolVersion: erlang })
|
||||||
})
|
})
|
||||||
assert.ok(async () => {
|
assert.ok(async () => {
|
||||||
await installer.installElixir(elixir)
|
await setupBeam.install('elixir', { toolVersion: elixir })
|
||||||
})
|
})
|
||||||
assert.ok(async () => {
|
assert.ok(async () => {
|
||||||
await installer.installGleam(gleam)
|
await setupBeam.install('gleam', { toolVersion: gleam })
|
||||||
})
|
})
|
||||||
assert.ok(async () => {
|
assert.ok(async () => {
|
||||||
await installer.installRebar3(rebar3)
|
await setupBeam.install('rebar3', { toolVersion: rebar3 })
|
||||||
})
|
})
|
||||||
|
|
||||||
simulateInput('otp-version', otpVersion)
|
simulateInput('otp-version', otpVersion)
|
||||||
@@ -451,14 +554,88 @@ rebar ${rebar3}`
|
|||||||
simulateInput('rebar3-version', rebar3Version)
|
simulateInput('rebar3-version', rebar3Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
function unsimulateInput(key) {
|
async function testElixirMixCompileError() {
|
||||||
const before = process.env[input(key)]
|
const [matcher] = problemMatcher.find(
|
||||||
simulateInput(key, '')
|
({ owner }) => owner === 'elixir-mixCompileError',
|
||||||
return before
|
).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)
|
||||||
}
|
}
|
||||||
|
|
||||||
function simulateInput(key, value) {
|
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
|
process.env[input(key)] = value
|
||||||
|
return before
|
||||||
}
|
}
|
||||||
|
|
||||||
function input(key) {
|
function input(key) {
|
||||||
@@ -468,6 +645,6 @@ function input(key) {
|
|||||||
all()
|
all()
|
||||||
.then(() => process.exit(0))
|
.then(() => process.exit(0))
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error(err)
|
core.error(err)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user