mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-22 22:56:07 +00:00
Add Gleam (#67)
This commit is contained in:
committed by
GitHub
parent
4fbbcf2e6c
commit
c988d89031
@@ -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:
|
||||||
@@ -106,6 +107,10 @@ 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'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Use erlef/setup-beam
|
- name: Use erlef/setup-beam
|
||||||
@@ -114,6 +119,7 @@ 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)
|
||||||
@@ -121,6 +127,9 @@ jobs:
|
|||||||
- 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 +139,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}}
|
||||||
|
|||||||
@@ -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:
|
||||||
@@ -52,6 +53,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 +65,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 +83,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}}
|
||||||
|
|||||||
+1
-1
@@ -1810,7 +1810,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The following software may be included in this product: has-bigints, unbox-primitive, which-boxed-primitive. A copy of the source code may be downloaded from git+https://github.com/ljharb/has-bigints.git (has-bigints), git+https://github.com/ljharb/unbox-primitive.git (unbox-primitive), git+https://github.com/inspect-js/which-boxed-primitive.git (which-boxed-primitive). This software contains the following license and notice below:
|
The following software may be included in this product: has-bigints, internal-slot, side-channel, unbox-primitive, which-boxed-primitive. A copy of the source code may be downloaded from git+https://github.com/ljharb/has-bigints.git (has-bigints), git+https://github.com/ljharb/internal-slot.git (internal-slot), git+https://github.com/ljharb/side-channel.git (side-channel), git+https://github.com/ljharb/unbox-primitive.git (unbox-primitive), git+https://github.com/inspect-js/which-boxed-primitive.git (which-boxed-primitive). This software contains the following license and notice below:
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ workflow by:
|
|||||||
|
|
||||||
- installing Erlang/OTP
|
- installing Erlang/OTP
|
||||||
- optionally, installing Elixir
|
- optionally, installing Elixir
|
||||||
|
- optionally, installing Gleam
|
||||||
- optionally, installing `rebar3`
|
- optionally, installing `rebar3`
|
||||||
- optionally, installing `hex`
|
- optionally, installing `hex`
|
||||||
|
|
||||||
@@ -24,13 +25,13 @@ 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.
|
||||||
|
|
||||||
@@ -82,44 +83,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 +107,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 +130,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,6 +148,25 @@ jobs:
|
|||||||
- run: rebar3 ct
|
- run: rebar3 ct
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Example (Gleam + `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: '24'
|
||||||
|
gleam-version: '0.16'
|
||||||
|
rebar3-version: '3.16'
|
||||||
|
- run: rebar3 ct
|
||||||
|
```
|
||||||
|
|
||||||
## 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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ inputs:
|
|||||||
description: Version range or exact version of Elixir to use
|
description: Version range or exact version of Elixir to use
|
||||||
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
|
||||||
|
gleam-version:
|
||||||
|
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)
|
||||||
default: true
|
default: true
|
||||||
@@ -29,6 +31,8 @@ outputs:
|
|||||||
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
+75
-5
@@ -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,
|
||||||
}
|
}
|
||||||
@@ -4686,6 +4702,9 @@ async function main() {
|
|||||||
await mix(shouldMixHex, 'hex')
|
await mix(shouldMixHex, 'hex')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const gleamSpec = core.getInput('gleam-version', { required: false })
|
||||||
|
await maybeInstallGleam(gleamSpec)
|
||||||
|
|
||||||
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
||||||
await maybeInstallRebar3(rebar3Spec)
|
await maybeInstallRebar3(rebar3Spec)
|
||||||
}
|
}
|
||||||
@@ -4742,6 +4761,23 @@ async function mix(shouldMix, what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function maybeInstallGleam(gleamSpec) {
|
||||||
|
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) {
|
async function maybeInstallRebar3(rebar3Spec) {
|
||||||
let installed = false
|
let installed = false
|
||||||
|
|
||||||
@@ -4830,10 +4866,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 +4963,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 +5021,7 @@ function getVersionFromSpec(spec, versions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return version
|
return version === null || version === undefined ? null : version
|
||||||
}
|
}
|
||||||
|
|
||||||
function maybeCoerced(v) {
|
function maybeCoerced(v) {
|
||||||
@@ -5066,9 +5128,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
+1
-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/iex" "-v" | Write-Output
|
||||||
|
|||||||
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
|
||||||
@@ -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/iex" "-v" | Write-Output
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
+59
-5
@@ -30,6 +30,9 @@ async function main() {
|
|||||||
await mix(shouldMixHex, 'hex')
|
await mix(shouldMixHex, 'hex')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const gleamSpec = core.getInput('gleam-version', { required: false })
|
||||||
|
await maybeInstallGleam(gleamSpec)
|
||||||
|
|
||||||
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
const rebar3Spec = core.getInput('rebar3-version', { required: false })
|
||||||
await maybeInstallRebar3(rebar3Spec)
|
await maybeInstallRebar3(rebar3Spec)
|
||||||
}
|
}
|
||||||
@@ -86,6 +89,23 @@ async function mix(shouldMix, what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function maybeInstallGleam(gleamSpec) {
|
||||||
|
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) {
|
async function maybeInstallRebar3(rebar3Spec) {
|
||||||
let installed = false
|
let installed = false
|
||||||
|
|
||||||
@@ -174,10 +194,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 +291,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 +349,7 @@ function getVersionFromSpec(spec, versions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return version
|
return version === null || version === undefined ? null : version
|
||||||
}
|
}
|
||||||
|
|
||||||
function maybeCoerced(v) {
|
function maybeCoerced(v) {
|
||||||
@@ -410,9 +456,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,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