mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 07:06:07 +00:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 61e01a43a5 | |||
| df9a60921b | |||
| 54d4f15c75 | |||
| ea13066252 | |||
| 53bf0a5069 | |||
| 977eee5f6e | |||
| 51905b8795 | |||
| b9783cdeea | |||
| cf692c3264 | |||
| 9641cb96c1 | |||
| 94b8820fed | |||
| c2e02f777c | |||
| 2595a954a1 | |||
| a255120a82 | |||
| ffd9affe89 | |||
| 049962787b | |||
| 1f06ac36d3 | |||
| e3f6ffe287 | |||
| 81d8403713 | |||
| c10774ce0f | |||
| 37ac1c5116 | |||
| 2d314bc413 | |||
| aee3f52e58 | |||
| 96fce952fd | |||
| 35850967ef |
@@ -9,7 +9,6 @@ parserOptions:
|
|||||||
rules:
|
rules:
|
||||||
indent: ["warn", 2]
|
indent: ["warn", 2]
|
||||||
max-len: ["warn", 100]
|
max-len: ["warn", 100]
|
||||||
no-console: 0
|
|
||||||
no-undef: "error"
|
no-undef: "error"
|
||||||
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
no-unused-vars: ["error", {"varsIgnorePattern": "^_"}]
|
||||||
no-use-before-define: 0
|
no-use-before-define: 0
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
types: [opened, synchronize]
|
||||||
- main
|
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check_integrity:
|
check_integrity:
|
||||||
@@ -28,7 +30,7 @@ jobs:
|
|||||||
- run: npm run yamllint
|
- run: npm run yamllint
|
||||||
- run: npm run jslint
|
- run: npm run jslint
|
||||||
- name: Check if build left artifacts
|
- name: Check if build left artifacts
|
||||||
run: git diff --exit-code
|
run: git diff --exit-code --ignore-space-at-eol
|
||||||
|
|
||||||
unit_tests_ubuntu:
|
unit_tests_ubuntu:
|
||||||
name: Unit tests (Ubuntu)
|
name: Unit tests (Ubuntu)
|
||||||
@@ -44,7 +46,7 @@ jobs:
|
|||||||
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:
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: hexpm-mirrors
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
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
|
||||||
@@ -6,8 +6,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
types: [opened, synchronize]
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -21,11 +20,11 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
combo:
|
||||||
- otp-version: 'master'
|
- otp-version: '25.2'
|
||||||
elixir-version: '1.14.0'
|
elixir-version: '1.14.3'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
- otp-version: 'master'
|
- otp-version: '25.2'
|
||||||
elixir-version: '1.14.0'
|
elixir-version: '1.14.3'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
version-type: 'strict'
|
version-type: 'strict'
|
||||||
- otp-version: '25'
|
- otp-version: '25'
|
||||||
@@ -54,7 +53,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'
|
||||||
@@ -114,10 +113,6 @@ jobs:
|
|||||||
otp-version: '25'
|
otp-version: '25'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
version-type: 'strict'
|
version-type: 'strict'
|
||||||
- gleam-version: 'nightly'
|
|
||||||
otp-version: '24'
|
|
||||||
os: 'ubuntu-latest'
|
|
||||||
disable_problem_matchers: true
|
|
||||||
- gleam-version: '0.23'
|
- gleam-version: '0.23'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
os: 'ubuntu-latest'
|
os: 'ubuntu-latest'
|
||||||
@@ -170,23 +165,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: Type check Gleam project (without installing Erlang/OTP)
|
- name: Format Gleam project (without installing Erlang/OTP)
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/gleam_gleam
|
cd test/projects/gleam_gleam
|
||||||
gleam check
|
gleam format
|
||||||
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
||||||
- name: Run Gleam project tests (without `rebar3`)
|
- name: Run Gleam project tests (without `rebar3`)
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/gleam_gleam
|
cd test/projects/gleam_gleam
|
||||||
gleam test
|
gleam test
|
||||||
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
||||||
- name: Run escript
|
- name: Run escript
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: update_3rd_party_licenses
|
name: Update 3rd party licenses (automation)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
@@ -18,4 +18,4 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
./.github/workflows/update_3rd_party_licenses.sh
|
./.github/workflows/update_3rd_party_licenses.sh
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
types: [opened, synchronize]
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -41,9 +40,11 @@ jobs:
|
|||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.15'
|
rebar3-version: '3.15'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
|
- gleam-version: '0.19.0-rc3'
|
||||||
|
otp-version: '24'
|
||||||
|
os: 'windows-latest'
|
||||||
- gleam-version: '0.23.0-rc1'
|
- gleam-version: '0.23.0-rc1'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.16'
|
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
- elixir-version: 'v1.13'
|
- elixir-version: 'v1.13'
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
@@ -70,6 +71,17 @@ jobs:
|
|||||||
if: ${{matrix.combo.gleam-version}}
|
if: ${{matrix.combo.gleam-version}}
|
||||||
- name: rebar3 version (action)
|
- name: rebar3 version (action)
|
||||||
run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}"
|
run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}"
|
||||||
|
- name: Run rebar3 and rebar3.cmd
|
||||||
|
run: |
|
||||||
|
# Should not fail
|
||||||
|
rebar3 version
|
||||||
|
rebar3.cmd version
|
||||||
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
|
- name: rebar3 from Rust
|
||||||
|
run: |
|
||||||
|
cd test/projects/rust_rebar3_cmd
|
||||||
|
cargo test -- --nocapture
|
||||||
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
- name: mix version and help (CLI)
|
- name: mix version and help (CLI)
|
||||||
run: |
|
run: |
|
||||||
mix -v
|
mix -v
|
||||||
@@ -78,13 +90,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
|
||||||
|
|||||||
+188
-32
@@ -2,7 +2,7 @@ THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY B
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: @actions/core, @actions/exec, @actions/io. A copy of the source code may be downloaded from git+https://github.com/actions/toolkit.git (@actions/core), git+https://github.com/actions/toolkit.git (@actions/exec), git+https://github.com/actions/toolkit.git (@actions/io). This software contains the following license and notice below:
|
The following software may be included in this product: @actions/core, @actions/exec, @actions/io, @actions/tool-cache. A copy of the source code may be downloaded from git+https://github.com/actions/toolkit.git (@actions/core), git+https://github.com/actions/toolkit.git (@actions/exec), git+https://github.com/actions/toolkit.git (@actions/io), git+https://github.com/actions/toolkit.git (@actions/tool-cache). This software contains the following license and notice below:
|
||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
@@ -926,6 +926,32 @@ limitations under the License.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: array-buffer-byte-length. A copy of the source code may be downloaded from git+https://github.com/inspect-js/array-buffer-byte-length.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 Inspect JS
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: array-includes, define-properties. A copy of the source code may be downloaded from git://github.com/es-shims/array-includes.git (array-includes), git://github.com/ljharb/define-properties.git (define-properties). This software contains the following license and notice below:
|
The following software may be included in this product: array-includes, define-properties. A copy of the source code may be downloaded from git://github.com/es-shims/array-includes.git (array-includes), git://github.com/ljharb/define-properties.git (define-properties). This software contains the following license and notice below:
|
||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
@@ -1002,6 +1028,32 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: available-typed-arrays, is-weakref, typed-array-length. A copy of the source code may be downloaded from git+https://github.com/inspect-js/available-typed-arrays.git (available-typed-arrays), git+https://github.com/inspect-js/is-weakref.git (is-weakref), git+https://github.com/inspect-js/typed-array-length.git (typed-array-length). This software contains the following license and notice below:
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Inspect JS
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: axe-core. A copy of the source code may be downloaded from https://github.com/dequelabs/axe-core.git. This software contains the following license and notice below:
|
The following software may be included in this product: axe-core. A copy of the source code may be downloaded from https://github.com/dequelabs/axe-core.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
Mozilla Public License, version 2.0
|
Mozilla Public License, version 2.0
|
||||||
@@ -1594,7 +1646,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
The following software may be included in this product: core-js-pure. A copy of the source code may be downloaded from https://github.com/zloirock/core-js.git. This software contains the following license and notice below:
|
The following software may be included in this product: core-js-pure. A copy of the source code may be downloaded from https://github.com/zloirock/core-js.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
Copyright (c) 2014-2022 Denis Pushkarev
|
Copyright (c) 2014-2023 Denis Pushkarev
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -2009,7 +2061,33 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: es-shim-unscopables, safe-regex-test. A copy of the source code may be downloaded from git+https://github.com/ljharb/es-shim-unscopables.git (es-shim-unscopables), git+https://github.com/ljharb/safe-regex-test.git (safe-regex-test). This software contains the following license and notice below:
|
The following software may be included in this product: es-set-tostringtag. A copy of the source code may be downloaded from git+https://github.com/es-shims/es-set-tostringtag.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 ECMAScript Shims
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: es-shim-unscopables, gopd, safe-regex-test. A copy of the source code may be downloaded from git+https://github.com/ljharb/es-shim-unscopables.git (es-shim-unscopables), git+https://github.com/ljharb/gopd.git (gopd), git+https://github.com/ljharb/safe-regex-test.git (safe-regex-test). This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
@@ -2035,7 +2113,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: es-to-primitive, is-boolean-object, is-callable, is-date-object, is-number-object, is-string, is-symbol, object.entries, object.values, string.prototype.matchall. A copy of the source code may be downloaded from git://github.com/ljharb/es-to-primitive.git (es-to-primitive), git://github.com/inspect-js/is-boolean-object.git (is-boolean-object), git://github.com/inspect-js/is-callable.git (is-callable), git://github.com/inspect-js/is-date-object.git (is-date-object), git://github.com/inspect-js/is-number-object.git (is-number-object), git://github.com/ljharb/is-string.git (is-string), git://github.com/inspect-js/is-symbol.git (is-symbol), git://github.com/es-shims/Object.entries.git (object.entries), git://github.com/es-shims/Object.values.git (object.values), git+https://github.com/es-shims/String.prototype.matchAll.git (string.prototype.matchall). This software contains the following license and notice below:
|
The following software may be included in this product: es-to-primitive, is-boolean-object, is-callable, is-date-object, is-number-object, is-string, is-symbol, is-typed-array, object.entries, object.values, string.prototype.matchall, which-typed-array. A copy of the source code may be downloaded from git://github.com/ljharb/es-to-primitive.git (es-to-primitive), git://github.com/inspect-js/is-boolean-object.git (is-boolean-object), git://github.com/inspect-js/is-callable.git (is-callable), git://github.com/inspect-js/is-date-object.git (is-date-object), git://github.com/inspect-js/is-number-object.git (is-number-object), git://github.com/ljharb/is-string.git (is-string), git://github.com/inspect-js/is-symbol.git (is-symbol), git://github.com/inspect-js/is-typed-array.git (is-typed-array), git://github.com/es-shims/Object.entries.git (object.entries), git://github.com/es-shims/Object.values.git (object.values), git+https://github.com/es-shims/String.prototype.matchAll.git (string.prototype.matchall), git://github.com/inspect-js/which-typed-array.git (which-typed-array). This software contains the following license and notice below:
|
||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
@@ -2719,6 +2797,32 @@ PERFORMANCE OF THIS SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: for-each. A copy of the source code may be downloaded from git://github.com/Raynos/for-each.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2012 Raynos.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: fs.realpath. A copy of the source code may be downloaded from git+https://github.com/isaacs/fs.realpath.git. This software contains the following license and notice below:
|
The following software may be included in this product: fs.realpath. A copy of the source code may be downloaded from git+https://github.com/isaacs/fs.realpath.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
The ISC License
|
The ISC License
|
||||||
@@ -3001,7 +3105,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: has-property-descriptors, supports-preserve-symlinks-flag. A copy of the source code may be downloaded from git+https://github.com/inspect-js/has-property-descriptors.git (has-property-descriptors), git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git (supports-preserve-symlinks-flag). This software contains the following license and notice below:
|
The following software may be included in this product: has-property-descriptors, has-proto, supports-preserve-symlinks-flag. A copy of the source code may be downloaded from git+https://github.com/inspect-js/has-property-descriptors.git (has-property-descriptors), git+https://github.com/inspect-js/has-proto.git (has-proto), git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git (supports-preserve-symlinks-flag). This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
@@ -3119,7 +3223,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: ini, isexe, json-stringify-safe, lru-cache, minimatch, once, rimraf, semver, which, wrappy, yallist. A copy of the source code may be downloaded from git://github.com/isaacs/ini.git (ini), git+https://github.com/isaacs/isexe.git (isexe), git://github.com/isaacs/json-stringify-safe (json-stringify-safe), git://github.com/isaacs/node-lru-cache.git (lru-cache), git://github.com/isaacs/minimatch.git (minimatch), git://github.com/isaacs/once (once), git://github.com/isaacs/rimraf.git (rimraf), https://github.com/npm/node-semver (semver), git://github.com/isaacs/node-which.git (which), https://github.com/npm/wrappy (wrappy), git+https://github.com/isaacs/yallist.git (yallist). This software contains the following license and notice below:
|
The following software may be included in this product: ini, isexe, json-stringify-safe, lru-cache, minimatch, once, rimraf, semver, which, wrappy, yallist. A copy of the source code may be downloaded from git://github.com/isaacs/ini.git (ini), git+https://github.com/isaacs/isexe.git (isexe), git://github.com/isaacs/json-stringify-safe (json-stringify-safe), git://github.com/isaacs/node-lru-cache.git (lru-cache), git://github.com/isaacs/minimatch.git (minimatch), git://github.com/isaacs/once (once), git://github.com/isaacs/rimraf.git (rimraf), https://github.com/npm/node-semver.git (semver), git://github.com/isaacs/node-which.git (which), https://github.com/npm/wrappy (wrappy), git+https://github.com/isaacs/yallist.git (yallist). This software contains the following license and notice below:
|
||||||
|
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|
||||||
@@ -3139,6 +3243,32 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: is-array-buffer. A copy of the source code may be downloaded from git+https://github.com/inspect-js/is-array-buffer.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2015 Chen Gengyuan, Inspect JS
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: is-bigint, object.fromentries. A copy of the source code may be downloaded from git+https://github.com/inspect-js/is-bigint.git (is-bigint), git://github.com/es-shims/Object.fromEntries.git (object.fromentries). This software contains the following license and notice below:
|
The following software may be included in this product: is-bigint, object.fromentries. A copy of the source code may be downloaded from git+https://github.com/inspect-js/is-bigint.git (is-bigint), git://github.com/es-shims/Object.fromEntries.git (object.fromentries). This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
@@ -3267,32 +3397,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: is-weakref. A copy of the source code may be downloaded from git+https://github.com/inspect-js/is-weakref.git. This software contains the following license and notice below:
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 Inspect JS
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
The following software may be included in this product: js-sdsl. A copy of the source code may be downloaded from https://github.com/js-sdsl/js-sdsl.git. This software contains the following license and notice below:
|
The following software may be included in this product: js-sdsl. A copy of the source code may be downloaded from https://github.com/js-sdsl/js-sdsl.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
@@ -10135,6 +10239,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: string.prototype.trim. A copy of the source code may be downloaded from git://github.com/es-shims/String.prototype.trim.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Jordan Harband
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: string.prototype.trimend, string.prototype.trimstart. A copy of the source code may be downloaded from git://github.com/es-shims/String.prototype.trimEnd.git (string.prototype.trimend), git://github.com/es-shims/String.prototype.trimStart.git (string.prototype.trimstart). This software contains the following license and notice below:
|
The following software may be included in this product: string.prototype.trimend, string.prototype.trimstart. A copy of the source code may be downloaded from git://github.com/es-shims/String.prototype.trimEnd.git (string.prototype.trimend), git://github.com/es-shims/String.prototype.trimStart.git (string.prototype.trimstart). This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
@@ -10308,6 +10438,32 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
The following software may be included in this product: uuid. A copy of the source code may be downloaded from https://github.com/uuidjs/uuid.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2010-2016 Robert Kieffer and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: word-wrap. A copy of the source code may be downloaded from https://github.com/jonschlinkert/word-wrap.git. This software contains the following license and notice below:
|
The following software may be included in this product: word-wrap. A copy of the source code may be downloaded from https://github.com/jonschlinkert/word-wrap.git. This software contains the following license and notice below:
|
||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Elixir Problem Matchers
|
# Elixir Problem Matchers
|
||||||
|
|
||||||
Elixir Problem Matchers in [elixir-matchers.json](.github/elixir-matchers.json)
|
Elixir Problem Matchers in [elixir-matchers.json](matchers/elixir-matchers.json)
|
||||||
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
||||||
available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
|
available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- markdownlint-disable MD013 -->
|
<!-- markdownlint-disable MD013 -->
|
||||||
# setup-beam [![GitHub Actions][action-img]][action] [![GitHub Actions][ubuntu-img]][ubuntu] [![GitHub Actions][windows-img]][windows]
|
# setup-beam [![GitHub Actions][action-img]][action] [![GitHub Actions][ubuntu-img]][ubuntu] [![GitHub Actions][windows-img]][windows]
|
||||||
|
|
||||||
[action]: https://github.com/erlef/setup-beam
|
[action]: https://github.com/erlef/setup-beam/actions/workflows/action.yml
|
||||||
[action-img]: https://github.com/erlef/setup-beam/workflows/action/badge.svg
|
[action-img]: https://github.com/erlef/setup-beam/actions/workflows/action.yml/badge.svg
|
||||||
[ubuntu]: https://github.com/erlef/setup-beam
|
[ubuntu]: https://github.com/erlef/setup-beam/actions/workflows/ubuntu.yml
|
||||||
[ubuntu-img]: https://github.com/erlef/setup-beam/workflows/ubuntu/badge.svg
|
[ubuntu-img]: https://github.com/erlef/setup-beam/actions/workflows/ubuntu.yml/badge.svg
|
||||||
[windows]: https://github.com/erlef/setup-beam
|
[windows]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml
|
||||||
[windows-img]: https://github.com/erlef/setup-beam/workflows/windows/badge.svg
|
[windows-img]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml/badge.svg
|
||||||
|
|
||||||
This action sets up an Erlang/OTP environment for use in a GitHub Actions
|
This action sets up an Erlang/OTP environment for use in a GitHub Actions
|
||||||
workflow by:
|
workflow by:
|
||||||
@@ -83,7 +83,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
|
ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
@@ -121,14 +121,14 @@ on: push
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
otp: ['20.3', '21.3', '22.2']
|
otp: ['20.3', '21.3', '22.2']
|
||||||
elixir: ['1.8.2', '1.9.4']
|
elixir: ['1.8.2', '1.9.4']
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.otp}}
|
otp-version: ${{matrix.otp}}
|
||||||
@@ -145,14 +145,14 @@ on: push
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
|
name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
otp: ['20.3', '21.3', '22.2']
|
otp: ['20.3', '21.3', '22.2']
|
||||||
rebar3: ['3.14.1', '3.14.3']
|
rebar3: ['3.14.1', '3.14.3']
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.otp}}
|
otp-version: ${{matrix.otp}}
|
||||||
@@ -170,7 +170,7 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
@@ -188,7 +188,7 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
@@ -206,7 +206,7 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: erlef/setup-beam@v1
|
- uses: erlef/setup-beam@v1
|
||||||
with:
|
with:
|
||||||
otp-version: false
|
otp-version: false
|
||||||
@@ -216,6 +216,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
|
||||||
|
|||||||
+13
@@ -8,6 +8,15 @@ branding:
|
|||||||
color: blue
|
color: blue
|
||||||
icon: code
|
icon: code
|
||||||
inputs:
|
inputs:
|
||||||
|
github-token:
|
||||||
|
description: >
|
||||||
|
A GitHub token used to access the GitHub REST API for retrieving release and version information.
|
||||||
|
While this action will never perform anything more than read operations against the GitHub REST API,
|
||||||
|
we do not recommend providing a self-generated personal access token which may provide more access than is
|
||||||
|
required of this action. This input instead is merely a convenience so that users of this action do not
|
||||||
|
have to manually pass an automatically generated token via their environment settings within a workflow.
|
||||||
|
[Learn more about automatically generated tokens](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)
|
||||||
|
default: ${{ github.token }}
|
||||||
otp-version:
|
otp-version:
|
||||||
description: Version range or exact version of Erlang/OTP to use,
|
description: Version range or exact version of Erlang/OTP to use,
|
||||||
or false when installing only Gleam without OTP
|
or false when installing only Gleam without OTP
|
||||||
@@ -36,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
|
||||||
|
|||||||
Vendored
-16
@@ -57,22 +57,6 @@
|
|||||||
"column": 3
|
"column": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "elixir-dialyzerOutputDefault",
|
|
||||||
"severity": "warning",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^(.*):(\\d+):(.*)",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"code": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"regexp": "^(.*)$",
|
|
||||||
"message": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,22 +57,6 @@
|
|||||||
"column": 3
|
"column": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "elixir-dialyzerOutputDefault",
|
|
||||||
"severity": "warning",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^(.*):(\\d+):(.*)",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"code": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"regexp": "^(.*)$",
|
|
||||||
"message": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Vendored
+2852
-108
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://repo.hex.pm/builds/elixir/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "${DIR_FOR_BIN}" -ItemType Directory | Out-Null
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Write-Output "Installed Elixir version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/elixir" "-v" | Write-Output
|
|
||||||
|
|
||||||
$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://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
unzip -q -o -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
|
||||||
echo "Installed Elixir version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/elixir -v
|
|
||||||
|
|
||||||
mkdir -p "${HOME}/.mix/escripts"
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
Vendored
+17
-1
@@ -4,10 +4,26 @@ $ErrorActionPreference="Stop"
|
|||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
Set-Location ${Env:RUNNER_TEMP}
|
||||||
|
|
||||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
|
||||||
$FILE_OUTPUT="gleam.zip"
|
$FILE_OUTPUT="gleam.zip"
|
||||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
$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"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
||||||
$ProgressPreference="Continue"
|
$ProgressPreference="Continue"
|
||||||
|
|||||||
Vendored
+4
-3
@@ -9,12 +9,13 @@ FILE_OUTPUT=gleam.tar.gz
|
|||||||
DIR_FOR_BIN=.setup-beam/gleam
|
DIR_FOR_BIN=.setup-beam/gleam
|
||||||
|
|
||||||
version_gt() {
|
version_gt() {
|
||||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
|
REFERENCE=$1
|
||||||
|
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$REFERENCE"
|
||||||
}
|
}
|
||||||
|
|
||||||
uses_llvm_triplets() {
|
uses_llvm_triplets() {
|
||||||
local version="$1"
|
local VERSION="$1"
|
||||||
test "$version" = "nightly" || version_gt "$version" "v0.22.1"
|
test "${VERSION}" = "nightly" || version_gt "${VERSION}" "v0.22.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
if uses_llvm_triplets "$VSN"
|
if uses_llvm_triplets "$VSN"
|
||||||
|
|||||||
Vendored
-17
@@ -1,17 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$ERL_ROOT = "${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/otp_win64_${VSN}.exe" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${ERL_ROOT}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${ERL_ROOT}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${ERL_ROOT}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
OS=${1}
|
|
||||||
VSN=${2}
|
|
||||||
FILE_INPUT="${VSN}.tar.gz"
|
|
||||||
FILE_OUTPUT=otp.tar.gz
|
|
||||||
DIR_FOR_BIN=.setup-beam/otp
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/otp/${OS}/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}" --strip-components=1
|
|
||||||
"${DIR_FOR_BIN}/Install" -minimal "$(pwd)/${DIR_FOR_BIN}"
|
|
||||||
echo "Installed Erlang/OTP version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/erl -version
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_OTP=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
Vendored
+4
-2
@@ -7,6 +7,7 @@ Set-Location ${Env:RUNNER_TEMP}
|
|||||||
$FILE_INPUT="rebar3"
|
$FILE_INPUT="rebar3"
|
||||||
$FILE_OUTPUT="rebar3"
|
$FILE_OUTPUT="rebar3"
|
||||||
$FILE_OUTPUT_PS1="rebar3.ps1"
|
$FILE_OUTPUT_PS1="rebar3.ps1"
|
||||||
|
$FILE_OUTPUT_CMD="rebar3.cmd"
|
||||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
@@ -22,9 +23,10 @@ $ProgressPreference="Continue"
|
|||||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||||
Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
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 "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append
|
||||||
type ${FILE_OUTPUT_PS1}
|
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_PS1}" "${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
+69
-12
@@ -9,6 +9,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.10.0",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
|
"@actions/http-client": "2.1.0",
|
||||||
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"semver": "7.3.8"
|
"semver": "7.3.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -47,9 +49,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/http-client": {
|
"node_modules/@actions/http-client": {
|
||||||
"version": "2.0.1",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz",
|
||||||
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
|
"integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tunnel": "^0.0.6"
|
"tunnel": "^0.0.6"
|
||||||
}
|
}
|
||||||
@@ -59,6 +61,36 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
|
||||||
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
|
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@actions/tool-cache": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-iPU+mNwrbA8jodY8eyo/0S/QqCKDajiR8OxWTnSk/SnYg0sj8Hp4QcUEVC1YFpHWXtrfbQrE13Jz4k4HXJQKcA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "^1.2.6",
|
||||||
|
"@actions/exec": "^1.0.0",
|
||||||
|
"@actions/http-client": "^2.0.1",
|
||||||
|
"@actions/io": "^1.1.1",
|
||||||
|
"semver": "^6.1.0",
|
||||||
|
"uuid": "^3.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@actions/tool-cache/node_modules/semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@actions/tool-cache/node_modules/uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||||
|
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/runtime": {
|
"node_modules/@babel/runtime": {
|
||||||
"version": "7.19.4",
|
"version": "7.19.4",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
|
||||||
@@ -1857,9 +1889,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/json5": {
|
"node_modules/json5": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.0"
|
||||||
@@ -3012,9 +3044,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@actions/http-client": {
|
"@actions/http-client": {
|
||||||
"version": "2.0.1",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz",
|
||||||
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
|
"integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"tunnel": "^0.0.6"
|
"tunnel": "^0.0.6"
|
||||||
}
|
}
|
||||||
@@ -3024,6 +3056,31 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
|
||||||
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
|
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
|
||||||
},
|
},
|
||||||
|
"@actions/tool-cache": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-iPU+mNwrbA8jodY8eyo/0S/QqCKDajiR8OxWTnSk/SnYg0sj8Hp4QcUEVC1YFpHWXtrfbQrE13Jz4k4HXJQKcA==",
|
||||||
|
"requires": {
|
||||||
|
"@actions/core": "^1.2.6",
|
||||||
|
"@actions/exec": "^1.0.0",
|
||||||
|
"@actions/http-client": "^2.0.1",
|
||||||
|
"@actions/io": "^1.1.1",
|
||||||
|
"semver": "^6.1.0",
|
||||||
|
"uuid": "^3.3.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@babel/runtime": {
|
"@babel/runtime": {
|
||||||
"version": "7.19.4",
|
"version": "7.19.4",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
|
||||||
@@ -4363,9 +4420,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"json5": {
|
"json5": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.0"
|
||||||
|
|||||||
+5
-3
@@ -4,12 +4,12 @@
|
|||||||
"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",
|
||||||
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
||||||
"test": "node __tests__/setup-beam.test.js && node ./__tests__/problem-matchers.test.js",
|
"test": "node test/setup-beam.test.js && node ./test/problem-matchers.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"
|
||||||
},
|
},
|
||||||
@@ -21,6 +21,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.10.0",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
|
"@actions/http-client": "2.1.0",
|
||||||
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"semver": "7.3.8"
|
"semver": "7.3.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -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://repo.hex.pm/builds/elixir/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
New-Item "${DIR_FOR_BIN}" -ItemType Directory | Out-Null
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Write-Output "Installed Elixir version follows"
|
|
||||||
& "${DIR_FOR_BIN}/bin/elixir" "-v" | Write-Output
|
|
||||||
|
|
||||||
$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://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
unzip -q -o -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
|
||||||
echo "Installed Elixir version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/elixir -v
|
|
||||||
|
|
||||||
mkdir -p "${HOME}/.mix/escripts"
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_ELIXIR=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
+17
-1
@@ -4,10 +4,26 @@ $ErrorActionPreference="Stop"
|
|||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
Set-Location ${Env:RUNNER_TEMP}
|
||||||
|
|
||||||
$FILE_INPUT="gleam-${VSN}-x86_64-pc-windows-msvc.zip"
|
|
||||||
$FILE_OUTPUT="gleam.zip"
|
$FILE_OUTPUT="gleam.zip"
|
||||||
$DIR_FOR_BIN=".setup-beam/gleam"
|
$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"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "${FILE_OUTPUT}"
|
||||||
$ProgressPreference="Continue"
|
$ProgressPreference="Continue"
|
||||||
|
|||||||
@@ -9,12 +9,13 @@ FILE_OUTPUT=gleam.tar.gz
|
|||||||
DIR_FOR_BIN=.setup-beam/gleam
|
DIR_FOR_BIN=.setup-beam/gleam
|
||||||
|
|
||||||
version_gt() {
|
version_gt() {
|
||||||
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
|
REFERENCE=$1
|
||||||
|
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$REFERENCE"
|
||||||
}
|
}
|
||||||
|
|
||||||
uses_llvm_triplets() {
|
uses_llvm_triplets() {
|
||||||
local version="$1"
|
local VERSION="$1"
|
||||||
test "$version" = "nightly" || version_gt "$version" "v0.22.1"
|
test "${VERSION}" = "nightly" || version_gt "${VERSION}" "v0.22.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
if uses_llvm_triplets "$VSN"
|
if uses_llvm_triplets "$VSN"
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
param([Parameter(Mandatory=$true)][string]${VSN})
|
|
||||||
|
|
||||||
$ErrorActionPreference="Stop"
|
|
||||||
|
|
||||||
Set-Location ${Env:RUNNER_TEMP}
|
|
||||||
|
|
||||||
$FILE_OUTPUT="otp.exe"
|
|
||||||
$ERL_ROOT = "${Env:RUNNER_TEMP}\.setup-beam\otp"
|
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
|
||||||
Invoke-WebRequest "https://github.com/erlang/otp/releases/download/OTP-${VSN}/otp_win64_${VSN}.exe" -OutFile "${FILE_OUTPUT}"
|
|
||||||
$ProgressPreference="Continue"
|
|
||||||
Start-Process "${FILE_OUTPUT}" "/S /D=${ERL_ROOT}" -Wait
|
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
|
||||||
& "${ERL_ROOT}/bin/erl.exe" "+V" | Write-Output
|
|
||||||
|
|
||||||
"INSTALL_DIR_FOR_OTP=${ERL_ROOT}" | Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
cd "${RUNNER_TEMP}"
|
|
||||||
|
|
||||||
OS=${1}
|
|
||||||
VSN=${2}
|
|
||||||
FILE_INPUT="${VSN}.tar.gz"
|
|
||||||
FILE_OUTPUT=otp.tar.gz
|
|
||||||
DIR_FOR_BIN=.setup-beam/otp
|
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/otp/${OS}/${FILE_INPUT}"
|
|
||||||
mkdir -p "${DIR_FOR_BIN}"
|
|
||||||
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}" --strip-components=1
|
|
||||||
"${DIR_FOR_BIN}/Install" -minimal "$(pwd)/${DIR_FOR_BIN}"
|
|
||||||
echo "Installed Erlang/OTP version follows"
|
|
||||||
${DIR_FOR_BIN}/bin/erl -version
|
|
||||||
|
|
||||||
echo "INSTALL_DIR_FOR_OTP=${RUNNER_TEMP}/${DIR_FOR_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
@@ -7,6 +7,7 @@ Set-Location ${Env:RUNNER_TEMP}
|
|||||||
$FILE_INPUT="rebar3"
|
$FILE_INPUT="rebar3"
|
||||||
$FILE_OUTPUT="rebar3"
|
$FILE_OUTPUT="rebar3"
|
||||||
$FILE_OUTPUT_PS1="rebar3.ps1"
|
$FILE_OUTPUT_PS1="rebar3.ps1"
|
||||||
|
$FILE_OUTPUT_CMD="rebar3.cmd"
|
||||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
@@ -22,9 +23,10 @@ $ProgressPreference="Continue"
|
|||||||
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null
|
||||||
Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
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 "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append
|
||||||
type ${FILE_OUTPUT_PS1}
|
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_PS1}" "${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
|
||||||
|
|||||||
+98
-13
@@ -1,19 +1,76 @@
|
|||||||
|
const core = require('@actions/core')
|
||||||
const { exec } = require('@actions/exec')
|
const { exec } = require('@actions/exec')
|
||||||
|
const tc = require('@actions/tool-cache')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const fs = require('fs')
|
||||||
|
const os = require('os')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install Erlang/OTP.
|
* Install Erlang/OTP.
|
||||||
*
|
*
|
||||||
* @param {string} osVersion
|
* @param {string} osVersion
|
||||||
* @param {string} otpVersion
|
* @param {string} otpVersion
|
||||||
|
* @param {string[]} hexMirrors
|
||||||
*/
|
*/
|
||||||
async function installOTP(osVersion, otpVersion) {
|
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
|
const OS = process.platform
|
||||||
if (OS === 'linux') {
|
|
||||||
await exec(path.join(__dirname, 'install-otp.sh'), [osVersion, otpVersion])
|
try {
|
||||||
} else if (OS === 'win32') {
|
if (OS === 'linux') {
|
||||||
const script = path.join(__dirname, 'install-otp.ps1')
|
if (!cachedPath) {
|
||||||
await exec(`pwsh.exe ${script} -VSN:${otpVersion}`)
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,14 +78,42 @@ async function installOTP(osVersion, otpVersion) {
|
|||||||
* Install Elixir.
|
* Install Elixir.
|
||||||
*
|
*
|
||||||
* @param {string} elixirVersion
|
* @param {string} elixirVersion
|
||||||
|
* @param {string[]} hexMirrors
|
||||||
*/
|
*/
|
||||||
async function installElixir(elixirVersion) {
|
async function installElixir(elixirVersion, hexMirrors) {
|
||||||
const OS = process.platform
|
if (hexMirrors.length === 0) {
|
||||||
if (OS === 'linux') {
|
throw new Error(
|
||||||
await exec(path.join(__dirname, 'install-elixir.sh'), [elixirVersion])
|
`Could not install Elixir ${elixirVersion} from any hex.pm mirror`,
|
||||||
} else if (OS === 'win32') {
|
)
|
||||||
const script = path.join(__dirname, 'install-elixir.ps1')
|
}
|
||||||
await exec(`pwsh.exe ${script} -VSN:${elixirVersion}`)
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+150
-93
@@ -1,9 +1,8 @@
|
|||||||
const core = require('@actions/core')
|
const core = require('@actions/core')
|
||||||
const { exec } = require('@actions/exec')
|
const { exec } = require('@actions/exec')
|
||||||
const os = require('os')
|
const http = require('@actions/http-client')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const semver = require('semver')
|
const semver = require('semver')
|
||||||
const https = require('https')
|
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const installer = require('./installer')
|
const installer = require('./installer')
|
||||||
|
|
||||||
@@ -30,16 +29,23 @@ async function main() {
|
|||||||
const elixirSpec = getInput('elixir-version', false, 'elixir', versions)
|
const elixirSpec = getInput('elixir-version', false, 'elixir', versions)
|
||||||
const gleamSpec = getInput('gleam-version', false, 'gleam', versions)
|
const gleamSpec = getInput('gleam-version', false, 'gleam', versions)
|
||||||
const rebar3Spec = getInput('rebar3-version', false, 'rebar', versions)
|
const rebar3Spec = getInput('rebar3-version', false, 'rebar', versions)
|
||||||
|
const hexMirrors = core.getMultilineInput('hexpm-mirrors', {
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
|
||||||
if (otpSpec !== 'false') {
|
if (otpSpec !== 'false') {
|
||||||
await installOTP(otpSpec, osVersion)
|
await installOTP(otpSpec, osVersion, hexMirrors)
|
||||||
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpSpec)
|
const elixirInstalled = await maybeInstallElixir(
|
||||||
|
elixirSpec,
|
||||||
|
otpSpec,
|
||||||
|
hexMirrors,
|
||||||
|
)
|
||||||
|
|
||||||
if (elixirInstalled === true) {
|
if (elixirInstalled === true) {
|
||||||
const shouldMixRebar = getInput('install-rebar', false)
|
const shouldMixRebar = getInput('install-rebar', false)
|
||||||
await mix(shouldMixRebar, 'rebar')
|
await mix(shouldMixRebar, 'rebar', hexMirrors)
|
||||||
const shouldMixHex = getInput('install-hex', false)
|
const shouldMixHex = getInput('install-hex', false)
|
||||||
await mix(shouldMixHex, 'hex')
|
await mix(shouldMixHex, 'hex', hexMirrors)
|
||||||
}
|
}
|
||||||
} else if (!gleamSpec) {
|
} else if (!gleamSpec) {
|
||||||
throw new Error('otp-version=false is only available when installing Gleam')
|
throw new Error('otp-version=false is only available when installing Gleam')
|
||||||
@@ -49,37 +55,39 @@ async function main() {
|
|||||||
await maybeInstallRebar3(rebar3Spec)
|
await maybeInstallRebar3(rebar3Spec)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function installOTP(otpSpec, osVersion) {
|
async function installOTP(otpSpec, osVersion, hexMirrors) {
|
||||||
const otpVersion = await getOTPVersion(otpSpec, osVersion)
|
const otpVersion = await getOTPVersion(otpSpec, osVersion, hexMirrors)
|
||||||
console.log(
|
core.startGroup(`Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`)
|
||||||
`##[group]Installing Erlang/OTP ${otpVersion} - built on ${osVersion}`,
|
await installer.installOTP(osVersion, otpVersion, hexMirrors)
|
||||||
)
|
|
||||||
await installer.installOTP(osVersion, otpVersion)
|
|
||||||
core.setOutput('otp-version', otpVersion)
|
core.setOutput('otp-version', otpVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/otp/bin`)
|
core.endGroup()
|
||||||
console.log('##[endgroup]')
|
|
||||||
|
|
||||||
return otpVersion
|
return otpVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
async function maybeInstallElixir(elixirSpec, otpVersion) {
|
async function maybeInstallElixir(elixirSpec, otpSpec, hexMirrors) {
|
||||||
let installed = false
|
let installed = false
|
||||||
|
|
||||||
if (elixirSpec) {
|
if (elixirSpec) {
|
||||||
const elixirVersion = await getElixirVersion(elixirSpec, otpVersion)
|
const elixirVersion = await getElixirVersion(
|
||||||
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
elixirSpec,
|
||||||
await installer.installElixir(elixirVersion)
|
otpSpec,
|
||||||
|
hexMirrors,
|
||||||
|
)
|
||||||
|
core.startGroup(`Installing Elixir ${elixirVersion}`)
|
||||||
|
await installer.installElixir(elixirVersion, hexMirrors)
|
||||||
core.setOutput('elixir-version', elixirVersion)
|
core.setOutput('elixir-version', elixirVersion)
|
||||||
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
||||||
if (disableProblemMatchers === 'false') {
|
if (disableProblemMatchers === 'false') {
|
||||||
const matchersPath = path.join(__dirname, '..', '.github')
|
const elixirMatchers = path.join(
|
||||||
console.log(
|
__dirname,
|
||||||
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
'..',
|
||||||
|
'matchers',
|
||||||
|
'elixir-matchers.json',
|
||||||
)
|
)
|
||||||
|
core.info(`##[add-matcher]${elixirMatchers}`)
|
||||||
}
|
}
|
||||||
core.addPath(`${os.homedir()}/.mix/escripts`)
|
core.endGroup()
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
|
||||||
console.log('##[endgroup]')
|
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -87,13 +95,29 @@ async function maybeInstallElixir(elixirSpec, otpVersion) {
|
|||||||
return installed
|
return installed
|
||||||
}
|
}
|
||||||
|
|
||||||
async function mix(shouldMix, what) {
|
async function mixWithMirrors(cmd, args, hexMirrors) {
|
||||||
|
if (hexMirrors.length === 0) {
|
||||||
|
throw new Error('mix failed with every mirror')
|
||||||
|
}
|
||||||
|
const [hexMirror, ...hexMirrorsT] = hexMirrors
|
||||||
|
process.env.HEX_MIRROR = hexMirror
|
||||||
|
try {
|
||||||
|
return await exec(cmd, args)
|
||||||
|
} catch (err) {
|
||||||
|
core.info(
|
||||||
|
`mix failed with mirror ${process.env.HEX_MIRROR} with message ${err.message})`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return mixWithMirrors(cmd, args, hexMirrorsT)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function mix(shouldMix, what, hexMirrors) {
|
||||||
if (shouldMix === 'true') {
|
if (shouldMix === 'true') {
|
||||||
const cmd = 'mix'
|
const cmd = 'mix'
|
||||||
const args = [`local.${what}`, '--force']
|
const args = [`local.${what}`, '--force']
|
||||||
console.log(`##[group]Running ${cmd} ${args}`)
|
core.startGroup(`Running ${cmd} ${args}`)
|
||||||
await exec(cmd, args)
|
await mixWithMirrors(cmd, args, hexMirrors)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,11 +126,11 @@ async function maybeInstallGleam(gleamSpec) {
|
|||||||
|
|
||||||
if (gleamSpec) {
|
if (gleamSpec) {
|
||||||
const gleamVersion = await getGleamVersion(gleamSpec)
|
const gleamVersion = await getGleamVersion(gleamSpec)
|
||||||
console.log(`##[group]Installing Gleam ${gleamVersion}`)
|
core.startGroup(`Installing Gleam ${gleamVersion}`)
|
||||||
await installer.installGleam(gleamVersion)
|
await installer.installGleam(gleamVersion)
|
||||||
core.setOutput('gleam-version', gleamVersion)
|
core.setOutput('gleam-version', gleamVersion)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -124,11 +148,11 @@ async function maybeInstallRebar3(rebar3Spec) {
|
|||||||
} else {
|
} else {
|
||||||
rebar3Version = await getRebar3Version(rebar3Spec)
|
rebar3Version = await getRebar3Version(rebar3Spec)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
core.startGroup(`Installing rebar3 ${rebar3Version}`)
|
||||||
await installer.installRebar3(rebar3Version)
|
await installer.installRebar3(rebar3Version)
|
||||||
core.setOutput('rebar3-version', rebar3Version)
|
core.setOutput('rebar3-version', rebar3Version)
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/rebar3/bin`)
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
installed = true
|
installed = true
|
||||||
}
|
}
|
||||||
@@ -136,8 +160,8 @@ async function maybeInstallRebar3(rebar3Spec) {
|
|||||||
return installed
|
return installed
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getOTPVersion(otpSpec0, osVersion) {
|
async function getOTPVersion(otpSpec0, osVersion, hexMirrors) {
|
||||||
const otpVersions = await getOTPVersions(osVersion)
|
const otpVersions = await getOTPVersions(osVersion, hexMirrors)
|
||||||
let otpSpec = otpSpec0 // might be a branch (?)
|
let otpSpec = otpSpec0 // might be a branch (?)
|
||||||
const otpVersion = getVersionFromSpec(
|
const otpVersion = getVersionFromSpec(
|
||||||
otpSpec,
|
otpSpec,
|
||||||
@@ -156,10 +180,10 @@ async function getOTPVersion(otpSpec0, osVersion) {
|
|||||||
return otpVersions.get(otpVersion) // from the reference, for download
|
return otpVersions.get(otpVersion) // from the reference, for download
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getElixirVersion(exSpec0, otpVersion0) {
|
async function getElixirVersion(exSpec0, otpVersion0, hexMirrors) {
|
||||||
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2]
|
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2]
|
||||||
const otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]
|
const otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]
|
||||||
const elixirVersions = await getElixirVersions()
|
const elixirVersions = await getElixirVersions(hexMirrors)
|
||||||
const semverVersions = Array.from(elixirVersions.keys()).sort()
|
const semverVersions = Array.from(elixirVersions.keys()).sort()
|
||||||
const exSpec = exSpec0.replace(/-otp-.*$/, '')
|
const exSpec = exSpec0.replace(/-otp-.*$/, '')
|
||||||
const elixirVersionFromSpec = getVersionFromSpec(exSpec, semverVersions, true)
|
const elixirVersionFromSpec = getVersionFromSpec(exSpec, semverVersions, true)
|
||||||
@@ -185,7 +209,9 @@ async function getElixirVersion(exSpec0, otpVersion0) {
|
|||||||
} else {
|
} else {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Requested Elixir / Erlang/OTP version (${exSpec0} / ${otpVersion0}) not ` +
|
`Requested Elixir / Erlang/OTP version (${exSpec0} / ${otpVersion0}) not ` +
|
||||||
'found in version list (did you check Compatibility between Elixir and Erlang/OTP?)',
|
'found in version list (did you check Compatibility between Elixir and Erlang/OTP?).' +
|
||||||
|
'Elixir and Erlang/OTP compatibility can be found at: ' +
|
||||||
|
'https://hexdocs.pm/elixir/compatibility-and-deprecations.html',
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,19 +245,19 @@ async function getRebar3Version(r3Spec) {
|
|||||||
return rebar3Version
|
return rebar3Version
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getOTPVersions(osVersion) {
|
async function getOTPVersions(osVersion, hexMirrors) {
|
||||||
|
let otpVersionsListings
|
||||||
let originListing
|
let originListing
|
||||||
let pageIdxs
|
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
originListing = `https://repo.hex.pm/builds/otp/${osVersion}/builds.txt`
|
originListing = `/builds/otp/${osVersion}/builds.txt`
|
||||||
pageIdxs = [null]
|
otpVersionsListings = await getWithMirrors(originListing, hexMirrors)
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
originListing =
|
originListing =
|
||||||
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
||||||
pageIdxs = [1, 2, 3]
|
otpVersionsListings = await get(originListing, [1, 2, 3])
|
||||||
}
|
}
|
||||||
|
debugLog(`OTP versions listings from ${originListing}`, otpVersionsListings)
|
||||||
|
|
||||||
const otpVersionsListings = await get(originListing, pageIdxs)
|
|
||||||
const otpVersions = new Map()
|
const otpVersions = new Map()
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
@@ -247,7 +273,7 @@ async function getOTPVersions(osVersion) {
|
|||||||
})
|
})
|
||||||
} else if (process.platform === 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
otpVersionsListings.forEach((otpVersionsListing) => {
|
otpVersionsListings.forEach((otpVersionsListing) => {
|
||||||
JSON.parse(otpVersionsListing)
|
jsonParseAsList(otpVersionsListing)
|
||||||
.map((x) => x.assets)
|
.map((x) => x.assets)
|
||||||
.flat()
|
.flat()
|
||||||
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
||||||
@@ -261,10 +287,10 @@ async function getOTPVersions(osVersion) {
|
|||||||
return otpVersions
|
return otpVersions
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getElixirVersions() {
|
async function getElixirVersions(hexMirrors) {
|
||||||
const elixirVersionsListings = await get(
|
const elixirVersionsListings = await getWithMirrors(
|
||||||
'https://repo.hex.pm/builds/elixir/builds.txt',
|
'/builds/elixir/builds.txt',
|
||||||
[null],
|
hexMirrors,
|
||||||
)
|
)
|
||||||
const otpVersionsForElixirMap = new Map()
|
const otpVersionsForElixirMap = new Map()
|
||||||
|
|
||||||
@@ -294,7 +320,7 @@ async function getGleamVersions() {
|
|||||||
)
|
)
|
||||||
const gleamVersionsListing = []
|
const gleamVersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
JSON.parse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => gleamVersionsListing.push(v))
|
.forEach((v) => gleamVersionsListing.push(v))
|
||||||
@@ -309,7 +335,7 @@ async function getRebar3Versions() {
|
|||||||
)
|
)
|
||||||
const rebar3VersionsListing = []
|
const rebar3VersionsListing = []
|
||||||
resultJSONs.forEach((resultJSON) => {
|
resultJSONs.forEach((resultJSON) => {
|
||||||
JSON.parse(resultJSON)
|
jsonParseAsList(resultJSON)
|
||||||
.map((x) => x.tag_name)
|
.map((x) => x.tag_name)
|
||||||
.sort()
|
.sort()
|
||||||
.forEach((v) => rebar3VersionsListing.push(v))
|
.forEach((v) => rebar3VersionsListing.push(v))
|
||||||
@@ -350,6 +376,11 @@ function getVersionFromSpec(spec, versions, maybePrependWithV0) {
|
|||||||
if (maybePrependWithV0 && v != null) {
|
if (maybePrependWithV0 && v != null) {
|
||||||
v = maybePrependWithV(v)
|
v = maybePrependWithV(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!versions.includes(v)) {
|
||||||
|
v = null
|
||||||
|
}
|
||||||
|
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,48 +444,52 @@ function getRunnerOSVersion() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function get(url0, pageIdxs) {
|
async function get(url0, pageIdxs) {
|
||||||
function getPage(pageIdx) {
|
async function getPage(pageIdx) {
|
||||||
return new Promise((resolve, reject) => {
|
const url = new URL(url0)
|
||||||
const url = new URL(url0)
|
const headers = {}
|
||||||
if (pageIdx !== null) {
|
const GithubToken = getInput('github-token', false)
|
||||||
url.searchParams.append('page', pageIdx)
|
|
||||||
}
|
if (GithubToken && url.host === 'api.github.com') {
|
||||||
https
|
headers.authorization = `Bearer ${GithubToken}`
|
||||||
.get(
|
}
|
||||||
url,
|
|
||||||
{
|
if (pageIdx !== null) {
|
||||||
headers: { 'user-agent': 'setup-beam' },
|
url.searchParams.append('page', pageIdx)
|
||||||
},
|
}
|
||||||
(res) => {
|
|
||||||
let data = ''
|
const httpClient = new http.HttpClient('setup-beam', [], {
|
||||||
res.on('data', (chunk) => {
|
allowRetries: true,
|
||||||
data += chunk
|
maxRetries: 3,
|
||||||
})
|
|
||||||
res.on('end', () => {
|
|
||||||
if (res.statusCode >= 400 && res.statusCode <= 599) {
|
|
||||||
reject(
|
|
||||||
new Error(
|
|
||||||
`Got ${res.statusCode} from ${url}. Exiting with error`,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
resolve(data)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.on('error', (err) => {
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const response = await httpClient.get(url, headers)
|
||||||
|
|
||||||
|
if (response.statusCode >= 400 && response.statusCode <= 599) {
|
||||||
|
throw new Error(
|
||||||
|
`Got ${response.statusCode} from ${url}. Exiting with error`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.readBody()
|
||||||
}
|
}
|
||||||
let ret
|
|
||||||
if (pageIdxs[0] === null) {
|
if (pageIdxs[0] === null) {
|
||||||
ret = getPage(null)
|
return getPage(null)
|
||||||
} else {
|
|
||||||
ret = Promise.all(pageIdxs.map((pageIdx) => getPage(pageIdx)))
|
|
||||||
}
|
}
|
||||||
return ret
|
return Promise.all(pageIdxs.map(getPage))
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getWithMirrors(resourcePath, hexMirrors) {
|
||||||
|
if (hexMirrors.length === 0) {
|
||||||
|
throw new Error(`Could not fetch ${resourcePath} from any hex.pm mirror`)
|
||||||
|
}
|
||||||
|
const [hexMirror, ...hexMirrorsT] = hexMirrors
|
||||||
|
try {
|
||||||
|
return await get(`${hexMirror}${resourcePath}`, [null])
|
||||||
|
} catch (err) {
|
||||||
|
core.info(`get failed for URL ${hexMirror}${resourcePath}`)
|
||||||
|
}
|
||||||
|
return getWithMirrors(resourcePath, hexMirrorsT)
|
||||||
}
|
}
|
||||||
|
|
||||||
function maybePrependWithV(v) {
|
function maybePrependWithV(v) {
|
||||||
@@ -496,7 +531,7 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
`The specified version file, ${versionFilePath0}, does not exist`,
|
`The specified version file, ${versionFilePath0}, does not exist`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
console.log(`##[group]Parsing version file at ${versionFilePath0}`)
|
core.startGroup(`Parsing version file at ${versionFilePath0}`)
|
||||||
const appVersions = new Map()
|
const appVersions = new Map()
|
||||||
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
||||||
// For the time being we parse .tool-versions
|
// For the time being we parse .tool-versions
|
||||||
@@ -508,21 +543,43 @@ function parseVersionFile(versionFilePath0) {
|
|||||||
const app = appVersion[1]
|
const app = appVersion[1]
|
||||||
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
||||||
const [, , version] = appVersion
|
const [, , version] = appVersion
|
||||||
console.log(`Consuming ${app} at version ${version}`)
|
core.info(`Consuming ${app} at version ${version}`)
|
||||||
appVersions.set(app, version)
|
appVersions.set(app, version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (!appVersions.size) {
|
if (!appVersions.size) {
|
||||||
console.log('There was apparently nothing to consume')
|
core.info('There was apparently nothing to consume')
|
||||||
} else {
|
} else {
|
||||||
console.log('... done!')
|
core.info('... done!')
|
||||||
}
|
}
|
||||||
console.log('##[endgroup]')
|
core.endGroup()
|
||||||
|
|
||||||
return appVersions
|
return appVersions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function jsonParseAsList(maybeJson) {
|
||||||
|
try {
|
||||||
|
const obj = JSON.parse(maybeJson)
|
||||||
|
if (!Array.isArray(obj)) {
|
||||||
|
throw new Error('expected a list!')
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
} catch (exc) {
|
||||||
|
throw new Error(
|
||||||
|
`Got an exception when trying to parse non-JSON list ${maybeJson}: ${exc}`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function debugLog(groupName, message) {
|
||||||
|
if (process.env.RUNNER_DEBUG) {
|
||||||
|
core.startGroup(`Debugging for ${groupName}`)
|
||||||
|
core.debug(message)
|
||||||
|
core.endGroup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getOTPVersion,
|
getOTPVersion,
|
||||||
getElixirVersion,
|
getElixirVersion,
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const { problemMatcher } = require('../.github/elixir-matchers.json')
|
const core = require('@actions/core')
|
||||||
|
const { problemMatcher } = require('../matchers/elixir-matchers.json')
|
||||||
|
|
||||||
async function all() {
|
async function all() {
|
||||||
await testElixirMixCompileError()
|
await testElixirMixCompileError()
|
||||||
await testElixirMixCompileWarning()
|
await testElixirMixCompileWarning()
|
||||||
await testElixirMixTestFailure()
|
await testElixirMixTestFailure()
|
||||||
await testElixirCredoOutputDefault()
|
await testElixirCredoOutputDefault()
|
||||||
await testElixirDialyzerOutputDefault()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testElixirMixCompileError() {
|
async function testElixirMixCompileError() {
|
||||||
@@ -74,27 +74,9 @@ async function testElixirCredoOutputDefault() {
|
|||||||
assert.equal(column, '7')
|
assert.equal(column, '7')
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testElixirDialyzerOutputDefault() {
|
|
||||||
const [messagePattern, filePattern] = problemMatcher.find(
|
|
||||||
({ owner }) => owner === 'elixir-dialyzerOutputDefault',
|
|
||||||
).pattern
|
|
||||||
|
|
||||||
const firstOutput = 'lib/test.ex:15:invalid_contract'
|
|
||||||
const secondOutput =
|
|
||||||
'The @spec for the function does not match the success typing of the function.'
|
|
||||||
|
|
||||||
const [, file, line, code] = firstOutput.match(messagePattern.regexp)
|
|
||||||
assert.equal(file, 'lib/test.ex')
|
|
||||||
assert.equal(line, '15')
|
|
||||||
assert.equal(code, 'invalid_contract')
|
|
||||||
|
|
||||||
const [, message] = secondOutput.match(filePattern.regexp)
|
|
||||||
assert.equal(message, secondOutput)
|
|
||||||
}
|
|
||||||
|
|
||||||
all()
|
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)
|
||||||
})
|
})
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
/target/
|
||||||
|
main
|
||||||
Generated
+7
@@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rust_rebar3_cmd"
|
||||||
|
version = "0.1.0"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "rust_rebar3_cmd"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::process;
|
||||||
|
use std::string;
|
||||||
|
|
||||||
|
// an example function...
|
||||||
|
fn main() {
|
||||||
|
let key = "PATH";
|
||||||
|
match env::var(key) {
|
||||||
|
Ok(val) => println!("{key}: {val:?}"),
|
||||||
|
Err(e) => println!("couldn't interpret {key}: {e}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn rebar3_cmd_version() -> Result<String, string::FromUtf8Error> {
|
||||||
|
println!("going for rebar3.cmd");
|
||||||
|
let output = process::Command::new("rebar3.cmd")
|
||||||
|
.arg("version")
|
||||||
|
.output()
|
||||||
|
.expect("error");
|
||||||
|
return String::from_utf8(output.stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_works() {
|
||||||
|
rebar3_cmd_version().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
simulateInput('otp-version', '23.2')
|
simulateInput('otp-version', '25.1.2')
|
||||||
simulateInput('elixir-version', '1.11')
|
simulateInput('elixir-version', '1.14.2')
|
||||||
simulateInput('rebar3-version', '3.14')
|
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('hexpm-mirrors', ['https://builds.hex.pm'])
|
||||||
|
|
||||||
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 installer = require('../src/installer')
|
||||||
|
|
||||||
@@ -101,48 +104,49 @@ async function testOTPVersions() {
|
|||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
let osVersion
|
let osVersion
|
||||||
|
const hexMirrors = ['https://repo.hex.pm', 'https://cdn.jsdelivr.net/hex']
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
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'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '^19.3.6'
|
spec = '^19.3.6'
|
||||||
osVersion = 'ubuntu-16.04'
|
osVersion = 'ubuntu-16.04'
|
||||||
expected = 'OTP-19.3.6.13'
|
expected = 'OTP-19.3.6.13'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '^19.3'
|
spec = '^19.3'
|
||||||
osVersion = 'ubuntu-18.04'
|
osVersion = 'ubuntu-18.04'
|
||||||
expected = 'OTP-19.3.6.13'
|
expected = 'OTP-19.3.6.13'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '20'
|
spec = '20'
|
||||||
osVersion = 'ubuntu-20.04'
|
osVersion = 'ubuntu-20.04'
|
||||||
expected = 'OTP-20.3.8.26'
|
expected = 'OTP-20.3.8.26'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
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'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '20.0'
|
spec = '20.0'
|
||||||
osVersion = 'ubuntu-20.04'
|
osVersion = 'ubuntu-20.04'
|
||||||
expected = 'OTP-20.0.5'
|
expected = 'OTP-20.0.5'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '20.0.x'
|
spec = '20.0.x'
|
||||||
osVersion = 'ubuntu-20.04'
|
osVersion = 'ubuntu-20.04'
|
||||||
expected = 'OTP-20.0.5'
|
expected = 'OTP-20.0.5'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,19 +154,19 @@ async function testOTPVersions() {
|
|||||||
spec = '24.0.1'
|
spec = '24.0.1'
|
||||||
osVersion = 'windows-latest'
|
osVersion = 'windows-latest'
|
||||||
expected = '24.0.1'
|
expected = '24.0.1'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '23.2.x'
|
spec = '23.2.x'
|
||||||
osVersion = 'windows-2016'
|
osVersion = 'windows-2016'
|
||||||
expected = '23.2.7'
|
expected = '23.2.7'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '23.0'
|
spec = '23.0'
|
||||||
osVersion = 'windows-2019'
|
osVersion = 'windows-2019'
|
||||||
expected = '23.0.4'
|
expected = '23.0.4'
|
||||||
got = await setupBeam.getOTPVersion(spec, osVersion)
|
got = await setupBeam.getOTPVersion(spec, osVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -172,56 +176,58 @@ async function testElixirVersions() {
|
|||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
let otpVersion
|
let otpVersion
|
||||||
|
let before
|
||||||
|
const hexMirrors = ['https://repo.hex.pm']
|
||||||
|
|
||||||
spec = '1.1.x'
|
spec = '1.1.x'
|
||||||
otpVersion = 'OTP-17'
|
otpVersion = 'OTP-17'
|
||||||
expected = 'v1.1.1-otp-17'
|
expected = 'v1.1.1-otp-17'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '1.10.4'
|
spec = '1.10.4'
|
||||||
otpVersion = 'OTP-23'
|
otpVersion = 'OTP-23'
|
||||||
expected = 'v1.10.4-otp-23'
|
expected = 'v1.10.4-otp-23'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
spec = '1.12.1'
|
spec = '1.12.1'
|
||||||
otpVersion = 'OTP-24.0.2'
|
otpVersion = 'OTP-24.0.2'
|
||||||
expected = 'v1.12.1-otp-24'
|
expected = 'v1.12.1-otp-24'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
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 = 'master'
|
||||||
expected = 'v1.14.0'
|
expected = 'v1.14.0'
|
||||||
got = await setupBeam.getElixirVersion(spec, otpVersion)
|
got = await setupBeam.getElixirVersion(spec, otpVersion, hexMirrors)
|
||||||
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, hexMirrors)
|
||||||
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'
|
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, hexMirrors)
|
||||||
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, hexMirrors)
|
||||||
assert.deepStrictEqual(got, expected)
|
assert.deepStrictEqual(got, expected)
|
||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', before)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testGleamVersions() {
|
async function testGleamVersions() {
|
||||||
@@ -242,13 +248,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() {
|
||||||
@@ -276,6 +282,7 @@ async function testGetVersionFromSpec() {
|
|||||||
let got
|
let got
|
||||||
let expected
|
let expected
|
||||||
let spec
|
let spec
|
||||||
|
let before
|
||||||
const versions = [
|
const versions = [
|
||||||
'3.2.30.5',
|
'3.2.30.5',
|
||||||
'3.2.3.5',
|
'3.2.3.5',
|
||||||
@@ -317,19 +324,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'
|
||||||
@@ -356,12 +363,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'
|
||||||
@@ -388,55 +395,83 @@ 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 = 'master'
|
||||||
expected = 'master'
|
expected = 'master'
|
||||||
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'
|
spec = 'master'
|
||||||
expected = 'master'
|
expected = 'master'
|
||||||
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 = '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)
|
||||||
|
|
||||||
|
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() {
|
||||||
const otpVersion = unsimulateInput('otp-version')
|
const otpVersion = unsimulateInput('otp-version')
|
||||||
const elixirVersion = unsimulateInput('elixir-version')
|
const elixirVersion = unsimulateInput('elixir-version')
|
||||||
|
const gleamVersion = unsimulateInput('gleam-version')
|
||||||
|
const rebar3Version = unsimulateInput('rebar3-version')
|
||||||
|
|
||||||
const erlang = '25.1.1'
|
const erlang = '25.1.1'
|
||||||
const elixir = '1.14.1'
|
const elixir = '1.14.1'
|
||||||
|
const gleam = '0.23.0'
|
||||||
|
const rebar3 = '3.16.0'
|
||||||
const toolVersions = `# a comment
|
const toolVersions = `# a comment
|
||||||
erlang ${erlang}# comment, no space
|
erlang ${erlang}# comment, no space
|
||||||
elixir ${elixir} # comment, with space
|
elixir ${elixir} # comment, with space
|
||||||
gleam 0.23 # not picked up`
|
not-gleam 0.23 # not picked up
|
||||||
const filename = '__tests__/.tool-versions'
|
gleam ${gleam}
|
||||||
|
rebar ${rebar3}`
|
||||||
|
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)
|
||||||
assert.strictEqual(appVersions.get('erlang'), erlang)
|
assert.strictEqual(appVersions.get('erlang'), erlang)
|
||||||
assert.strictEqual(appVersions.get('elixir'), elixir)
|
assert.strictEqual(appVersions.get('elixir'), elixir)
|
||||||
|
|
||||||
|
assert.ok(async () => {
|
||||||
|
await installer.installOTP(erlang)
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await installer.installElixir(elixir)
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await installer.installGleam(gleam)
|
||||||
|
})
|
||||||
|
assert.ok(async () => {
|
||||||
|
await installer.installRebar3(rebar3)
|
||||||
|
})
|
||||||
|
|
||||||
simulateInput('otp-version', otpVersion)
|
simulateInput('otp-version', otpVersion)
|
||||||
simulateInput('elixir-version', elixirVersion)
|
simulateInput('elixir-version', elixirVersion)
|
||||||
|
simulateInput('gleam-version', gleamVersion)
|
||||||
|
simulateInput('rebar3-version', rebar3Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
function unsimulateInput(key) {
|
function unsimulateInput(key) {
|
||||||
const before = process.env[input(key)]
|
return simulateInput(key, '')
|
||||||
simulateInput(key, '')
|
|
||||||
return before
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function simulateInput(key, value) {
|
function simulateInput(key, value) {
|
||||||
|
const before = process.env[input(key)]
|
||||||
process.env[input(key)] = value
|
process.env[input(key)] = value
|
||||||
|
return before
|
||||||
}
|
}
|
||||||
|
|
||||||
function input(key) {
|
function input(key) {
|
||||||
@@ -446,6 +481,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