mirror of
https://github.com/erlef/setup-beam.git
synced 2026-07-23 07:06:07 +00:00
Compare commits
224 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a808ab128 | |||
| 8736e92447 | |||
| f4f179b825 | |||
| a228c4f190 | |||
| 730131f5b9 | |||
| 7782cf9cde | |||
| 324994a2c5 | |||
| 551a8c58c5 | |||
| 74e4a9879b | |||
| 992182bb93 | |||
| 837c16fb56 | |||
| 50a47d8240 | |||
| 149ca49ab5 | |||
| 48f5ea24e9 | |||
| fa471919e3 | |||
| b59f4962e3 | |||
| 35983496a6 | |||
| fad8771ace | |||
| c35be0e285 | |||
| e6d7811738 | |||
| b15302821e | |||
| b0ba423105 | |||
| c648472e6f | |||
| 3809396843 | |||
| f8797dd823 | |||
| a433e6bd12 | |||
| e0a7f48cee | |||
| c21f568d4c | |||
| fe26b2283c | |||
| 54075bcc5e | |||
| ea45c8043f | |||
| b4b8d851b6 | |||
| 20df794ab3 | |||
| 9d5c5ca125 | |||
| ad4294342c | |||
| 135c095dff | |||
| a04cfbb50e | |||
| cd1472f941 | |||
| c80fdc938c | |||
| aecd7abd75 | |||
| 6e9312bce0 | |||
| 3985c7c047 | |||
| 35f52551d2 | |||
| 0510550330 | |||
| 9eabb2c115 | |||
| e5f1a7b722 | |||
| 7a27046239 | |||
| fc68ffb904 | |||
| 190c3a5e7b | |||
| 92dab893ed | |||
| 5dfda65506 | |||
| ef385d6edc | |||
| bf3c3af135 | |||
| e7645e4102 | |||
| a36098e741 | |||
| 87781dc68a | |||
| d5f3979a5f | |||
| 930b3281ba | |||
| 30056ca086 | |||
| 1f3f354e6a | |||
| 3e49772722 | |||
| 2ac22cd739 | |||
| c4782c7b58 | |||
| 0afadf6bdd | |||
| e539b1ee26 | |||
| c5f0656346 | |||
| ee09b1e59b | |||
| f8b54b559e | |||
| bf1ce74034 | |||
| 559a930751 | |||
| 1380ebe712 | |||
| 0a549596b0 | |||
| 3a3c94fd9e | |||
| cfafb69ddd | |||
| b3cbb6afbf | |||
| 2abe6cda7a | |||
| d55fdba43f | |||
| eb86ad6523 | |||
| af6da5da48 | |||
| f018c1e6d8 | |||
| d843ebb78b | |||
| c8e09547a7 | |||
| 9d5b75ddfd | |||
| 98c13a9ed3 | |||
| 0f13bcf18a | |||
| c3137f5cd5 | |||
| 4cbacdb2a9 | |||
| 687000ab96 | |||
| 9ba6605098 | |||
| 722d91de6e | |||
| f79887d1ba | |||
| 30a0896082 | |||
| 41c0004487 | |||
| 9fc15d548d | |||
| 19003af5f4 | |||
| 53a564f4bb | |||
| 6ee130ce6b | |||
| 11a1f27b1e | |||
| 83bf0e8bac | |||
| 47d6c3c4af | |||
| 0d2a6cb44d | |||
| 0f6ba5d884 | |||
| 58166ce788 | |||
| 4a07ed84ac | |||
| de78da9a9d | |||
| 9928a16c11 | |||
| 3964390c66 | |||
| 1dacaf8a01 | |||
| fa8ba5f70e | |||
| daf8797d04 | |||
| de72677f00 | |||
| 334f76ce04 | |||
| 86b5ecbf21 | |||
| b8fc6e435e | |||
| e7fda7af4e | |||
| a50e3e2f89 | |||
| 7bc1e4ca67 | |||
| baf2bc3313 | |||
| 3580539cee | |||
| fe5485f1f6 | |||
| 98de8ffa90 | |||
| 6c5fe278e7 | |||
| 36214a49c0 | |||
| 972bec8037 | |||
| 10e998534e | |||
| 542d9a8e62 | |||
| b764149ef2 | |||
| cba803d7b7 | |||
| eda66a8458 | |||
| cf0aea912f | |||
| 13b647ed24 | |||
| d6f6c371de | |||
| 905cf79e7d | |||
| 4f85a51ca2 | |||
| fc1fdd6f00 | |||
| da184bc66d | |||
| 566deebc64 | |||
| b94e7d372a | |||
| 033f103421 | |||
| 9afaa6e45f | |||
| 4168d0bf3c | |||
| 8c38699ca8 | |||
| df4a3eca5d | |||
| db4f13ce18 | |||
| 1df7f7a827 | |||
| f350bf9e05 | |||
| e6d7c94229 | |||
| fceaea9f54 | |||
| 2bb5b653d0 | |||
| 1d4efdd2e9 | |||
| 73f047e328 | |||
| 6dd8a1a852 | |||
| fd9a2e183f | |||
| 65085e37bc | |||
| 80c1659516 | |||
| 8e7fdef09f | |||
| 1fe9179886 | |||
| 6389fe58dc | |||
| 8fc1380bb7 | |||
| 3c915dd1b0 | |||
| e5d50587ee | |||
| b1273cf7cc | |||
| 9308cafcbf | |||
| 2971b073e5 | |||
| a0b139a890 | |||
| 6a38171948 | |||
| 75edbb8287 | |||
| a8bc27ec39 | |||
| b29c86feb9 | |||
| abd725cb17 | |||
| 145718908e | |||
| 1e3540284f | |||
| 7ddf3b82cc | |||
| 00ffd44f8d | |||
| 6e1d5a5aa6 | |||
| 41ba577f74 | |||
| 8cdecfe6cc | |||
| 67834dc893 | |||
| 59e18ef85d | |||
| afe592256a | |||
| db4b4ce7c5 | |||
| 3025c9910d | |||
| 32794f2f95 | |||
| 65066e38a0 | |||
| 889e64e95a | |||
| 318bea3c09 | |||
| 1abc836c22 | |||
| e1b020163b | |||
| 220876a6da | |||
| 58f0e7ac10 | |||
| 46e061001b | |||
| 891e46b77a | |||
| a770081419 | |||
| 9092f97e4d | |||
| 8aa8a857c6 | |||
| 3e793a73ab | |||
| 98ad08a06d | |||
| f28fd8ebb9 | |||
| cc72a5b176 | |||
| 8e3c26cc73 | |||
| 4b97eeaf23 | |||
| 3eb03c83a9 | |||
| 0006652c69 | |||
| fb48206988 | |||
| adebba768f | |||
| 3360bfffe1 | |||
| e5b66193a0 | |||
| ff934e2456 | |||
| 2ad1b45db1 | |||
| 45dc207efd | |||
| 81b8173cf0 | |||
| b27f958e47 | |||
| ff4f054c91 | |||
| 5fa4c5f4ff | |||
| 58e153bc87 | |||
| e511d62e46 | |||
| 5304e04ea2 | |||
| 1f578f0ad6 | |||
| d1cc10de68 | |||
| d73068ed6a | |||
| 074443e9dc | |||
| 2fdf20c985 | |||
| d1c02572fa | |||
| 9db386cf4d |
@@ -1,19 +0,0 @@
|
||||
---
|
||||
env:
|
||||
node: true
|
||||
es2022: true
|
||||
extends:
|
||||
- eslint:recommended
|
||||
parserOptions:
|
||||
ecmaVersion: 2022
|
||||
rules:
|
||||
indent: [warn, 2, {SwitchCase: 1}]
|
||||
max-len: [warn, 100]
|
||||
no-use-before-define: 0
|
||||
operator-linebreak: 0
|
||||
semi: 0
|
||||
implicit-arrow-linebreak: 0
|
||||
|
||||
settings:
|
||||
react:
|
||||
version: 999.999.999
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: /
|
||||
schedule:
|
||||
interval: weekly
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule:
|
||||
interval: weekly
|
||||
@@ -4,5 +4,4 @@ A brief description of your changes.
|
||||
|
||||
Closes #<issue>.
|
||||
|
||||
- [ ] I have performed a self-review of my changes
|
||||
- [ ] I have read and understood the [contributing guidelines](/erlef/setup-beam/blob/main/CONTRIBUTING.md)
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
---
|
||||
name: action
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
- '*'
|
||||
workflow_dispatch: {}
|
||||
|
||||
env:
|
||||
@@ -18,8 +21,10 @@ jobs:
|
||||
name: Version with commit unique id
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Version it!
|
||||
run: |
|
||||
# We expect a string such as const setupBeamVersion = 'undefined' in the code
|
||||
@@ -40,38 +45,87 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref != 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- uses: actions/setup-node@v6.3.0
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
- run: npm run build-dist
|
||||
- name: Check if build left artifacts
|
||||
run: git diff --exit-code --ignore-space-at-eol
|
||||
|
||||
check_action:
|
||||
name: Action
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref != 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- uses: raven-actions/actionlint@v2.2.0
|
||||
|
||||
unit_tests_ubuntu:
|
||||
name: Unit tests (Ubuntu)
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-24.04-arm # ARM64
|
||||
- ubuntu-latest # x86_64
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- uses: actions/setup-node@v6.3.0
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
env:
|
||||
NODE_ENV: test
|
||||
- name: .tool-versions test
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
with:
|
||||
install-rebar: false
|
||||
install-hex: false
|
||||
version-file: test/.tool-versions
|
||||
version-type: strict
|
||||
|
||||
unit_tests_windows:
|
||||
name: Unit tests (Windows)
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- windows-latest # x86_64
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- uses: actions/setup-node@v6.3.0
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
- run: npm install --production
|
||||
- run: npm test
|
||||
env:
|
||||
NODE_ENV: test
|
||||
- name: .tool-versions test
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
with:
|
||||
install-rebar: false
|
||||
install-hex: false
|
||||
version-file: test/.tool-versions
|
||||
version-type: strict
|
||||
|
||||
unit_tests_macos:
|
||||
name: Unit tests (macOS)
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- macos-latest # ARM64
|
||||
- macos-15-intel # x86_64
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- uses: actions/setup-node@v6.3.0
|
||||
with:
|
||||
node-version: '24'
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
env:
|
||||
NODE_ENV: test
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
---
|
||||
name: hexpm-mirrors
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
@@ -17,13 +20,13 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: ['ubuntu-22.04', 'windows-2022']
|
||||
otp-version: ['24']
|
||||
elixir-version: ['v1.14', '']
|
||||
os: ['ubuntu-24.04', 'windows-2022', 'macos-15']
|
||||
otp-version: ['27']
|
||||
elixir-version: ['v1.18', '']
|
||||
install-rebar: [true, false]
|
||||
install-hex: [true, false]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
---
|
||||
name: macos
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
integration_test:
|
||||
name: >
|
||||
OS ${{matrix.combo.os}},
|
||||
OTP ${{matrix.combo.otp-version}},
|
||||
Elixir ${{matrix.combo.elixir-version}},
|
||||
rebar3 ${{matrix.combo.rebar3-version}}
|
||||
runs-on: ${{matrix.combo.os}}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
# macOS 14 - per README
|
||||
- otp-version: '25'
|
||||
os: 'macos-14'
|
||||
- otp-version: '29'
|
||||
os: 'macos-14'
|
||||
# macOS 15 - per README
|
||||
- otp-version: '25'
|
||||
os: 'macos-15'
|
||||
- otp-version: '29'
|
||||
os: 'macos-15'
|
||||
# macOS 26 - per README
|
||||
- otp-version: '25'
|
||||
os: 'macos-26'
|
||||
- otp-version: '29'
|
||||
os: 'macos-26'
|
||||
# macOS latest
|
||||
- otp-version: '27'
|
||||
elixir-version: 'v1.17.0'
|
||||
rebar3-version: '3.23'
|
||||
os: 'macos-latest'
|
||||
- otp-version: '26.0'
|
||||
elixir-version: 'v1.14-otp-25'
|
||||
os: 'macos-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '26.0'
|
||||
elixir-version: '1.14.5'
|
||||
os: 'macos-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25.2'
|
||||
elixir-version: '1.14.2'
|
||||
os: 'macos-latest'
|
||||
- otp-version: '25.2'
|
||||
elixir-version: '1.14.3'
|
||||
os: 'macos-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25.0'
|
||||
elixir-version: 'v1.16.3-otp-25'
|
||||
rebar3-version: '3.18.0'
|
||||
os: 'macos-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25.0'
|
||||
elixir-version: 'v1.16.3'
|
||||
rebar3-version: '3.18.0'
|
||||
os: 'macos-latest'
|
||||
version-type: 'strict'
|
||||
escript_packages: 'hex protobuf'
|
||||
escript_script: 'protoc-gen-elixir --version'
|
||||
- otp-version: 'latest'
|
||||
rebar3-version: 'latest'
|
||||
os: 'macos-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
with:
|
||||
otp-version: ${{matrix.combo.otp-version}}
|
||||
elixir-version: ${{matrix.combo.elixir-version}}
|
||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||
version-type: ${{matrix.combo.version-type}}
|
||||
- name: Erlang/OTP version (action)
|
||||
run: echo "Erlang/OTP ${{steps.setup-beam.outputs.otp-version}}"
|
||||
if: ${{matrix.combo.otp-version}}
|
||||
- name: Elixir version (action)
|
||||
run: echo "Elixir ${{steps.setup-beam.outputs.elixir-version}}"
|
||||
if: ${{matrix.combo.elixir-version}}
|
||||
- name: rebar3 version (action)
|
||||
run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}"
|
||||
if: ${{matrix.combo.rebar3-version}}
|
||||
- name: mix version and help (CLI)
|
||||
run: |
|
||||
mix -v
|
||||
mix help local.rebar
|
||||
mix help local.hex
|
||||
if: ${{matrix.combo.elixir-version}}
|
||||
- name: Run Elixir/Mix project tests
|
||||
run: |
|
||||
cd test/projects/elixir_mix
|
||||
mix deps.get
|
||||
mix test
|
||||
if: ${{matrix.combo.elixir-version}}
|
||||
- name: Run Erlang/rebar3 project tests
|
||||
run: |
|
||||
cd test/projects/erlang_rebar3
|
||||
rebar3 ct
|
||||
if: ${{matrix.combo.rebar3-version}}
|
||||
- name: Run escript
|
||||
run: |
|
||||
mix escript.install --force ${{matrix.combo.escript_packages}}
|
||||
${{matrix.combo.escript_script}}
|
||||
if: ${{matrix.combo.escript_packages && matrix.combo.escript_script}}
|
||||
|
||||
environment_variables:
|
||||
name: Environment variables
|
||||
runs-on: ${{matrix.combo.os}}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
- otp-version: 27
|
||||
elixir-version: 1.19
|
||||
rebar3-version: 3.24
|
||||
os: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
with:
|
||||
otp-version: ${{matrix.combo.otp-version}}
|
||||
elixir-version: ${{matrix.combo.elixir-version}}
|
||||
rebar3-version: ${{matrix.combo.rebar3-version}}
|
||||
- run: env
|
||||
- name: Check environment variables
|
||||
run: |
|
||||
"${INSTALL_DIR_FOR_ELIXIR}"/bin/elixir -v
|
||||
"${INSTALL_DIR_FOR_OTP}"/bin/erl -version
|
||||
"${INSTALL_DIR_FOR_REBAR3}"/bin/rebar3 version
|
||||
@@ -1,18 +1,22 @@
|
||||
---
|
||||
name: ubuntu
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
- '*'
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
integration_test:
|
||||
name: >
|
||||
OS ${{matrix.combo.os}},
|
||||
OTP ${{matrix.combo.otp-version}},
|
||||
Elixir ${{matrix.combo.elixir-version}},
|
||||
Gleam ${{matrix.combo.gleam-version}},
|
||||
@@ -22,6 +26,22 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
# Ubuntu 22.04 - per README
|
||||
- otp-version: '24.2'
|
||||
os: 'ubuntu-22.04'
|
||||
- otp-version: '29'
|
||||
os: 'ubuntu-22.04'
|
||||
# Ubuntu 24.04 - per README
|
||||
- otp-version: '24.3'
|
||||
os: 'ubuntu-24.04'
|
||||
- otp-version: '29'
|
||||
os: 'ubuntu-24.04'
|
||||
# Ubuntu 26.04 - per README
|
||||
- otp-version: '26'
|
||||
os: 'ubuntu-26.04'
|
||||
- otp-version: '29'
|
||||
os: 'ubuntu-26.04'
|
||||
# Ubuntu latest
|
||||
- otp-version: '27'
|
||||
elixir-version: 'v1.17.0'
|
||||
rebar3-version: '3.23'
|
||||
@@ -41,97 +61,34 @@ jobs:
|
||||
elixir-version: '1.14.3'
|
||||
os: 'ubuntu-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '27'
|
||||
os: 'ubuntu-24.04'
|
||||
version-type: 'strict'
|
||||
- otp-version: '26'
|
||||
os: 'ubuntu-24.04'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25'
|
||||
os: 'ubuntu-24.04'
|
||||
- otp-version: '25'
|
||||
elixir-version: '1.16'
|
||||
rebar3-version: '3'
|
||||
os: 'ubuntu-22.04'
|
||||
- otp-version: '24'
|
||||
elixir-version: '1.16'
|
||||
rebar3-version: '3'
|
||||
os: 'ubuntu-22.04'
|
||||
- otp-version: '25.0'
|
||||
elixir-version: 'v1.13.4-otp-25'
|
||||
elixir-version: 'v1.16.2-otp-25'
|
||||
rebar3-version: '3.18.0'
|
||||
os: 'ubuntu-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25.0'
|
||||
elixir-version: 'v1.13.4'
|
||||
elixir-version: 'v1.16.3'
|
||||
rebar3-version: '3.18.0'
|
||||
os: 'ubuntu-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25'
|
||||
rebar3-version: 'nightly'
|
||||
- otp-version: 'latest'
|
||||
rebar3-version: 'latest'
|
||||
os: 'ubuntu-latest'
|
||||
- otp-version: '26'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'ubuntu-latest'
|
||||
- elixir-version: 'v1.6'
|
||||
otp-version: '21'
|
||||
rebar3-version: '3.12'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.7'
|
||||
otp-version: '22'
|
||||
rebar3-version: '3.13'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.10'
|
||||
otp-version: '23'
|
||||
rebar3-version: '3.14'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.13.4'
|
||||
otp-version: '25.0.2'
|
||||
rebar3-version: '3.19'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.12'
|
||||
otp-version: '24'
|
||||
rebar3-version: '3.15'
|
||||
os: 'ubuntu-20.04'
|
||||
- elixir-version: 'v1.11.0'
|
||||
otp-version: '22.3.4.2'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- elixir-version: '1.10.3'
|
||||
otp-version: '22.3.4.1'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- elixir-version: 'main'
|
||||
otp-version: '23.1'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- elixir-version: 'main'
|
||||
otp-version: '25'
|
||||
os: 'ubuntu-20.04'
|
||||
version-type: 'strict'
|
||||
- gleam-version: '0.23'
|
||||
otp-version: '24'
|
||||
- gleam-version: '1.9.0'
|
||||
otp-version: '27'
|
||||
os: 'ubuntu-latest'
|
||||
disable_problem_matchers: true
|
||||
- gleam-version: '0.23.0-rc1'
|
||||
otp-version: '24'
|
||||
os: 'ubuntu-latest'
|
||||
disable_problem_matchers: true
|
||||
- gleam-version: '0.23.0-rc1'
|
||||
- gleam-version: '1.9.0'
|
||||
otp-version: false
|
||||
os: 'ubuntu-latest'
|
||||
disable_problem_matchers: true
|
||||
- gleam-version: '0.22.0' # Version with Gleam's old archive naming convention
|
||||
otp-version: '24'
|
||||
os: 'ubuntu-latest'
|
||||
disable_problem_matchers: true
|
||||
- elixir-version: 'v1.13'
|
||||
- elixir-version: 'v1.16'
|
||||
otp-version: '24'
|
||||
escript_packages: 'hex protobuf'
|
||||
escript_script: 'protoc-gen-elixir --version'
|
||||
os: 'ubuntu-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -172,12 +129,12 @@ jobs:
|
||||
if: ${{matrix.combo.rebar3-version}}
|
||||
- name: Format Gleam project (without installing Erlang/OTP)
|
||||
run: |
|
||||
cd test/projects/gleam_gleam
|
||||
cd test/projects/gleamgleam
|
||||
gleam format
|
||||
if: ${{ matrix.combo.gleam-version && !matrix.combo.otp-version }}
|
||||
- name: Run Gleam project tests (without `rebar3`)
|
||||
run: |
|
||||
cd test/projects/gleam_gleam
|
||||
cd test/projects/gleamgleam
|
||||
gleam test
|
||||
if: ${{ matrix.combo.gleam-version && matrix.combo.otp-version && !matrix.combo.rebar3-version }}
|
||||
- name: Run escript
|
||||
@@ -193,13 +150,13 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
- otp-version: '25'
|
||||
elixir-version: 'v1.14'
|
||||
gleam-version: '1.0.0'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'ubuntu-latest'
|
||||
- otp-version: 27
|
||||
elixir-version: 1.19
|
||||
gleam-version: 1.10
|
||||
rebar3-version: 3.24
|
||||
os: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -211,7 +168,7 @@ jobs:
|
||||
- run: env
|
||||
- name: Check environment variables
|
||||
run: |
|
||||
${INSTALL_DIR_FOR_ELIXIR}/bin/elixir -v
|
||||
${INSTALL_DIR_FOR_GLEAM}/bin/gleam --version
|
||||
${INSTALL_DIR_FOR_OTP}/bin/erl -version
|
||||
${INSTALL_DIR_FOR_REBAR3}/bin/rebar3 version
|
||||
"${INSTALL_DIR_FOR_ELIXIR}"/bin/elixir -v
|
||||
"${INSTALL_DIR_FOR_GLEAM}"/bin/gleam --version
|
||||
"${INSTALL_DIR_FOR_OTP}"/bin/erl -version
|
||||
"${INSTALL_DIR_FOR_REBAR3}"/bin/rebar3 version
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
---
|
||||
name: Update 3rd party licenses (automation)
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
workflow_dispatch:
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
update:
|
||||
name: Update 3rd party licenses
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- run:
|
||||
./.github/workflows/update_3rd_party_licenses.sh
|
||||
env:
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
---
|
||||
name: windows
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
@@ -13,6 +16,7 @@ on:
|
||||
jobs:
|
||||
integration_test:
|
||||
name: >
|
||||
OS ${{matrix.combo.os}},
|
||||
OTP ${{matrix.combo.otp-version}},
|
||||
Elixir ${{matrix.combo.elixir-version}},
|
||||
Gleam ${{matrix.combo.gleam-version}},
|
||||
@@ -22,6 +26,20 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
# Windows 2022 - per README
|
||||
- otp-version: '26' # 21 is "so old", at this moment, we can't find it in latest 100
|
||||
os: 'windows-2022'
|
||||
- otp-version: '29'
|
||||
os: 'windows-2022'
|
||||
# Windows 2025 - per README
|
||||
- otp-version: '26' # 21 is "so old", at this moment, we can't find it in latest 100
|
||||
os: 'windows-2025'
|
||||
- otp-version: '29'
|
||||
os: 'windows-2025'
|
||||
# Windows latest
|
||||
- otp-version: '<26'
|
||||
elixir-version: '<1.17'
|
||||
os: 'windows-latest'
|
||||
- otp-version: '27'
|
||||
elixir-version: 'v1.17.0'
|
||||
rebar3-version: '3.23'
|
||||
@@ -38,39 +56,24 @@ jobs:
|
||||
elixir-version: '1.14.5'
|
||||
os: 'windows-latest'
|
||||
version-type: 'strict'
|
||||
- otp-version: '25'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'windows-latest'
|
||||
- otp-version: '24.0.2'
|
||||
rebar3-version: '3.16'
|
||||
os: 'windows-2019'
|
||||
- otp-version: '26.1'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'windows-2019'
|
||||
- otp-version: '23.0'
|
||||
rebar3-version: '3.15'
|
||||
os: 'windows-2019'
|
||||
- elixir-version: 'v1.10'
|
||||
otp-version: '23'
|
||||
rebar3-version: '3.14'
|
||||
os: 'windows-latest'
|
||||
- elixir-version: 'v1.13'
|
||||
- elixir-version: 'v1.16'
|
||||
otp-version: '24'
|
||||
rebar3-version: '3.15'
|
||||
os: 'windows-latest'
|
||||
- gleam-version: '0.19.0-rc3'
|
||||
otp-version: '24'
|
||||
- gleam-version: '1.9.0'
|
||||
otp-version: '27'
|
||||
os: 'windows-latest'
|
||||
- gleam-version: '0.23.0-rc1'
|
||||
otp-version: '24'
|
||||
os: 'windows-latest'
|
||||
- elixir-version: 'v1.13'
|
||||
- elixir-version: 'v1.16'
|
||||
otp-version: '24'
|
||||
escript_packages: 'hex protobuf'
|
||||
escript_script: 'protoc-gen-elixir --version'
|
||||
os: 'windows-latest'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -131,13 +134,13 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
combo:
|
||||
- otp-version: '25'
|
||||
elixir-version: 'v1.14'
|
||||
gleam-version: '1.0.0'
|
||||
rebar3-version: 'nightly'
|
||||
os: 'windows-latest'
|
||||
- otp-version: 27
|
||||
elixir-version: 1.19
|
||||
gleam-version: 1.10
|
||||
rebar3-version: 3.24
|
||||
os: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7.0.0
|
||||
- name: Use erlef/setup-beam
|
||||
id: setup-beam
|
||||
uses: ./
|
||||
@@ -154,3 +157,4 @@ jobs:
|
||||
& "$Env:INSTALL_DIR_FOR_OTP/bin/erl.exe" "+V"
|
||||
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.cmd" "version"
|
||||
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.ps1" "version"
|
||||
shell: pwsh
|
||||
|
||||
+4
-2
@@ -1,2 +1,4 @@
|
||||
node_modules/**
|
||||
test/.tool-versions
|
||||
/node_modules
|
||||
/test/.tool-versions
|
||||
/test/mise.toml
|
||||
/dist/package.json
|
||||
|
||||
+1147
-7017
File diff suppressed because it is too large
Load Diff
@@ -1,77 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
- Using welcoming and inclusive language
|
||||
- Being respectful of differing viewpoints and experiences
|
||||
- Gracefully accepting constructive criticism
|
||||
- Focusing on what is best for the community
|
||||
- Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
- The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at
|
||||
[support@github.com](mailto:support@github.com). All complaints will be
|
||||
reviewed and investigated and will result in a response that is deemed
|
||||
necessary and appropriate to the circumstances. The project team is obligated
|
||||
to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
<https://www.contributor-covenant.org/faq>
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
[fork]: https://github.com/erlef/setup-beam/fork
|
||||
[pr]: https://github.com/erlef/setup-beam/compare
|
||||
[code-of-conduct]: https://github.com/erlef/setup-beam/blob/main/CODE_OF_CONDUCT.md
|
||||
[code-of-conduct]: https://github.com/erlef/.github/blob/main/CODE_OF_CONDUCT.md
|
||||
|
||||
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for
|
||||
keeping it great.
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
# Elixir Problem Matchers
|
||||
|
||||
Elixir Problem Matchers in [elixir-matchers.json](matchers/elixir-matchers.json)
|
||||
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
||||
are adapted from [vscode-elixir/package.json](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118),
|
||||
available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
|
||||
|
||||
MIT License
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# setup-beam [![Action][action-img]][action] [![Ubuntu][ubuntu-img]][ubuntu] [![Windows][windows-img]][windows]
|
||||
# setup-beam [![Action][action-img]][action] [![Ubuntu][ubuntu-img]][ubuntu] [![Windows][windows-img]][windows] [![macOS][macos-img]][macos]
|
||||
|
||||
[action]: https://github.com/erlef/setup-beam/actions/workflows/action.yml
|
||||
[action-img]: https://github.com/erlef/setup-beam/actions/workflows/action.yml/badge.svg
|
||||
@@ -6,6 +6,8 @@
|
||||
[ubuntu-img]: https://github.com/erlef/setup-beam/actions/workflows/ubuntu.yml/badge.svg
|
||||
[windows]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml
|
||||
[windows-img]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml/badge.svg
|
||||
[macos]: https://github.com/erlef/setup-beam/actions/workflows/macos.yml
|
||||
[macos-img]: https://github.com/erlef/setup-beam/actions/workflows/macos.yml/badge.svg
|
||||
|
||||
This action sets up an Erlang/OTP environment for use in a GitHub Actions
|
||||
workflow by:
|
||||
@@ -14,15 +16,14 @@ workflow by:
|
||||
- optionally, installing [Elixir](https://elixir-lang.org/)
|
||||
- optionally, installing [Gleam](https://gleam.run/)
|
||||
- optionally, installing [`rebar3`](https://www.rebar3.org/)
|
||||
- optionally, installing [`hex`](https://hex.pm/)
|
||||
- optionally, installing [`local.hex`](https://hex.pm/)
|
||||
- optionally, installing [`local.rebar`](https://www.rebar3.org/)
|
||||
- optionally, opting for strict or loose version matching
|
||||
- optionally, having
|
||||
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show
|
||||
warnings and errors on pull requests
|
||||
- optionally, using a version file (as explained in "Version file", below), to identify versions
|
||||
|
||||
**Note**: currently, this action only supports Actions' `ubuntu-` and `windows-` runtimes.
|
||||
|
||||
## Usage
|
||||
|
||||
See [action.yml](action.yml) for the action's specification.
|
||||
@@ -52,37 +53,50 @@ end up being parsed as `23`, which is not equivalent.
|
||||
|
||||
#### Pre-release versions
|
||||
|
||||
For pre-release versions, such as `v1.11.0-rc.0`, use the full version
|
||||
specifier (`v1.11.0-rc.0`) and set option `version-type` to `strict`. Pre-release versions are
|
||||
opt-in, so `1.11.x` will not match a pre-release.
|
||||
To use a pre-release version such as `v1.11.0-rc.0`, specify the exact version
|
||||
(`v1.11.0-rc.0`) and set `version-type` to `strict`.
|
||||
Note that pre-release versions are opt-in by default.
|
||||
Patterns like `1.11.x` do not include pre-release versions unless `latest` is specified.
|
||||
|
||||
#### "Latest" versions
|
||||
|
||||
Set a tool's version to `latest` to retrieve the latest version of a given tool.
|
||||
The latest version is (locally) calculated by the action based on the (retrieved) versions
|
||||
it knows (**note**: it is not the same as [GitHub considers it](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository)
|
||||
and some repositories might propose).
|
||||
To retrieve the most recent available version of a tool, set the version to `latest`.
|
||||
This may include pre-release versions such as release candidates.
|
||||
|
||||
If in doubt do a test run and compare the obtained release with the one you were expecting to
|
||||
be the latest.
|
||||
If you want to target only the latest stable release and exclude pre-releases, use a
|
||||
version range like `> 0` instead.
|
||||
|
||||
Note that the `latest` version is determined locally by the action based on the versions it
|
||||
has retrieved. This may differ from how [GitHub defines "latest"](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository),
|
||||
and some repositories may present different interpretations.
|
||||
|
||||
If you're unsure, perform a test run and compare the resolved version against the version you
|
||||
expect to be considered the latest.
|
||||
|
||||
### Compatibility between Operating System and Erlang/OTP
|
||||
|
||||
This list presents the known working version combos between the target operating system
|
||||
and Erlang/OTP.
|
||||
|
||||
| Operating system | Erlang/OTP | Status
|
||||
|- |- |-
|
||||
| `ubuntu-18.04` | 17.0 - 25.3 | ✅
|
||||
| `ubuntu-20.04` | 21.0 - 27 | ✅
|
||||
| `ubuntu-22.04` | 24.2 - 27 | ✅
|
||||
| `ubuntu-24.04` | 24.3 - 27 | ✅
|
||||
| `windows-2019` | 21* - 25 | ✅
|
||||
| `windows-2022` | 21* - 27 | ✅
|
||||
| Operating system | Erlang/OTP | OTP Architecture | Status
|
||||
|- |- | - |-
|
||||
| `ubuntu-22.04` | 24.2 - 29 | x86_64, arm64 | ✅
|
||||
| `ubuntu-24.04` | 24.3 - 29 | x86_64, arm64 | ✅
|
||||
| `ubuntu-26.04` | 26 - 29 | x86_64, arm64 | ✅
|
||||
| `windows-2022` | 21\* - 29 | x86_64, x86 | ✅
|
||||
| `windows-2025` | 21\* - 29 | x86_64, x86 | ✅
|
||||
| `macOS-14` | 25 - 29 | x86_64, arm64 | ✅
|
||||
| `macOS-15` | 25 - 29 | x86_64, arm64 | ✅
|
||||
| `macOS-26` | 25 - 29 | x86_64, arm64 | ✅
|
||||
|
||||
**Note** \*: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3,
|
||||
22.0, etc.
|
||||
|
||||
### Compatibility between Erlang/OTP and rebar3
|
||||
|
||||
Check [version compatibility](https://github.com/erlang/rebar3?tab=readme-ov-file#compatibility-between-rebar3-and-erlangotp)
|
||||
in `erlang/rebar3`.
|
||||
|
||||
### Self-hosted runners
|
||||
|
||||
Self-hosted runners need to set env. variable `ImageOS` to one of the following, since the action
|
||||
@@ -90,12 +104,18 @@ uses that to download assets:
|
||||
|
||||
| ImageOS | Operating system
|
||||
|- |-
|
||||
| `ubuntu18` | `ubuntu-18.04`
|
||||
| `ubuntu20` | `ubuntu-20.04`
|
||||
| `ubuntu22` | `ubuntu-22.04`
|
||||
| `ubuntu22-arm64` | `ubuntu-22.04`
|
||||
| `ubuntu24` | `ubuntu-24.04`
|
||||
| `win19` | `windows-2019`
|
||||
| `ubuntu24-arm64` | `ubuntu-24.04`
|
||||
| `ubuntu26` | `ubuntu-26.04`
|
||||
| `ubuntu26-arm64` | `ubuntu-26.04`
|
||||
| `win22` | `windows-2022`
|
||||
| `win25` | `windows-2025`
|
||||
| `win25-vs2026` | `windows-2025`
|
||||
| `macos14` | `macOS-14`
|
||||
| `macos15` | `macOS-15`
|
||||
| `macos26` | `macOS-26`
|
||||
|
||||
as per the following example:
|
||||
|
||||
@@ -106,7 +126,7 @@ jobs:
|
||||
test:
|
||||
runs-on: self-hosted
|
||||
env:
|
||||
ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
|
||||
ImageOS: ubuntu24 # equivalent to runs-on ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
@@ -121,7 +141,7 @@ The action provides the following outputs:
|
||||
|- |-
|
||||
| `otp-version` | The Erlang version, e.g. `OTP-26.0`
|
||||
| `elixir-version` | The Elixir version, e.g. `v1.14-otp-26`
|
||||
| `gleam-version` | The Gleam version, e.g. `v0.23.0`
|
||||
| `gleam-version` | The Gleam version, e.g. `v1.5.1`
|
||||
| `rebar3-version` | The `rebar3` version, e.g. `3.18.0`
|
||||
| `setup-beam-version` | The commit unique id of the executed action version, e.g. `a34c98f`
|
||||
|
||||
@@ -130,23 +150,22 @@ e.g. `${{steps.setup-beam.outputs.erlang-version}}`
|
||||
|
||||
### Version file
|
||||
|
||||
A version file is specified via input `version-file` (e.g.`.tool-versions`). This
|
||||
allows not having to use YML input for versions, though the action does check (and
|
||||
A version file is specified via input `version-file` (e.g. `.tool-versions` or `mise.toml`).
|
||||
The file type is inferred from the filename: files ending in `.toml` are parsed as
|
||||
[mise](https://mise.jdx.dev/configuration.html#tools-dev-tools) configuration, and all others
|
||||
are parsed as [`.tool-versions`](https://asdf-vm.com/manage/configuration.html) (asdf format).
|
||||
This allows not having to use YML input for versions, though the action does check (and
|
||||
will exit with error) if both inputs are set.
|
||||
|
||||
**Note**: if you're using a version file, option `version-type` is checked to be `strict`,
|
||||
and will make the action exit with error otherwise.
|
||||
|
||||
The following version file formats are supported:
|
||||
|
||||
- `.tool-versions`, as specified by [asdf: Configuration](https://asdf-vm.com/manage/configuration.html)
|
||||
|
||||
Supported version elements are the same as the ones defined for the YML portion of the action,
|
||||
with the following correspondence.
|
||||
|
||||
#### `.tool-versions` format
|
||||
#### `.tool-versions` / `mise.toml` format
|
||||
|
||||
| YML | `.tool-versions`
|
||||
| YML | Version file key
|
||||
|- |-
|
||||
| `otp-version` | `erlang`
|
||||
| `elixir-version` | `elixir`
|
||||
@@ -194,6 +213,24 @@ jobs:
|
||||
https://cdn.jsdelivr.net/hex
|
||||
```
|
||||
|
||||
### OTP Architecture
|
||||
|
||||
On Windows you can specify the OTP architecture to install.
|
||||
|
||||
```yaml
|
||||
# create this in .github/workflows/ci.yml
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '26'
|
||||
otp-architecture: '32'
|
||||
```
|
||||
|
||||
### Environment variables
|
||||
|
||||
Base installation folders (useful for e.g. fetching headers for NIFs) are available in the following
|
||||
@@ -210,7 +247,7 @@ are found (i.e. `erl`, `erl.exe`, `rebar3`, `rebar3.exe`, ...).
|
||||
### 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).
|
||||
[vscode-elixir/package.json](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118).
|
||||
See [MATCHER_NOTICE](MATCHER_NOTICE.md) for license details.
|
||||
|
||||
## Examples
|
||||
@@ -223,12 +260,12 @@ on: push
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['21.1', '22.2', '23.3']
|
||||
elixir: ['1.8.2', '1.9.4']
|
||||
otp: ['25.3.2', '26.2.5', '27.3.3']
|
||||
elixir: ['1.17.3', '1.18.3']
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
@@ -247,12 +284,12 @@ on: push
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['21.1', '22.2', '23.3']
|
||||
rebar3: ['3.14.1', '3.14.3']
|
||||
otp: ['25.3.2', '26.2.5', '27.3.3']
|
||||
rebar3: ['3.23.0', '3.24.0']
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
@@ -262,6 +299,34 @@ jobs:
|
||||
- run: rebar3 ct
|
||||
```
|
||||
|
||||
### Compatibility
|
||||
|
||||
To execute matrix testing with specific dependency versions, configure the environment matrix to
|
||||
use pinned, compatible releases:
|
||||
|
||||
```yaml
|
||||
test:
|
||||
runs-on: ${{matrix.compat.os}}
|
||||
name: Erlang/OTP ${{matrix.compat.otp}} / rebar3 ${{matrix.compat.rebar3}}
|
||||
strategy:
|
||||
matrix:
|
||||
compat:
|
||||
- otp: "26.2.5.5"
|
||||
rebar3: "3.22.1"
|
||||
os: ubuntu-24.04
|
||||
- otp: "27.1.2"
|
||||
rebar3: "3.22.1"
|
||||
os: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{matrix.compat.otp}}
|
||||
rebar3-version: ${{matrix.compat.rebar3}}
|
||||
version-type: strict
|
||||
- run: rebar3 eunit
|
||||
```
|
||||
|
||||
### Erlang/OTP + `rebar3`, on Windows
|
||||
|
||||
```yaml
|
||||
@@ -270,7 +335,7 @@ on: push
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: windows-2022
|
||||
runs-on: windows-2025
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
@@ -280,6 +345,24 @@ jobs:
|
||||
- run: rebar3 ct
|
||||
```
|
||||
|
||||
### Erlang/OTP + `rebar3`, on macOS
|
||||
|
||||
```yaml
|
||||
# create this in .github/workflows/ci.yml
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '28'
|
||||
rebar3-version: '3.25'
|
||||
- run: rebar3 ct
|
||||
```
|
||||
|
||||
### Gleam on Ubuntu
|
||||
|
||||
```yaml
|
||||
@@ -293,8 +376,8 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: '24'
|
||||
gleam-version: '0.23.0-rc1'
|
||||
otp-version: '27'
|
||||
gleam-version: '1.9.0'
|
||||
- run: gleam test
|
||||
```
|
||||
|
||||
@@ -312,7 +395,7 @@ jobs:
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: false
|
||||
gleam-version: '0.23.0-rc1'
|
||||
gleam-version: '1.9.0'
|
||||
- run: gleam check
|
||||
```
|
||||
|
||||
@@ -342,7 +425,7 @@ Check out [this doc](CONTRIBUTING.md).
|
||||
|
||||
### Code of Conduct
|
||||
|
||||
This project's code of conduct is made explicit in [CODE_OF_CONDUCT.md](https://github.com/erlef/setup-beam/blob/main/CODE_OF_CONDUCT.md).
|
||||
This project's code of conduct is made explicit in [CODE_OF_CONDUCT.md](https://github.com/erlef/.github/blob/main/CODE_OF_CONDUCT.md).
|
||||
|
||||
### Security
|
||||
|
||||
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
# Security policy
|
||||
|
||||
Thanks for helping make `setup-beam` safer for everyone.
|
||||
|
||||
Find below updated information on our security policy.
|
||||
|
||||
## Security
|
||||
|
||||
We take the security of this software seriously.
|
||||
|
||||
We don't implement a bug bounty program or bounty rewards, but will work with
|
||||
you to ensure that your findings get the appropriate handling.
|
||||
|
||||
## Reporting Security Issues
|
||||
|
||||
If you believe you have found a security vulnerability in this repository,
|
||||
please report it to <bryan.paxton@erlef.org>.
|
||||
|
||||
Please do not report security vulnerabilities through public channels, like
|
||||
GitHub issues, discussions, or pull requests.
|
||||
|
||||
Please include as much of the information listed below as you can to help us
|
||||
better understand and resolve the issue:
|
||||
|
||||
- the type of issue (e.g., buffer overflow, SQL injection, or cross-site
|
||||
scripting)
|
||||
- full paths of source file(s) related to the manifestation of the issue
|
||||
- the location of the affected source code (tag/branch/commit or direct URL)
|
||||
- any special configuration required to reproduce the issue
|
||||
- step-by-step instructions to reproduce the issue
|
||||
- proof-of-concept or exploit code (if possible)
|
||||
- impact of the issue, including how an attacker might exploit the issue
|
||||
|
||||
This information will help us triage your report more quickly.
|
||||
+40
-2
@@ -1,11 +1,15 @@
|
||||
---
|
||||
name: setup-beam
|
||||
|
||||
description: >
|
||||
Set up a BEAM-based CI environment, supporting languages and tools such as Erlang/OTP, Elixir, Gleam, `rebar3`, and `hex`.
|
||||
|
||||
author: Erlang Ecosystem Foundation
|
||||
|
||||
branding:
|
||||
color: blue
|
||||
icon: code
|
||||
|
||||
inputs:
|
||||
github-token:
|
||||
description: >
|
||||
@@ -16,49 +20,83 @@ inputs:
|
||||
have to manually pass an automatically generated token via their environment settings within a workflow.
|
||||
[Learn more about automatically generated tokens](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)
|
||||
default: ${{ github.token }}
|
||||
required: false
|
||||
|
||||
otp-version:
|
||||
description: Version range or exact version of Erlang/OTP to use,
|
||||
or false when installing only Gleam without OTP
|
||||
required: false
|
||||
|
||||
otp-architecture:
|
||||
description: 32 or 64, to specify the architecture of the OTP to install. Only applies to Windows.
|
||||
default: 64
|
||||
required: false
|
||||
|
||||
elixir-version:
|
||||
description: Version range or exact version of Elixir to use
|
||||
required: false
|
||||
|
||||
gleam-version:
|
||||
description: Version range or exact version of Gleam to use
|
||||
required: false
|
||||
|
||||
install-hex:
|
||||
description: Whether to install Hex (with mix local.hex
|
||||
when installing Elixir)
|
||||
default: true
|
||||
required: false
|
||||
|
||||
install-rebar:
|
||||
description: Whether to install Rebar (with mix local.rebar
|
||||
when installing Elixir)
|
||||
default: true
|
||||
required: false
|
||||
|
||||
rebar3-version:
|
||||
description: Version range or exact version of rebar3 to use (or nightly)
|
||||
required: false
|
||||
|
||||
version-type:
|
||||
description: strict means the versions are take as-are; loose means we try
|
||||
to guess versions based on semver rules
|
||||
default: loose
|
||||
required: false
|
||||
|
||||
disable_problem_matchers:
|
||||
description: whether to have the problem matchers present in the results
|
||||
(or not)
|
||||
default: false
|
||||
required: false
|
||||
|
||||
version-file:
|
||||
description: a versions file (e.g. as used by `asdf`), which defines inputs
|
||||
description: >-
|
||||
a versions file (e.g. `.tool-versions` as used by `asdf`, or `mise.toml`
|
||||
as used by `mise`), which defines inputs
|
||||
default: ''
|
||||
required: false
|
||||
|
||||
hexpm-mirrors:
|
||||
description: mirror(s) for hex.pm, one per line
|
||||
default: |
|
||||
https://builds.hex.pm
|
||||
required: false
|
||||
|
||||
outputs:
|
||||
elixir-version:
|
||||
description: Exact version of Elixir that was installed
|
||||
|
||||
otp-version:
|
||||
description: Exact version of Erlang/OTP that was installed
|
||||
|
||||
gleam-version:
|
||||
description: Exact version of Gleam that was installed
|
||||
|
||||
rebar3-version:
|
||||
description: Exact version of rebar3 that was installed
|
||||
|
||||
setup-beam-version:
|
||||
description: The commit unique id of the execution action version
|
||||
|
||||
runs:
|
||||
using: node20
|
||||
using: node24
|
||||
main: dist/index.js
|
||||
|
||||
Vendored
+66
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "erlc-warning",
|
||||
"severity": "warning",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+):(\\d+):(\\d+): [wW]arning: (.+)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "erlc-error",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+):(\\d+):(\\d+): (?![wW]arning)(.+)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "ct-failure",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+) failed on line (\\d+)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
},
|
||||
{
|
||||
"regexp": "^Reason: (.+)$",
|
||||
"message": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "eunit-failure",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\\S+: .+\\.\\.\\.\\*failed\\*$"
|
||||
},
|
||||
{
|
||||
"regexp": "^in function .+ \\((.+), line (\\d+)\\)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
},
|
||||
{
|
||||
"regexp": "^in call from .+$"
|
||||
},
|
||||
{
|
||||
"regexp": "^\\*\\*error:(.+)$",
|
||||
"message": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+35743
-6931
File diff suppressed because one or more lines are too long
@@ -0,0 +1,27 @@
|
||||
import js from '@eslint/js'
|
||||
import globals from 'globals'
|
||||
import yml from 'eslint-plugin-yml'
|
||||
import * as yamlParser from 'yaml-eslint-parser'
|
||||
|
||||
export default [
|
||||
js.configs.recommended,
|
||||
{
|
||||
languageOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
globals: globals.node,
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['**/*.yml'],
|
||||
languageOptions: {
|
||||
parser: yamlParser,
|
||||
},
|
||||
plugins: {
|
||||
yml,
|
||||
},
|
||||
rules: {
|
||||
...yml.configs.recommended.rules,
|
||||
},
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "erlc-warning",
|
||||
"severity": "warning",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+):(\\d+):(\\d+): [wW]arning: (.+)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "erlc-error",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+):(\\d+):(\\d+): (?![wW]arning)(.+)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "ct-failure",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(\\S+) failed on line (\\d+)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
},
|
||||
{
|
||||
"regexp": "^Reason: (.+)$",
|
||||
"message": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "eunit-failure",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\\S+: .+\\.\\.\\.\\*failed\\*$"
|
||||
},
|
||||
{
|
||||
"regexp": "^in function .+ \\((.+), line (\\d+)\\)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
},
|
||||
{
|
||||
"regexp": "^in call from .+$"
|
||||
},
|
||||
{
|
||||
"regexp": "^\\*\\*error:(.+)$",
|
||||
"message": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
+2241
-1362
File diff suppressed because it is too large
Load Diff
+22
-18
@@ -1,37 +1,41 @@
|
||||
{
|
||||
"name": "setup-beam",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "ncc build src/setup-beam.js --no-cache",
|
||||
"format": "prettier src/**/*.js --write && prettier test/**/*.js --write",
|
||||
"jslint": "eslint src/**/*.js && eslint test/**/*.js",
|
||||
"format": "prettier src/**/*.js test/**/*.js *.mjs --write",
|
||||
"eslint": "eslint src/**/*.js test/**/*.js *.mjs",
|
||||
"licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES",
|
||||
"markdownlint": "markdownlint *.md ./github/**/*.md",
|
||||
"shellcheck": "shellcheck .github/workflows/*.sh",
|
||||
"test": "node test/setup-beam.test.js",
|
||||
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml",
|
||||
"test": "node --test --test-reporter=spec",
|
||||
"yamllint": "eslint .github/workflows/**.yml .github/*.yml .*.yml *.yml",
|
||||
"clean-dist": "rm -rf ./dist",
|
||||
"lint": "npm run markdownlint && npm run shellcheck && npm run yamllint && npm run jslint",
|
||||
"lint": "npm run markdownlint && npm run shellcheck && npm run yamllint && npm run eslint",
|
||||
"build-dist": "npm run clean-dist && npm install && npm run build && npm run format && npm run lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": "1.10.0",
|
||||
"@actions/exec": "1.1.1",
|
||||
"@actions/http-client": "2.1.0",
|
||||
"@actions/tool-cache": "2.0.1",
|
||||
"semver": "7.6.2"
|
||||
"@actions/core": "3.0.0",
|
||||
"@actions/exec": "3.0.0",
|
||||
"@actions/tool-cache": "4.0.0",
|
||||
"csv-parse": "7.0.1",
|
||||
"semver": "7.7.4",
|
||||
"smol-toml": "1.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vercel/ncc": "0.36.1",
|
||||
"eslint": "8.43.0",
|
||||
"markdownlint-cli": "0.35.0",
|
||||
"prettier": "2.8.8",
|
||||
"shellcheck": "2.2.0",
|
||||
"yaml-lint": "1.7.0",
|
||||
"yarn": "1.22.19"
|
||||
"@eslint/js": "10.0.1",
|
||||
"@vercel/ncc": "0.44.1",
|
||||
"eslint": "10.6.0",
|
||||
"eslint-plugin-yml": "3.5.0",
|
||||
"globals": "17.7.0",
|
||||
"markdownlint-cli": "0.49.0",
|
||||
"prettier": "3.9.5",
|
||||
"shellcheck": "4.1.0",
|
||||
"yarn": "1.22.22"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
"node": ">=24"
|
||||
}
|
||||
}
|
||||
|
||||
+411
-162
@@ -1,18 +1,27 @@
|
||||
const core = require('@actions/core')
|
||||
const { exec } = require('@actions/exec')
|
||||
const tc = require('@actions/tool-cache')
|
||||
const http = require('@actions/http-client')
|
||||
const path = require('path')
|
||||
const semver = require('semver')
|
||||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
import path from 'node:path'
|
||||
import fs from 'node:fs'
|
||||
import os from 'node:os'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import * as core from '@actions/core'
|
||||
import { exec } from '@actions/exec'
|
||||
import * as tc from '@actions/tool-cache'
|
||||
import * as semver from 'semver'
|
||||
import * as csv from 'csv-parse/sync'
|
||||
import toml from 'smol-toml'
|
||||
|
||||
main().catch((err) => {
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
const MAX_HTTP_RETRIES = 3
|
||||
const APPS = ['erlang', 'elixir', 'gleam', 'rebar']
|
||||
|
||||
if (process.env.NODE_ENV !== 'test') {
|
||||
main().catch((err) => {
|
||||
core.setFailed(err.message)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function main() {
|
||||
checkPlatform()
|
||||
checkOtpArchitecture()
|
||||
|
||||
const versionFilePath = getInput('version-file', false)
|
||||
let versions
|
||||
@@ -25,15 +34,14 @@ async function main() {
|
||||
versions = parseVersionFile(versionFilePath)
|
||||
}
|
||||
|
||||
const osVersion = getRunnerOSVersion()
|
||||
const otpSpec = getInput('otp-version', true, 'erlang', versions)
|
||||
const elixirSpec = getInput('elixir-version', false, 'elixir', versions)
|
||||
const gleamSpec = getInput('gleam-version', false, 'gleam', versions)
|
||||
const rebar3Spec = getInput('rebar3-version', false, 'rebar', versions)
|
||||
|
||||
if (otpSpec !== 'false') {
|
||||
await installOTP(otpSpec, osVersion)
|
||||
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpSpec)
|
||||
await installOTP(otpSpec)
|
||||
const elixirInstalled = await maybeInstallElixir(elixirSpec)
|
||||
if (elixirInstalled === true) {
|
||||
const shouldMixRebar = getInput('install-rebar', false)
|
||||
await mix(shouldMixRebar, 'rebar')
|
||||
@@ -49,11 +57,12 @@ async function main() {
|
||||
await maybeInstallRebar3(rebar3Spec)
|
||||
|
||||
// undefined is replaced by a function, post- main branch merge
|
||||
const setupBeamVersion = 'a54aa91'
|
||||
const setupBeamVersion = 'f4f179b'
|
||||
core.setOutput('setup-beam-version', setupBeamVersion)
|
||||
}
|
||||
|
||||
async function installOTP(otpSpec, osVersion) {
|
||||
async function installOTP(otpSpec) {
|
||||
const osVersion = getRunnerOSVersion()
|
||||
const otpVersion = await getOTPVersion(otpSpec, osVersion)
|
||||
core.startGroup(
|
||||
`Installing Erlang/OTP ${otpVersion} - built on ${getRunnerOSArchitecture()}/${osVersion}`,
|
||||
@@ -70,15 +79,16 @@ async function installOTP(otpSpec, osVersion) {
|
||||
},
|
||||
})
|
||||
core.setOutput('otp-version', otpVersion)
|
||||
maybeEnableProblemMatchers('erlang')
|
||||
core.endGroup()
|
||||
|
||||
return otpVersion
|
||||
}
|
||||
|
||||
async function maybeInstallElixir(elixirSpec, otpSpec) {
|
||||
async function maybeInstallElixir(elixirSpec) {
|
||||
let installed = false
|
||||
if (elixirSpec) {
|
||||
const elixirVersion = await getElixirVersion(elixirSpec, otpSpec)
|
||||
const elixirVersion = await getElixirVersion(elixirSpec)
|
||||
core.startGroup(`Installing Elixir ${elixirVersion}`)
|
||||
await doWithMirrors({
|
||||
hexMirrors: hexMirrorsInput(),
|
||||
@@ -91,7 +101,7 @@ async function maybeInstallElixir(elixirSpec, otpSpec) {
|
||||
},
|
||||
})
|
||||
core.setOutput('elixir-version', elixirVersion)
|
||||
maybeEnableElixirProblemMatchers()
|
||||
maybeEnableProblemMatchers('elixir')
|
||||
core.endGroup()
|
||||
|
||||
installed = true
|
||||
@@ -100,16 +110,18 @@ async function maybeInstallElixir(elixirSpec, otpSpec) {
|
||||
return installed
|
||||
}
|
||||
|
||||
function maybeEnableElixirProblemMatchers() {
|
||||
const disableProblemMatchers = getInput('disable_problem_matchers', false)
|
||||
if (disableProblemMatchers === 'false') {
|
||||
const elixirMatchers = path.join(
|
||||
__dirname,
|
||||
'..',
|
||||
'matchers',
|
||||
'elixir-matchers.json',
|
||||
)
|
||||
core.info(`##[add-matcher]${elixirMatchers}`)
|
||||
function problemMatchersEnabled() {
|
||||
return getInput('disable_problem_matchers', false) === 'false'
|
||||
}
|
||||
|
||||
// path.join with static strings helps ncc resolve and bundle the JSON files
|
||||
function maybeEnableProblemMatchers(language) {
|
||||
if (problemMatchersEnabled()) {
|
||||
const matcherFiles = {
|
||||
erlang: path.join(`${__dirname}/../matchers/erlang-matchers.json`),
|
||||
elixir: path.join(`${__dirname}/../matchers/elixir-matchers.json`),
|
||||
}
|
||||
core.info(`##[add-matcher]${matcherFiles[language]}`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,49 +177,109 @@ async function maybeInstallRebar3(rebar3Spec) {
|
||||
return installed
|
||||
}
|
||||
|
||||
function maybeRemoveOTPPrefix(otpSpec) {
|
||||
return otpSpec.replace(/^OTP-/, '')
|
||||
}
|
||||
|
||||
async function getOTPVersion(otpSpec0, osVersion) {
|
||||
const otpVersions = await getOTPVersions(osVersion)
|
||||
let spec = otpSpec0.replace(/^OTP-/, '')
|
||||
const [otpVersions, originListing, hexMirrors] =
|
||||
await getOTPVersions(osVersion)
|
||||
let spec = maybeRemoveOTPPrefix(otpSpec0)
|
||||
const versions = otpVersions
|
||||
const otpVersion = getVersionFromSpec(spec, versions)
|
||||
|
||||
if (otpVersion === null) {
|
||||
throw new Error(
|
||||
`Requested Erlang/OTP version (${otpSpec0}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
requestedVersionFor('Erlang/OTP', otpSpec0, originListing, hexMirrors),
|
||||
)
|
||||
}
|
||||
|
||||
return otpVersion // from the reference, for download
|
||||
}
|
||||
|
||||
async function getElixirVersion(exSpec0, otpVersion0) {
|
||||
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2]
|
||||
const otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]
|
||||
function requestedVersionFor(tool, version, originListing, mirrors) {
|
||||
const isVersionTypeStrict = isStrictVersion()
|
||||
|
||||
const [otpVersionsForElixirMap, elixirVersions] = await getElixirVersions()
|
||||
const spec = exSpec0.replace(/-otp-.*$/, '')
|
||||
let versionType = 'loose'
|
||||
if (isVersionTypeStrict) {
|
||||
versionType = 'strict'
|
||||
}
|
||||
|
||||
let ret =
|
||||
`Requested ${versionType} ${tool} version (${version}) not found in version list, ` +
|
||||
`at ${originListing}${mirrors ? `, with mirrors ${mirrors}` : ''}.`
|
||||
if (!isVersionTypeStrict) {
|
||||
ret = `${ret} Should you be using option 'version-type': 'strict'?`
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
const knownBranches = ['main', 'master', 'maint']
|
||||
const nonSpecificVersions = ['nightly', 'latest']
|
||||
|
||||
async function getElixirVersion(exSpec0) {
|
||||
const otpSuffix = /-otp-(\d+)/
|
||||
const userSuppliedOtp = exSpec0.match(otpSuffix)?.[1] ?? null
|
||||
let otpVersionMajor = ''
|
||||
|
||||
if (userSuppliedOtp && isVersion(userSuppliedOtp)) {
|
||||
otpVersionMajor = userSuppliedOtp
|
||||
} else {
|
||||
let cmd = 'erl'
|
||||
if (process.platform === 'win32') {
|
||||
cmd = 'erl.exe'
|
||||
}
|
||||
const args = [
|
||||
'-noshell',
|
||||
'-eval',
|
||||
'io:format(erlang:system_info(otp_release)), halt().',
|
||||
]
|
||||
await exec(cmd, args, {
|
||||
listeners: {
|
||||
stdout: (data) => {
|
||||
otpVersionMajor = data.toString()
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
const [otpVersionsForElixirMap, elixirVersions, originListing, hexMirrors] =
|
||||
await getElixirVersions()
|
||||
const spec = exSpec0.replace(otpSuffix, '')
|
||||
const versions = elixirVersions
|
||||
const elixirVersionFromSpec = getVersionFromSpec(spec, versions)
|
||||
|
||||
if (elixirVersionFromSpec === null) {
|
||||
throw new Error(
|
||||
`Requested Elixir version (${exSpec0}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
requestedVersionFor('Elixir', exSpec0, originListing, hexMirrors),
|
||||
)
|
||||
}
|
||||
|
||||
let foundCombo = false
|
||||
let otpVersionMajorIter = parseInt(otpVersionMajor)
|
||||
let otpVersionsMajor = []
|
||||
while (otpVersionMajorIter > otpVersionMajor - 3) {
|
||||
otpVersionMajorIter += ''
|
||||
otpVersionsMajor.push(otpVersionMajorIter)
|
||||
const elixirVersionComp = otpVersionsForElixirMap[elixirVersionFromSpec]
|
||||
if (
|
||||
(elixirVersionComp && elixirVersionComp.includes(otpVersionMajor)) ||
|
||||
!isVersion(otpVersionMajor)
|
||||
(elixirVersionComp && elixirVersionComp.includes(otpVersionMajorIter)) ||
|
||||
!isVersion(otpVersionMajorIter)
|
||||
) {
|
||||
core.info(
|
||||
`Using Elixir ${elixirVersionFromSpec} (built for Erlang/OTP ${otpVersionMajor})`,
|
||||
`Using Elixir ${elixirVersionFromSpec} (built for Erlang/OTP ${otpVersionMajorIter})`,
|
||||
)
|
||||
} else {
|
||||
foundCombo = true
|
||||
break
|
||||
}
|
||||
otpVersionMajorIter = parseInt(otpVersionMajorIter) - 1
|
||||
}
|
||||
|
||||
if (!foundCombo) {
|
||||
throw new Error(
|
||||
`Requested Elixir / Erlang/OTP version (${exSpec0} / ${otpVersion0}) not ` +
|
||||
'found in version list (did you check Compatibility between Elixir and Erlang/OTP?).' +
|
||||
`Requested Elixir / Erlang/OTP version (${exSpec0} / tried ${otpVersionsMajor}) not ` +
|
||||
'found in version list (did you check Compatibility between Elixir and Erlang/OTP?). ' +
|
||||
'Elixir and Erlang/OTP compatibility can be found at: ' +
|
||||
'https://hexdocs.pm/elixir/compatibility-and-deprecations.html',
|
||||
)
|
||||
@@ -215,63 +287,82 @@ async function getElixirVersion(exSpec0, otpVersion0) {
|
||||
|
||||
let elixirVersionForDownload = elixirVersionFromSpec
|
||||
|
||||
if (isVersion(otpVersionMajor)) {
|
||||
elixirVersionForDownload = `${elixirVersionFromSpec}-otp-${otpVersionMajor}`
|
||||
if (isVersion(otpVersionMajorIter)) {
|
||||
elixirVersionForDownload = `${elixirVersionFromSpec}-otp-${otpVersionMajorIter}`
|
||||
}
|
||||
|
||||
return maybePrependWithV(elixirVersionForDownload)
|
||||
}
|
||||
|
||||
async function getGleamVersion(gleamSpec0) {
|
||||
const gleamVersions = await getGleamVersions()
|
||||
const [gleamVersions, originListing] = await getGleamVersions()
|
||||
const spec = gleamSpec0
|
||||
const versions = gleamVersions
|
||||
const gleamVersion = getVersionFromSpec(spec, versions)
|
||||
|
||||
if (gleamVersion === null) {
|
||||
throw new Error(
|
||||
`Requested Gleam version (${gleamSpec0}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
throw new Error(requestedVersionFor('Gleam', gleamSpec0, originListing))
|
||||
}
|
||||
|
||||
return maybePrependWithV(gleamVersion)
|
||||
}
|
||||
|
||||
async function getRebar3Version(r3Spec) {
|
||||
const rebar3Versions = await getRebar3Versions()
|
||||
const [rebar3Versions, originListing] = await getRebar3Versions()
|
||||
const spec = r3Spec
|
||||
const versions = rebar3Versions
|
||||
const rebar3Version = getVersionFromSpec(spec, versions)
|
||||
|
||||
if (rebar3Version === null) {
|
||||
throw new Error(
|
||||
`Requested rebar3 version (${r3Spec}) not found in version list ` +
|
||||
"(should you be using option 'version-type': 'strict'?)",
|
||||
)
|
||||
throw new Error(requestedVersionFor('rebar3', r3Spec, originListing))
|
||||
}
|
||||
|
||||
return rebar3Version
|
||||
}
|
||||
|
||||
function otpArchitecture() {
|
||||
return getInput('otp-architecture', false)
|
||||
}
|
||||
|
||||
async function getOTPVersions(osVersion) {
|
||||
let otpVersionsListings
|
||||
let originListing
|
||||
let hexMirrors = null
|
||||
if (process.platform === 'linux') {
|
||||
originListing = `/builds/otp/${getRunnerOSArchitecture()}/${osVersion}/builds.txt`
|
||||
hexMirrors = hexMirrorsInput()
|
||||
otpVersionsListings = await doWithMirrors({
|
||||
hexMirrors: hexMirrorsInput(),
|
||||
hexMirrors,
|
||||
actionTitle: `fetch ${originListing}`,
|
||||
action: async (hexMirror) => {
|
||||
const l = await get(`${hexMirror}${originListing}`, [null])
|
||||
return l
|
||||
return get(`${hexMirror}${originListing}`)
|
||||
},
|
||||
})
|
||||
} else if (process.platform === 'win32') {
|
||||
originListing =
|
||||
'https://api.github.com/repos/erlang/otp/releases?per_page=100'
|
||||
otpVersionsListings = await get(originListing, [1, 2, 3])
|
||||
} else if (process.platform === 'darwin') {
|
||||
const arch = getRunnerOSArchitecture()
|
||||
let targetArch
|
||||
switch (arch) {
|
||||
case 'amd64':
|
||||
targetArch = 'x86_64'
|
||||
break
|
||||
case 'arm64':
|
||||
targetArch = 'aarch64'
|
||||
break
|
||||
}
|
||||
originListing =
|
||||
`https://raw.githubusercontent.com/erlef/otp_builds/refs/heads/main` +
|
||||
`/builds/${targetArch}-apple-darwin.csv`
|
||||
otpVersionsListings = await get(originListing)
|
||||
}
|
||||
|
||||
debugLog(`OTP versions listings from ${originListing}`, otpVersionsListings)
|
||||
debugLog(
|
||||
`OTP versions listings from ${originListing}, mirrors ${hexMirrors}`,
|
||||
otpVersionsListings,
|
||||
)
|
||||
|
||||
const otpVersions = {}
|
||||
if (process.platform === 'linux') {
|
||||
@@ -279,42 +370,55 @@ async function getOTPVersions(osVersion) {
|
||||
.trim()
|
||||
.split('\n')
|
||||
.forEach((line) => {
|
||||
const otpMatch = line
|
||||
.match(/^([^ ]+)?( .+)/)[1]
|
||||
.match(/^([^-]+-)?(.+)$/)
|
||||
const otpVersion = otpMatch[2]
|
||||
const otpVersionOrig = otpMatch[0]
|
||||
debugLog('OTP line and parsing', [line, otpVersion, otpMatch])
|
||||
const otpVersionOrig = line.match(/^([^ ]+)?( .+)/)[1]
|
||||
const otpVersion = maybeRemoveOTPPrefix(otpVersionOrig)
|
||||
debugLog('OTP line and parsing', [line, otpVersion, otpVersionOrig])
|
||||
otpVersions[otpVersion] = otpVersionOrig // we keep the original for later reference
|
||||
})
|
||||
} else if (process.platform === 'win32') {
|
||||
const otpArch = otpArchitecture()
|
||||
const file_regex = new RegExp(`^otp_win${RegExp.escape(otpArch)}_(.*).exe$`)
|
||||
otpVersionsListings.forEach((otpVersionsListing) => {
|
||||
jsonParseAsList(otpVersionsListing)
|
||||
otpVersionsListing
|
||||
.map((x) => x.assets)
|
||||
.flat()
|
||||
.filter((x) => x.name.match(/^otp_win64_.*.exe$/))
|
||||
.filter((x) => x.name.match(file_regex))
|
||||
.forEach((x) => {
|
||||
const otpMatch = x.name.match(/^otp_win64_(.*).exe$/)
|
||||
const otpVersion = otpMatch[1]
|
||||
debugLog('OTP line and parsing', [otpMatch, otpVersion])
|
||||
otpVersions[otpVersion] = otpVersion
|
||||
const otpVersionOrig = x.name.match(file_regex)[1]
|
||||
const otpVersion = otpVersionOrig
|
||||
debugLog('OTP line and parsing', [x.name, otpVersion, otpVersionOrig])
|
||||
otpVersions[otpVersion] = otpVersionOrig
|
||||
})
|
||||
})
|
||||
} else if (process.platform === 'darwin') {
|
||||
csv
|
||||
.parse(otpVersionsListings, {
|
||||
columns: true,
|
||||
})
|
||||
.forEach((line) => {
|
||||
const otpVersionOrig = line.ref_name
|
||||
const otpVersion = maybeRemoveOTPPrefix(otpVersionOrig)
|
||||
debugLog('OTP line and parsing', [line, otpVersion, otpVersionOrig])
|
||||
otpVersions[otpVersion] = otpVersionOrig // we keep the original for later reference
|
||||
})
|
||||
}
|
||||
|
||||
debugLog(`OTP versions from ${originListing}`, JSON.stringify(otpVersions))
|
||||
debugLog(
|
||||
`OTP versions from ${originListing}, mirrors ${hexMirrors}`,
|
||||
JSON.stringify(otpVersions),
|
||||
)
|
||||
|
||||
return otpVersions
|
||||
return [otpVersions, originListing, hexMirrors]
|
||||
}
|
||||
|
||||
async function getElixirVersions() {
|
||||
const originListing = '/builds/elixir/builds.txt'
|
||||
const hexMirrors = hexMirrorsInput()
|
||||
const elixirVersionsListings = await doWithMirrors({
|
||||
hexMirrors: hexMirrorsInput(),
|
||||
hexMirrors,
|
||||
actionTitle: `fetch ${originListing}`,
|
||||
action: async (hexMirror) => {
|
||||
const l = await get(`${hexMirror}${originListing}`, [null])
|
||||
return l
|
||||
return get(`${hexMirror}${originListing}`)
|
||||
},
|
||||
})
|
||||
const otpVersionsForElixirMap = {}
|
||||
@@ -337,17 +441,16 @@ async function getElixirVersions() {
|
||||
elixirVersions[elixirVersion] = elixirVersion
|
||||
})
|
||||
|
||||
return [otpVersionsForElixirMap, elixirVersions]
|
||||
return [otpVersionsForElixirMap, elixirVersions, originListing, hexMirrors]
|
||||
}
|
||||
|
||||
async function getGleamVersions() {
|
||||
const resultJSONs = await get(
|
||||
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100',
|
||||
[1, 2, 3],
|
||||
)
|
||||
const originListing =
|
||||
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100'
|
||||
const resultJSONs = await get(originListing, [1, 2, 3])
|
||||
const gleamVersionsListing = {}
|
||||
resultJSONs.forEach((resultJSON) => {
|
||||
jsonParseAsList(resultJSON)
|
||||
resultJSON
|
||||
.map((x) => x.tag_name)
|
||||
.forEach((ver) => {
|
||||
const gleamMatch = ver.match(/^v?([^ ]+)/)
|
||||
@@ -356,24 +459,23 @@ async function getGleamVersions() {
|
||||
})
|
||||
})
|
||||
|
||||
return gleamVersionsListing
|
||||
return [gleamVersionsListing, originListing]
|
||||
}
|
||||
|
||||
async function getRebar3Versions() {
|
||||
const resultJSONs = await get(
|
||||
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100',
|
||||
[1, 2, 3],
|
||||
)
|
||||
const originListing =
|
||||
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100'
|
||||
const resultJSONs = await get(originListing, [1, 2, 3])
|
||||
const rebar3VersionsListing = {}
|
||||
resultJSONs.forEach((resultJSON) => {
|
||||
jsonParseAsList(resultJSON)
|
||||
resultJSON
|
||||
.map((x) => x.tag_name)
|
||||
.forEach((ver) => {
|
||||
rebar3VersionsListing[ver] = ver
|
||||
})
|
||||
})
|
||||
|
||||
return rebar3VersionsListing
|
||||
return [rebar3VersionsListing, originListing]
|
||||
}
|
||||
|
||||
function isStrictVersion() {
|
||||
@@ -386,7 +488,10 @@ function gt(left, right) {
|
||||
|
||||
function validVersion(v) {
|
||||
return (
|
||||
v.match(/main|master|nightly|latest/g) == null &&
|
||||
v.match(
|
||||
new RegExp(`${knownBranches.join('|')}|${nonSpecificVersions.join('|')}`),
|
||||
) == null &&
|
||||
// these ones are for rebar3, which has alpha and beta releases
|
||||
!v.startsWith('a') &&
|
||||
!v.startsWith('b')
|
||||
)
|
||||
@@ -413,8 +518,14 @@ function getVersionFromSpec(spec0, versions0) {
|
||||
const altVersions = {}
|
||||
Object.entries(versions0).forEach(([version, altVersion]) => {
|
||||
let coerced
|
||||
if (isStrictVersion() || isRC(version)) {
|
||||
// If `version-type: strict` or version is RC, we just try to remove a potential initial v
|
||||
if (
|
||||
isStrictVersion() ||
|
||||
isRC(version) ||
|
||||
isKnownBranch(version) ||
|
||||
isKnownVerBranch(version)
|
||||
) {
|
||||
// If `version-type: strict`, version is an RC, or version is "a branch"
|
||||
// we just try to remove a potential initial v
|
||||
coerced = maybeRemoveVPrefix(version)
|
||||
} else {
|
||||
// Otherwise, we place the version into a version bucket
|
||||
@@ -431,13 +542,19 @@ function getVersionFromSpec(spec0, versions0) {
|
||||
const rangeMax = semver.maxSatisfying(versions, rangeForMax)
|
||||
let version = null
|
||||
|
||||
if (isStrictVersion() || isRC(spec0) || isKnownBranch(spec0)) {
|
||||
if (spec0 === 'latest') {
|
||||
version = versions0[versions0.latest]
|
||||
} else if (
|
||||
isStrictVersion() ||
|
||||
isRC(spec0) ||
|
||||
isKnownBranch(spec0) ||
|
||||
isKnownVerBranch(spec0) ||
|
||||
spec0 === 'nightly'
|
||||
) {
|
||||
if (versions0[spec]) {
|
||||
// If `version-type: strict` or version is RC, we obtain it directly
|
||||
// We obtain it directly
|
||||
version = versions0[spec]
|
||||
}
|
||||
} else if (spec0 === 'latest') {
|
||||
version = versions0[versions0.latest]
|
||||
} else if (rangeMax !== null) {
|
||||
// Otherwise, we compare alt. versions' semver ranges to this version, from highest to lowest
|
||||
const thatVersion = spec
|
||||
@@ -464,7 +581,7 @@ function getVersionFromSpec(spec0, versions0) {
|
||||
}
|
||||
|
||||
function maybeCoerced(v) {
|
||||
let ret = null
|
||||
let ret
|
||||
try {
|
||||
if (!isRC(v)) {
|
||||
ret = semver.coerce(v).version
|
||||
@@ -506,7 +623,11 @@ function isRC(ver) {
|
||||
}
|
||||
|
||||
function isKnownBranch(ver) {
|
||||
return ['main', 'master', 'maint'].includes(ver)
|
||||
return knownBranches.includes(ver)
|
||||
}
|
||||
|
||||
function isKnownVerBranch(ver) {
|
||||
return knownBranches.some((b) => ver.match(b))
|
||||
}
|
||||
|
||||
function githubARMRunnerArchs() {
|
||||
@@ -536,16 +657,45 @@ function getRunnerOSArchitecture() {
|
||||
}
|
||||
|
||||
function getRunnerOSVersion() {
|
||||
// List from https://github.com/actions/runner-images?tab=readme-ov-file#available-images
|
||||
// at e065a395d52f491c58eb8fba8ab1dde2c7cfada1
|
||||
// Not considered, at the moment (though it might be easy to adapt to...):
|
||||
// - ubuntu-slim
|
||||
// - all macOS intel, large, and xlarge variants
|
||||
// - all win arm variants
|
||||
const ImageOSToContainer = {
|
||||
ubuntu22: 'ubuntu-22.04',
|
||||
'ubuntu22-arm64': 'ubuntu-22.04',
|
||||
ubuntu24: 'ubuntu-24.04',
|
||||
'ubuntu24-arm64': 'ubuntu-24.04',
|
||||
ubuntu26: 'ubuntu-26.04',
|
||||
'ubuntu26-arm64': 'ubuntu-26.04',
|
||||
win22: 'windows-2022',
|
||||
win25: 'windows-2025',
|
||||
'win25-vs2026': 'windows-2025',
|
||||
macos14: 'macOS-14',
|
||||
macos15: 'macOS-15',
|
||||
macos26: 'macOS-26',
|
||||
}
|
||||
const deprecatedImageOSToContainer = {
|
||||
ubuntu18: 'ubuntu-18.04',
|
||||
ubuntu20: 'ubuntu-20.04',
|
||||
ubuntu22: 'ubuntu-22.04',
|
||||
ubuntu24: 'ubuntu-24.04',
|
||||
win19: 'windows-2019',
|
||||
win22: 'windows-2022',
|
||||
macos13: 'macOS-13',
|
||||
}
|
||||
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
|
||||
if (!containerFromEnvImageOS) {
|
||||
const deprecatedContainerFromEnvImageOS =
|
||||
deprecatedImageOSToContainer[process.env.ImageOS]
|
||||
if (deprecatedContainerFromEnvImageOS) {
|
||||
core.warning(
|
||||
`You are using deprecated ImageOS ${deprecatedContainerFromEnvImageOS}. ` +
|
||||
'Support for maintenance is very limited. Consider a non-deprecated version as ' +
|
||||
'mentioned in the README.md.',
|
||||
)
|
||||
|
||||
return deprecatedContainerFromEnvImageOS
|
||||
} else {
|
||||
throw new Error(
|
||||
"Tried to map a target OS from env. variable 'ImageOS' (got " +
|
||||
`${process.env.ImageOS}` +
|
||||
@@ -556,12 +706,43 @@ function getRunnerOSVersion() {
|
||||
"']",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return containerFromEnvImageOS
|
||||
}
|
||||
|
||||
async function getUrlResponse(url, headers, attempt = 1) {
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
headers,
|
||||
signal: AbortSignal.timeout(10000),
|
||||
})
|
||||
const contentType = response.headers.get('content-type') || ''
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(response.statusText)
|
||||
}
|
||||
|
||||
if (contentType.indexOf('application/json') !== -1) {
|
||||
return response.json()
|
||||
} else {
|
||||
return response.text()
|
||||
}
|
||||
} catch (err) {
|
||||
core.debug(`Error fetching from ${url}: ${err}`)
|
||||
|
||||
if (attempt <= MAX_HTTP_RETRIES) {
|
||||
const delay = attempt * 2 * 1000
|
||||
core.debug(`Error during fetch. Retrying in ${delay}ms`)
|
||||
await new Promise((resolve) => setTimeout(resolve, delay))
|
||||
return getUrlResponse(url, headers, attempt + 1)
|
||||
} else {
|
||||
throw err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function get(url0, pageIdxs) {
|
||||
async function getPage(pageIdx) {
|
||||
const url = new URL(url0)
|
||||
const headers = {}
|
||||
const GithubToken = getInput('github-token', false)
|
||||
@@ -569,29 +750,17 @@ async function get(url0, pageIdxs) {
|
||||
headers.authorization = `Bearer ${GithubToken}`
|
||||
}
|
||||
|
||||
if (pageIdx !== null) {
|
||||
url.searchParams.append('page', pageIdx)
|
||||
}
|
||||
|
||||
const httpClient = new http.HttpClient('setup-beam', [], {
|
||||
allowRetries: true,
|
||||
maxRetries: 3,
|
||||
})
|
||||
const response = await httpClient.get(url, headers)
|
||||
if (response.statusCode >= 400 && response.statusCode <= 599) {
|
||||
throw new Error(
|
||||
`Got ${response.statusCode} from ${url}. Exiting with error`,
|
||||
if ((pageIdxs || []).length === 0) {
|
||||
return getUrlResponse(url, headers)
|
||||
} else {
|
||||
return Promise.all(
|
||||
pageIdxs.map((page) => {
|
||||
const urlWithPage = new URL(url)
|
||||
urlWithPage.searchParams.append('page', page)
|
||||
return getUrlResponse(urlWithPage, headers)
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
return response.readBody()
|
||||
}
|
||||
|
||||
if (pageIdxs[0] === null) {
|
||||
return getPage(null)
|
||||
}
|
||||
|
||||
return Promise.all(pageIdxs.map(getPage))
|
||||
}
|
||||
|
||||
function maybePrependWithV(v) {
|
||||
@@ -616,7 +785,7 @@ function xyzAbcVersion(pref, suf) {
|
||||
// https://www.erlang.org/doc/system_principles/versions.html
|
||||
const dd = '\\.?(\\d+)?'
|
||||
return new RegExp(
|
||||
`${pref}v?(\\d+)${dd}${dd}${dd}${dd}${dd}(?:-rc\\.?\\d+)?(?:-otp-\\d+)?${suf}`,
|
||||
`${pref}(?:OTP-)?v?(\\d+)${dd}${dd}${dd}${dd}${dd}(?:-rc\\.?\\d+)?(?:-otp-\\d+)?${suf}`,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -648,28 +817,14 @@ alongside ${alternativeName}=${alternativeValue} \
|
||||
return input
|
||||
}
|
||||
|
||||
function parseVersionFile(versionFilePath0) {
|
||||
const versionFilePath = path.resolve(
|
||||
process.env.GITHUB_WORKSPACE,
|
||||
versionFilePath0,
|
||||
)
|
||||
if (!fs.existsSync(versionFilePath)) {
|
||||
throw new Error(
|
||||
`The specified version file, ${versionFilePath0}, does not exist`,
|
||||
)
|
||||
}
|
||||
|
||||
core.startGroup(`Parsing version file at ${versionFilePath0}`)
|
||||
function parseToolVersionsFile(versionFilePath) {
|
||||
const appVersions = new Map()
|
||||
const versions = fs.readFileSync(versionFilePath, 'utf8')
|
||||
// For the time being we parse .tool-versions
|
||||
// If we ever start parsing something else, this should
|
||||
// become default in a new option named e.g. version-file-type
|
||||
versions.split('\n').forEach((line) => {
|
||||
versions.split(/\r?\n/).forEach((line) => {
|
||||
const appVersion = line.match(/^([^ ]+)[ ]+(ref:v?)?([^ #]+)/)
|
||||
if (appVersion) {
|
||||
const app = appVersion[1]
|
||||
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) {
|
||||
if (APPS.includes(app)) {
|
||||
const [, , , version] = appVersion
|
||||
core.info(`Consuming ${app} at version ${version}`)
|
||||
appVersions.set(app, version)
|
||||
@@ -686,19 +841,44 @@ function parseVersionFile(versionFilePath0) {
|
||||
return appVersions
|
||||
}
|
||||
|
||||
function jsonParseAsList(maybeJson) {
|
||||
try {
|
||||
const obj = JSON.parse(maybeJson)
|
||||
if (!Array.isArray(obj)) {
|
||||
throw new Error('expected a list!')
|
||||
function parseMiseTomlFile(versionFilePath) {
|
||||
const appVersions = new Map()
|
||||
const miseToml = fs.readFileSync(versionFilePath, 'utf8')
|
||||
const miseTomlParsed = toml.parse(miseToml)
|
||||
for (const app in miseTomlParsed.tools) {
|
||||
if (APPS.includes(app)) {
|
||||
const appVersion = miseTomlParsed.tools[app]
|
||||
const version =
|
||||
typeof appVersion == 'object' ? appVersion.version : appVersion
|
||||
|
||||
core.info(`Consuming ${app} at version ${version}`)
|
||||
appVersions.set(app, version)
|
||||
}
|
||||
}
|
||||
|
||||
return obj
|
||||
} catch (exc) {
|
||||
return appVersions
|
||||
}
|
||||
|
||||
function parseVersionFile(versionFilePath0) {
|
||||
const versionFilePath = path.resolve(
|
||||
process.env.GITHUB_WORKSPACE,
|
||||
versionFilePath0,
|
||||
)
|
||||
if (!fs.existsSync(versionFilePath)) {
|
||||
throw new Error(
|
||||
`Got an exception when trying to parse non-JSON list ${maybeJson}: ${exc}`,
|
||||
`The specified version file, ${versionFilePath0}, does not exist`,
|
||||
)
|
||||
}
|
||||
|
||||
if (versionFilePath0.endsWith('.toml')) {
|
||||
core.startGroup(
|
||||
`Parsing ${path.basename(versionFilePath0)} file at ${versionFilePath0}`,
|
||||
)
|
||||
return parseMiseTomlFile(versionFilePath)
|
||||
}
|
||||
|
||||
core.startGroup(`Parsing .tool-versions file at ${versionFilePath0}`)
|
||||
return parseToolVersionsFile(versionFilePath)
|
||||
}
|
||||
|
||||
function debugLog(groupName, message) {
|
||||
@@ -795,9 +975,13 @@ async function install(toolName, opts) {
|
||||
},
|
||||
},
|
||||
win32: {
|
||||
downloadToolURL: () =>
|
||||
downloadToolURL: () => {
|
||||
const otpArch = otpArchitecture()
|
||||
return (
|
||||
'https://github.com/erlang/otp/releases/download/' +
|
||||
`OTP-${toolVersion}/otp_win64_${toolVersion}.exe`,
|
||||
`OTP-${toolVersion}/otp_win${otpArch}_${toolVersion}.exe`
|
||||
)
|
||||
},
|
||||
extract: async () => ['file', 'otp.exe'],
|
||||
postExtract: async (cachePath) => {
|
||||
const cmd = path.join(cachePath, 'otp.exe')
|
||||
@@ -809,6 +993,36 @@ async function install(toolName, opts) {
|
||||
const args = ['+V']
|
||||
const env = {}
|
||||
|
||||
return [cmd, args, env]
|
||||
},
|
||||
},
|
||||
darwin: {
|
||||
downloadToolURL: (versionSpec) => {
|
||||
let suffix = ''
|
||||
if (isKnownVerBranch(versionSpec)) {
|
||||
// for these otp_builds adds `-latest` in the folder path
|
||||
suffix = '-latest'
|
||||
}
|
||||
return (
|
||||
`https://github.com/erlef/otp_builds/releases/download/` +
|
||||
`${toolVersion}${suffix}/${toolVersion}-macos-${getRunnerOSArchitecture()}.tar.gz`
|
||||
)
|
||||
},
|
||||
extract: async (file) => {
|
||||
const dest = undefined
|
||||
const flags = ['zx']
|
||||
const targetDir = await tc.extractTar(file, dest, flags)
|
||||
|
||||
return ['dir', targetDir]
|
||||
},
|
||||
postExtract: async (/*cachePath*/) => {
|
||||
// nothing to do
|
||||
},
|
||||
reportVersion: () => {
|
||||
const cmd = 'erl'
|
||||
const args = ['-version']
|
||||
const env = {}
|
||||
|
||||
return [cmd, args, env]
|
||||
},
|
||||
},
|
||||
@@ -849,12 +1063,14 @@ async function install(toolName, opts) {
|
||||
tool: 'Gleam',
|
||||
linux: {
|
||||
downloadToolURL: () => {
|
||||
const arch = getRunnerOSArchitecture()
|
||||
let gz
|
||||
if (
|
||||
versionSpec === 'nightly' ||
|
||||
semver.gt(versionSpec, 'v0.22.1')
|
||||
) {
|
||||
gz = `gleam-${versionSpec}-x86_64-unknown-linux-musl.tar.gz`
|
||||
const target = arch === 'arm64' ? 'aarch64' : 'x86_64'
|
||||
gz = `gleam-${versionSpec}-${target}-unknown-linux-musl.tar.gz`
|
||||
} else {
|
||||
gz = `gleam-${versionSpec}-linux-amd64.tar.gz`
|
||||
}
|
||||
@@ -918,6 +1134,26 @@ async function install(toolName, opts) {
|
||||
},
|
||||
},
|
||||
}
|
||||
installOpts.darwin = {
|
||||
downloadToolURL: () => {
|
||||
const arch = getRunnerOSArchitecture()
|
||||
let gz
|
||||
if (versionSpec === 'nightly' || semver.gt(versionSpec, 'v0.22.1')) {
|
||||
const target = arch === 'arm64' ? 'aarch64' : 'x86_64'
|
||||
gz = `gleam-${versionSpec}-${target}-apple-darwin.tar.gz`
|
||||
} else {
|
||||
gz =
|
||||
arch === 'arm64'
|
||||
? `gleam-${versionSpec}-macos-arm64.tar.gz`
|
||||
: `gleam-${versionSpec}-macos.tar.gz`
|
||||
}
|
||||
|
||||
return `https://github.com/gleam-lang/gleam/releases/download/${versionSpec}/${gz}`
|
||||
},
|
||||
extract: installOpts.linux.extract,
|
||||
postExtract: installOpts.linux.postExtract,
|
||||
reportVersion: installOpts.linux.reportVersion,
|
||||
}
|
||||
break
|
||||
case 'rebar3':
|
||||
installOpts = {
|
||||
@@ -938,7 +1174,7 @@ async function install(toolName, opts) {
|
||||
const bindir = path.join(cachePath, 'bin')
|
||||
const oldPath = path.join(cachePath, 'rebar3')
|
||||
const newPath = path.join(bindir, 'rebar3')
|
||||
fs.mkdirSync(bindir)
|
||||
fs.mkdirSync(bindir, { recursive: true })
|
||||
fs.renameSync(oldPath, newPath)
|
||||
fs.chmodSync(newPath, 0o755)
|
||||
},
|
||||
@@ -991,6 +1227,7 @@ async function install(toolName, opts) {
|
||||
},
|
||||
},
|
||||
}
|
||||
installOpts.darwin = installOpts.linux
|
||||
break
|
||||
default:
|
||||
throw new Error(`no installer for ${toolName}`)
|
||||
@@ -1007,7 +1244,7 @@ async function installTool(opts) {
|
||||
core.debug(`Checking if ${installOpts.tool} is already cached...`)
|
||||
if (cachePath === '') {
|
||||
core.debug(" ... it isn't!")
|
||||
const downloadToolURL = platformOpts.downloadToolURL()
|
||||
const downloadToolURL = platformOpts.downloadToolURL(versionSpec)
|
||||
const file = await tc.downloadTool(downloadToolURL)
|
||||
const [targetElemType, targetElem] = await platformOpts.extract(file)
|
||||
|
||||
@@ -1045,26 +1282,38 @@ async function installTool(opts) {
|
||||
await exec(cmd, args, { env: { ...process.env, ...env } })
|
||||
}
|
||||
|
||||
function checkPlatform() {
|
||||
if (process.platform !== 'linux' && process.platform !== 'win32') {
|
||||
function checkOtpArchitecture() {
|
||||
const otpArch = otpArchitecture()
|
||||
|
||||
if (process.platform !== 'win32' && otpArch == '32') {
|
||||
throw new Error(
|
||||
'@erlef/setup-beam only supports Ubuntu and Windows at this time',
|
||||
'@erlef/setup-beam only supports otp-architecture=32 on Windows',
|
||||
)
|
||||
}
|
||||
|
||||
if (!['32', '64'].includes(otpArch)) {
|
||||
throw new Error('otp-architecture must be 32 or 64')
|
||||
}
|
||||
}
|
||||
|
||||
function debugLoggingEnabled() {
|
||||
return !!process.env.RUNNER_DEBUG
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getOTPVersion,
|
||||
export default {
|
||||
get,
|
||||
getElixirVersion,
|
||||
getGleamVersion,
|
||||
getOTPVersion,
|
||||
getRebar3Version,
|
||||
getRunnerOSVersion,
|
||||
getVersionFromSpec,
|
||||
githubAMDRunnerArchs,
|
||||
githubARMRunnerArchs,
|
||||
install,
|
||||
installOTP,
|
||||
maybeInstallElixir,
|
||||
maybeInstallGleam,
|
||||
maybeInstallRebar3,
|
||||
parseVersionFile,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
ref_name,ref,datetime,sha256,openssl,wxwidgets
|
||||
master,09e092774c00416bb1635880ef210d13aa99fe98,2025-05-25T00:14:48Z,fa14de4db946fa512193853bca8147e679feb1037d6cd33d3a6a1c156b86ee32,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-27,c388a2d1b3f9918652276d4798692dd4d8ef97fc,2025-05-25T00:24:14Z,7fdd623e4a13ff3ca10d62f180e721014a2cd5c4341e7d81d8182a56d21a1141,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-26,7335f79eeaa0094c274dab2aa2ced9e138027c75,2025-05-25T00:20:18Z,5fa92c05bf904a0fc20313f4f9c625c620b71fd905dbe5fc78c8af0f8285f341,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-25,52199ed7e79646b73bacc47c92967ce9970b2373,2025-05-25T00:16:01Z,c12998e8ce96d9e2126e45a87428a1efde4a344f46d789ba62b46b02ae8222de,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
maint,c16299eb821718afd337db67f89c0fac56f79496,2025-05-25T00:15:17Z,b5385d907b9617d3c793a203f29d33617bf0a7c6c2d96beaebb02d743396b3e3,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc4,bdd4594181242f0d681b2e464b8bf12205fba30b,2025-05-05T18:42:29Z,4d178928ffa49ad443bda09e336ff47cc0930998405ac77c56a31a98373b819c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc3,cf38f1efc91853e384542ce105639226b7367ea2,2025-04-16T11:36:45Z,027bc40d1cbda304a83f368e46f3d7e66ca92f61b9af1507d14a83d52d75052b,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc2,5ddf7a91568cdc29cb85f43640dbdb40fb3b3985,2025-03-19T09:09:12Z,086d560a45d19add332ce62c42c9ebf09d7423ffea60c5b8c13d9a54389f21c8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc1,ba8f061732c41ad4bca7895e47acb5d26f54c032,2025-02-12T10:40:45Z,35d1538c04274bc30ffc2c5c28d2550cd7bf1dd361ea35b158066919b48d0fb8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0,7a57568c13dedf4ab82ea2b881619788749bbdc5,2025-05-21T08:09:39Z,769d3712096a9e4b93754d7c9b3bd09ce705f1b22ba23adffc706facbfb05ec8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.4,fe31f32661e4e90ae4a1bb32551d2937f7c4e12a,2025-05-08T13:43:25Z,c6ed988d1c32baef98e77a18131b5fe380c2ddb98792cefec0683778797989fa,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.3,48a429f47c03e0fee574417345be90efec815abc,2025-04-16T14:09:21Z,feba87f1ee977730bfea58098ace38671c329e2f6bb3fbbe132b22b2dcd6a399,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.2,94c2583f43441ecd788e85ad00982b03e6b572f7,2025-04-04T08:41:14Z,19dc3404f2bb09a8cdd0b08ab896dfe02cb9680bf5974bcaa2b60d06d455a325,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.1,901752e05d3ef678b22ecddb7379e8fe2a5facdd,2025-03-28T13:14:09Z,f56d69e199f675cc490e43a96de6522f104d3e2b5a07563a890f3542b557f011,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3,15637bf0ed9e2a5d015ae9260c0912e2de2d7108,2025-03-05T10:11:36Z,a76eb513202c7131bcd62ee516f8498098b8adadd417bd90e30ae3a2e3f6762d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.4,4df6b11359260d5e01161a651a35c7391021a218,2025-02-20T15:09:39Z,4acbc151870b3e4e295133f211da7d7904df7c093386e2229c6d62d617336c28,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.3,7eb2efcf82912f24e3d8ccf4854b42f28b5955bd,2025-02-17T17:07:52Z,472bfc5303367a48ffe2ebe963556bfb7b02bc5cb442ee58de802a9a4b6ae731,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.2,d7f17f87b48465e4a3ff8d427df1551f91672d2f,2025-02-06T14:40:59Z,5293c8338846eea6f4197775504fc047363adb57d2fdc34c36de88e530c9269f,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.1,c5725e0f7397b4c1296190bd96ac0fa50b850f20,2025-01-23T18:10:29Z,4f7b34919c31e9b34e749d7b9c9bfa6ddebb562621ff6dd1814d02d4e078a14a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2,46f2418451d1991d2060dc5b4d7d88f8259c9291,2024-12-11T10:09:04Z,cfdc9eff4bc3d7ac1b61e1d7adee92153e707249e9a1ade899ea5b7c52f6850d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.3,e8ab3f7fdc59da5dd4dc8ef8c1c7bcec22b52faa,2024-12-05T15:08:49Z,5c1714f94851c7523ab8f97b6c0d303e216b82eb4e7bb57eff3864369b1e402b,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.2,1926819171af845832795d87bf1be0220710852b,2024-10-28T13:04:09Z,14d65f1f918cc91d42318d72dcd07f8c8439d25385fba2ac5b7a87bc51d6ccb5,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.1,67ded430d9be65e2e6c11bba323c0eb62d07cd1f,2024-10-28T13:03:51Z,292e121817b3a7c4276ac71fb4c5d8469f0d7e83691a4becfb29e6d890cb5939,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1,9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb,2024-10-26T01:30:37Z,2b60294d04245c89aa0e2d6269a4f78eb55c17573c98bea355a9848517761a89,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0.1,ee9628e7ed09ef02e767994a6da5b7a225316aaa,2024-10-26T01:17:39Z,c709ae30c356888e3f361a3691c100eff90df5b0248ef413d6565faaa0b8ccb9,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc3,5df3992d695da4d7e8777cf7605279ce9d131f1c,2024-10-26T01:08:27Z,058846679e52c761ad2a1cfdf6e310ec959f65c557f607ce52388afdac21f275,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc2,e651174c569694c92b1794ddd0a1a4a199610091,2024-10-26T01:04:25Z,b9f5efb99fd81f05ed840d6867a64f1ca13fe4f83599f52ba602781ac4a5e81c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc1,b74bd21d5cb52e0fdc5ea321439c428783feea23,2024-10-26T01:03:29Z,7b0c54b1b8205a5c15e2df61cc446498ea8c40fffebff2b00d03a97722edac92,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0,f1c72ea22f0d0479807fbe543191f7a1ef325838,2024-10-29T19:25:07Z,9e1c483d12e9554257c5edffb9b07a03001a3ddd131bbda05519638aa8f2206b,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.9,f900850abbd2c45b618675d1342ac85492ed1c5d,2025-02-20T16:10:43Z,f96951f4226b53ec529a1b4ee65cc85f7ffa93a5f08fee105033253ceacd19ac,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.8,45fd6b3adb81f0b245d9baf4dcbdde049221fbff,2025-02-12T14:07:59Z,95a823c5f504c6a9b5a6f92c243783af065b58f6771e3cd8512315e4d6084ea6,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.7,fa62351cef47e7dc502c5d0b1348ef8988b5d7b8,2025-01-27T12:50:05Z,0b5fa2704e170871995a41a3bb4fbb327f885735482d85406cbfe3db9b2cad7b,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.6,1f4a3b013b1df4034d6fb63623e77bfb142cadda,2024-12-05T14:41:44Z,b5cbcb34067420175e49b4d4ec3d2df88622d6b79ff410182abe46ef565dfefd,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.5,81399ff534e71be2425a0cae96e26c104fcde2f3,2024-11-01T07:09:27Z,24e1f777c46b2444cdaa965fe64da483c0609c2e9657567d359dc4a241b3dad1,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.4,b6e7e233d0b781728e745dc04f4cb2645c6632ec,2024-10-26T00:55:17Z,1d2d18a519c82442d4b278844b2050d3c55dfe224e9c39174c2fc5c66030c4e9,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.3,84152c2c9d85128d3cce471f645f154c34132d82,2024-10-26T00:55:31Z,0e1d19aad5078e9689574af9fce7b156ef1cf63acf1f248cb347e98bd75bfca3,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.2,c1805ad6200cec57bf86640fb9a1c715db515b78,2024-10-26T00:49:14Z,63aca8ad98e2be6ec5656708f97aa35d8b627515b9b6f52a4edc5051e0c444e8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.12,a2f903599fe779380ec197c8ab41a193eec2d148,2025-05-08T15:41:10Z,34cebb1732abc21e2748dfe592f8d2a5ebfb70f34ff49b32ecd614e697332895,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.11,c2fcd5185c0651630196b6997be848a344c4aa71,2025-04-16T14:40:01Z,576e1a5453e6774924dfbc8cfc0b4e4276951be6e9fdec3b07db0c566b039852,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.10,eaa1b25cd65de117e82a4fbf709cb5cf6836f5ff,2025-03-28T14:41:04Z,369c227a41b6f8db3c67f8ef07c623f17692b7d518b62d240ca3ef6d66ebc602,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.1,858efd5b35b572c71a8010ad323c4127eef5bc29,2024-10-26T00:48:18Z,f010d0c5f6d202496608b7d6a23f5f6d855297423f9d4e706cd443be722c49e4,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5,412bff5196fc0ab88a61fe37ca30e5226fc7872d,2024-10-26T00:43:56Z,171a4e07c6ee48207a6245ddf7c7ea1be435c0d93e9230d85076d07d9c06f3cf,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.4,e26c5206dc98ec1b8f978fceaa61fd1354266ccb,2024-10-26T00:42:41Z,e00dca5237cc0e3bb6b2533e7952bb5950948c0620d9bda38b2cd18ac0a8e22e,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.3,928d03e6da416208fce7b9a7dbbfbb4f25d26c37,2024-10-26T00:38:24Z,510f554e4de8f25ca7aff3cd400b8143ef8fa8fd6da3603b42a79f58e6ba64ec,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.2,b83df13eec5446beab06dd24315d37a5b0633fd2,2024-10-26T00:37:43Z,2f2076d378b7b1983e9a84cc96609887164c7860dbeba4f22dcfdc2d6c00545b,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.1,ca8b893f9d5bdd0957b78514ba523032e762c644,2024-10-26T00:33:38Z,137f717281ccc11d0df31b31aaf7485b1fa89967716f56ac1c77f8a9747ae80a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2,7fc0898502cb3370b7c6d523a7393cd101808493,2024-10-26T00:28:49Z,99c70f904e0f7d4d9337cd896a03da341f5e0e308c8f875c622c0cd07daa9cf2,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1.2,c41d424db42ba84b72f3e25167470c3555723d87,2024-10-26T00:24:31Z,8f3b51e4cc1cbf7d3cc012b52fadba57e27d54d6448c5e920b03d29ac13155bf,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1.1,2bdd30b872ab91dc376998d2c417f2a8b514d1aa,2024-10-26T00:21:07Z,90e6418caa2554e5fd2dfc543c262b7b04456970208ec57714c1e00fb98c8a2a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1,e962af35263618665c1df57df5135c0c703ad502,2024-10-26T00:20:06Z,d9fe597017557b37d02a377a66b5f582822c9d817eb08797740547bc396becc0,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0.2,d051172925a5c84b2f21850a188a533f885f201c,2024-10-26T00:19:26Z,216948062d898401b2294eb969f485542b7695640e3f45b7f2ada2d24c653d4d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0.1,b54b86ad4f1253f46fd4552a73923756660c1d53,2024-10-26T00:16:01Z,3eb422a565156cc03e3161d6e8c6ffe696141ad416bf24eeb0613683904dcf4f,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc3,1f897adc9df5e0de5d5a85633a8629a7e45ddeab,2024-10-26T00:16:19Z,c3953f88da37c2d1a96f98f475ff79816493c3a3e282ee040ed10f09ec607e40,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc2,dac89a6acc1a93a615930ca18f1dbf4e9323b038,2024-10-26T00:11:55Z,2f2d1d5d757489de3848334da9807d8f3e042828cd9d62f384f318e6c0622893,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc1,127026003180a834e9fa5d5919c824a184faeb92,2024-10-26T00:10:07Z,dafb60e6bc73a5a56d021cf9c1890c1932a32799321c70c917ee214ba04ac8ad,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0,8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee,2024-10-26T00:08:49Z,97424466074b66d51345dfa62776685ba7b92022bb6d8a3ed2d181d93ccf8386,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-25.3.2.9,68fa9c42426380772784eed26d24747bfee38fcc,2024-10-26T00:05:02Z,2231d17ea69be892c929f44f223bed471b1a782680a40d9b38e94ecd3ba2d1e6,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.8,c08f5acfb4e47933d8128d0b41b01487d0eb97a1,2024-10-26T00:04:34Z,ac22ac879d0aced4a6e9c7ff36930a0e35b3b2a60532177147d92c566e98cd99,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.7,d3c9eeb17042e5567337e1f87c924b25186daae0,2024-10-26T00:01:05Z,8e6dd919122c09748c65bf85493d1111b4f3bfe0b8cfb2ece2925333cb6dea69,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.6,fd0e27a5c1ca7afde30b10c1b33a35ebb3313fd1,2024-10-25T23:59:16Z,520c8f37a5362c9e00fa7d2d43ef851a7ba96005618b3bcae6fb64046bd472c5,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.5,5cb360d524a5777ed4243ac03a0162a95f545a16,2024-10-25T23:58:39Z,7aaa85be4ac8c4c991a7109e2bbd9b574f9e19814933e2e948ca19d52a99dd5f,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.4,9e6d04dd18bef6136fc2b45cc60fe1348c4664a7,2024-10-25T23:54:16Z,bdb23c1b6d23da81044147efa2227985a55ab064feb475d0d22258137cc954c8,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.3,da340fd39fc6550b1432662ffa55c3b6da3db41f,2024-10-25T23:54:17Z,f63ab07211826bf34e71f32e8fc9209dfe291a74c7b7896e749d3bf815afa729,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.21,eb0176f76725c1d6cc594ac3c899cf5340f6a4aa,2025-05-08T16:43:21Z,2d5d58162888119919dc03e1b1a65c4a4dadb9081317f070336b9d9410fab360,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.20,3d83272458f7b0fb05aed4981a15cfa72ef7d2ba,2025-04-16T15:07:42Z,1bb2f2efc91d4c6efeb9c9d3f16635286fe1af49b0aeb2f1b12aa8f5b4eedb0d,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.2,ba144817d5478b15a50ef0c398d925232005277e,2024-10-25T23:49:44Z,2e75e4cfcdd0437f618881d0e229cdea3b4d437a5ac0777b9cd9e2edcd1dc3d9,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.19,2dc11e177ba8e5e051a2e88b731ec6de0eb8bb4c,2025-03-28T14:40:58Z,1997fa6b329a737cd4dabb06b1c21ccb77a3759b3191526d207ae9ef7764d741,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.18,e1346297304a626ef9126f77e8b943d51646fe5a,2025-02-20T16:09:10Z,185c3eac7b10fb6864f72331a8b13145caa71cee6115f9cc5c6658cf84ff710f,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.17,90a7540d93530990531ec48a14594efea8974ca2,2025-02-12T15:08:50Z,33bbc526906eb14ffba2f0213ba3105476cdb395cc7026212d37fccd8d2c0410,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.16,b21c9ee6961e5b6aa1595d1f7547b349973ea833,2024-12-05T15:49:06Z,89ef79aabbd97f4ae27f5ae91d5a68fd122de0b14f6d76ab3055766a5e24cbe7,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.15,cd91473539f38e88d10cf9efce3551afa1dbdb45,2024-10-25T23:48:26Z,427455c139fca6937bd56f0fd041d4aabb512c699c30270e7c604b46e1275c13,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.14,412febbe2eb15958f92dd6f908b14cfcd2ff2c16,2024-10-25T23:45:50Z,0316bd01404b8ed92807bdd903fcf2a1d5efe0534e4f524192e48f54d46fe013,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.13,00c3a73a1a043f3ca76cc2cfd20ac5ccc1e3377a,2024-10-25T23:44:26Z,2823f24541a189d5024e2c121ff9d2032d40b6893f2dacfefa40a8ccdec790b7,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.12,cee6d023f30d5cedb4eaa2b1384b49597a9bde66,2024-10-25T23:41:52Z,592fa60e391e2a10802e797ea260417b44c4f1e53c57bf5cf72da7a0274c5ee9,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.11,e1e117f0e95cb373f9bd5e159e54e6ffae1bb32b,2024-10-25T23:38:27Z,e29ae556a166a0cd71d4e855581c7e4e8231c40d0506cb29395d6d3a87cfe96b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.10,733439dc03b21ea92c096b6cc31befc133cd9081,2024-10-25T23:37:09Z,1d1b51d5d09ccbaae94ca7f53d1d145bb92e10f90699a5306c020c994fc19d38,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.1,3f0a5f136aa72f785ca86df64c4384db2e9c8bbb,2024-10-25T23:34:24Z,9155c5fc846d98128da1b0651729cfa381e38a33b9b9253bcd5c208574b1b811,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2,0418c10ec37fa374867eae49f2f776c72c55d623,2024-10-25T23:33:11Z,73f44c0dfeb77f46e1be5a6e8a8edc32202fe0a6fa1e52468f4c5ad5144679ee,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.1,c487c0ea418315edd4a8614854e82c5359f4b8f8,2024-10-25T23:30:56Z,b351a214f26f0acb73e0d034eadeea27ffc83ed048a117bb121324e04f48104c,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3,5400ccf243a31d664153a4b9ceb9de3edfce1e0e,2024-10-25T23:29:58Z,e619064424f2e9b61fa06ea1c28fdeca9dab915910a8f2dbfe6fe933d02cbf57,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.3,07cf1c5caab19852ccf85ae7000d788913f3411d,2024-10-25T23:27:02Z,9cfa97270bcb7107753a2e5d22afc72fa144eb83204dfb25ec5be0f92d0d55c3,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.2,8adae7eebbc791433d5f0f58daab558a8fbe847d,2024-10-25T23:23:02Z,9d99b562eaaedca1b85cb90c3fa7c4348ee350d35176fc1703d4b3b9ed70eb2f,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.1,43361e793b63d57570a5a46da4a5cb4a1c3563c5,2024-10-25T23:22:57Z,bc25a8c440bdb7ce597c25362430d3bd4a69338d013fe786547c4b169d416166,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2,d6eb1c53d688a242bfb5e3b4febcea66c49c0fe7,2024-10-25T23:18:52Z,06dabd5bf940f12315a3ce4c422de5279debaa7d22e4222d60ff9e8314ddf997,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.2.1,7dc04c755eef47b34f5763dcfc8d16913c1b7a08,2024-10-25T23:18:49Z,b991aa4334859db303bbeeaa4b707536e01f2b3250152379e3bf68e4be1e39d3,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.2,38ad8e28421c745c06ef9bd55f6e6204cd1f15ef,2024-10-25T23:14:57Z,3ae9c79be39211330e9a3609df06e5de7c5413c9191507901a04e939d4c2bc0d,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.1,be6f05d34736fadf37328058f00e788cb88da61b,2024-10-25T23:14:47Z,e26266e2cc4ac2a7b34e76aabec0a3f9a7c44479b13297938fb479d1f043c77c,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1,6efb5e31df6bc512ed6c466584ef15b846dcecab,2024-10-25T23:09:56Z,80a1dad1f1fc792c6aec58fc2236937637589167d1f9072e748e7f0ac8e88a56,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.4,c028b855ee3f12c835ff3538a90ac5dbc155631b,2024-10-25T23:09:55Z,4e7e2f39cb14e36641c9b7d8255629ccccd11cf2ce466797ab0c75bf3369c3e4,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.3,89c04fb1836fb865565125a4d5880b93e784d856,2024-10-25T23:08:37Z,b92aece9b6a5b1d010fac6bd603f12b3c3d1e897c18c77a1ba75e28c246082c1,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.2,ac0c9879c68b23278178a7afe738285b33ff1832,2024-10-25T23:05:22Z,1fcd537d0254783b3fa5906831cb8e4ed042f667948908d541812eba5f0df0a8,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.1,cf18f250a40f33cc648d869eac833cd9aee86ed6,2024-10-25T23:02:52Z,133d88f6a8b3e734bce16b226c956e56b10f198a442d872069cd3a850c0fd9ab,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc3,47f121af8ee55a0dbe2a8c9ab85031ba052bad6b,2024-10-25T22:57:10Z,9a42a8210f21099380bcf471fc5cb2914ac24fe0424b250f3bcc80de3d79a099,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc2,85d0a8366e64f8272e332a63a2cba59afa3f7eb9,2024-10-25T22:57:09Z,f06a17a07f0744fd60671fdf89845617712dd200e138dfbb4cc54a20b0ad2a51,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc1,3c68ceea1f93119bed871866c690fbf5a95048c1,2024-10-25T23:00:53Z,368d833b711ad3a11b3241e6abee7184f103476a8d46e6d2d4940f7b454ec708,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0,4ed7957623e5ccbd420a09a506bd6bc9930fe93c,2024-10-25T22:03:32Z,d3728dd03c29d29237c2bc682884f5fad5535b41256a78f3314240e6458215b2,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
|
@@ -0,0 +1,97 @@
|
||||
ref_name,ref,datetime,sha256,openssl,wxwidgets
|
||||
master,09e092774c00416bb1635880ef210d13aa99fe98,2025-05-25T00:21:50Z,5a405999f2332111d10d70699ec659d7766a34c4339c915fe75aca16324a68e6,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-27,c388a2d1b3f9918652276d4798692dd4d8ef97fc,2025-05-25T00:28:26Z,c1c79695b4559eba35cc4df207b6b6063fa38bd2f67bbf1531f43dddfff171e1,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-26,7335f79eeaa0094c274dab2aa2ced9e138027c75,2025-05-25T00:24:18Z,74323d309a36c3cd21a7e4daa4989852c6077949d1ee5a4ab2403ddba5757234,openssl-3.1.6,wxwidgets-3.2.6
|
||||
maint-25,52199ed7e79646b73bacc47c92967ce9970b2373,2025-05-25T00:22:01Z,cc76a4f8a183c5b077a955a520b7ff12afe4063bcae74de26e9bdd71b5fb39a0,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
maint,c16299eb821718afd337db67f89c0fac56f79496,2025-05-25T00:19:44Z,b345cb6ac07ba03469833927f4de4e3e44885e44996d7f3e3e30e9b4f6dce0dc,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc4,bdd4594181242f0d681b2e464b8bf12205fba30b,2025-05-05T18:58:38Z,584ee2ce5b63331ba57bf362fb20a6e28b7e0b26040ea9100d5ee7522a7148ce,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc3,cf38f1efc91853e384542ce105639226b7367ea2,2025-04-16T11:51:19Z,bce2b8383898fb5386bfc14ca4462e509ed7f5a0466fe5d215fd8a2dfb2f5c64,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc2,5ddf7a91568cdc29cb85f43640dbdb40fb3b3985,2025-03-19T09:16:11Z,e1d04af4b57b921b0edbddf0595bbda3d89f50db67460a04ce77ede3bad1b90a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0-rc1,ba8f061732c41ad4bca7895e47acb5d26f54c032,2025-02-12T10:47:48Z,028793678f35df042a565fb17552717506bcfbbce6e7dc395ed9f896cb7eee62,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-28.0,7a57568c13dedf4ab82ea2b881619788749bbdc5,2025-05-21T08:16:14Z,31a8a7deb607f936a24024a6b3ed278a2fd16af608687e1e2f91c9a6554b43f8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.4,fe31f32661e4e90ae4a1bb32551d2937f7c4e12a,2025-05-08T13:53:15Z,2d63ddb0d51d2964e9d5f01bb2a54c43ec4840cffb243f6a70d300628e891b99,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.3,48a429f47c03e0fee574417345be90efec815abc,2025-04-16T14:24:16Z,b923cfb68d483cd3de99f1c00944e36b5596a7239c77675e5d07ce675357109f,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.2,94c2583f43441ecd788e85ad00982b03e6b572f7,2025-04-04T08:53:14Z,7e6f744f0b92bcf36697db476988ecfd9be96840667667561496cfa631bae402,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3.1,901752e05d3ef678b22ecddb7379e8fe2a5facdd,2025-03-28T13:21:24Z,a1b94b8ce7c151c59e309599bc2c290c824e4805b66b135f5ff2db261bb1eac0,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.3,15637bf0ed9e2a5d015ae9260c0912e2de2d7108,2025-03-05T10:13:39Z,f52be7289b13755ee20121a40e2a910f707fce3c2e4f1d358a525377da7789de,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.4,4df6b11359260d5e01161a651a35c7391021a218,2025-02-20T15:13:30Z,7797d076b5e0d8df7f36fcb73b3d88898da8ab98d801441fb78a06bf609db6ac,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.3,7eb2efcf82912f24e3d8ccf4854b42f28b5955bd,2025-02-17T17:14:28Z,bd7f58deb6c97cd75fe63f9d36395d1675aec4ca0914f8f0f389fd7f0d2286d1,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.2,d7f17f87b48465e4a3ff8d427df1551f91672d2f,2025-02-06T15:01:49Z,ef44d779e4f8cfebdd59240a41b3ef4e99bd2e35ca84f219b7842d42f1ec0721,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2.1,c5725e0f7397b4c1296190bd96ac0fa50b850f20,2025-01-23T18:18:42Z,13151d5f3f07efa4b30c9bd824b34d7d85f289bf28baf633e504d5eb4f8177ae,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.2,46f2418451d1991d2060dc5b4d7d88f8259c9291,2024-12-11T10:22:06Z,91fd068ed9748b83f95b6e4a8c60e59562567a507cf6d4da8f8d44a88523ce54,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.3,e8ab3f7fdc59da5dd4dc8ef8c1c7bcec22b52faa,2024-12-05T15:17:20Z,ea878ed7d9c13c2aa44f6ea5af8321e1111967828577e5532d6ee04d92f7194c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.2,1926819171af845832795d87bf1be0220710852b,2024-10-28T13:12:50Z,7a634452ab85a23d210ef482c89af7e7e8448e063a1ccaf92e815daf52b1a135,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1.1,67ded430d9be65e2e6c11bba323c0eb62d07cd1f,2024-10-28T13:12:16Z,36790419f0f30260174474d2bda9a3a8e269b0f3ebc6d873af03a3da93243565,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.1,9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb,2024-10-26T01:31:19Z,99601924bf4b9656e4ecaff9936d4a3c15761b69a64cec24a8b89f6cb4f0e4c7,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0.1,ee9628e7ed09ef02e767994a6da5b7a225316aaa,2024-10-26T01:24:32Z,f95748869c9206d394369932532ca2c23a6d21447607c6705cea4d5ab28c921d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc3,5df3992d695da4d7e8777cf7605279ce9d131f1c,2024-10-26T01:20:53Z,b8cdb3aba95f10ca0b2c61a0a6e2383dfc1d9cee49ac77d1955f6f0e5e80e58a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc2,e651174c569694c92b1794ddd0a1a4a199610091,2024-10-26T01:23:23Z,4e0351fcac3399a217fddf6af30db45377ffbba1fe59c5d3e7dc6d364c077aec,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0-rc1,b74bd21d5cb52e0fdc5ea321439c428783feea23,2024-10-26T01:13:02Z,cf0b249e72a1ec1db93c4d081bdf20309383a0ab47971f392484323ab58b62af,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-27.0,f1c72ea22f0d0479807fbe543191f7a1ef325838,2024-10-29T19:30:52Z,41b4ad3e7081151c10b964d1b63982704d6a840da8a525bda0423f42028d180c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.9,f900850abbd2c45b618675d1342ac85492ed1c5d,2025-02-20T16:14:22Z,2f1cba5d0a752edab7f4394bc361854b69cd89fe71f06acfc9e42b82b9a42324,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.8,45fd6b3adb81f0b245d9baf4dcbdde049221fbff,2025-02-12T14:13:26Z,21d6aa90527a2fa16a47a73ad739925c6d8811d47d530a81a987cb53f2def3bb,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.7,fa62351cef47e7dc502c5d0b1348ef8988b5d7b8,2025-01-27T12:57:08Z,c204588b446faf19c189ca536803b818c5b8b46c529a3b0b7df67a11d92b8412,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.6,1f4a3b013b1df4034d6fb63623e77bfb142cadda,2024-12-05T14:50:08Z,db9635c0b1d6d79dc0a66bdf7b64c41a1323b8790551a6df3ddb659f3deb1d38,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.5,81399ff534e71be2425a0cae96e26c104fcde2f3,2024-11-01T07:16:35Z,fc58d3d471a552451e6682df652fe989d5be639e9179e3d6b44deb78d4867501,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.4,b6e7e233d0b781728e745dc04f4cb2645c6632ec,2024-10-26T01:07:55Z,bd3f246ddd8448c1cb877dd9d9137ab7e77f9700608b4c0f68968a81f13fbb04,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.3,84152c2c9d85128d3cce471f645f154c34132d82,2024-10-26T00:58:33Z,941970ed37bb76d690e03355b7d4e6770af076d89b62f542ac140efafdb7a179,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.2,c1805ad6200cec57bf86640fb9a1c715db515b78,2024-10-26T00:55:50Z,628bcc158e5662004135241e7ab3e71146860c9fc5d1f86829061da38119144a,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.12,a2f903599fe779380ec197c8ab41a193eec2d148,2025-05-08T15:46:20Z,6cd58a09426aff768fb0117b27e60cd2b671c1336424aada0d48e47e26d4449f,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.11,c2fcd5185c0651630196b6997be848a344c4aa71,2025-04-16T14:47:54Z,dec9c637e619dbd9add023c50a5ba0b23a30657d543417d7ff0d9033abdbbebe,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.10,eaa1b25cd65de117e82a4fbf709cb5cf6836f5ff,2025-03-28T14:48:04Z,aa5a5759222e4eec003f5aae0f2804e2e487da4c81feaed7305c3a9e87fcdbfd,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5.1,858efd5b35b572c71a8010ad323c4127eef5bc29,2024-10-26T00:51:06Z,587a9b9f7d5178895194691fdb57fab4d9b819cba644129381a73944eadbc821,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.5,412bff5196fc0ab88a61fe37ca30e5226fc7872d,2024-10-26T00:49:32Z,8eb273cf5c459829cca28a8caada5b0e289f43c126b0718fa85888731dccf7d4,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.4,e26c5206dc98ec1b8f978fceaa61fd1354266ccb,2024-10-26T00:43:46Z,ed9a515471bcf07ce392b0d3837f001b555f55d670f07f32cdd6c5ce510d78fb,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.3,928d03e6da416208fce7b9a7dbbfbb4f25d26c37,2024-10-26T00:44:24Z,92ec2364d9948b4885714aca32a1beb1115c753cf0a2b19b03012bc1805fe556,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.2,b83df13eec5446beab06dd24315d37a5b0633fd2,2024-10-26T00:39:35Z,e23a011e026687b66a25da9a1f6bcc4da94494c5de1eba6440b5b25b6f00ddb8,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2.1,ca8b893f9d5bdd0957b78514ba523032e762c644,2024-10-26T00:33:26Z,459bbf4efe65a4575bd16b26ab7d69d39327433233a712ebbe1dccd531fcf87c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.2,7fc0898502cb3370b7c6d523a7393cd101808493,2024-10-26T00:33:56Z,6b9760085de085f3a12d20935f338fc99ee67fd35d2e62a7e3e9cffb9b21242c,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1.2,c41d424db42ba84b72f3e25167470c3555723d87,2024-10-26T00:33:32Z,82ba154649c17be8ff45268239d36e4d34e82a520ee57a49b9b337e3fa77d69d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1.1,2bdd30b872ab91dc376998d2c417f2a8b514d1aa,2024-10-26T00:28:08Z,d5ce0b59d827c751ab2f68e5e7f1757dabee399040eaedcfba491c8c79c66cc3,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.1,e962af35263618665c1df57df5135c0c703ad502,2024-10-26T00:26:33Z,236ea16e738e5c57deae3ff424ede7944ffce14fac8b939a18ba2ccad85e4d81,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0.2,d051172925a5c84b2f21850a188a533f885f201c,2024-10-26T00:25:48Z,8cb58daa3694229068f5a3f621c5508907a20593955abfd17185720505946764,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0.1,b54b86ad4f1253f46fd4552a73923756660c1d53,2024-10-26T00:19:22Z,fb7d35f7838fd9422cdc215f2177953fa43bf72357628c59eefeb4c0852c5121,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc3,1f897adc9df5e0de5d5a85633a8629a7e45ddeab,2024-10-26T00:16:30Z,ff2a6fe3e3c6f7aa851604c0ff3163cfe3dbf9ed06d2f1a62f753a758d9d39bc,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc2,dac89a6acc1a93a615930ca18f1dbf4e9323b038,2024-10-26T00:15:34Z,c9f23a971cde0b7bb25d0b82a18f55f958ac169d499593c17b3d0c5d847a4714,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0-rc1,127026003180a834e9fa5d5919c824a184faeb92,2024-10-26T00:12:17Z,abf7d8ffafe4dafc39df96c062a0aad392f03c0abbe9a5d9f7a5b01189e48f9d,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-26.0,8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee,2024-10-26T00:11:24Z,8952b4fb76ce8d1b95b2de8643ddf19ad84993563860b313382915b290ef2d97,openssl-3.1.6,wxwidgets-3.2.6
|
||||
OTP-25.3.2.9,68fa9c42426380772784eed26d24747bfee38fcc,2024-10-26T00:08:03Z,5702fa82c48a9732a5f1196cb32b617c475851e3471fd2b6e7e719792dfc032a,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.8,c08f5acfb4e47933d8128d0b41b01487d0eb97a1,2024-10-26T00:06:15Z,c6c1929c5408e9d6fc66c1b606e0926f362cd057db838b6013dac54b94cab39d,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.7,d3c9eeb17042e5567337e1f87c924b25186daae0,2024-10-26T00:04:48Z,fe43af77747d7034204451ed630c4851d86c23432ce89d5f253505988656036a,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.6,fd0e27a5c1ca7afde30b10c1b33a35ebb3313fd1,2024-10-26T00:00:23Z,83bf16f30737ec14bf32a1acbfd86f65b89be2fa8b8bd4462c70c6c48d1e61b1,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.5,5cb360d524a5777ed4243ac03a0162a95f545a16,2024-10-26T00:01:37Z,ad254c611b29df084470bf3f757e619287b52c3145dced61a46aaa85bd58b36b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.4,9e6d04dd18bef6136fc2b45cc60fe1348c4664a7,2024-10-25T23:56:58Z,e1fd6458c109d6fc3f8ebca01b5d29a718d9612a7ffbac464ce870daf69cd6fa,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.3,da340fd39fc6550b1432662ffa55c3b6da3db41f,2024-10-25T23:55:04Z,3b40c8fbee2bab28e5d979994dce3dbb0761df348a21798b1c50467783781324,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.21,eb0176f76725c1d6cc594ac3c899cf5340f6a4aa,2025-05-08T16:49:06Z,8aed83bc19798efd25e0a32fb1eb174904a2881b3d9a8039d86f7aff6375cdb1,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.20,3d83272458f7b0fb05aed4981a15cfa72ef7d2ba,2025-04-16T15:09:30Z,7456c582f71f1f8448cd6d2349302985e4691bc24785f72495da7db9989c54f0,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.2,ba144817d5478b15a50ef0c398d925232005277e,2024-10-25T23:54:34Z,e7d36cab3aa0096c549f8e8fcd381fb3f4005dba698fc1f096dd9373b3862cd8,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.19,2dc11e177ba8e5e051a2e88b731ec6de0eb8bb4c,2025-03-28T14:45:35Z,23b29d4fa18af2f0252b7d878316d492d114a0d3c2a97eed5e874601b36bddc7,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.18,e1346297304a626ef9126f77e8b943d51646fe5a,2025-02-20T16:10:45Z,adf16cfeab7e02003be2e13b23e37bc7952b45025e2400a008acab0e36c805db,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.17,90a7540d93530990531ec48a14594efea8974ca2,2025-02-12T15:11:54Z,6bd872e819aabdf2c07f81d6a0436f1a639c778440cf10be3dff783a88a9e4fc,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.16,b21c9ee6961e5b6aa1595d1f7547b349973ea833,2024-12-05T15:46:47Z,571677874adeeb77e585b0e732a13ccfe707497a6abfd45aa2c11df59ba4c46a,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.15,cd91473539f38e88d10cf9efce3551afa1dbdb45,2024-10-25T23:49:57Z,1f0d974438da48dbd15823a3e2753d5ca4a5aeccef49d7814af40393a3aff26f,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.14,412febbe2eb15958f92dd6f908b14cfcd2ff2c16,2024-10-25T23:49:51Z,9584a37799b64b3f095e36f000b0574ed5119ed8200899065da298b7e59aac32,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.13,00c3a73a1a043f3ca76cc2cfd20ac5ccc1e3377a,2024-10-25T23:44:27Z,eed02812b0104e5fa530bc2a932266fe5102412ced43efcbd7ce2ed9962c4017,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.12,cee6d023f30d5cedb4eaa2b1384b49597a9bde66,2024-10-25T23:43:41Z,c033ffd03966263de25794a1768813a0434c77e575b546a0b087fd587d5b63fa,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.11,e1e117f0e95cb373f9bd5e159e54e6ffae1bb32b,2024-10-25T23:42:59Z,5dbcce0b562c03c273c29acb92e56d0d8a1fd25da15a665ffc3f621d8abdf94a,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.10,733439dc03b21ea92c096b6cc31befc133cd9081,2024-10-25T23:40:26Z,ec0305a15e69fa9aa669fc2c95b34ded49597e77be84121da7bba104ac92f06c,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2.1,3f0a5f136aa72f785ca86df64c4384db2e9c8bbb,2024-10-25T23:37:53Z,08c5b69026a6405d8b7f684cc295d75c09c1caaa8b339019dda35daa29db11ba,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.2,0418c10ec37fa374867eae49f2f776c72c55d623,2024-10-25T23:36:51Z,8bd9f9a7f4580258b69dc6e4408ea300adc375c652ed519c5a51783aac200793,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3.1,c487c0ea418315edd4a8614854e82c5359f4b8f8,2024-10-25T23:34:37Z,d8b7c21118650c8f2703b09b4af92ced093e497e54e876e77c0ca66f75a91605,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.3,5400ccf243a31d664153a4b9ceb9de3edfce1e0e,2024-10-25T23:28:52Z,92a0ff47f7358c3d54dd2662f31209fcd429e625662891c34f995ae4f5046dcb,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.3,07cf1c5caab19852ccf85ae7000d788913f3411d,2024-10-25T23:29:00Z,73663617ee99d142ade4fb1f22148542d1c2cc81d34cb4dc9ca3a6df0fd6934b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.2,8adae7eebbc791433d5f0f58daab558a8fbe847d,2024-10-25T23:26:48Z,e4f1f0d8e822e2c65ea10d187b1123d421583db7c58a8ca75159d4387274b294,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2.1,43361e793b63d57570a5a46da4a5cb4a1c3563c5,2024-10-25T23:24:37Z,0ea3e0bf2e0e4b392cf5673df947087c9be8383c9a6bee33ce371529737c7e23,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.2,d6eb1c53d688a242bfb5e3b4febcea66c49c0fe7,2024-10-25T23:22:03Z,adb12459803d0eb2c7033af4a1262a788ef7d00a43bf3be83cb25d7ab3a63370,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.2.1,7dc04c755eef47b34f5763dcfc8d16913c1b7a08,2024-10-25T23:21:03Z,67fe4b03b2d2539397df718c2d0161012fa4c6586e342021d6d47c04574551d5,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.2,38ad8e28421c745c06ef9bd55f6e6204cd1f15ef,2024-10-25T23:16:01Z,4a1705e5976b51e24159dc7cd06d25d58aa0dbe343e30119c6211a26edf825d1,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1.1,be6f05d34736fadf37328058f00e788cb88da61b,2024-10-25T23:16:23Z,62640b84c7a211c3d66919dd21505e42c9cc6fbf2deaafc71b1d7afbdba0a851,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.1,6efb5e31df6bc512ed6c466584ef15b846dcecab,2024-10-25T23:14:41Z,121b4ff6f86788cffb889836602f148dcb71ff60104cee838d5b953e2ddfc864,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.4,c028b855ee3f12c835ff3538a90ac5dbc155631b,2024-10-25T23:10:57Z,bedcacf4cddf158f68c6972a86be6fe1362957741738c53f37ba77d5902abed1,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.3,89c04fb1836fb865565125a4d5880b93e784d856,2024-10-25T23:09:39Z,fc5e45caad51eb4b684eef752ea8eb96385de1d826b4551e07f8e0b03df2c87b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.2,ac0c9879c68b23278178a7afe738285b33ff1832,2024-10-25T23:04:51Z,cdec63b483271cff74566977f346271ce3cc3508599de150d427a2e97e67fe4b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0.1,cf18f250a40f33cc648d869eac833cd9aee86ed6,2024-10-25T23:05:17Z,04f463cee1e252480916f221556e72bf1b1d03df45d58c6d09afd9adefd6699d,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc3,47f121af8ee55a0dbe2a8c9ab85031ba052bad6b,2024-10-25T22:57:47Z,d287456c7bf237c5884d07445cfca277eb541e2fbae49d0d3b70946ba8132e59,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc2,85d0a8366e64f8272e332a63a2cba59afa3f7eb9,2024-10-25T22:57:08Z,949bad8c339694cbf4e4f6a84a3dd36914718e37358e257705512ea7e6605c44,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0-rc1,3c68ceea1f93119bed871866c690fbf5a95048c1,2024-10-25T23:04:36Z,9a39912e8fb6c12f9bc7e589be7cc176667d3b8a9c48c525a83e069f1ef18b1b,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
OTP-25.0,4ed7957623e5ccbd420a09a506bd6bc9930fe93c,2024-10-25T22:09:27Z,a6d318a64dc1593b6bea301a799352229b904ac6ff18a1c1fcaec97f7718f83d,openssl-1.1.1w,wxwidgets-3.2.6
|
||||
|
@@ -0,0 +1,99 @@
|
||||
OTP-26.0 8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee 2026-04-24T21:11:44Z 9210a9e4b3f12cf32dd2f42857dc980e2776d52505c0c34858ef6d50a186dd22
|
||||
OTP-26.0.1 b54b86ad4f1253f46fd4552a73923756660c1d53 2026-04-24T21:10:25Z f1c399db68ea5885434201dd48313bebdccf2222e68268b09214dd3401400faa
|
||||
OTP-26.0.2 d051172925a5c84b2f21850a188a533f885f201c 2026-04-24T21:08:41Z d0260e2f76ddfffa46dfd5090cfb6464eed2aa3f09dfb032b01cd2882a760e10
|
||||
OTP-26.1 e962af35263618665c1df57df5135c0c703ad502 2026-04-24T20:58:59Z 623ea1623afbb19feeb257fdc92d17a82a35a8ecea32925c0c89a2a6d3dd9853
|
||||
OTP-26.1.1 2bdd30b872ab91dc376998d2c417f2a8b514d1aa 2026-04-24T20:42:54Z 68eb1802931e87c70c9ea8bcc6de68062785cd6c67abc0696f2e07803403f12c
|
||||
OTP-26.1.2 c41d424db42ba84b72f3e25167470c3555723d87 2026-04-24T20:41:58Z 6851172f8d6bbeed99e9aeb73dc0e8df4cdfb69ec4275ccfbd6c85d402786608
|
||||
OTP-26.2 7fc0898502cb3370b7c6d523a7393cd101808493 2026-04-24T20:40:23Z 8c0f14ec76b26ca0a8bc7fe1d536b3edc7513ab48096d5c09452953140a01f61
|
||||
OTP-26.2.1 ca8b893f9d5bdd0957b78514ba523032e762c644 2026-04-24T20:29:53Z 7569ff704e74b681825dd14577ec4784a43822da84e2590fc93d13160cd71716
|
||||
OTP-26.2.2 b83df13eec5446beab06dd24315d37a5b0633fd2 2026-04-24T20:13:25Z 85c443095df61087f288601af92af7c07f7190570a4aa55eee9114a2d00ccf2b
|
||||
OTP-26.2.3 928d03e6da416208fce7b9a7dbbfbb4f25d26c37 2026-04-24T20:12:42Z 067b97c62cc5bc4753dedc7e63f1b6503bc02e89d67eda49c1c23ba9e54beaa4
|
||||
OTP-26.2.4 e26c5206dc98ec1b8f978fceaa61fd1354266ccb 2026-04-24T20:11:19Z f6a83da7f5fab9285d1c3e5731dcd65b6a93a5f7285fe4ef08e9c2347d241b30
|
||||
OTP-26.2.5 412bff5196fc0ab88a61fe37ca30e5226fc7872d 2026-04-24T20:00:51Z 53ab42240cbacaa9e33682527abf7991cde3653401a2216f0f83e26cb50a9f8b
|
||||
OTP-26.2.5.1 858efd5b35b572c71a8010ad323c4127eef5bc29 2026-04-24T19:43:57Z 833b9a2e7955e3d09d872ba821fa8eb1fbad55e63ef119209e93bd445d82f90d
|
||||
OTP-26.2.5.10 f607645b971572b03f9f45551b1804f41fac8fa7 2026-04-24T18:43:56Z c0023d40d000daddd979b494172c0ba51c33857082e598d962448ed3c617f568
|
||||
OTP-26.2.5.11 9f6c4eb54823324d1e6f8cb95c15feb09f09044e 2026-04-24T18:43:17Z 500f8aa1a0784c17715e6bcc10ea9761cc56ad196c335e4c90909e0e4a05c075
|
||||
OTP-26.2.5.12 7335f79eeaa0094c274dab2aa2ced9e138027c75 2026-04-24T18:31:47Z 1c6deef6d752ed7b838820b973be5078f2f110daa9208c9a29a59709787126da
|
||||
OTP-26.2.5.13 0ac548b57c0491196c27e39518b5f6acf9326c1e 2026-04-24T18:14:48Z 325b0c25d2981d064edce1188c7583e02f89b366a22571299461b62b323f6cea
|
||||
OTP-26.2.5.14 c1ce39f1f7bafa253514a8fa646dc00112b066bb 2026-04-24T18:14:10Z 0aa90ffab8371e2f32114564254eb2c706aefa6163107739301e7373db4a3dc0
|
||||
OTP-26.2.5.15 4d9b61940e8d4dd00059306983022e3114fdf245 2026-04-24T18:13:42Z b25e8597f9e9fa21c7ccdcea268370ef0eec3897be46975cb128c34072d3ddb9
|
||||
OTP-26.2.5.16 ce72bbc20a4236d69ac716624ccb799921ac5903 2026-04-24T18:02:15Z 84b96e04576832cbebcc98bae783152efb290d09913de160ab926b00a0e0dc9e
|
||||
OTP-26.2.5.17 3532818e19647ae5675396eb501400783e5ca693 2026-04-24T17:45:04Z 15b674046eefa090491609f151f9d7f9c3eb355d38bbd4bf34108f09c373cae2
|
||||
OTP-26.2.5.18 8c304e09e4d9301f56f6d7b2c4c9f60b4f9d9425 2026-04-24T17:44:16Z 795ca3e87bda7564182f9f5a9c1450c00f719d64e26ce5e2dca905ecb83e5437
|
||||
OTP-26.2.5.19 cdb375af6b456946b1ff3fc993d122018f20b031 2026-04-24T17:43:44Z 33603c379bef7f41a459bfea2c308d885f38118fc67430fd1745fbd22a3b72b7
|
||||
OTP-26.2.5.2 c1805ad6200cec57bf86640fb9a1c715db515b78 2026-04-24T19:43:13Z 18d7bafd68d9030144632674e2d2c08285d6c5ce3ae210af4e8642f83d8f5e37
|
||||
OTP-26.2.5.20 e5d6d95c9aac559b59b78c66eb558ee54bd4e006 2026-04-24T17:33:05Z f11bea66d601ff23affb32158d18b209e6e475a063706572c3be835e6edd9fdc
|
||||
OTP-26.2.5.21 c9ce879f4ca194adc5393f52b2c4cd57b3c3d89d 2026-05-31T16:45:05Z 98897de6d71ef8c5542c822598a538f3269a32c56d819fdb69858fbe7329e403
|
||||
OTP-26.2.5.3 84152c2c9d85128d3cce471f645f154c34132d82 2026-04-24T19:42:01Z ea3e17728b77b1cd7c7386e0fe5fe927f26f772e595930f09bc70abde6365115
|
||||
OTP-26.2.5.4 b6e7e233d0b781728e745dc04f4cb2645c6632ec 2026-04-24T19:31:30Z 753f5b0fcb908fa0b7a1e00234feea24ae71e5ed9f73284b501ae089f202ce59
|
||||
OTP-26.2.5.5 57f154f5ceb592ffa5360f7e338577fa04aa0d5f 2026-04-24T19:14:05Z 6e16453c2e32f7c8e81f26a0aa7ba6bd2cbeeaaebe8c174518cce813d4938931
|
||||
OTP-26.2.5.6 51548614b588c667a4230c17e2b187474dd70d63 2026-04-24T19:13:25Z 1867dc3687b07bac702247c02cd8284d0b5175ebf0aa3b069f86394cbdfabc4a
|
||||
OTP-26.2.5.7 3b059b6caf4e087c8c207ae7012bb50736fdf18c 2026-04-24T19:12:19Z 6259f7e5dcfe4fa0808ae09a06d43492c8b8f21215ca07a1e510ed4e01e2859c
|
||||
OTP-26.2.5.8 a7a875106c7af7f094b04a765e93dd90522ef7da 2026-04-24T19:01:05Z 2f5c1866af6bab64e4c49c05536e0acd687545809368c0bc7859af7c90477d0d
|
||||
OTP-26.2.5.9 a2da0bad3f2d49dc1878f46f2d2961144ae0e0cb 2026-04-24T18:44:30Z 600704ad8c34abf66cda2e013ce4e386c8439d63b4c4d1522b74286a5ceea7b0
|
||||
OTP-27.0 601a012837ea0a5c8095bf24223132824177124d 2026-04-24T17:05:00Z 98ad5cbd4a74cee15697b8cf973afd6c39264d104206aab6bc4864cad97c37cd
|
||||
OTP-27.0-rc1 b74bd21d5cb52e0fdc5ea321439c428783feea23 2026-04-24T17:15:43Z 587a51911d99d2696c020a9dd73fedd37172c955a3c3b5e700614a601df35f43
|
||||
OTP-27.0-rc2 e651174c569694c92b1794ddd0a1a4a199610091 2026-04-24T17:14:33Z 5c8928cd68e1c86b65a7f771201d0135aa2616ea28aecd9fba03b5e4ccc7ae4f
|
||||
OTP-27.0-rc3 5df3992d695da4d7e8777cf7605279ce9d131f1c 2026-04-24T17:14:17Z 62604f6c2a4345f452f82122aee67afd5d366c4a04cb9aa52cd3ad18ce5b32ea
|
||||
OTP-27.0.1 ee9628e7ed09ef02e767994a6da5b7a225316aaa 2026-04-24T17:02:00Z a854f39d318ba6133c41ba9275b2d1613e85bc8446086998dd927c7ff8d22fa9
|
||||
OTP-27.1 9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb 2026-04-24T17:00:08Z 80df8276b9d03827cab3b9989d08acf6f98dc65f025deae0554de377f3472618
|
||||
OTP-27.1.1 f4d130fd3512875ee95ce05b30f77e7c7689915f 2026-04-24T17:00:04Z b6a9963e6c02e5cf6338248ef20328c0a6974f8ecfc3ecc606656bead6567451
|
||||
OTP-27.1.2 44ffe8811dfcf3d2fe04d530c6e8fac5ca384e02 2026-04-24T16:51:20Z 6a7ebd11ebc4998c658eb1738c4f91ae262809814dc22705d5a2e19118935ae2
|
||||
OTP-27.1.3 800613cca84970750658b294ddd7977843b3bc5d 2026-04-24T16:47:44Z 50ed511fb2a63cecdbaff83377119e63a93b8ae4276322fadf5204a112696920
|
||||
OTP-27.2 6bf99d64a0df3feceb25c166c3a3cb3f80594f59 2026-04-24T16:45:54Z b44c23696d0e97d440a0565f9a8c8438c44908efa008e7642bfd7402390a0b12
|
||||
OTP-27.2.1 4726e39654c7a7412f7c2f66c7eb567c978a9947 2026-04-24T16:45:47Z 38282ac000f0278d99cbe379b4f7f67e3ddda96e2be3eea5cce2b7e3eac34c6d
|
||||
OTP-27.2.2 8a4e04e9c48d94ef1216b0426fa71ccfdd78f7d3 2026-04-24T16:37:48Z 1935890b96e104a4545b50ba3184c74a7820438425966ea6637ca6777f981804
|
||||
OTP-27.2.3 b6ab3a385ec72e346a44807d53e2109a51cde613 2026-04-24T16:34:00Z bde8c6311cc8242481dad5f1e3f33c920a1be71885fa8e779d9a006fb8cc0764
|
||||
OTP-27.2.4 fc23816894479e0da3a22faaf90c16db3071ade5 2026-04-24T16:31:37Z a560882f429d425c2acc96c634b8ae05eb7b317beca0981e2b8f6ae1a324cb79
|
||||
OTP-27.3 05737d130706c7189a8e6750d9c2252d2cc7987e 2026-04-24T16:31:34Z 8375d270d91a93fb00c4bb472fe3865575b76d7b602c373080c8c7e345d19734
|
||||
OTP-27.3.1 76266a91989378ce53159eee4bd16773e248f5f3 2026-04-24T16:24:17Z ef2a695e00f6fb661d59592448574a9e44e763252d957a48afeaeabf966adf78
|
||||
OTP-27.3.2 7b8942ef7b540bbd1393999e56d0e96b6ab3c276 2026-04-24T16:20:13Z c3c94d3abeea1438abf957bc2b707b1cefdef6b6e3f807440be7eb961d74dde5
|
||||
OTP-27.3.3 10e20b1dbe39b056fab430e50b08cb4f3696ae87 2026-04-24T21:22:04Z bce0743ff5eac77d07217f8c2e624b703c44c2e83d987f3202f7bb9e69348dfa
|
||||
OTP-27.3.4 c388a2d1b3f9918652276d4798692dd4d8ef97fc 2026-04-24T16:17:08Z e3325746961fb1280848038ff06c4cfc2b903cf793f9113303aaf8e43f6e2c7e
|
||||
OTP-27.3.4.1 9b7b5431260e05a16eec3ecd530a232d0995d932 2026-04-24T16:03:35Z 40475e473e5d9e45edce59ec13442ee43062ad8a0380280253d10312623df9c1
|
||||
OTP-27.3.4.10 0aa261a7765c9698aabc7f7c5be878a8850a9c5f 2026-04-24T15:30:13Z c8d7b7d8a0a0a338304b6919bb1b4934bf553fcf8bf7a7e5719634f4077492d0
|
||||
OTP-27.3.4.11 c0ce26bb20ab5fcd6e214fa285aec5a409772e61 2026-04-24T15:30:00Z ebccce035c0b3d890f72ae6868a7bbbbc8530147158df206bff12a448793cc16
|
||||
OTP-27.3.4.12 a2394acad3e3b8fa74d40905cb79bac2ab68258a 2026-05-31T15:52:31Z 6ea6ce3c3195a5a8b190a1f96b8f2b78d9ec3383218e37ef68a7882c5531335b
|
||||
OTP-27.3.4.13 f835a5a32aeeb70778c958b5c01a401973e8fbe2 2026-06-10T13:08:02Z 8f4feb43f4370f8d2e47ceaa572fdeb20c726b831c3eb4a4b3fdc241e9db9884
|
||||
OTP-27.3.4.2 ccff5995c5adf4b5f54adee7ba1a5948053384f9 2026-04-24T16:10:44Z e14df30b6e0422f64b5ac4896c2d4957ec7a87e3c23bf3f1f1a4407e28a3e040
|
||||
OTP-27.3.4.3 940ec0f6f0370ecf5cd93cae31fd91f4651ddca6 2026-04-24T16:04:51Z d2f8046e4be2f4be98af4eeb584fb17affe9421e1a4a0b7d7ae938f20253abb7
|
||||
OTP-27.3.4.4 3a2e1c435fe547a93b1a8c27c2554da72b49f16d 2026-04-24T16:07:12Z 371ec67c2ae4e389737c0d16a44288103407f075a6a4aef9afd02ba43eae6040
|
||||
OTP-27.3.4.5 36239aebc3bc6b873da9ea519c41fb3befbc518d 2026-04-24T15:49:38Z aab9a6bac28cf7c1d3800f8201d02953753415119716ca6a80b103ffd9d22160
|
||||
OTP-27.3.4.6 f1b17a1fb4d2bc74501608852547f8d9b504f7e3 2026-04-24T15:52:26Z a278a261c37fd3f32d8c04240e99d258103857d6af15fd7ad201c6aa0a1ffd1a
|
||||
OTP-27.3.4.7 e56f9815d9f9389768afa2bc45c7233a7db838fd 2026-04-24T15:47:46Z c03da29e8eae9fe36c74976c13bd027f0eeea7713a7dd8c96bb823f1674b2131
|
||||
OTP-27.3.4.8 61633c62611720cc27f92026d075a1f2862ce522 2026-04-24T15:50:33Z a8c645b6720463f4fea2d13e2c5f677a628c6fac6480d7588ae3d63d2dc8a0d6
|
||||
OTP-27.3.4.9 4aa809ae4eb4a20ad89c23837376acf179877f39 2026-04-24T15:43:28Z 1d00d44c7ea910e6f828dffef1d386cc86c18f98e0260c72bfb23c54dc915e04
|
||||
OTP-28.0 9e6f6742c4d9e9915ee8af0dcb7d97cf1f836116 2026-04-24T21:19:07Z b54d35fc7df5f9045694f7d855126effca8b5fc440df7b9ecd269a7eb0b37a98
|
||||
OTP-28.0-rc1 74ed6b0ed20da257f11fc64399a1c8dd4f967fe7 2026-04-24T15:28:16Z 25591d8a6e3b97b8a8fa39e46015084b5fbab99a359be6fd28477f4ef4149cd8
|
||||
OTP-28.0-rc2 b7c33191648c8b280c3bc8baf5434b125e88f0ef 2026-04-24T15:16:49Z 95cd0eb89ce5e27f1fe2a190d569e2cb875558ed8a3cecbe0a0045b33f5c993f
|
||||
OTP-28.0-rc3 feae4e669818cb794a1755036c1b11f672634f8f 2026-04-24T15:16:46Z ba9e38b3d3299cd80a0a14770d3c167e0575a721638e2d68232443868aa0999e
|
||||
OTP-28.0-rc4 56f63ad95cd71ee00b535e6db4e8be180baa6066 2026-04-24T15:15:45Z 016dc114bf08f7c7698c472603c47d70ef56d8cf147dd9d2f6b7aca6958e9fbf
|
||||
OTP-28.0.1 d9454dbccbaaad4b8796095c8e653b71b066dfaf 2026-04-24T15:03:16Z 7329d39b4008ecb35769a2f8cb5f92832c465767d5bc8131caa7708fb00acbd1
|
||||
OTP-28.0.2 d04f6a0b261cf23e316e48e2febe14b30c592dc5 2026-04-24T15:03:05Z bd8ed588c263d5f7f27371718265582cd9d87e04d8a3c72e87831601132d4420
|
||||
OTP-28.0.3 756621cebe01ec43df61d9627380ca7e1e301c9b 2026-04-24T15:02:47Z 0ad74c4a455cad900aa56bde2c04dc4dfa46c0c0217afc440786f83547ba6df0
|
||||
OTP-28.0.4 eec5ff40a2ae2c3b3c6d952709ba4f16a6769024 2026-04-24T14:47:33Z 19aa151e9e2a610fddc018066ffd7ec98162a8a021184f70a2771127e665ca58
|
||||
OTP-28.1 34316363201de07437e14e79ef559fde7becb0ee 2026-04-24T14:47:30Z c9728fc7975d03e8a3299ed6e564c62dd9a2d130420f6066d1c2f179f01c390e
|
||||
OTP-28.1.1 b2e2bc472deeb5deb6fcddf7406364e42f6c3d0a 2026-04-24T14:47:26Z 07514587f9187cc75abf7759310332e95a4b6ac9b2fa0e2de919f3b8bb9c1406
|
||||
OTP-28.2 dff037f64e8eaa0a591866e967ee2b7164329376 2026-04-24T14:47:14Z b0cd18e0d5e09ba12e37cd5944ec8c6aceb0266583fb4209f144bcac4494ba44
|
||||
OTP-28.3 ab489c0b260c637a9487f8753909ea94dacbbec2 2026-04-24T14:31:40Z 401b8ef30f50587488f884da7d1f61d67638d71cad4496fea2d196479124e9c5
|
||||
OTP-28.3.1 aa5b1d3366762ff8f420f2aa6a52604b481530c9 2026-04-24T14:31:36Z 04e88c160c3b55eea59175798b52745e111ba36649cbc6d35f947e8e8b413a33
|
||||
OTP-28.3.2 b74eae92e1dee97d57a9ab3ea3c36e8b701a9ca6 2026-04-24T14:31:29Z ea8be9b0a374602b080570eb0244720d643ecb54ff7611a9f3945c116087d2c6
|
||||
OTP-28.3.3 dfd646eef0dd6b1f3674a7b6c7c7ff944939139b 2026-04-24T14:31:21Z 34b0dd70b1eb74b9de0ed82f69b6db664f6d90e603cfcfa3d3c060f65b7777bc
|
||||
OTP-28.4 927bcc220b923ba1fef574618e82a3b7a2a4471d 2026-04-24T14:16:07Z 257e53beb1143154a80a7c2454261d6abd824b09629d79b99eb4588804247557
|
||||
OTP-28.4.1 c8fca7e34e4db5d977ccf292cc2490ddb05b5879 2026-04-24T14:15:55Z 73eba3639b9873c267b7f4df62078d6f22b146882fd6d5241dbab3be9e0b616c
|
||||
OTP-28.4.2 002fa5032baa0f6a8c4587c81f60e3273775a4d1 2026-04-24T14:15:52Z 1e25cfb65127e2e94913482a2486d38b5ce44c59b1c2858689df9de31a5ddcbd
|
||||
OTP-28.4.3 359d91e66ffdede8f7855565087d324581c28f2e 2026-04-24T14:15:47Z 81d53e2ec4230b521b2f66ac64458e66cd634b2f205ee59e72ea54733644f0d0
|
||||
OTP-28.5 f4506ee46d68694a1d23ca81c314092fd83e8f85 2026-04-24T14:00:14Z 6deadb6b6252376aaac89e5c837c72ec24c44bf3025856ade71d3c14afe66014
|
||||
OTP-28.5.0.1 5770157eabdd4e8b0b83d64fd8b207c0150c2b64 2026-05-31T15:14:41Z 9fa866ad9abea5807b77919c27be3bbbe3806b4998abf6350d06e42068e290ec
|
||||
OTP-28.5.0.2 4567096bddd1ecddb7c973019ca7e769f486aa8f 2026-06-10T10:54:11Z 01b02af31fb20937b146cf68a2a3ee5b129c45be5f74e65b101058d5650c1dc8
|
||||
OTP-29.0 550d7b7898706c7822362c42e7b93120c1d1f29a 2026-05-13T09:41:44Z d20385dfafb49ef36303858c7577de8d8931102b6482fcbbdd83991638c122bd
|
||||
OTP-29.0-rc1 04f1ebb18053d48f18e2a52e6ebe09b5f3d25580 2026-04-24T14:00:36Z b0a44585175f50d1170e0dd5606b3a502bbd82ce8d61daebe294b6c97812408b
|
||||
OTP-29.0-rc2 92322002e7287640f7615fed89a677505b44bfdd 2026-04-24T14:00:19Z b952e731d7ee6d51822d2d261c809a2d4464efd1a87463bcf2c7f4495e7431e6
|
||||
OTP-29.0-rc3 7721ab7462a426c107964b0f1e47207475e085e3 2026-04-24T13:59:40Z 83ecffb614710e05867ba28175e2b9e90d0b68157bf8c1c83793d7d75d5b6d97
|
||||
OTP-29.0.1 f26c7e590c5d1b3afa0dee38093442df117822e3 2026-05-31T14:36:40Z 05b41f99f8d4eeb6944d0201054bc38edb293503353f676df3afbf1042475486
|
||||
OTP-29.0.2 36b336d7675edfb976768465c5067bc8bc16ee9a 2026-06-10T08:39:21Z 905919b09cf6c27decdabc4367af81a9ed248acd340a4b80fa55c3df14489093
|
||||
maint d31b060b5c25715a47cc3611be7ef017c341bcd5 2026-06-11T13:02:03Z dd981f09ae93c4030de6a33f65b655e3257cfe15477d6a83c61d79317e298905
|
||||
maint-27 f835a5a32aeeb70778c958b5c01a401973e8fbe2 2026-06-10T13:02:32Z 4e3ea4facd9f5f8023628412f35a4ec13991cb5879093de99692002b187a94ff
|
||||
maint-28 4567096bddd1ecddb7c973019ca7e769f486aa8f 2026-06-10T10:48:53Z 0656c4606790a6d84faef3b1c46cba705de9e6a7dea4787d3fdeb0dc3d738721
|
||||
maint-29 36b336d7675edfb976768465c5067bc8bc16ee9a 2026-06-10T08:33:37Z 3d7b337c4b2ba12d797c493154a79ee32ae7a8f156b14f943b9216b47e77af4f
|
||||
master 56f75c4dd241431978e6e13788822e4c1a18b0f7 2026-06-11T13:02:03Z 493650afcdeead215e8a10c16605a430e64c24fc4476ba90aa69cf5e0f314279
|
||||
@@ -1,19 +0,0 @@
|
||||
# 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
|
||||
```
|
||||
@@ -1,16 +0,0 @@
|
||||
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"
|
||||
@@ -1,11 +0,0 @@
|
||||
# This file was generated by Gleam
|
||||
# You typically do not need to edit this file
|
||||
|
||||
packages = [
|
||||
{ name = "gleam_stdlib", version = "0.22.3", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F2C2D389B06426E1289D5419F89BDE8E0F7F35A40B2BBB3C88188481F0D44A9F" },
|
||||
{ name = "gleeunit", version = "0.6.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "A006864621DB80C4FBB0746580703502FD81A4D38D23FCB20A8120984D353DF0" },
|
||||
]
|
||||
|
||||
[requirements]
|
||||
gleam_stdlib = "~> 0.18"
|
||||
gleeunit = "~> 0.5"
|
||||
@@ -1,5 +0,0 @@
|
||||
import gleam/io
|
||||
|
||||
pub fn main() {
|
||||
io.println("Hello from gleam_gleam!")
|
||||
}
|
||||
+6
-4
@@ -11,11 +11,13 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: "23.2"
|
||||
gleam-version: "0.23.0-rc1"
|
||||
- run: gleam format --check src test
|
||||
otp-version: "26.0.2"
|
||||
gleam-version: "1.5.0"
|
||||
rebar3-version: "3"
|
||||
# elixir-version: "1.15.4"
|
||||
- run: gleam deps download
|
||||
- run: gleam test
|
||||
- run: gleam format --check src test
|
||||
@@ -1,4 +1,4 @@
|
||||
*.beam
|
||||
*.ez
|
||||
build
|
||||
/build
|
||||
erl_crash.dump
|
||||
@@ -0,0 +1,24 @@
|
||||
# gleamgleam
|
||||
|
||||
[](https://hex.pm/packages/gleamgleam)
|
||||
[](https://hexdocs.pm/gleamgleam/)
|
||||
|
||||
```sh
|
||||
gleam add gleamgleam@1
|
||||
```
|
||||
```gleam
|
||||
import gleamgleam
|
||||
|
||||
pub fn main() {
|
||||
// TODO: An example of the project in use
|
||||
}
|
||||
```
|
||||
|
||||
Further documentation can be found at <https://hexdocs.pm/gleamgleam>.
|
||||
|
||||
## Development
|
||||
|
||||
```sh
|
||||
gleam run # Run the project
|
||||
gleam test # Run the tests
|
||||
```
|
||||
@@ -0,0 +1,19 @@
|
||||
name = "gleamgleam"
|
||||
version = "1.0.0"
|
||||
|
||||
# Fill out these fields if you intend to generate HTML documentation or publish
|
||||
# your project to the Hex package manager.
|
||||
#
|
||||
# description = ""
|
||||
# licences = ["Apache-2.0"]
|
||||
# repository = { type = "github", user = "", repo = "" }
|
||||
# links = [{ title = "Website", href = "" }]
|
||||
#
|
||||
# For a full reference of all the available options, you can have a look at
|
||||
# https://gleam.run/writing-gleam/gleam-toml/.
|
||||
|
||||
[dependencies]
|
||||
gleam_stdlib = "0.60.0"
|
||||
|
||||
[dev-dependencies]
|
||||
gleeunit = "1.3.0"
|
||||
@@ -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.60.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "621D600BB134BC239CB2537630899817B1A42E60A1D46C5E9F3FAE39F88C800B" },
|
||||
{ name = "gleeunit", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "0E6C83834BA65EDCAAF4FE4FB94AC697D9262D83E6F58A750D63C9F6C8A9D9FF" },
|
||||
]
|
||||
|
||||
[requirements]
|
||||
gleam_stdlib = { version = "0.60.0" }
|
||||
gleeunit = { version = "1.3.0" }
|
||||
@@ -0,0 +1,5 @@
|
||||
import gleam/io
|
||||
|
||||
pub fn main() {
|
||||
io.println("Hello from gleamgleam!")
|
||||
}
|
||||
+869
-72
File diff suppressed because it is too large
Load Diff
+527
-194
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user