mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-28 09:36:07 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 730ac65cba | |||
| 3179686d1f | |||
| 65219deb69 | |||
| c71c5c91bb | |||
| e6ab31075d | |||
| 3250a83e5a | |||
| ccc3fdea3c | |||
| 782d47cc60 | |||
| c255c7e97f | |||
| 988e02bfe6 | |||
| 8a644c6f28 | |||
| c988d89031 | |||
| 4fbbcf2e6c | |||
| bae9638cba | |||
| 14d4bc3919 |
@@ -41,6 +41,38 @@
|
|||||||
"line": 2
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"owner": "elixir-dialyzerOutputDefault",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^(.*):(\\d+):(.*)",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"code": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^(.*)$",
|
||||||
|
"message": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: '14'
|
||||||
- run: npm install -g npm
|
- run: npm install -g npm
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: '14'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|
||||||
@@ -49,6 +49,6 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: '14'
|
||||||
- run: npm install --production
|
- run: npm install --production
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|||||||
@@ -14,36 +14,26 @@ jobs:
|
|||||||
name: >
|
name: >
|
||||||
OTP ${{matrix.combo.otp-version}},
|
OTP ${{matrix.combo.otp-version}},
|
||||||
Elixir ${{matrix.combo.elixir-version}},
|
Elixir ${{matrix.combo.elixir-version}},
|
||||||
|
Gleam ${{matrix.combo.gleam-version}},
|
||||||
rebar3 ${{matrix.combo.rebar3-version}}
|
rebar3 ${{matrix.combo.rebar3-version}}
|
||||||
runs-on: ${{matrix.combo.os}}
|
runs-on: ${{matrix.combo.os}}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
combo:
|
combo:
|
||||||
- elixir-version: 'v1.0'
|
- otp-version: '24'
|
||||||
otp-version: '17'
|
rebar3-version: 'nightly'
|
||||||
os: 'ubuntu-16.04'
|
os: 'ubuntu-latest'
|
||||||
- elixir-version: 'v1.0'
|
- elixir-version: 'v1.0'
|
||||||
otp-version: '17'
|
otp-version: '17'
|
||||||
os: 'ubuntu-18.04'
|
os: 'ubuntu-18.04'
|
||||||
- elixir-version: 'v1.1'
|
|
||||||
otp-version: '18'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.1'
|
- elixir-version: 'v1.1'
|
||||||
otp-version: '18'
|
otp-version: '18'
|
||||||
os: 'ubuntu-18.04'
|
os: 'ubuntu-18.04'
|
||||||
- elixir-version: 'v1.2'
|
|
||||||
otp-version: '19'
|
|
||||||
rebar3-version: '3.10'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.2'
|
- elixir-version: 'v1.2'
|
||||||
otp-version: '19'
|
otp-version: '19'
|
||||||
rebar3-version: '3.10'
|
rebar3-version: '3.10'
|
||||||
os: 'ubuntu-18.04'
|
os: 'ubuntu-18.04'
|
||||||
- elixir-version: 'v1.4'
|
|
||||||
otp-version: '20'
|
|
||||||
rebar3-version: '3.11'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.4'
|
- elixir-version: 'v1.4'
|
||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
rebar3-version: '3.6.0'
|
rebar3-version: '3.6.0'
|
||||||
@@ -52,10 +42,6 @@ jobs:
|
|||||||
otp-version: '20'
|
otp-version: '20'
|
||||||
rebar3-version: '3.11'
|
rebar3-version: '3.11'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.6'
|
|
||||||
otp-version: '21'
|
|
||||||
rebar3-version: '3.12'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.6'
|
- elixir-version: 'v1.6'
|
||||||
otp-version: '21'
|
otp-version: '21'
|
||||||
rebar3-version: '3.12'
|
rebar3-version: '3.12'
|
||||||
@@ -64,10 +50,6 @@ jobs:
|
|||||||
otp-version: '21'
|
otp-version: '21'
|
||||||
rebar3-version: '3.12'
|
rebar3-version: '3.12'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.7'
|
|
||||||
otp-version: '22'
|
|
||||||
rebar3-version: '3.13'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.7'
|
- elixir-version: 'v1.7'
|
||||||
otp-version: '22'
|
otp-version: '22'
|
||||||
rebar3-version: '3.13'
|
rebar3-version: '3.13'
|
||||||
@@ -76,10 +58,6 @@ jobs:
|
|||||||
otp-version: '22'
|
otp-version: '22'
|
||||||
rebar3-version: '3.13'
|
rebar3-version: '3.13'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
- elixir-version: 'v1.10'
|
|
||||||
otp-version: '23'
|
|
||||||
rebar3-version: '3.14'
|
|
||||||
os: 'ubuntu-16.04'
|
|
||||||
- elixir-version: 'v1.10'
|
- elixir-version: 'v1.10'
|
||||||
otp-version: '23'
|
otp-version: '23'
|
||||||
rebar3-version: '3.14'
|
rebar3-version: '3.14'
|
||||||
@@ -106,6 +84,16 @@ jobs:
|
|||||||
- elixir-version: 'master'
|
- elixir-version: 'master'
|
||||||
otp-version: '23.1'
|
otp-version: '23.1'
|
||||||
os: 'ubuntu-20.04'
|
os: 'ubuntu-20.04'
|
||||||
|
- gleam-version: '0.16'
|
||||||
|
otp-version: '24'
|
||||||
|
rebar3-version: '3.16'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
- gleam-version: '0.19.0-rc3'
|
||||||
|
otp-version: '24'
|
||||||
|
os: 'ubuntu-latest'
|
||||||
|
- gleam-version: '0.19.0-rc3'
|
||||||
|
otp-version: false
|
||||||
|
os: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
@@ -114,13 +102,18 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.combo.otp-version}}
|
otp-version: ${{matrix.combo.otp-version}}
|
||||||
elixir-version: ${{matrix.combo.elixir-version}}
|
elixir-version: ${{matrix.combo.elixir-version}}
|
||||||
|
gleam-version: ${{matrix.combo.gleam-version}}
|
||||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||||
version-type: ${{matrix.combo.version-type}}
|
version-type: ${{matrix.combo.version-type}}
|
||||||
- name: Erlang/OTP version (action)
|
- name: Erlang/OTP version (action)
|
||||||
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
||||||
|
if: ${{matrix.combo.otp-version}}
|
||||||
- name: Elixir version (action)
|
- name: Elixir version (action)
|
||||||
run: echo "Elixir ${{steps.setup-beam.outputs.elixir-version}}"
|
run: echo "Elixir ${{steps.setup-beam.outputs.elixir-version}}"
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
|
- name: Gleam version (action)
|
||||||
|
run: echo "Gleam ${{steps.setup-beam.outputs.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}}"
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
@@ -130,14 +123,29 @@ jobs:
|
|||||||
mix help local.rebar
|
mix help local.rebar
|
||||||
mix help local.hex
|
mix help local.hex
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Mix project tests
|
- name: Run Elixir/Mix project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/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 rebar3 project tests
|
- name: Run Erlang/rebar3 project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/rebar3
|
cd test-projects/erlang_rebar3
|
||||||
rebar3 ct
|
rebar3 ct
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
|
- name: Run Gleam/rebar3 project tests
|
||||||
|
run: |
|
||||||
|
cd test-projects/gleam_rebar3
|
||||||
|
rebar3 eunit
|
||||||
|
if: ${{matrix.combo.gleam-version}}
|
||||||
|
- name: Type check Gleam project (without installing Erlang/OTP)
|
||||||
|
run: |
|
||||||
|
cd test-projects/gleam_gleam
|
||||||
|
gleam check
|
||||||
|
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
||||||
|
- name: Run Gleam project tests (without `rebar3`)
|
||||||
|
run: |
|
||||||
|
cd test-projects/gleam_gleam
|
||||||
|
gleam test
|
||||||
|
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
||||||
|
|||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
git config user.name "GitHub Actions"
|
||||||
|
git config user.email "actions@user.noreply.github.com"
|
||||||
|
git checkout main
|
||||||
|
|
||||||
|
npm run licenses
|
||||||
|
|
||||||
|
git add 3RD_PARTY_LICENSES
|
||||||
|
git commit -m "Update 3rd party licenses" || true
|
||||||
|
git push origin
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
name: update_3rd_party_licenses
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 12 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update:
|
||||||
|
name: Update 3rd party licenses
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: '14'
|
||||||
|
- run:
|
||||||
|
./.github/workflows/update_3rd_party_licenses.sh
|
||||||
@@ -14,6 +14,7 @@ jobs:
|
|||||||
name: >
|
name: >
|
||||||
OTP ${{matrix.combo.otp-version}},
|
OTP ${{matrix.combo.otp-version}},
|
||||||
Elixir ${{matrix.combo.elixir-version}},
|
Elixir ${{matrix.combo.elixir-version}},
|
||||||
|
Gleam ${{matrix.combo.gleam-version}},
|
||||||
rebar3 ${{matrix.combo.rebar3-version}}
|
rebar3 ${{matrix.combo.rebar3-version}}
|
||||||
runs-on: ${{matrix.combo.os}}
|
runs-on: ${{matrix.combo.os}}
|
||||||
strategy:
|
strategy:
|
||||||
@@ -23,27 +24,12 @@ jobs:
|
|||||||
- otp-version: '24.0.2'
|
- otp-version: '24.0.2'
|
||||||
rebar3-version: '3.16'
|
rebar3-version: '3.16'
|
||||||
os: 'windows-2019'
|
os: 'windows-2019'
|
||||||
|
- otp-version: '24.0.2'
|
||||||
|
rebar3-version: 'nightly'
|
||||||
|
os: 'windows-2019'
|
||||||
- otp-version: '23.0'
|
- otp-version: '23.0'
|
||||||
rebar3-version: '3.15'
|
rebar3-version: '3.15'
|
||||||
os: 'windows-2019'
|
os: 'windows-2019'
|
||||||
- otp-version: '24.0.2'
|
|
||||||
rebar3-version: '3.16'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- otp-version: '23.0'
|
|
||||||
rebar3-version: '3.15'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- otp-version: '22.3'
|
|
||||||
rebar3-version: '3.15'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- otp-version: '22.0'
|
|
||||||
rebar3-version: '3.15'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- otp-version: '21.3'
|
|
||||||
rebar3-version: '3.15'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- otp-version: '21.0'
|
|
||||||
rebar3-version: '3.15'
|
|
||||||
os: 'windows-2016'
|
|
||||||
- elixir-version: 'v1.10'
|
- elixir-version: 'v1.10'
|
||||||
otp-version: '23'
|
otp-version: '23'
|
||||||
rebar3-version: '3.14'
|
rebar3-version: '3.14'
|
||||||
@@ -52,6 +38,10 @@ jobs:
|
|||||||
otp-version: '24'
|
otp-version: '24'
|
||||||
rebar3-version: '3.15'
|
rebar3-version: '3.15'
|
||||||
os: 'windows-latest'
|
os: 'windows-latest'
|
||||||
|
- gleam-version: '0.16'
|
||||||
|
otp-version: '24'
|
||||||
|
rebar3-version: '3.16'
|
||||||
|
os: 'windows-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
@@ -60,12 +50,16 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
otp-version: ${{matrix.combo.otp-version}}
|
otp-version: ${{matrix.combo.otp-version}}
|
||||||
elixir-version: ${{matrix.combo.elixir-version}}
|
elixir-version: ${{matrix.combo.elixir-version}}
|
||||||
|
gleam-version: ${{matrix.combo.gleam-version}}
|
||||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||||
- name: Erlang/OTP version (action)
|
- name: Erlang/OTP version (action)
|
||||||
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
||||||
- name: Elixir version (action)
|
- name: Elixir version (action)
|
||||||
run: echo "Elixir ${{steps.setup-beam.outputs.elixir-version}}"
|
run: echo "Elixir ${{steps.setup-beam.outputs.elixir-version}}"
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
|
- name: Gleam version (action)
|
||||||
|
run: echo "Gleam ${{steps.setup-beam.outputs.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: mix version and help (CLI)
|
- name: mix version and help (CLI)
|
||||||
@@ -74,14 +68,19 @@ jobs:
|
|||||||
mix help local.rebar
|
mix help local.rebar
|
||||||
mix help local.hex
|
mix help local.hex
|
||||||
if: ${{matrix.combo.elixir-version}}
|
if: ${{matrix.combo.elixir-version}}
|
||||||
- name: Run Mix project tests
|
- name: Run Elixir/Mix project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/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 rebar3 project tests
|
- name: Run Erlang/rebar3 project tests
|
||||||
run: |
|
run: |
|
||||||
cd test-projects/rebar3
|
cd test-projects/erlang_rebar3
|
||||||
rebar3 ct
|
rebar3 ct
|
||||||
if: ${{matrix.combo.rebar3-version}}
|
if: ${{matrix.combo.rebar3-version}}
|
||||||
|
- name: Run Gleam/rebar3 project tests
|
||||||
|
run: |
|
||||||
|
cd test-projects/gleam_rebar3
|
||||||
|
rebar3 eunit
|
||||||
|
if: ${{matrix.combo.gleam-version}}
|
||||||
|
|||||||
+1575
-35
File diff suppressed because it is too large
Load Diff
@@ -11,26 +11,30 @@
|
|||||||
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:
|
||||||
|
|
||||||
- installing Erlang/OTP
|
- installing [Erlang/OTP](https://www.erlang.org/)
|
||||||
- optionally, installing Elixir
|
- optionally, installing [Elixir](https://elixir-lang.org/)
|
||||||
- optionally, installing `rebar3`
|
- optionally, installing [Gleam](https://gleam.run/)
|
||||||
- optionally, installing `hex`
|
- optionally, installing [`rebar3`](https://www.rebar3.org/)
|
||||||
|
- optionally, installing [`hex`](https://hex.pm/)
|
||||||
|
- optionally, having
|
||||||
|
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show
|
||||||
|
warnings and errors on pull requestsotp-version: false)
|
||||||
|
|
||||||
**Note** Currently, this action only supports Actions' `ubuntu-` and `windows-` runtimes.
|
**Note**: currently, this action only supports Actions' `ubuntu-` and `windows-` runtimes.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
See [action.yml](action.yml) for the action's specification.
|
See [action.yml](action.yml) for the action's specification.
|
||||||
|
|
||||||
**Note**: The Erlang/OTP release version specification is [relatively
|
**Note**: the Erlang/OTP release version specification is [relatively
|
||||||
complex](http://erlang.org/doc/system_principles/versions.html#version-scheme).
|
complex](http://erlang.org/doc/system_principles/versions.html#version-scheme).
|
||||||
For best results, we recommend specifying exact Erlang/OTP, Elixir versions, and
|
For best results, we recommend specifying exact
|
||||||
`rebar3` versions, and setting option `version-type` to `strict`.
|
versions, and setting option `version-type` to `strict`.
|
||||||
However, values like `22.x`, or even `>22`, are also accepted, and we attempt to resolve them
|
However, values like `22.x`, or even `>22`, are also accepted, and we attempt to resolve them
|
||||||
according to semantic versioning rules. This implicitly means `version-type` is `loose`,
|
according to semantic versioning rules. This implicitly means `version-type` is `loose`,
|
||||||
which is also the default value for this option.
|
which is also the default value for this option.
|
||||||
|
|
||||||
Additionally, it is recommended that one specifies Erlang/OTP, Elixir and `rebar3` versions
|
Additionally, it is recommended that one specifies versions
|
||||||
using YAML strings, as these examples do, so that numbers like `23.0` don't
|
using YAML strings, as these examples do, so that numbers like `23.0` don't
|
||||||
end up being parsed as `23`, which is not equivalent.
|
end up being parsed as `23`, which is not equivalent.
|
||||||
|
|
||||||
@@ -45,10 +49,8 @@ and Erlang/OTP.
|
|||||||
|
|
||||||
| Operating system | Erlang/OTP | Status
|
| Operating system | Erlang/OTP | Status
|
||||||
|- |- |-
|
|- |- |-
|
||||||
| ubuntu-16.04 | 17 - 24 | ✅
|
|
||||||
| ubuntu-18.04 | 17 - 24 | ✅
|
| ubuntu-18.04 | 17 - 24 | ✅
|
||||||
| ubuntu-20.04 | 20 - 24 | ✅
|
| ubuntu-20.04 | 20 - 24 | ✅
|
||||||
| windows-2016 | 21* - 24 | ✅
|
|
||||||
| windows-2019 | 21* - 24 | ✅
|
| windows-2019 | 21* - 24 | ✅
|
||||||
|
|
||||||
**Note** *: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, 22.0, etc.
|
**Note** *: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, 22.0, etc.
|
||||||
@@ -60,10 +62,8 @@ uses that to download assets:
|
|||||||
|
|
||||||
| ImageOS | Operating system
|
| ImageOS | Operating system
|
||||||
|- |-
|
|- |-
|
||||||
| ubuntu16 | ubuntu-16.04
|
|
||||||
| ubuntu18 | ubuntu-18.04
|
| ubuntu18 | ubuntu-18.04
|
||||||
| ubuntu20 | ubuntu-20.04
|
| ubuntu20 | ubuntu-20.04
|
||||||
| win16 | windows-2016
|
|
||||||
| win19 | windows-2019
|
| win19 | windows-2019
|
||||||
|
|
||||||
as per the following example:
|
as per the following example:
|
||||||
@@ -82,44 +82,7 @@ jobs:
|
|||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
### Basic example (Erlang/OTP + Elixir, on Ubuntu)
|
### Example (Erlang/OTP + Elixir, on Ubuntu)
|
||||||
|
|
||||||
```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: '22.2'
|
|
||||||
elixir-version: '1.9.4'
|
|
||||||
- run: mix deps.get
|
|
||||||
- run: mix test
|
|
||||||
```
|
|
||||||
|
|
||||||
### Basic example (Erlang/OTP + `rebar3`, on Ubuntu)
|
|
||||||
|
|
||||||
```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: '22.2'
|
|
||||||
rebar3-version: '3.14.2'
|
|
||||||
- run: rebar3 ct
|
|
||||||
```
|
|
||||||
|
|
||||||
### Matrix example (Erlang/OTP + Elixir, on Ubuntu)
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# create this in .github/workflows/ci.yml
|
# create this in .github/workflows/ci.yml
|
||||||
@@ -143,7 +106,7 @@ jobs:
|
|||||||
- run: mix test
|
- run: mix test
|
||||||
```
|
```
|
||||||
|
|
||||||
### Matrix example (Erlang/OTP + `rebar3`, on Ubuntu)
|
### Example (Erlang/OTP + `rebar3`, on Ubuntu)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# create this in .github/workflows/ci.yml
|
# create this in .github/workflows/ci.yml
|
||||||
@@ -166,7 +129,7 @@ jobs:
|
|||||||
- run: rebar3 ct
|
- run: rebar3 ct
|
||||||
```
|
```
|
||||||
|
|
||||||
### Basic example (Erlang/OTP + `rebar3`, on Windows)
|
### Example (Erlang/OTP + `rebar3`, on Windows)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# create this in .github/workflows/ci.yml
|
# create this in .github/workflows/ci.yml
|
||||||
@@ -184,9 +147,49 @@ jobs:
|
|||||||
- run: rebar3 ct
|
- run: rebar3 ct
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Example (Gleam on Ubuntu)
|
||||||
|
|
||||||
|
```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: '24'
|
||||||
|
gleam-version: '0.19.0-rc3'
|
||||||
|
- run: gleam test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example (Gleam on Ubuntu without OTP)
|
||||||
|
|
||||||
|
```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: false
|
||||||
|
gleam-version: '0.19.0-rc3'
|
||||||
|
- run: gleam check
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: the `otp-version: false` input is only applicable when installing Gleam.
|
||||||
|
|
||||||
## Elixir Problem Matchers
|
## Elixir Problem Matchers
|
||||||
|
|
||||||
The Elixir Problem Matchers in this repository are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118). See [MATCHER_NOTICE](MATCHER_NOTICE.md) for license details.
|
The Elixir Problem Matchers in this repository are adapted from
|
||||||
|
[here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118).
|
||||||
|
See [MATCHER_NOTICE](MATCHER_NOTICE.md) for license details.
|
||||||
|
|
||||||
## Action versioning
|
## Action versioning
|
||||||
|
|
||||||
@@ -196,9 +199,9 @@ The Elixir Problem Matchers in this repository are adapted from [here](https://g
|
|||||||
- `@v1.8`: the latest in the `1.8.z` series (this tag is movable),
|
- `@v1.8`: the latest in the `1.8.z` series (this tag is movable),
|
||||||
- `@v1.8.0`: release `1.8.0` (this tag is not movable).
|
- `@v1.8.0`: release `1.8.0` (this tag is not movable).
|
||||||
|
|
||||||
To prevent issues in CI (unless you're OK with potential incompatibility between versions - we
|
We make a real effort to not introduce incompatibilities without changing the major
|
||||||
make real a effort to not introduce those without bumping major) we suggest you to use `@vx.y.z`,
|
version number. To be extra safe against changes causing issues in your CI you should specify
|
||||||
whenever possible.
|
an exact version with `@vx.y.z`.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const { problemMatcher } = require('../.github/elixir-matchers.json')
|
||||||
|
|
||||||
|
async function all() {
|
||||||
|
await testElixirMixCompileError()
|
||||||
|
await testElixirMixCompileWarning()
|
||||||
|
await testElixirMixTestFailure()
|
||||||
|
await testElixirCredoOutputDefault()
|
||||||
|
await testElixirDialyzerOutputDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixCompileError() {
|
||||||
|
const [matcher] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixCompileError',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const output = '** (CompileError) lib/test.ex:16: undefined function err/0'
|
||||||
|
const [message, , file, line] = output.match(matcher.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '16')
|
||||||
|
assert.equal(message, output)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixCompileWarning() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixCompileWarning',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput =
|
||||||
|
'warning: variable "err" does not exist and is being expanded to "err()"'
|
||||||
|
const secondOutput = ' lib/test.ex:16: Test.hello/0'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(
|
||||||
|
message,
|
||||||
|
'variable "err" does not exist and is being expanded to "err()"',
|
||||||
|
)
|
||||||
|
|
||||||
|
const [, file, line] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '16')
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirMixTestFailure() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-mixTestFailure',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput = '1) test throws (TestTest)'
|
||||||
|
const secondOutput = ' test/test_test.exs:9'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(message, 'test throws (TestTest)')
|
||||||
|
|
||||||
|
const [, file, line] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'test/test_test.exs')
|
||||||
|
assert.equal(line, '9')
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirCredoOutputDefault() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-credoOutputDefault',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput = '┃ [F] → Function is too complex (CC is 29, max is 9).'
|
||||||
|
const secondOutput = '┃ lib/test.ex:15:7 #(Test.hello)'
|
||||||
|
|
||||||
|
const [, message] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(message, 'Function is too complex (CC is 29, max is 9).')
|
||||||
|
|
||||||
|
const [, file, line, column] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '15')
|
||||||
|
assert.equal(column, '7')
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testElixirDialyzerOutputDefault() {
|
||||||
|
const [messagePattern, filePattern] = problemMatcher.find(
|
||||||
|
({ owner }) => owner === 'elixir-dialyzerOutputDefault',
|
||||||
|
).pattern
|
||||||
|
|
||||||
|
const firstOutput = 'lib/test.ex:15:invalid_contract'
|
||||||
|
const secondOutput =
|
||||||
|
'The @spec for the function does not match the success typing of the function.'
|
||||||
|
|
||||||
|
const [, file, line, code] = firstOutput.match(messagePattern.regexp)
|
||||||
|
assert.equal(file, 'lib/test.ex')
|
||||||
|
assert.equal(line, '15')
|
||||||
|
assert.equal(code, 'invalid_contract')
|
||||||
|
|
||||||
|
const [, message] = secondOutput.match(filePattern.regexp)
|
||||||
|
assert.equal(message, secondOutput)
|
||||||
|
}
|
||||||
|
|
||||||
|
all()
|
||||||
|
.then(() => process.exit(0))
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
@@ -11,10 +11,12 @@ const installer = require('../src/installer')
|
|||||||
async function all() {
|
async function all() {
|
||||||
await testFailInstallOTP()
|
await testFailInstallOTP()
|
||||||
await testFailInstallElixir()
|
await testFailInstallElixir()
|
||||||
|
await testFailInstallGleam()
|
||||||
await testFailInstallRebar3()
|
await testFailInstallRebar3()
|
||||||
|
|
||||||
await testOTPVersions()
|
await testOTPVersions()
|
||||||
await testElixirVersions()
|
await testElixirVersions()
|
||||||
|
await testGleamVersions()
|
||||||
await testRebar3Versions()
|
await testRebar3Versions()
|
||||||
|
|
||||||
await testGetVersionFromSpec()
|
await testGetVersionFromSpec()
|
||||||
@@ -63,6 +65,20 @@ async function testFailInstallElixir() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function testFailInstallGleam() {
|
||||||
|
const gleamVersion = '0.1.3'
|
||||||
|
assert.rejects(
|
||||||
|
async () => {
|
||||||
|
await installer.installGleam(gleamVersion)
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
assert.ok(err instanceof Error)
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
`Installing Gleam ${gleamVersion} is supposed to fail`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
async function testFailInstallRebar3() {
|
async function testFailInstallRebar3() {
|
||||||
const r3Version = '0.14.4'
|
const r3Version = '0.14.4'
|
||||||
assert.rejects(
|
assert.rejects(
|
||||||
@@ -197,6 +213,33 @@ async function testElixirVersions() {
|
|||||||
simulateInput('version-type', 'loose')
|
simulateInput('version-type', 'loose')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function testGleamVersions() {
|
||||||
|
let got
|
||||||
|
let expected
|
||||||
|
let spec
|
||||||
|
let otpVersion
|
||||||
|
|
||||||
|
spec = 'v0.3.0'
|
||||||
|
otpVersion = 'OTP-23'
|
||||||
|
expected = 'v0.3.0'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
spec = '0.13.2'
|
||||||
|
otpVersion = 'OTP-24'
|
||||||
|
expected = 'v0.13.2'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
|
||||||
|
simulateInput('version-type', 'strict')
|
||||||
|
spec = 'v0.14.0-rc2'
|
||||||
|
otpVersion = 'OTP-22'
|
||||||
|
expected = 'v0.14.0-rc2'
|
||||||
|
got = await setupBeam.getGleamVersion(spec, otpVersion)
|
||||||
|
assert.deepStrictEqual(got, expected)
|
||||||
|
simulateInput('version-type', 'loose')
|
||||||
|
}
|
||||||
|
|
||||||
async function testRebar3Versions() {
|
async function testRebar3Versions() {
|
||||||
let got
|
let got
|
||||||
let expected
|
let expected
|
||||||
|
|||||||
+16
-5
@@ -8,27 +8,38 @@ branding:
|
|||||||
color: blue
|
color: blue
|
||||||
icon: code
|
icon: code
|
||||||
inputs:
|
inputs:
|
||||||
|
otp-version:
|
||||||
|
description: Version range or exact version of Erlang/OTP to use,
|
||||||
|
or false when installing only Gleam without OTP
|
||||||
|
required: true
|
||||||
elixir-version:
|
elixir-version:
|
||||||
description: Version range or exact version of Elixir to use
|
description: Version range or exact version of Elixir to use
|
||||||
otp-version:
|
gleam-version:
|
||||||
description: Version range or exact version of Erlang/OTP to use
|
description: Version range or exact version of Gleam to use
|
||||||
install-hex:
|
install-hex:
|
||||||
description: Whether to install Hex (with Mix)
|
description: Whether to install Hex (with mix local.hex
|
||||||
|
when installing Elixir)
|
||||||
default: true
|
default: true
|
||||||
install-rebar:
|
install-rebar:
|
||||||
description: Whether to install Rebar (with Mix)
|
description: Whether to install Rebar (with mix local.rebar
|
||||||
|
when installing Elixir)
|
||||||
default: true
|
default: true
|
||||||
rebar3-version:
|
rebar3-version:
|
||||||
description: Version range or exact version of rebar3 to use
|
description: Version range or exact version of rebar3 to use (or nightly)
|
||||||
version-type:
|
version-type:
|
||||||
description: strict means the versions are take as-are; loose means we try
|
description: strict means the versions are take as-are; loose means we try
|
||||||
to guess versions based on semver rules
|
to guess versions based on semver rules
|
||||||
default: loose
|
default: loose
|
||||||
|
disable_problem_matchers:
|
||||||
|
description: whether to have the problem matchers present in the results (or not)
|
||||||
|
default: false
|
||||||
outputs:
|
outputs:
|
||||||
elixir-version:
|
elixir-version:
|
||||||
description: Exact version of Elixir that was installed
|
description: Exact version of Elixir that was installed
|
||||||
otp-version:
|
otp-version:
|
||||||
description: Exact version of Erlang/OTP that was installed
|
description: Exact version of Erlang/OTP that was installed
|
||||||
|
gleam-version:
|
||||||
|
description: Exact version of Gleam that was installed
|
||||||
rebar3-version:
|
rebar3-version:
|
||||||
description: Exact version of rebar3 that was installed
|
description: Exact version of rebar3 that was installed
|
||||||
runs:
|
runs:
|
||||||
|
|||||||
Vendored
+32
@@ -41,6 +41,38 @@
|
|||||||
"line": 2
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"owner": "elixir-dialyzerOutputDefault",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^(.*):(\\d+):(.*)",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"code": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^(.*)$",
|
||||||
|
"message": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+111
-27
@@ -4618,6 +4618,21 @@ async function installElixir(elixirVersion) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install Gleam.
|
||||||
|
*
|
||||||
|
* @param {string} gleamVersion
|
||||||
|
*/
|
||||||
|
async function installGleam(gleamVersion) {
|
||||||
|
const OS = process.platform
|
||||||
|
if (OS === 'linux') {
|
||||||
|
await exec(__nccwpck_require__.ab + "install-gleam.sh", [gleamVersion])
|
||||||
|
} else if (OS === 'win32') {
|
||||||
|
const script = __nccwpck_require__.ab + "install-gleam.ps1"
|
||||||
|
await exec(`pwsh.exe ${script} -VSN:${gleamVersion}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install rebar3.
|
* Install rebar3.
|
||||||
*
|
*
|
||||||
@@ -4644,6 +4659,7 @@ function checkPlatform() {
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
installOTP,
|
installOTP,
|
||||||
installElixir,
|
installElixir,
|
||||||
|
installGleam,
|
||||||
installRebar3,
|
installRebar3,
|
||||||
checkPlatform,
|
checkPlatform,
|
||||||
}
|
}
|
||||||
@@ -4671,22 +4687,29 @@ async function main() {
|
|||||||
|
|
||||||
const osVersion = getRunnerOSVersion()
|
const osVersion = getRunnerOSVersion()
|
||||||
const otpSpec = core.getInput('otp-version', { required: true })
|
const otpSpec = core.getInput('otp-version', { required: true })
|
||||||
const otpVersion = await installOTP(otpSpec, osVersion)
|
|
||||||
|
|
||||||
const elixirSpec = core.getInput('elixir-version', { required: false })
|
const elixirSpec = core.getInput('elixir-version', { required: false })
|
||||||
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpVersion)
|
const gleamSpec = core.getInput('gleam-version', { required: false })
|
||||||
if (elixirInstalled === true) {
|
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
||||||
const shouldMixRebar = core.getInput('install-rebar', {
|
|
||||||
required: false,
|
if (otpSpec !== 'false') {
|
||||||
})
|
const otpVersion = await installOTP(otpSpec, osVersion)
|
||||||
await mix(shouldMixRebar, 'rebar')
|
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpVersion)
|
||||||
const shouldMixHex = core.getInput('install-hex', {
|
|
||||||
required: false,
|
if (elixirInstalled === true) {
|
||||||
})
|
const shouldMixRebar = core.getInput('install-rebar', {
|
||||||
await mix(shouldMixHex, 'hex')
|
required: false,
|
||||||
|
})
|
||||||
|
await mix(shouldMixRebar, 'rebar')
|
||||||
|
const shouldMixHex = core.getInput('install-hex', {
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
await mix(shouldMixHex, 'hex')
|
||||||
|
}
|
||||||
|
} else if (!gleamSpec) {
|
||||||
|
throw new Error('otp-version=false is only available when installing Gleam')
|
||||||
}
|
}
|
||||||
|
|
||||||
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
await maybeInstallGleam(gleamSpec)
|
||||||
await maybeInstallRebar3(rebar3Spec)
|
await maybeInstallRebar3(rebar3Spec)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4719,10 +4742,15 @@ async function maybeInstallElixir(elixirSpec, otpVersion) {
|
|||||||
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
||||||
await installer.installElixir(elixirVersion)
|
await installer.installElixir(elixirVersion)
|
||||||
core.setOutput('elixir-version', elixirVersion)
|
core.setOutput('elixir-version', elixirVersion)
|
||||||
const matchersPath = __nccwpck_require__.ab + ".github"
|
const disableProblemMatchers = core.getInput('disable_problem_matchers', {
|
||||||
console.log(
|
required: false,
|
||||||
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
})
|
||||||
)
|
if (!disableProblemMatchers) {
|
||||||
|
const matchersPath = __nccwpck_require__.ab + ".github"
|
||||||
|
console.log(
|
||||||
|
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
||||||
|
)
|
||||||
|
}
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
||||||
console.log('##[endgroup]')
|
console.log('##[endgroup]')
|
||||||
|
|
||||||
@@ -4742,11 +4770,33 @@ async function mix(shouldMix, what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function maybeInstallRebar3(rebar3Spec) {
|
async function maybeInstallGleam(gleamSpec) {
|
||||||
let installed = false
|
let installed = false
|
||||||
|
|
||||||
|
if (gleamSpec) {
|
||||||
|
const gleamVersion = await getGleamVersion(gleamSpec)
|
||||||
|
console.log(`##[group]Installing Gleam ${gleamVersion}`)
|
||||||
|
await installer.installGleam(gleamVersion)
|
||||||
|
core.setOutput('gleam-version', gleamVersion)
|
||||||
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
||||||
|
console.log('##[endgroup]')
|
||||||
|
|
||||||
|
installed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return installed
|
||||||
|
}
|
||||||
|
|
||||||
|
async function maybeInstallRebar3(rebar3Spec) {
|
||||||
|
let installed = false
|
||||||
|
let rebar3Version
|
||||||
|
|
||||||
if (rebar3Spec) {
|
if (rebar3Spec) {
|
||||||
const rebar3Version = await getRebar3Version(rebar3Spec)
|
if (rebar3Spec === 'nightly') {
|
||||||
|
rebar3Version = 'nightly'
|
||||||
|
} else {
|
||||||
|
rebar3Version = await getRebar3Version(rebar3Spec)
|
||||||
|
}
|
||||||
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
||||||
await installer.installRebar3(rebar3Version)
|
await installer.installRebar3(rebar3Version)
|
||||||
core.setOutput('rebar3-version', rebar3Version)
|
core.setOutput('rebar3-version', rebar3Version)
|
||||||
@@ -4830,10 +4880,21 @@ async function getElixirVersion(exSpec0, otpVersion) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const DigitStart = new RegExp('^\\d+')
|
return maybePrependWithV(elixirVersionWithOTP, elixirVersion)
|
||||||
return DigitStart.test(elixirVersion)
|
}
|
||||||
? `v${elixirVersionWithOTP}`
|
|
||||||
: elixirVersionWithOTP
|
async function getGleamVersion(gleamSpec0) {
|
||||||
|
const gleamSpec = gleamSpec0.match(/^v?(.+)/)
|
||||||
|
const gleamVersions = await getGleamVersions()
|
||||||
|
const gleamVersion = getVersionFromSpec(gleamSpec[1], gleamVersions)
|
||||||
|
if (gleamVersion === null) {
|
||||||
|
throw new Error(
|
||||||
|
`Requested Gleam version (${gleamSpec0}) not found in version list ` +
|
||||||
|
"(should you be using option 'version-type': 'strict'?)",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return maybePrependWithV(gleamVersion, gleamVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getRebar3Version(r3Spec) {
|
async function getRebar3Version(r3Spec) {
|
||||||
@@ -4916,6 +4977,21 @@ async function getElixirVersions() {
|
|||||||
return otpVersionsForElixirMap
|
return otpVersionsForElixirMap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getGleamVersions() {
|
||||||
|
const resultJSONs = await get(
|
||||||
|
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100',
|
||||||
|
[1, 2, 3],
|
||||||
|
)
|
||||||
|
const gleamVersionsListing = []
|
||||||
|
resultJSONs.forEach((resultJSON) => {
|
||||||
|
JSON.parse(resultJSON)
|
||||||
|
.map((x) => x.tag_name)
|
||||||
|
.sort()
|
||||||
|
.forEach((v) => gleamVersionsListing.push(v))
|
||||||
|
})
|
||||||
|
return gleamVersionsListing
|
||||||
|
}
|
||||||
|
|
||||||
async function getRebar3Versions() {
|
async function getRebar3Versions() {
|
||||||
const resultJSONs = await get(
|
const resultJSONs = await get(
|
||||||
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
|
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
|
||||||
@@ -4959,7 +5035,7 @@ function getVersionFromSpec(spec, versions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return version
|
return version === null || version === undefined ? null : version
|
||||||
}
|
}
|
||||||
|
|
||||||
function maybeCoerced(v) {
|
function maybeCoerced(v) {
|
||||||
@@ -4998,17 +5074,17 @@ function sortVersions(left, right) {
|
|||||||
|
|
||||||
function getRunnerOSVersion() {
|
function getRunnerOSVersion() {
|
||||||
const ImageOSToContainer = {
|
const ImageOSToContainer = {
|
||||||
ubuntu16: 'ubuntu-16.04',
|
|
||||||
ubuntu18: 'ubuntu-18.04',
|
ubuntu18: 'ubuntu-18.04',
|
||||||
ubuntu20: 'ubuntu-20.04',
|
ubuntu20: 'ubuntu-20.04',
|
||||||
win16: 'windows-2016',
|
|
||||||
win19: 'windows-2019',
|
win19: 'windows-2019',
|
||||||
}
|
}
|
||||||
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
|
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
|
||||||
|
|
||||||
if (!containerFromEnvImageOS) {
|
if (!containerFromEnvImageOS) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"Tried to map a target OS from env. variable 'ImageOS', but failed. If you're using a " +
|
"Tried to map a target OS from env. variable 'ImageOS' (got " +
|
||||||
|
`${process.env.ImageOS}` +
|
||||||
|
"), but failed. If you're using a " +
|
||||||
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " +
|
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " +
|
||||||
"['" +
|
"['" +
|
||||||
`${Object.keys(ImageOSToContainer).join("', '")}` +
|
`${Object.keys(ImageOSToContainer).join("', '")}` +
|
||||||
@@ -5064,9 +5140,17 @@ async function get(url0, pageIdxs) {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function maybePrependWithV(versionToPrepend, specVersion) {
|
||||||
|
const digitStart = new RegExp('^\\d+')
|
||||||
|
return digitStart.test(specVersion)
|
||||||
|
? `v${versionToPrepend}`
|
||||||
|
: versionToPrepend
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getOTPVersion,
|
getOTPVersion,
|
||||||
getElixirVersion,
|
getElixirVersion,
|
||||||
|
getGleamVersion,
|
||||||
getRebar3Version,
|
getRebar3Version,
|
||||||
getVersionFromSpec,
|
getVersionFromSpec,
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-2
@@ -15,5 +15,5 @@ New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
|
|||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
||||||
$ProgressPreference="Continue"
|
$ProgressPreference="Continue"
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
Write-Output "Installed Elixir version follows"
|
||||||
& "$DIR_FOR_BIN/bin/iex" "-v" | Write-Output
|
& "$DIR_FOR_BIN/bin/elixir" "-v" | Write-Output
|
||||||
|
|||||||
Vendored
+1
-1
@@ -13,4 +13,4 @@ wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|||||||
mkdir -p "${DIR_FOR_BIN}"
|
mkdir -p "${DIR_FOR_BIN}"
|
||||||
unzip -q -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
unzip -q -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
||||||
echo "Installed Elixir version follows"
|
echo "Installed Elixir version follows"
|
||||||
${DIR_FOR_BIN}/bin/iex -v
|
${DIR_FOR_BIN}/bin/elixir -v
|
||||||
|
|||||||
Vendored
+19
@@ -0,0 +1,19 @@
|
|||||||
|
param([Parameter(Mandatory=$true)][string]$VSN)
|
||||||
|
|
||||||
|
$ErrorActionPreference="Stop"
|
||||||
|
|
||||||
|
Set-Location $Env:RUNNER_TEMP
|
||||||
|
|
||||||
|
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
|
||||||
|
$FILE_OUTPUT="gleam.zip"
|
||||||
|
$DIR_FOR_BIN=".setup-beam/gleam/bin"
|
||||||
|
|
||||||
|
$ProgressPreference="SilentlyContinue"
|
||||||
|
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "$FILE_OUTPUT"
|
||||||
|
$ProgressPreference="Continue"
|
||||||
|
New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
|
||||||
|
$ProgressPreference="SilentlyContinue"
|
||||||
|
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
||||||
|
$ProgressPreference="Continue"
|
||||||
|
Write-Output "Installed Gleam version follows"
|
||||||
|
& "$DIR_FOR_BIN/gleam" "--version" | Write-Output
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
cd "$RUNNER_TEMP"
|
||||||
|
|
||||||
|
VSN=${1}
|
||||||
|
FILE_INPUT=gleam-${VSN}-linux-amd64.tar.gz
|
||||||
|
FILE_OUTPUT=gleam.tar.gz
|
||||||
|
DIR_FOR_BIN=.setup-beam/gleam/bin
|
||||||
|
|
||||||
|
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
mkdir -p "${DIR_FOR_BIN}"
|
||||||
|
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}"
|
||||||
|
|
||||||
|
echo "Installed Gleam version follows"
|
||||||
|
${DIR_FOR_BIN}/gleam --version
|
||||||
Vendored
+9
-2
@@ -10,12 +10,19 @@ $FILE_OUTPUT_PS1="rebar3.ps1"
|
|||||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Invoke-WebRequest "https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}" -OutFile "$FILE_OUTPUT"
|
$REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
$REBAR3_NIGHTLY=""
|
||||||
|
If ( $VSN -eq "nightly" )
|
||||||
|
{
|
||||||
|
$REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||||
|
$REBAR3_NIGHTLY=" (from nightly build)"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest "$REBAR3_TARGET" -OutFile "$FILE_OUTPUT"
|
||||||
$ProgressPreference="Continue"
|
$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
|
type $FILE_OUTPUT_PS1
|
||||||
Move-Item "$FILE_OUTPUT_PS1" "$DIR_FOR_BIN/bin"
|
Move-Item "$FILE_OUTPUT_PS1" "$DIR_FOR_BIN/bin"
|
||||||
Write-Output "Installed rebar3 version follows"
|
Write-Output "Installed rebar3 version$REBAR3_NIGHTLY follows"
|
||||||
& "$DIR_FOR_BIN/bin/rebar3" "version" | Write-Output
|
& "$DIR_FOR_BIN/bin/rebar3" "version" | Write-Output
|
||||||
|
|||||||
Vendored
+8
-2
@@ -9,9 +9,15 @@ FILE_INPUT=rebar3
|
|||||||
FILE_OUTPUT=rebar3
|
FILE_OUTPUT=rebar3
|
||||||
DIR_FOR_BIN=.setup-beam/rebar3
|
DIR_FOR_BIN=.setup-beam/rebar3
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
REBAR3_NIGHTLY=""
|
||||||
|
if [ "${VSN}" == "nightly" ]; then
|
||||||
|
REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||||
|
REBAR3_NIGHTLY=" (from nightly build)"
|
||||||
|
fi
|
||||||
|
wget -q -O "${FILE_OUTPUT}" "${REBAR3_TARGET}"
|
||||||
mkdir -p "${DIR_FOR_BIN}/bin"
|
mkdir -p "${DIR_FOR_BIN}/bin"
|
||||||
chmod +x "${FILE_OUTPUT}"
|
chmod +x "${FILE_OUTPUT}"
|
||||||
mv "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
mv "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
||||||
echo "Installed rebar3 version follows"
|
echo "Installed rebar3 version$REBAR3_NIGHTLY follows"
|
||||||
${DIR_FOR_BIN}/bin/rebar3 version
|
${DIR_FOR_BIN}/bin/rebar3 version
|
||||||
|
|||||||
Generated
+304
-495
File diff suppressed because it is too large
Load Diff
+5
-2
@@ -8,8 +8,8 @@
|
|||||||
"jslint": "eslint src/**/*.js && eslint __tests__/**/*.js",
|
"jslint": "eslint src/**/*.js && eslint __tests__/**/*.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",
|
"shellcheck": "shellcheck src/install-*.sh .github/workflows/*.sh",
|
||||||
"test": "node __tests__/setup-beam.test.js",
|
"test": "node __tests__/setup-beam.test.js && node ./__tests__/problem-matchers.test.js",
|
||||||
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml"
|
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml"
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
@@ -26,6 +26,9 @@
|
|||||||
"@vercel/ncc": "0.27.0",
|
"@vercel/ncc": "0.27.0",
|
||||||
"eslint": "7.22.0",
|
"eslint": "7.22.0",
|
||||||
"eslint-config-airbnb": "v18.2.1",
|
"eslint-config-airbnb": "v18.2.1",
|
||||||
|
"eslint-plugin-import": "^2.24.2",
|
||||||
|
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||||
|
"eslint-plugin-react": "^7.25.1",
|
||||||
"husky": "5.2.0",
|
"husky": "5.2.0",
|
||||||
"markdownlint": "0.23.1",
|
"markdownlint": "0.23.1",
|
||||||
"prettier": "2.2.1",
|
"prettier": "2.2.1",
|
||||||
|
|||||||
@@ -15,5 +15,5 @@ New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
|
|||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
||||||
$ProgressPreference="Continue"
|
$ProgressPreference="Continue"
|
||||||
Write-Output "Installed Erlang/OTP version follows"
|
Write-Output "Installed Elixir version follows"
|
||||||
& "$DIR_FOR_BIN/bin/iex" "-v" | Write-Output
|
& "$DIR_FOR_BIN/bin/elixir" "-v" | Write-Output
|
||||||
|
|||||||
@@ -13,4 +13,4 @@ wget -q -O "${FILE_OUTPUT}" "https://repo.hex.pm/builds/elixir/${FILE_INPUT}"
|
|||||||
mkdir -p "${DIR_FOR_BIN}"
|
mkdir -p "${DIR_FOR_BIN}"
|
||||||
unzip -q -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
unzip -q -d "${DIR_FOR_BIN}" "${FILE_OUTPUT}"
|
||||||
echo "Installed Elixir version follows"
|
echo "Installed Elixir version follows"
|
||||||
${DIR_FOR_BIN}/bin/iex -v
|
${DIR_FOR_BIN}/bin/elixir -v
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
param([Parameter(Mandatory=$true)][string]$VSN)
|
||||||
|
|
||||||
|
$ErrorActionPreference="Stop"
|
||||||
|
|
||||||
|
Set-Location $Env:RUNNER_TEMP
|
||||||
|
|
||||||
|
$FILE_INPUT="gleam-${VSN}-windows-64bit.zip"
|
||||||
|
$FILE_OUTPUT="gleam.zip"
|
||||||
|
$DIR_FOR_BIN=".setup-beam/gleam/bin"
|
||||||
|
|
||||||
|
$ProgressPreference="SilentlyContinue"
|
||||||
|
Invoke-WebRequest "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}" -OutFile "$FILE_OUTPUT"
|
||||||
|
$ProgressPreference="Continue"
|
||||||
|
New-Item "$DIR_FOR_BIN" -ItemType Directory | Out-Null
|
||||||
|
$ProgressPreference="SilentlyContinue"
|
||||||
|
Expand-Archive -DestinationPath "${DIR_FOR_BIN}" -Path "${FILE_OUTPUT}"
|
||||||
|
$ProgressPreference="Continue"
|
||||||
|
Write-Output "Installed Gleam version follows"
|
||||||
|
& "$DIR_FOR_BIN/gleam" "--version" | Write-Output
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
cd "$RUNNER_TEMP"
|
||||||
|
|
||||||
|
VSN=${1}
|
||||||
|
FILE_INPUT=gleam-${VSN}-linux-amd64.tar.gz
|
||||||
|
FILE_OUTPUT=gleam.tar.gz
|
||||||
|
DIR_FOR_BIN=.setup-beam/gleam/bin
|
||||||
|
|
||||||
|
wget -q -O "${FILE_OUTPUT}" "https://github.com/gleam-lang/gleam/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
mkdir -p "${DIR_FOR_BIN}"
|
||||||
|
tar zxf "${FILE_OUTPUT}" -C "${DIR_FOR_BIN}"
|
||||||
|
|
||||||
|
echo "Installed Gleam version follows"
|
||||||
|
${DIR_FOR_BIN}/gleam --version
|
||||||
@@ -10,12 +10,19 @@ $FILE_OUTPUT_PS1="rebar3.ps1"
|
|||||||
$DIR_FOR_BIN=".setup-beam/rebar3"
|
$DIR_FOR_BIN=".setup-beam/rebar3"
|
||||||
|
|
||||||
$ProgressPreference="SilentlyContinue"
|
$ProgressPreference="SilentlyContinue"
|
||||||
Invoke-WebRequest "https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}" -OutFile "$FILE_OUTPUT"
|
$REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
$REBAR3_NIGHTLY=""
|
||||||
|
If ( $VSN -eq "nightly" )
|
||||||
|
{
|
||||||
|
$REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||||
|
$REBAR3_NIGHTLY=" (from nightly build)"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest "$REBAR3_TARGET" -OutFile "$FILE_OUTPUT"
|
||||||
$ProgressPreference="Continue"
|
$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
|
type $FILE_OUTPUT_PS1
|
||||||
Move-Item "$FILE_OUTPUT_PS1" "$DIR_FOR_BIN/bin"
|
Move-Item "$FILE_OUTPUT_PS1" "$DIR_FOR_BIN/bin"
|
||||||
Write-Output "Installed rebar3 version follows"
|
Write-Output "Installed rebar3 version$REBAR3_NIGHTLY follows"
|
||||||
& "$DIR_FOR_BIN/bin/rebar3" "version" | Write-Output
|
& "$DIR_FOR_BIN/bin/rebar3" "version" | Write-Output
|
||||||
|
|||||||
@@ -9,9 +9,15 @@ FILE_INPUT=rebar3
|
|||||||
FILE_OUTPUT=rebar3
|
FILE_OUTPUT=rebar3
|
||||||
DIR_FOR_BIN=.setup-beam/rebar3
|
DIR_FOR_BIN=.setup-beam/rebar3
|
||||||
|
|
||||||
wget -q -O "${FILE_OUTPUT}" "https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
REBAR3_TARGET="https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE_INPUT}"
|
||||||
|
REBAR3_NIGHTLY=""
|
||||||
|
if [ "${VSN}" == "nightly" ]; then
|
||||||
|
REBAR3_TARGET="https://s3.amazonaws.com/rebar3-nightly/rebar3"
|
||||||
|
REBAR3_NIGHTLY=" (from nightly build)"
|
||||||
|
fi
|
||||||
|
wget -q -O "${FILE_OUTPUT}" "${REBAR3_TARGET}"
|
||||||
mkdir -p "${DIR_FOR_BIN}/bin"
|
mkdir -p "${DIR_FOR_BIN}/bin"
|
||||||
chmod +x "${FILE_OUTPUT}"
|
chmod +x "${FILE_OUTPUT}"
|
||||||
mv "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
mv "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin"
|
||||||
echo "Installed rebar3 version follows"
|
echo "Installed rebar3 version$REBAR3_NIGHTLY follows"
|
||||||
${DIR_FOR_BIN}/bin/rebar3 version
|
${DIR_FOR_BIN}/bin/rebar3 version
|
||||||
|
|||||||
@@ -32,6 +32,21 @@ async function installElixir(elixirVersion) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install Gleam.
|
||||||
|
*
|
||||||
|
* @param {string} gleamVersion
|
||||||
|
*/
|
||||||
|
async function installGleam(gleamVersion) {
|
||||||
|
const OS = process.platform
|
||||||
|
if (OS === 'linux') {
|
||||||
|
await exec(path.join(__dirname, 'install-gleam.sh'), [gleamVersion])
|
||||||
|
} else if (OS === 'win32') {
|
||||||
|
const script = path.join(__dirname, 'install-gleam.ps1')
|
||||||
|
await exec(`pwsh.exe ${script} -VSN:${gleamVersion}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install rebar3.
|
* Install rebar3.
|
||||||
*
|
*
|
||||||
@@ -58,6 +73,7 @@ function checkPlatform() {
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
installOTP,
|
installOTP,
|
||||||
installElixir,
|
installElixir,
|
||||||
|
installGleam,
|
||||||
installRebar3,
|
installRebar3,
|
||||||
checkPlatform,
|
checkPlatform,
|
||||||
}
|
}
|
||||||
|
|||||||
+95
-27
@@ -15,22 +15,29 @@ async function main() {
|
|||||||
|
|
||||||
const osVersion = getRunnerOSVersion()
|
const osVersion = getRunnerOSVersion()
|
||||||
const otpSpec = core.getInput('otp-version', { required: true })
|
const otpSpec = core.getInput('otp-version', { required: true })
|
||||||
const otpVersion = await installOTP(otpSpec, osVersion)
|
|
||||||
|
|
||||||
const elixirSpec = core.getInput('elixir-version', { required: false })
|
const elixirSpec = core.getInput('elixir-version', { required: false })
|
||||||
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpVersion)
|
const gleamSpec = core.getInput('gleam-version', { required: false })
|
||||||
if (elixirInstalled === true) {
|
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
||||||
const shouldMixRebar = core.getInput('install-rebar', {
|
|
||||||
required: false,
|
if (otpSpec !== 'false') {
|
||||||
})
|
const otpVersion = await installOTP(otpSpec, osVersion)
|
||||||
await mix(shouldMixRebar, 'rebar')
|
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpVersion)
|
||||||
const shouldMixHex = core.getInput('install-hex', {
|
|
||||||
required: false,
|
if (elixirInstalled === true) {
|
||||||
})
|
const shouldMixRebar = core.getInput('install-rebar', {
|
||||||
await mix(shouldMixHex, 'hex')
|
required: false,
|
||||||
|
})
|
||||||
|
await mix(shouldMixRebar, 'rebar')
|
||||||
|
const shouldMixHex = core.getInput('install-hex', {
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
await mix(shouldMixHex, 'hex')
|
||||||
|
}
|
||||||
|
} else if (!gleamSpec) {
|
||||||
|
throw new Error('otp-version=false is only available when installing Gleam')
|
||||||
}
|
}
|
||||||
|
|
||||||
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
await maybeInstallGleam(gleamSpec)
|
||||||
await maybeInstallRebar3(rebar3Spec)
|
await maybeInstallRebar3(rebar3Spec)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,10 +70,15 @@ async function maybeInstallElixir(elixirSpec, otpVersion) {
|
|||||||
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
console.log(`##[group]Installing Elixir ${elixirVersion}`)
|
||||||
await installer.installElixir(elixirVersion)
|
await installer.installElixir(elixirVersion)
|
||||||
core.setOutput('elixir-version', elixirVersion)
|
core.setOutput('elixir-version', elixirVersion)
|
||||||
const matchersPath = path.join(__dirname, '..', '.github')
|
const disableProblemMatchers = core.getInput('disable_problem_matchers', {
|
||||||
console.log(
|
required: false,
|
||||||
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
})
|
||||||
)
|
if (!disableProblemMatchers) {
|
||||||
|
const matchersPath = path.join(__dirname, '..', '.github')
|
||||||
|
console.log(
|
||||||
|
`##[add-matcher]${path.join(matchersPath, 'elixir-matchers.json')}`,
|
||||||
|
)
|
||||||
|
}
|
||||||
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/elixir/bin`)
|
||||||
console.log('##[endgroup]')
|
console.log('##[endgroup]')
|
||||||
|
|
||||||
@@ -86,11 +98,33 @@ async function mix(shouldMix, what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function maybeInstallRebar3(rebar3Spec) {
|
async function maybeInstallGleam(gleamSpec) {
|
||||||
let installed = false
|
let installed = false
|
||||||
|
|
||||||
|
if (gleamSpec) {
|
||||||
|
const gleamVersion = await getGleamVersion(gleamSpec)
|
||||||
|
console.log(`##[group]Installing Gleam ${gleamVersion}`)
|
||||||
|
await installer.installGleam(gleamVersion)
|
||||||
|
core.setOutput('gleam-version', gleamVersion)
|
||||||
|
core.addPath(`${process.env.RUNNER_TEMP}/.setup-beam/gleam/bin`)
|
||||||
|
console.log('##[endgroup]')
|
||||||
|
|
||||||
|
installed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return installed
|
||||||
|
}
|
||||||
|
|
||||||
|
async function maybeInstallRebar3(rebar3Spec) {
|
||||||
|
let installed = false
|
||||||
|
let rebar3Version
|
||||||
|
|
||||||
if (rebar3Spec) {
|
if (rebar3Spec) {
|
||||||
const rebar3Version = await getRebar3Version(rebar3Spec)
|
if (rebar3Spec === 'nightly') {
|
||||||
|
rebar3Version = 'nightly'
|
||||||
|
} else {
|
||||||
|
rebar3Version = await getRebar3Version(rebar3Spec)
|
||||||
|
}
|
||||||
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
console.log(`##[group]Installing rebar3 ${rebar3Version}`)
|
||||||
await installer.installRebar3(rebar3Version)
|
await installer.installRebar3(rebar3Version)
|
||||||
core.setOutput('rebar3-version', rebar3Version)
|
core.setOutput('rebar3-version', rebar3Version)
|
||||||
@@ -174,10 +208,21 @@ async function getElixirVersion(exSpec0, otpVersion) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const DigitStart = new RegExp('^\\d+')
|
return maybePrependWithV(elixirVersionWithOTP, elixirVersion)
|
||||||
return DigitStart.test(elixirVersion)
|
}
|
||||||
? `v${elixirVersionWithOTP}`
|
|
||||||
: elixirVersionWithOTP
|
async function getGleamVersion(gleamSpec0) {
|
||||||
|
const gleamSpec = gleamSpec0.match(/^v?(.+)/)
|
||||||
|
const gleamVersions = await getGleamVersions()
|
||||||
|
const gleamVersion = getVersionFromSpec(gleamSpec[1], gleamVersions)
|
||||||
|
if (gleamVersion === null) {
|
||||||
|
throw new Error(
|
||||||
|
`Requested Gleam version (${gleamSpec0}) not found in version list ` +
|
||||||
|
"(should you be using option 'version-type': 'strict'?)",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return maybePrependWithV(gleamVersion, gleamVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getRebar3Version(r3Spec) {
|
async function getRebar3Version(r3Spec) {
|
||||||
@@ -260,6 +305,21 @@ async function getElixirVersions() {
|
|||||||
return otpVersionsForElixirMap
|
return otpVersionsForElixirMap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getGleamVersions() {
|
||||||
|
const resultJSONs = await get(
|
||||||
|
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100',
|
||||||
|
[1, 2, 3],
|
||||||
|
)
|
||||||
|
const gleamVersionsListing = []
|
||||||
|
resultJSONs.forEach((resultJSON) => {
|
||||||
|
JSON.parse(resultJSON)
|
||||||
|
.map((x) => x.tag_name)
|
||||||
|
.sort()
|
||||||
|
.forEach((v) => gleamVersionsListing.push(v))
|
||||||
|
})
|
||||||
|
return gleamVersionsListing
|
||||||
|
}
|
||||||
|
|
||||||
async function getRebar3Versions() {
|
async function getRebar3Versions() {
|
||||||
const resultJSONs = await get(
|
const resultJSONs = await get(
|
||||||
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
|
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
|
||||||
@@ -303,7 +363,7 @@ function getVersionFromSpec(spec, versions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return version
|
return version === null || version === undefined ? null : version
|
||||||
}
|
}
|
||||||
|
|
||||||
function maybeCoerced(v) {
|
function maybeCoerced(v) {
|
||||||
@@ -342,17 +402,17 @@ function sortVersions(left, right) {
|
|||||||
|
|
||||||
function getRunnerOSVersion() {
|
function getRunnerOSVersion() {
|
||||||
const ImageOSToContainer = {
|
const ImageOSToContainer = {
|
||||||
ubuntu16: 'ubuntu-16.04',
|
|
||||||
ubuntu18: 'ubuntu-18.04',
|
ubuntu18: 'ubuntu-18.04',
|
||||||
ubuntu20: 'ubuntu-20.04',
|
ubuntu20: 'ubuntu-20.04',
|
||||||
win16: 'windows-2016',
|
|
||||||
win19: 'windows-2019',
|
win19: 'windows-2019',
|
||||||
}
|
}
|
||||||
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
|
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
|
||||||
|
|
||||||
if (!containerFromEnvImageOS) {
|
if (!containerFromEnvImageOS) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"Tried to map a target OS from env. variable 'ImageOS', but failed. If you're using a " +
|
"Tried to map a target OS from env. variable 'ImageOS' (got " +
|
||||||
|
`${process.env.ImageOS}` +
|
||||||
|
"), but failed. If you're using a " +
|
||||||
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " +
|
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " +
|
||||||
"['" +
|
"['" +
|
||||||
`${Object.keys(ImageOSToContainer).join("', '")}` +
|
`${Object.keys(ImageOSToContainer).join("', '")}` +
|
||||||
@@ -408,9 +468,17 @@ async function get(url0, pageIdxs) {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function maybePrependWithV(versionToPrepend, specVersion) {
|
||||||
|
const digitStart = new RegExp('^\\d+')
|
||||||
|
return digitStart.test(specVersion)
|
||||||
|
? `v${versionToPrepend}`
|
||||||
|
: versionToPrepend
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getOTPVersion,
|
getOTPVersion,
|
||||||
getElixirVersion,
|
getElixirVersion,
|
||||||
|
getGleamVersion,
|
||||||
getRebar3Version,
|
getRebar3Version,
|
||||||
getVersionFromSpec,
|
getVersionFromSpec,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
name: test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.0.0
|
||||||
|
- uses: erlef/setup-beam@v1.9.0
|
||||||
|
with:
|
||||||
|
otp-version: "23.2"
|
||||||
|
gleam-version: "0.19.0-rc3"
|
||||||
|
- run: gleam format --check src test
|
||||||
|
- run: gleam deps download
|
||||||
|
- run: gleam test
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
*.beam
|
||||||
|
*.ez
|
||||||
|
build
|
||||||
|
erl_crash.dump
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# gleam_gleam
|
||||||
|
|
||||||
|
A Gleam project
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
```sh
|
||||||
|
gleam run # Run the project
|
||||||
|
gleam test # Run the tests
|
||||||
|
gleam shell # Run an Erlang shell
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
If available on Hex this package can be added to your Gleam project.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
gleam add gleam_gleam
|
||||||
|
```
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
name = "gleam_gleam"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
# Fill out these fields if you intend to generate HTML documentation or publish
|
||||||
|
# your project to the Hex package manager.
|
||||||
|
#
|
||||||
|
# licences = ["Apache-2.0"]
|
||||||
|
# description = "A Gleam library..."
|
||||||
|
# repository = { type = "github", user = "username", repo = "project" }
|
||||||
|
# links = [{ title = "Website", href = "https://gleam.run" }]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
gleam_stdlib = "~> 0.18"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
gleeunit = "~> 0.5"
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# This file was generated by Gleam
|
||||||
|
# You typically do not need to edit this file
|
||||||
|
|
||||||
|
packages = [
|
||||||
|
{ name = "gleam_stdlib", version = "0.19.2", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "FFA79EA12369F122B68885E694E097D6810402A2F86BFF48AAE9E40ACE654F4C" },
|
||||||
|
{ name = "gleeunit", version = "0.6.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "77701A5E5A565727E1EEAC9196FB878D544049B6331CD0305B5A69699135EA1C" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[requirements]
|
||||||
|
gleam_stdlib = "~> 0.18"
|
||||||
|
gleeunit = "~> 0.5"
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import gleam/io
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
io.println("Hello from gleam_gleam!")
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import gleeunit
|
||||||
|
import gleeunit/should
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
gleeunit.main()
|
||||||
|
}
|
||||||
|
|
||||||
|
// gleeunit test functions end in `_test`
|
||||||
|
pub fn hello_world_test() {
|
||||||
|
1
|
||||||
|
|> should.equal(1)
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
name: test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.0.0
|
||||||
|
- uses: gleam-lang/setup-erlang@v1.1.2
|
||||||
|
with:
|
||||||
|
otp-version: 23.2
|
||||||
|
- uses: gleam-lang/setup-gleam@v1.0.2
|
||||||
|
with:
|
||||||
|
gleam-version: 0.16.1
|
||||||
|
- run: rebar3 install_deps
|
||||||
|
- run: rebar3 eunit
|
||||||
|
- run: gleam format --check src test
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
*.beam
|
||||||
|
*.iml
|
||||||
|
*.o
|
||||||
|
*.plt
|
||||||
|
*.swo
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
.erlang.cookie
|
||||||
|
.eunit
|
||||||
|
.idea
|
||||||
|
.rebar
|
||||||
|
.rebar3
|
||||||
|
_*
|
||||||
|
_build
|
||||||
|
docs
|
||||||
|
ebin
|
||||||
|
erl_crash.dump
|
||||||
|
gen
|
||||||
|
log
|
||||||
|
logs
|
||||||
|
rebar3.crashdump
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# gleam_rebar3
|
||||||
|
|
||||||
|
A Gleam project
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Run the eunit tests
|
||||||
|
rebar3 eunit
|
||||||
|
|
||||||
|
# Run the Erlang REPL
|
||||||
|
rebar3 shell
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
If [available in Hex](https://rebar3.org/docs/configuration/dependencies/#declaring-dependencies)
|
||||||
|
this package can be installed by adding `gleam_rebar3` to your `rebar.config` dependencies:
|
||||||
|
|
||||||
|
```erlang
|
||||||
|
{deps, [
|
||||||
|
gleam_rebar3
|
||||||
|
]}.
|
||||||
|
```
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
name = "gleam_rebar3"
|
||||||
|
|
||||||
|
# repository = { type = "github", user = "my-user", repo = "gleam_rebar3" }
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{erl_opts, [debug_info]}.
|
||||||
|
{src_dirs, ["src", "gen/src"]}.
|
||||||
|
|
||||||
|
{profiles, [
|
||||||
|
{test, [{src_dirs, ["src", "test", "gen/src", "gen/test"]}]}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{project_plugins, [rebar_gleam]}.
|
||||||
|
|
||||||
|
{deps, [
|
||||||
|
{gleam_stdlib, "0.16.0"}
|
||||||
|
]}.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{application, gleam_rebar3,
|
||||||
|
[{description, "A Gleam project"},
|
||||||
|
{vsn, "0.1.0"},
|
||||||
|
{registered, []},
|
||||||
|
{applications,
|
||||||
|
[kernel,
|
||||||
|
stdlib,
|
||||||
|
gleam_stdlib
|
||||||
|
]},
|
||||||
|
{env,[]},
|
||||||
|
{modules, []},
|
||||||
|
|
||||||
|
{include_files, ["gleam.toml", "gen"]},
|
||||||
|
{links, []}
|
||||||
|
]}.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
pub fn hello_world() -> String {
|
||||||
|
"Hello, from gleam_rebar3!"
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import gleam_rebar3
|
||||||
|
import gleam/should
|
||||||
|
|
||||||
|
pub fn hello_world_test() {
|
||||||
|
gleam_rebar3.hello_world()
|
||||||
|
|> should.equal("Hello, from gleam_rebar3!")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user