Compare commits

...

150 Commits

Author SHA1 Message Date
Jonatan Männchen 91bce83a29 Add win11-arm64 to ImageOS mapping 2026-05-05 08:14:33 +02:00
GitHub Actions e5f1a7b722 Automation: update setup-beam version output to 7a27046 2026-04-29 01:33:13 +00:00
github-actions[bot] 7a27046239 Update 3rd party licenses (automation) (#446)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-04-29 02:32:56 +01:00
GitHub Actions fc68ffb904 Automation: update setup-beam version output to 190c3a5 2026-03-30 09:54:16 +00:00
Mitchell Henke 190c3a5e7b Fix error that occurs when parsing TOML files that use dotted keys (#444)
* Add test for parsing TOML file with dotted keys

* Use smol-toml instead of toml for TOML parsing

* Run build-dist
2026-03-30 10:53:57 +01:00
GitHub Actions 92dab893ed Automation: update setup-beam version output to 5dfda65 2026-03-28 23:59:28 +00:00
Paulo F. Oliveira 5dfda65506 fix: address Prototype Pollution via parse() in NodeJS flatted (#445)
Address Prototype Pollution via parse() in NodeJS flatted
2026-03-28 23:59:07 +00:00
GitHub Actions ef385d6edc Automation: update setup-beam version output to bf3c3af 2026-03-27 12:34:17 +00:00
dependabot[bot] bf3c3af135 Bump picomatch from 4.0.3 to 4.0.4 in the npm_and_yarn group across 1 directory (#443)
Bump picomatch in the npm_and_yarn group across 1 directory

Bumps the npm_and_yarn group with 1 update in the / directory: [picomatch](https://github.com/micromatch/picomatch).


Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 12:33:58 +00:00
GitHub Actions e7645e4102 Automation: update setup-beam version output to a36098e 2026-03-27 12:28:06 +00:00
dependabot[bot] a36098e741 Bump csv-parse from 6.1.0 to 6.2.1 (#440)
* Bump csv-parse from 6.1.0 to 6.2.1

Bumps [csv-parse](https://github.com/adaltas/node-csv/tree/HEAD/packages/csv-parse) from 6.1.0 to 6.2.1.
- [Changelog](https://github.com/adaltas/node-csv/blob/master/packages/csv-parse/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv/commits/csv-parse@6.2.1/packages/csv-parse)

---
updated-dependencies:
- dependency-name: csv-parse
  dependency-version: 6.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot out: npm run build-dist

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-27 12:27:46 +00:00
GitHub Actions 87781dc68a Automation: update setup-beam version output to d5f3979 2026-03-27 12:20:31 +00:00
Levi Buzolic d5f3979a5f Support Node 24 runtime (#426)
Update the action runtime, engine constraint, and CI workflow pins from Node 20 to Node 24 per GitHub's guidance on the deprecation of Node 20 on GitHub Actions runners: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-03-27 12:20:13 +00:00
GitHub Actions 930b3281ba Automation: update setup-beam version output to 30056ca 2026-03-27 12:18:44 +00:00
github-actions[bot] 30056ca086 Update 3rd party licenses (automation) (#442)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-27 12:18:24 +00:00
GitHub Actions 1f3f354e6a Automation: update setup-beam version output to 3e49772 2026-03-27 12:11:39 +00:00
github-actions[bot] 3e49772722 Update 3rd party licenses (automation) (#436)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-27 12:11:17 +00:00
dependabot[bot] 2ac22cd739 Bump yauzl from 3.2.0 to 3.2.1 in the npm_and_yarn group across 1 directory (#437)
Bump yauzl in the npm_and_yarn group across 1 directory

Bumps the npm_and_yarn group with 1 update in the / directory: [yauzl](https://github.com/thejoshwolfe/yauzl).


Updates `yauzl` from 3.2.0 to 3.2.1
- [Commits](https://github.com/thejoshwolfe/yauzl/compare/3.2.0...3.2.1)

---
updated-dependencies:
- dependency-name: yauzl
  dependency-version: 3.2.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 12:11:05 +00:00
GitHub Actions c4782c7b58 Automation: update setup-beam version output to 0afadf6 2026-03-27 12:10:54 +00:00
dependabot[bot] 0afadf6bdd Bump eslint from 10.0.3 to 10.1.0 (#439)
Bumps [eslint](https://github.com/eslint/eslint) from 10.0.3 to 10.1.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.0.3...v10.1.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 12:10:34 +00:00
GitHub Actions e539b1ee26 Automation: update setup-beam version output to c5f0656 2026-03-15 18:22:01 +00:00
github-actions[bot] c5f0656346 Update 3rd party licenses (automation) (#435)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-15 18:21:42 +00:00
GitHub Actions ee09b1e59b Automation: update setup-beam version output to f8b54b5 2026-03-14 20:10:39 +00:00
Paulo F. Oliveira f8b54b559e Run ARM-specific tests consistently (#434)
* Run ARM-specific test consistently

* Fix for builds.hex.pm

https://builds.hex.pm/builds/otp/arm64/ubuntu-<x>.04/builds.txt

file is only available when <x> >= 20.

* Fix for builds.hex.pm

https://builds.hex.pm/builds/otp/arm64/ubuntu-20.04/builds.txt

does not contain Erlang 19 any more...
2026-03-14 20:10:19 +00:00
GitHub Actions bf1ce74034 Automation: update setup-beam version output to 559a930 2026-03-14 16:57:33 +00:00
dependabot[bot] 559a930751 Bump undici from 6.23.0 to 6.24.0 in the npm_and_yarn group across 1 directory (#432)
* Bump undici in the npm_and_yarn group across 1 directory

Bumps the npm_and_yarn group with 1 update in the / directory: [undici](https://github.com/nodejs/undici).


Updates `undici` from 6.23.0 to 6.24.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.23.0...v6.24.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.24.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot (exec: npm run build-dist)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-14 16:57:11 +00:00
GitHub Actions 1380ebe712 Automation: update setup-beam version output to 0a54959 2026-03-14 16:50:39 +00:00
Sebastian Weddmark Olsson 0a549596b0 Compatibility matrix strategy (#389)
* Compatibility matrix strategy

Example on how one can maintain a compatibility matrix

* v2 -> v4

Co-authored-by: Kian-Meng Ang <kianmeng.ang@gmail.com>

* ubuntu-18 not longer available

* Update README.md after review suggestions

* Link rebar3 compat

Apparently rebar3 has started to maintain a version compatability table themselves. Missing older versions though

| 3.10.0 | 17         |
| 3.11.1 | 18         |

* Tweak README change proposal

* Apply suggestions from code review

Apply changes to resolve linter warnings

Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>

---------

Co-authored-by: Kian-Meng Ang <kianmeng.ang@gmail.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-14 16:50:22 +00:00
GitHub Actions 3a3c94fd9e Automation: update setup-beam version output to cfafb69 2026-03-14 16:43:34 +00:00
Daniel Widgren cfafb69ddd feat: add Erlang problem matchers (#433)
* feat: add Erlang problem matchers for erlc, dialyzer, CT, and EUnit

Adds GitHub Actions problem matchers for Erlang tooling, matching the
existing Elixir matcher support. Covers erlc errors/warnings (which
also catches dialyzer output), Common Test failures, and EUnit failures.

Closes #390

* chore: rebuild dist bundle and format test file

* refactor: move Erlang matchers into installOTP function

Moves maybeEnableErlangProblemMatchers() call inside installOTP(),
between setOutput and endGroup, matching the Elixir pattern.

* refactor: extract generic maybeEnableProblemMatchers function

Replaces separate maybeEnableErlangProblemMatchers and
maybeEnableElixirProblemMatchers with a single generic
maybeEnableProblemMatchers(language) and a problemMatchersEnabled()
helper.

* fix: use static paths for ncc to resolve matcher JSON files

ncc cannot trace dynamic template literals, so the matcher JSON files
were not being copied to dist/. Use a static map of paths instead.
2026-03-14 16:43:14 +00:00
GitHub Actions b3cbb6afbf Automation: update setup-beam version output to 2abe6cd 2026-03-14 16:30:13 +00:00
peter madsen-mygdal 2abe6cda7a fix: download correct Gleam binary for macOS and Linux ARM64 (#428)
The Gleam installer had two arch-related bugs:

1. Darwin reused the Linux config (installOpts.darwin = installOpts.linux),
   downloading x86_64-unknown-linux-musl on macOS, causing ENOEXEC.

2. Linux hardcoded x86_64, downloading the wrong binary on ARM64 runners,
   causing 'Syntax error' when trying to execute an x86_64 ELF.

Add arch detection via getRunnerOSArchitecture() to both Linux and
Darwin download URLs, selecting the correct aarch64 or x86_64 binary.
Add a proper Darwin config that downloads apple-darwin archives.
2026-03-14 16:29:49 +00:00
GitHub Actions d55fdba43f Automation: update setup-beam version output to eb86ad6 2026-03-14 16:29:25 +00:00
peter madsen-mygdal eb86ad6523 feat: add macOS-26 to supported ImageOS mappings (#430)
Add macos26 to the ImageOSToContainer map so runners using
macOS-26 are recognized instead of throwing an error.

Update macos.yml

Update README.md
2026-03-14 16:28:58 +00:00
GitHub Actions af6da5da48 Automation: update setup-beam version output to f018c1e 2026-03-13 23:46:13 +00:00
peter madsen-mygdal f018c1e6d8 fix: use dynamic import in tests to prevent ESM hoisting race (#429)
Static ESM imports are hoisted above top-level statements, causing
setup-beam.js to evaluate its main() guard before process.env.NODE_ENV
is set to 'test'. This triggered core.setFailed() during module load,
setting process.exitCode=1 and failing the test file even though all
individual test cases passed.

Switch setup-beam.js to a dynamic await import() so that the env and
input setup runs first, ensuring the NODE_ENV='test' guard works
correctly.

Amp-Thread-ID: https://ampcode.com/threads/T-019ce36a-a18f-7494-ac0a-c094a84f06ad

Co-authored-by: Amp <amp@ampcode.com>
2026-03-13 23:45:53 +00:00
GitHub Actions d843ebb78b Automation: update setup-beam version output to c8e0954 2026-03-11 17:47:37 +00:00
github-actions[bot] c8e09547a7 Update 3rd party licenses (automation) (#425)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-11 17:47:17 +00:00
GitHub Actions 9d5b75ddfd Automation: update setup-beam version output to 98c13a9 2026-03-09 22:41:35 +00:00
Dino Kovač 98c13a9ed3 Support mise.toml (#415)
* add support for mise.toml version file type

* changes from review

* Keep versioning consistent

* fix default value for version-file-type input

* Use single `version-file`, autodetect type

* Update src/setup-beam.js

Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>

* Improve log output for mise version files

* Rebuild dist

* Run build-dist

* add support for mise.toml version file type

* changes from review

* Keep versioning consistent

* fix default value for version-file-type input

* Use single `version-file`, autodetect type

* Update src/setup-beam.js

Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>

* Improve log output for mise version files

* Rebuild dist

* Run build-dist

---------

Co-authored-by: Michael Ruoss <michael.ruoss@cradle.bio>
Co-authored-by: Michael Ruoss <michael@michaelruoss.ch>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-09 22:41:15 +00:00
GitHub Actions 0f13bcf18a Automation: update setup-beam version output to c3137f5 2026-03-09 22:19:29 +00:00
dependabot[bot] c3137f5cd5 Bump globals from 17.3.0 to 17.4.0 (#421)
* Bump globals from 17.3.0 to 17.4.0

Bumps [globals](https://github.com/sindresorhus/globals) from 17.3.0 to 17.4.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Prevent Cannot access 'isStrictVersion' before initialization

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-09 22:19:11 +00:00
GitHub Actions 4cbacdb2a9 Automation: update setup-beam version output to 687000a 2026-03-09 22:10:23 +00:00
dependabot[bot] 687000ab96 Bump @actions/core from 1.11.1 to 3.0.0 (#419)
* Bump @actions/core from 1.11.1 to 3.0.0

Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.11.1 to 3.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* npm run build-dist

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-09 22:09:48 +00:00
dependabot[bot] 9ba6605098 Bump eslint-plugin-yml from 1.18.0 to 3.3.1 (#418)
* Bump eslint-plugin-yml from 1.18.0 to 3.3.1

Bumps [eslint-plugin-yml](https://github.com/ota-meshi/eslint-plugin-yml) from 1.18.0 to 3.3.1.
- [Release notes](https://github.com/ota-meshi/eslint-plugin-yml/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-yml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-yml/compare/v1.18.0...v3.3.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-yml
  dependency-version: 3.3.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-09 22:09:38 +00:00
GitHub Actions 722d91de6e Automation: update setup-beam version output to f79887d 2026-03-09 17:46:19 +00:00
dependabot[bot] f79887d1ba Bump eslint from 10.0.1 to 10.0.3 (#420)
Bumps [eslint](https://github.com/eslint/eslint) from 10.0.1 to 10.0.3.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.0.1...v10.0.3)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 17:44:31 +00:00
dependabot[bot] 30a0896082 Bump markdownlint-cli from 0.47.0 to 0.48.0 (#422)
Bumps [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) from 0.47.0 to 0.48.0.
- [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases)
- [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.47.0...v0.48.0)

---
updated-dependencies:
- dependency-name: markdownlint-cli
  dependency-version: 0.48.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 17:44:08 +00:00
dependabot[bot] 41c0004487 Bump actions/setup-node from 6.2.0 to 6.3.0 (#423)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 17:43:59 +00:00
dependabot[bot] 9fc15d548d Bump raven-actions/actionlint from 2.1.1 to 2.1.2 (#424)
Bumps [raven-actions/actionlint](https://github.com/raven-actions/actionlint) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/raven-actions/actionlint/releases)
- [Commits](https://github.com/raven-actions/actionlint/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: raven-actions/actionlint
  dependency-version: 2.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 17:43:51 +00:00
GitHub Actions 19003af5f4 Automation: update setup-beam version output to 53a564f 2026-03-07 14:40:30 +00:00
github-actions[bot] 53a564f4bb Update 3rd party licenses (automation) (#417)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-07 14:40:09 +00:00
GitHub Actions 6ee130ce6b Automation: update setup-beam version output to 11a1f27 2026-03-06 20:46:44 +00:00
github-actions[bot] 11a1f27b1e Update 3rd party licenses (automation) (#416)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-06 20:46:21 +00:00
GitHub Actions 83bf0e8bac Automation: update setup-beam version output to 47d6c3c 2026-03-03 17:18:10 +00:00
github-actions[bot] 47d6c3c4af Update 3rd party licenses (automation) (#414)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-03 11:17:49 -06:00
GitHub Actions 0d2a6cb44d Automation: update setup-beam version output to 0f6ba5d 2026-03-03 04:07:24 +00:00
dependabot[bot] 0f6ba5d884 Bump @actions/tool-cache from 2.0.2 to 4.0.0 (#407)
* Bump @actions/tool-cache from 2.0.2 to 4.0.0

Bumps [@actions/tool-cache](https://github.com/actions/toolkit/tree/HEAD/packages/tool-cache) from 2.0.2 to 4.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/tool-cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/@actions/cache@4.0.0/packages/tool-cache)

---
updated-dependencies:
- dependency-name: "@actions/tool-cache"
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-03 04:07:06 +00:00
GitHub Actions 58166ce788 Automation: update setup-beam version output to 4a07ed8 2026-03-03 03:58:51 +00:00
dependabot[bot] 4a07ed84ac Bump @actions/exec from 1.1.1 to 3.0.0 (#405)
* Bump @actions/exec from 1.1.1 to 3.0.0

Bumps [@actions/exec](https://github.com/actions/toolkit/tree/HEAD/packages/exec) from 1.1.1 to 3.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/exec/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/exec)

---
updated-dependencies:
- dependency-name: "@actions/exec"
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Modernize JS somewhat

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-03 03:58:30 +00:00
GitHub Actions de78da9a9d Automation: update setup-beam version output to 9928a16 2026-03-02 23:18:44 +00:00
github-actions[bot] 9928a16c11 Update 3rd party licenses (automation) (#413)
Update 3rd party licenses

Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-02 23:18:00 +00:00
GitHub Actions 3964390c66 Automation: update setup-beam version output to 1dacaf8 2026-03-02 23:14:32 +00:00
Paulo F. Oliveira 1dacaf8a01 Fix for license update automation (#412) 2026-03-02 23:14:13 +00:00
GitHub Actions fa8ba5f70e Automation: update setup-beam version output to daf8797 2026-03-02 22:09:05 +00:00
Paulo F. Oliveira daf8797d04 Update 3rd party licenses (#411)
Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2026-03-02 22:08:40 +00:00
GitHub Actions de72677f00 Automation: update setup-beam version output to 334f76c 2026-03-02 21:59:55 +00:00
dependabot[bot] 334f76ce04 Bump semver from 7.7.2 to 7.7.4 (#406)
* Bump semver from 7.7.2 to 7.7.4

Bumps [semver](https://github.com/npm/node-semver) from 7.7.2 to 7.7.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.7.2...v7.7.4)

---
updated-dependencies:
- dependency-name: semver
  dependency-version: 7.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-02 21:59:33 +00:00
GitHub Actions 86b5ecbf21 Automation: update setup-beam version output to b8fc6e4 2026-03-02 21:34:07 +00:00
dependabot[bot] b8fc6e435e Bump @eslint/js from 9.38.0 to 10.0.1 (#404)
* Bump @eslint/js from 9.38.0 to 10.0.1

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.38.0 to 10.0.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 10.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-03-02 21:33:26 +00:00
GitHub Actions e7fda7af4e Automation: update setup-beam version output to a50e3e2 2026-03-02 21:22:09 +00:00
dependabot[bot] a50e3e2f89 Bump prettier from 3.6.2 to 3.8.1 (#408)
Bumps [prettier](https://github.com/prettier/prettier) from 3.6.2 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.6.2...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 21:21:18 +00:00
dependabot[bot] 7bc1e4ca67 Bump actions/setup-node from 6.1.0 to 6.2.0 (#409)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6.1.0...v6.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 21:21:10 +00:00
dependabot[bot] baf2bc3313 Bump raven-actions/actionlint from 2.1.0 to 2.1.1 (#410)
Bumps [raven-actions/actionlint](https://github.com/raven-actions/actionlint) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/raven-actions/actionlint/releases)
- [Commits](https://github.com/raven-actions/actionlint/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: raven-actions/actionlint
  dependency-version: 2.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 21:21:02 +00:00
GitHub Actions 3580539cee Automation: update setup-beam version output to fe5485f 2026-02-28 14:47:15 +00:00
dependabot[bot] fe5485f1f6 Bump @eslint/js from 9.31.0 to 9.38.0 (#393)
* Bump @eslint/js from 9.31.0 to 9.38.0

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.31.0 to 9.38.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.38.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot out (?)

* Address vulnerabilities with markdownlint-cli

* Do the bump proposed by the PR

* Go back to a working, albeit apparently vulnerable, version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-02-28 14:46:57 +00:00
GitHub Actions 98de8ffa90 Automation: update setup-beam version output to 6c5fe27 2026-02-28 14:28:14 +00:00
dependabot[bot] 6c5fe278e7 Bump the npm_and_yarn group across 1 directory with 2 updates (#403)
* Bump the npm_and_yarn group across 1 directory with 2 updates

Bumps the npm_and_yarn group with 2 updates in the / directory: [lodash](https://github.com/lodash/lodash) and [glob](https://github.com/isaacs/node-glob).


Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Removes `glob`

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: glob
  dependency-version: 
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>

* Commit `npm run build-dist`'s results

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2026-02-28 14:27:55 +00:00
GitHub Actions 36214a49c0 Automation: update setup-beam version output to 972bec8 2026-02-28 14:19:09 +00:00
dependabot[bot] 972bec8037 Bump actions/checkout from 4.2.2 to 6.0.1 (#399)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 6.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.2.2...v6.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 14:18:53 +00:00
GitHub Actions 10e998534e Automation: update setup-beam version output to 542d9a8 2026-02-28 14:07:57 +00:00
Paulo F. Oliveira 542d9a8e62 Improve output (around "Requested ... version") when we know input (#368)
Improve output when we know input
2026-02-28 14:07:39 +00:00
GitHub Actions b764149ef2 Automation: update setup-beam version output to cba803d 2026-02-28 13:59:20 +00:00
dependabot[bot] cba803d7b7 Bump @vercel/ncc from 0.38.3 to 0.38.4 (#387)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.38.3 to 0.38.4.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.38.3...0.38.4)

---
updated-dependencies:
- dependency-name: "@vercel/ncc"
  dependency-version: 0.38.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:58:54 +00:00
dependabot[bot] eda66a8458 Bump globals from 16.3.0 to 16.4.0 (#383)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.3.0 to 16.4.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.3.0...v16.4.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:58:43 +00:00
GitHub Actions cf0aea912f Automation: update setup-beam version output to 13b647e 2026-02-28 13:36:13 +00:00
dependabot[bot] 13b647ed24 Bump shellcheck from 3.1.0 to 4.1.0 (#376)
Bumps [shellcheck](https://github.com/gunar/shellcheck) from 3.1.0 to 4.1.0.
- [Release notes](https://github.com/gunar/shellcheck/releases)
- [Changelog](https://github.com/gunar/shellcheck/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gunar/shellcheck/compare/v3.1.0...v4.1.0)

---
updated-dependencies:
- dependency-name: shellcheck
  dependency-version: 4.1.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:35:39 +00:00
dependabot[bot] d6f6c371de Bump eslint from 9.31.0 to 9.38.0 (#394)
Bumps [eslint](https://github.com/eslint/eslint) from 9.31.0 to 9.38.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.31.0...v9.38.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:34:45 +00:00
dependabot[bot] 905cf79e7d Bump js-yaml from 4.1.0 to 4.1.1 in the npm_and_yarn group across 1 directory (#396)
Bump js-yaml in the npm_and_yarn group across 1 directory

Bumps the npm_and_yarn group with 1 update in the / directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.1.0 to 4.1.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:34:31 +00:00
GitHub Actions 4f85a51ca2 Automation: update setup-beam version output to fc1fdd6 2026-02-28 13:34:23 +00:00
dependabot[bot] fc1fdd6f00 Bump actions/setup-node from 4.4.0 to 6.1.0 (#400)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.4.0 to 6.1.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4.4.0...v6.1.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:34:07 +00:00
dependabot[bot] da184bc66d Bump raven-actions/actionlint from 2.0.1 to 2.1.0 (#401)
Bumps [raven-actions/actionlint](https://github.com/raven-actions/actionlint) from 2.0.1 to 2.1.0.
- [Release notes](https://github.com/raven-actions/actionlint/releases)
- [Commits](https://github.com/raven-actions/actionlint/compare/v2.0.1...v2.1.0)

---
updated-dependencies:
- dependency-name: raven-actions/actionlint
  dependency-version: 2.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:33:52 +00:00
GitHub Actions 566deebc64 Automation: update setup-beam version output to b94e7d3 2025-10-01 11:13:33 +00:00
Loïc Hoguin b94e7d372a Allow for Windows'25 container (#388) 2025-10-01 13:12:32 +02:00
GitHub Actions 033f103421 Automation: update setup-beam version output to 9afaa6e 2025-07-21 17:28:20 +00:00
dependabot[bot] 9afaa6e45f Bump csv-parse from 6.0.0 to 6.1.0 (#366)
---
updated-dependencies:
- dependency-name: csv-parse
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-21 18:28:00 +01:00
GitHub Actions 4168d0bf3c Automation: update setup-beam version output to 8c38699 2025-07-15 00:44:26 +00:00
dependabot[bot] 8c38699ca8 Bump @eslint/js from 9.30.1 to 9.31.0 (#363)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.30.1 to 9.31.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.31.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 01:44:10 +01:00
GitHub Actions df4a3eca5d Automation: update setup-beam version output to db4f13c 2025-07-15 00:43:33 +00:00
dependabot[bot] db4f13ce18 Bump csv-parse from 5.6.0 to 6.0.0 (#364)
* Bump csv-parse from 5.6.0 to 6.0.0

Bumps [csv-parse](https://github.com/adaltas/node-csv/tree/HEAD/packages/csv-parse) from 5.6.0 to 6.0.0.
- [Changelog](https://github.com/adaltas/node-csv/blob/master/packages/csv-parse/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv/commits/csv-parse@6.0.0/packages/csv-parse)

---
updated-dependencies:
- dependency-name: csv-parse
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Help Dependabot: push `npm run build-dist`'s results

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2025-07-15 01:43:16 +01:00
GitHub Actions 1df7f7a827 Automation: update setup-beam version output to f350bf9 2025-07-14 18:59:45 +00:00
dependabot[bot] f350bf9e05 Bump eslint from 9.30.1 to 9.31.0 (#365)
Bumps [eslint](https://github.com/eslint/eslint) from 9.30.1 to 9.31.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 19:59:29 +01:00
GitHub Actions e6d7c94229 Automation: update setup-beam version output to fceaea9 2025-07-10 15:21:07 +00:00
Paulo F. Oliveira fceaea9f54 Fix: more versioning around nightly and maint/main (#359)
* Test Elixir main-otp-28 / Erlang maint-28

* Test Gleam nightly / OTP 28

* Tweak versioning

1. stop trying to "coerce" versions on input
2. handle `OTP-` in one more place
3. handle `nightly`

* Remove tests that should be failing previously

There is no strict 27 for macos-15, for example

* Remove similar tests

We'll test once per platform in similar conditions

* `await` for `assert.rejects` (not noticeable if alone inside `it`)

* Test maint- for strict and loose
2025-07-10 16:20:49 +01:00
GitHub Actions 2bb5b653d0 Automation: update setup-beam version output to 1d4efdd 2025-07-10 15:18:41 +00:00
dependabot[bot] 1d4efdd2e9 Bump globals from 16.2.0 to 16.3.0 (#361)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.2.0 to 16.3.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.2.0...v16.3.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-10 16:18:18 +01:00
GitHub Actions 73f047e328 Automation: update setup-beam version output to 6dd8a1a 2025-07-10 09:38:56 +00:00
dependabot[bot] 6dd8a1a852 Bump @eslint/js from 9.30.0 to 9.30.1 (#360)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.30.0 to 9.30.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.1/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-10 10:38:37 +01:00
GitHub Actions fd9a2e183f Automation: update setup-beam version output to 65085e3 2025-07-10 09:14:46 +00:00
dependabot[bot] 65085e37bc Bump eslint from 9.30.0 to 9.30.1 (#362)
Bumps [eslint](https://github.com/eslint/eslint) from 9.30.0 to 9.30.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.0...v9.30.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-10 10:14:28 +01:00
GitHub Actions 80c1659516 Automation: update setup-beam version output to 8e7fdef 2025-07-03 18:12:11 +00:00
GitHub Actions 8e7fdef09f Automation: update setup-beam version output to 1fe9179 2025-07-03 16:35:25 +00:00
Paulo F. Oliveira 1fe9179886 Handle .tool-versions' line break on Windows (#357)
* Test .tool-version on top of Windows

* Parse .tool-version with Windows-style line endings
2025-07-03 17:35:06 +01:00
GitHub Actions 6389fe58dc Automation: update setup-beam version output to 8fc1380 2025-07-01 21:13:33 +00:00
Paulo F. Oliveira 8fc1380bb7 Fix calculating -otp- major for Elixir (#351)
* Set expectations

* Ease testing without having to install via `require`

* Code a solution for the tests

* Avoid errors on unit tests

rebar3 is saying something about SSL, most likely because
our tests are installing a bunch of OTPs which makes
for unpredictable behavior

* Avoid errors on integration tests
2025-07-01 22:13:13 +01:00
GitHub Actions 3c915dd1b0 Automation: update setup-beam version output to e5d5058 2025-06-30 21:26:33 +00:00
dependabot[bot] e5d50587ee Bump @eslint/js from 9.29.0 to 9.30.0 (#352)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.29.0 to 9.30.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:26:13 +01:00
GitHub Actions b1273cf7cc Automation: update setup-beam version output to 9308caf 2025-06-30 21:10:39 +00:00
dependabot[bot] 9308cafcbf Bump prettier from 3.6.0 to 3.6.2 (#353)
Bumps [prettier](https://github.com/prettier/prettier) from 3.6.0 to 3.6.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.6.0...3.6.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:09:53 +01:00
dependabot[bot] 2971b073e5 Bump eslint from 9.29.0 to 9.30.0 (#354)
Bumps [eslint](https://github.com/eslint/eslint) from 9.29.0 to 9.30.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:09:35 +01:00
GitHub Actions a0b139a890 Automation: update setup-beam version output to 6a38171 2025-06-26 19:39:33 +00:00
Paulo F. Oliveira 6a38171948 Test for updated doc. on latest / ranges / -rc (#349)
* Set the expectations

* Reason on the past

* Also allow for removal of OTP- in comparison to RC

* Test it on what makes sense

* For known elements don't compare with ranges

* Don't put maint-27 alongside 27 in the initial map

* Generate the dist

* Revisit the whole latest vs. rc- vs. strict definition
2025-06-26 20:39:15 +01:00
GitHub Actions 75edbb8287 Automation: update setup-beam version output to a8bc27e 2025-06-24 23:13:55 +00:00
Paulo F. Oliveira a8bc27ec39 Add back deprecated runners with warning (#348)
Add back deprecated elements, with a warning on support/maintenance
2025-06-25 00:13:39 +01:00
GitHub Actions b29c86feb9 Automation: update setup-beam version output to abd725c 2025-06-23 18:32:03 +00:00
dependabot[bot] abd725cb17 Bump prettier from 3.5.3 to 3.6.0 (#347)
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.6.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 19:31:45 +01:00
GitHub Actions 145718908e Automation: update setup-beam version output to 1e35402 2025-06-16 21:26:37 +00:00
dependabot[bot] 1e3540284f Bump eslint from 9.28.0 to 9.29.0 (#345)
Bumps [eslint](https://github.com/eslint/eslint) from 9.28.0 to 9.29.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.29.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 22:26:15 +01:00
GitHub Actions 7ddf3b82cc Automation: update setup-beam version output to 00ffd44 2025-06-16 21:19:30 +00:00
dependabot[bot] 00ffd44f8d Bump @eslint/js from 9.28.0 to 9.29.0 (#346)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.28.0 to 9.29.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.29.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 22:19:12 +01:00
GitHub Actions 6e1d5a5aa6 Automation: update setup-beam version output to 41ba577 2025-06-09 01:26:57 +00:00
dependabot[bot] 41ba577f74 Bump @eslint/js from 9.27.0 to 9.28.0 (#342)
* Bump @eslint/js from 9.27.0 to 9.28.0

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.27.0 to 9.28.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.28.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Prevent CI issues from having to update Gleam

* Deal with deprecation messages

* Fix for Elixir not inferring from OTP

(there is no 1.19-otp-28 yet)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulo F. Oliveira <paulo.ferraz.oliveira@gmail.com>
2025-06-09 02:26:26 +01:00
GitHub Actions 8cdecfe6cc Automation: update setup-beam version output to 67834dc 2025-06-06 11:37:38 +00:00
dependabot[bot] 67834dc893 Bump eslint from 9.27.0 to 9.28.0 (#343)
Bumps [eslint](https://github.com/eslint/eslint) from 9.27.0 to 9.28.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.27.0...v9.28.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 12:37:02 +01:00
GitHub Actions 59e18ef85d Automation: update setup-beam version output to afe5922 2025-05-30 04:44:05 +00:00
Paulo F. Oliveira afe592256a Match only on what we know should match (versions start with numbers, after OTP-) (#341) 2025-05-29 23:43:43 -05:00
GitHub Actions db4b4ce7c5 Automation: update setup-beam version output to 3025c99 2025-05-30 01:53:42 +00:00
Paulo F. Oliveira 3025c9910d Dependabot version updates (#340)
* yamllint for newer file

* Allow for proper, lower-level, pinning

Makes for increased reproducibility (and overall control)
2025-05-30 02:53:21 +01:00
GitHub Actions 32794f2f95 Automation: update setup-beam version output to 65066e3 2025-05-30 00:57:20 +00:00
Paulo F. Oliveira 65066e38a0 Act on CodeQL's suggestions for tightening security / improving performance (#338)
* Act on CodeQL's actions/missing-workflow-permissions

https://codeql.github.com/codeql-query-help/actions/actions-missing-workflow-permissions/

* Be more specific in the matched regex

And don't match a group if we don't need to match one

* Make it slightly faster since we know what after -otp-

I create a const because both expressions are looking for
the same thing
2025-05-29 19:57:00 -05:00
GitHub Actions 889e64e95a Automation: update setup-beam version output to 318bea3 2025-05-29 14:51:20 +00:00
github-actions[bot] 318bea3c09 Update 3rd party licenses (automation) (#337)
Co-authored-by: GitHub Actions <actions@user.noreply.github.com>
2025-05-29 15:50:55 +01:00
GitHub Actions 1abc836c22 Automation: update setup-beam version output to e1b0201 2025-05-29 14:50:46 +00:00
Paulo F. Oliveira e1b020163b Minor maintenance updates (#336) 2025-05-29 15:50:24 +01:00
GitHub Actions 220876a6da Automation: update setup-beam version output to 58f0e7a 2025-05-29 10:38:39 +00:00
Paulo F. Oliveira 58f0e7ac10 Support macOS via https://github.com/erlef/otp_builds (#332)
Co-authored-by: Wojtek Mach <wojtekmach@users.noreply.github.com>
2025-05-29 11:38:18 +01:00
GitHub Actions 46e061001b Automation: update setup-beam version output to 891e46b 2025-05-28 22:43:07 +00:00
Paulo F. Oliveira 891e46b77a Improve output when failing to get a version from "a place" (#334) 2025-05-28 17:42:50 -05:00
GitHub Actions a770081419 Automation: update setup-beam version output to 9092f97 2025-05-27 19:16:07 +00:00
Viacheslav Katsuba 9092f97e4d Fix broken link CODE_OF_CONDUCT.md (#335) 2025-05-27 20:15:49 +01:00
27 changed files with 57424 additions and 15518 deletions
-19
View File
@@ -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
+11
View File
@@ -0,0 +1,11 @@
---
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
+66 -12
View File
@@ -1,6 +1,9 @@
--- ---
name: action name: action
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -18,8 +21,10 @@ jobs:
name: Version with commit unique id name: Version with commit unique id
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
permissions:
contents: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Version it! - name: Version it!
run: | run: |
# We expect a string such as const setupBeamVersion = 'undefined' in the code # We expect a string such as const setupBeamVersion = 'undefined' in the code
@@ -40,39 +45,88 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref != 'refs/heads/main' if: github.ref != 'refs/heads/main'
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v4 - uses: actions/setup-node@v6.3.0
with: with:
node-version: '20' node-version: '24'
- run: npm run build-dist - run: npm run build-dist
- name: Check if build left artifacts - name: Check if build left artifacts
run: git diff --exit-code --ignore-space-at-eol run: git diff --exit-code --ignore-space-at-eol
check_action:
name: Action
runs-on: ubuntu-latest
if: github.ref != 'refs/heads/main'
steps:
- uses: actions/checkout@v6.0.2
- uses: raven-actions/actionlint@v2.1.2
unit_tests_ubuntu: unit_tests_ubuntu:
name: 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: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v4 - uses: actions/setup-node@v6.3.0
with: with:
node-version: '20' node-version: '24'
- run: npm ci - run: npm ci
- run: npm test - run: npm test
env:
NODE_ENV: test
- name: .tool-versions test - name: .tool-versions test
id: setup-beam id: setup-beam
uses: ./ uses: ./
with: with:
install-rebar: false install-rebar: false
install-hex: false
version-file: test/.tool-versions version-file: test/.tool-versions
version-type: strict version-type: strict
unit_tests_windows: unit_tests_windows:
name: Unit tests (Windows) name: Unit tests (Windows)
runs-on: windows-latest strategy:
matrix:
os:
- windows-11-arm # ARM64
- windows-latest # x86_64
runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v4 - uses: actions/setup-node@v6.3.0
with: with:
node-version: '20' node-version: '24'
- run: npm install --production - run: npm install --production
- run: npm test - 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@v6.0.2
- uses: actions/setup-node@v6.3.0
with:
node-version: '24'
- run: npm ci
- run: npm test
env:
NODE_ENV: test
+7 -4
View File
@@ -1,6 +1,9 @@
--- ---
name: hexpm-mirrors name: hexpm-mirrors
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -17,13 +20,13 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: ['ubuntu-22.04', 'windows-2022'] os: ['ubuntu-24.04', 'windows-2022', 'macos-15']
otp-version: ['24'] otp-version: ['27']
elixir-version: ['v1.14', ''] elixir-version: ['v1.18', '']
install-rebar: [true, false] install-rebar: [true, false]
install-hex: [true, false] install-hex: [true, false]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
+137
View File
@@ -0,0 +1,137 @@
---
name: macos
permissions:
contents: read
on:
push:
branches:
- main
pull_request:
branches:
- '*'
workflow_dispatch: {}
jobs:
integration_test:
name: >
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:
- 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'
os: 'macos-15'
- otp-version: '27'
elixir-version: '1.18'
os: 'macos-26'
- otp-version: '26'
elixir-version: '1.16'
rebar3-version: '3.25'
os: 'macos-14'
- otp-version: '25.0'
elixir-version: 'v1.13.4-otp-25'
rebar3-version: '3.18.0'
os: 'macos-latest'
version-type: 'strict'
- otp-version: '25.0'
elixir-version: 'v1.13.4'
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@v6.0.2
- 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@v6.0.2
- 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
+22 -16
View File
@@ -1,6 +1,9 @@
--- ---
name: ubuntu name: ubuntu
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -22,6 +25,15 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
combo: combo:
- otp-version: '<26'
elixir-version: '<1.17'
os: 'ubuntu-22.04'
- otp-version: 'master'
elixir-version: '> 0'
os: 'ubuntu-24.04'
- otp-version: 'master'
elixir-version: 'main'
os: 'ubuntu-24.04'
- otp-version: '27' - otp-version: '27'
elixir-version: 'v1.17.0' elixir-version: 'v1.17.0'
rebar3-version: '3.23' rebar3-version: '3.23'
@@ -41,12 +53,6 @@ jobs:
elixir-version: '1.14.3' elixir-version: '1.14.3'
os: 'ubuntu-latest' os: 'ubuntu-latest'
version-type: 'strict' 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' - otp-version: '25'
os: 'ubuntu-24.04' os: 'ubuntu-24.04'
- otp-version: '26' - otp-version: '26'
@@ -80,7 +86,7 @@ jobs:
escript_script: 'protoc-gen-elixir --version' escript_script: 'protoc-gen-elixir --version'
os: 'ubuntu-latest' os: 'ubuntu-latest'
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -142,13 +148,13 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
combo: combo:
- otp-version: latest - otp-version: 27
elixir-version: latest elixir-version: 1.19
gleam-version: latest gleam-version: 1.10
rebar3-version: nightly rebar3-version: 3.24
os: ubuntu-latest os: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -160,7 +166,7 @@ jobs:
- run: env - run: env
- name: Check environment variables - name: Check environment variables
run: | run: |
${INSTALL_DIR_FOR_ELIXIR}/bin/elixir -v "${INSTALL_DIR_FOR_ELIXIR}"/bin/elixir -v
${INSTALL_DIR_FOR_GLEAM}/bin/gleam --version "${INSTALL_DIR_FOR_GLEAM}"/bin/gleam --version
${INSTALL_DIR_FOR_OTP}/bin/erl -version "${INSTALL_DIR_FOR_OTP}"/bin/erl -version
${INSTALL_DIR_FOR_REBAR3}/bin/rebar3 version "${INSTALL_DIR_FOR_REBAR3}"/bin/rebar3 version
@@ -1,17 +1,21 @@
--- ---
name: Update 3rd party licenses (automation) name: Update 3rd party licenses (automation)
permissions:
contents: write
pull-requests: write
on: on:
schedule: schedule:
- cron: '0 12 * * *' - cron: '0 12 * * *'
workflow_dispatch: workflow_dispatch: {}
jobs: jobs:
update: update:
name: Update 3rd party licenses name: Update 3rd party licenses
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- run: - run:
./.github/workflows/update_3rd_party_licenses.sh ./.github/workflows/update_3rd_party_licenses.sh
env: env:
+18 -8
View File
@@ -1,6 +1,9 @@
--- ---
name: windows name: windows
permissions:
contents: read
on: on:
push: push:
branches: branches:
@@ -22,6 +25,12 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
combo: combo:
- otp-version: '<26'
elixir-version: '<1.17'
os: 'ubuntu-22.04'
- otp-version: 'master'
elixir-version: '> 0'
os: 'ubuntu-24.04'
- otp-version: '27' - otp-version: '27'
elixir-version: 'v1.17.0' elixir-version: 'v1.17.0'
rebar3-version: '3.23' rebar3-version: '3.23'
@@ -40,10 +49,10 @@ jobs:
version-type: 'strict' version-type: 'strict'
- otp-version: '24.0.2' - otp-version: '24.0.2'
rebar3-version: '3.16' rebar3-version: '3.16'
os: 'windows-2019' os: 'windows-2022'
- otp-version: '23.0' - otp-version: '23.0'
rebar3-version: '3.15' rebar3-version: '3.15'
os: 'windows-2019' os: 'windows-2022'
- elixir-version: 'v1.10' - elixir-version: 'v1.10'
otp-version: '23' otp-version: '23'
rebar3-version: '3.14' rebar3-version: '3.14'
@@ -61,7 +70,7 @@ jobs:
escript_script: 'protoc-gen-elixir --version' escript_script: 'protoc-gen-elixir --version'
os: 'windows-latest' os: 'windows-latest'
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -122,13 +131,13 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
combo: combo:
- otp-version: latest - otp-version: 27
elixir-version: latest elixir-version: 1.19
gleam-version: latest gleam-version: 1.10
rebar3-version: nightly rebar3-version: 3.24
os: windows-latest os: windows-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6.0.2
- name: Use erlef/setup-beam - name: Use erlef/setup-beam
id: setup-beam id: setup-beam
uses: ./ uses: ./
@@ -145,3 +154,4 @@ jobs:
& "$Env:INSTALL_DIR_FOR_OTP/bin/erl.exe" "+V" & "$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.cmd" "version"
& "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.ps1" "version" & "$Env:INSTALL_DIR_FOR_REBAR3/bin/rebar3.ps1" "version"
shell: pwsh
+4 -2
View File
@@ -1,2 +1,4 @@
node_modules/** /node_modules
test/.tool-versions /test/.tool-versions
/test/mise.toml
/dist/package.json
+1196 -6912
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -2,7 +2,7 @@
[fork]: https://github.com/erlef/setup-beam/fork [fork]: https://github.com/erlef/setup-beam/fork
[pr]: https://github.com/erlef/setup-beam/compare [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 Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for
keeping it great. keeping it great.
+1 -1
View File
@@ -1,7 +1,7 @@
# Elixir Problem Matchers # Elixir Problem Matchers
Elixir Problem Matchers in [elixir-matchers.json](matchers/elixir-matchers.json) Elixir Problem Matchers in [elixir-matchers.json](matchers/elixir-matchers.json)
are adapted from [here](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/package.json#L70-L118), are adapted from [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): available under the [MIT license](https://github.com/fr1zle/vscode-elixir/blob/45eddb589acd7ac98e0c7305d1c2b24668ca709a/LICENSE.md):
MIT License MIT License
+100 -37
View File
@@ -1,4 +1,4 @@
# setup-beam [![Action][action-img]][action]&nbsp;[![Ubuntu][ubuntu-img]][ubuntu]&nbsp;[![Windows][windows-img]][windows] # setup-beam [![Action][action-img]][action]&nbsp;[![Ubuntu][ubuntu-img]][ubuntu]&nbsp;[![Windows][windows-img]][windows]&nbsp;[![macOS][macos-img]][macos]
[action]: https://github.com/erlef/setup-beam/actions/workflows/action.yml [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 [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 [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]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml
[windows-img]: https://github.com/erlef/setup-beam/actions/workflows/windows.yml/badge.svg [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 This action sets up an Erlang/OTP environment for use in a GitHub Actions
workflow by: workflow by:
@@ -14,15 +16,14 @@ workflow by:
- optionally, installing [Elixir](https://elixir-lang.org/) - optionally, installing [Elixir](https://elixir-lang.org/)
- optionally, installing [Gleam](https://gleam.run/) - optionally, installing [Gleam](https://gleam.run/)
- optionally, installing [`rebar3`](https://www.rebar3.org/) - 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, opting for strict or loose version matching
- optionally, having - optionally, having
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show [problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) show
warnings and errors on pull requests warnings and errors on pull requests
- optionally, using a version file (as explained in "Version file", below), to identify versions - 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 ## Usage
See [action.yml](action.yml) for the action's specification. See [action.yml](action.yml) for the action's specification.
@@ -52,19 +53,25 @@ end up being parsed as `23`, which is not equivalent.
#### Pre-release versions #### Pre-release versions
For pre-release versions, such as `v1.11.0-rc.0`, use the full version To use a pre-release version such as `v1.11.0-rc.0`, specify the exact version
specifier (`v1.11.0-rc.0`) and set option `version-type` to `strict`. Pre-release versions are (`v1.11.0-rc.0`) and set `version-type` to `strict`.
opt-in, so `1.11.x` will not match a pre-release. 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 #### "Latest" versions
Set a tool's version to `latest` to retrieve the latest version of a given tool. To retrieve the most recent available version of a tool, set the version to `latest`.
The latest version is (locally) calculated by the action based on the (retrieved) versions This may include pre-release versions such as release candidates.
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).
If in doubt do a test run and compare the obtained release with the one you were expecting to If you want to target only the latest stable release and exclude pre-releases, use a
be the latest. 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 ### Compatibility between Operating System and Erlang/OTP
@@ -73,29 +80,40 @@ and Erlang/OTP.
| Operating system | Erlang/OTP | OTP Architecture | Status | Operating system | Erlang/OTP | OTP Architecture | Status
|- |- | - |- |- |- | - |-
| `ubuntu-18.04` | 17.0 - 25.3 | x86_64, arm64 | ✅ | `ubuntu-22.04` | 24.2 - 28 | x86_64, arm64 | ✅
| `ubuntu-20.04` | 21.0 - 27 | x86_64, arm64 | ✅ | `ubuntu-24.04` | 24.3 - 28 | x86_64, arm64 | ✅
| `ubuntu-22.04` | 24.2 - 27 | x86_64, arm64 | ✅
| `ubuntu-24.04` | 24.3 - 27 | x86_64, arm64 | ✅
| `windows-2019` | 21\* - 25 | x86_64, x86 | ✅ | `windows-2019` | 21\* - 25 | x86_64, x86 | ✅
| `windows-2022` | 21\* - 27 | x86_64, x86 | ✅ | `windows-2022` | 21\* - 28 | x86_64, x86 | ✅
| `windows-2025` | 21\* - 28 | x86_64, x86 | ✅
| `macOS-13` | 25.0 - 28 | x86_64, arm64 | ✅
| `macOS-14` | 25.0 - 28 | x86_64, arm64 | ✅
| `macOS-15` | 25.0 - 28 | x86_64, arm64 | ✅
| `macOS-26` | 25.0 - 28 | x86_64, arm64 | ✅
**Note** \*: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, **Note** \*: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3,
22.0, etc. 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
Self-hosted runners need to set env. variable `ImageOS` to one of the following, since the action Self-hosted runners need to set env. variable `ImageOS` to one of the following, since the action
uses that to download assets: uses that to download assets:
| ImageOS | Operating system | ImageOS | Operating system
|- |- |- |-
| `ubuntu18` | `ubuntu-18.04` | `ubuntu22` | `ubuntu-22.04`
| `ubuntu20` | `ubuntu-20.04` | `ubuntu24` | `ubuntu-24.04`
| `ubuntu22` | `ubuntu-22.04` | `win19` | `windows-2019`
| `ubuntu24` | `ubuntu-24.04` | `win22` | `windows-2022`
| `win19` | `windows-2019` | `win25` | `windows-2025`
| `win22` | `windows-2022` | `macos13` | `macOS-13`
| `macos14` | `macOS-14`
| `macos15` | `macOS-15`
| `macos26` | `macOS-26`
as per the following example: as per the following example:
@@ -130,23 +148,22 @@ e.g. `${{steps.setup-beam.outputs.erlang-version}}`
### Version file ### Version file
A version file is specified via input `version-file` (e.g.`.tool-versions`). This A version file is specified via input `version-file` (e.g. `.tool-versions` or `mise.toml`).
allows not having to use YML input for versions, though the action does check (and 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. 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`, **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. 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, Supported version elements are the same as the ones defined for the YML portion of the action,
with the following correspondence. with the following correspondence.
#### `.tool-versions` format #### `.tool-versions` / `mise.toml` format
| YML | `.tool-versions` | YML | Version file key
|- |- |- |-
| `otp-version` | `erlang` | `otp-version` | `erlang`
| `elixir-version` | `elixir` | `elixir-version` | `elixir`
@@ -228,7 +245,7 @@ are found (i.e. `erl`, `erl.exe`, `rebar3`, `rebar3.exe`, ...).
### Elixir Problem Matchers ### Elixir Problem Matchers
The Elixir Problem Matchers in this repository are adapted from 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. See [MATCHER_NOTICE](MATCHER_NOTICE.md) for license details.
## Examples ## Examples
@@ -280,6 +297,34 @@ jobs:
- run: rebar3 ct - 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 ### Erlang/OTP + `rebar3`, on Windows
```yaml ```yaml
@@ -288,7 +333,7 @@ on: push
jobs: jobs:
test: test:
runs-on: windows-2022 runs-on: windows-2025
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
@@ -298,6 +343,24 @@ jobs:
- run: rebar3 ct - 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 ### Gleam on Ubuntu
```yaml ```yaml
@@ -360,7 +423,7 @@ Check out [this doc](CONTRIBUTING.md).
### Code of Conduct ### 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 ### Security
+37 -2
View File
@@ -1,11 +1,15 @@
--- ---
name: setup-beam name: setup-beam
description: > description: >
Set up a BEAM-based CI environment, supporting languages and tools such as Erlang/OTP, Elixir, Gleam, `rebar3`, and `hex`. Set up a BEAM-based CI environment, supporting languages and tools such as Erlang/OTP, Elixir, Gleam, `rebar3`, and `hex`.
author: Erlang Ecosystem Foundation author: Erlang Ecosystem Foundation
branding: branding:
color: blue color: blue
icon: code icon: code
inputs: inputs:
github-token: github-token:
description: > description: >
@@ -16,52 +20,83 @@ inputs:
have to manually pass an automatically generated token via their environment settings within a workflow. 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) [Learn more about automatically generated tokens](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)
default: ${{ github.token }} default: ${{ github.token }}
required: false
otp-version: otp-version:
description: Version range or exact version of Erlang/OTP to use, description: Version range or exact version of Erlang/OTP to use,
or false when installing only Gleam without OTP or false when installing only Gleam without OTP
required: false
otp-architecture: otp-architecture:
description: 32 or 64, to specify the architecture of the OTP to install. Only applies to Windows. description: 32 or 64, to specify the architecture of the OTP to install. Only applies to Windows.
default: 64 default: 64
required: false
elixir-version: elixir-version:
description: Version range or exact version of Elixir to use description: Version range or exact version of Elixir to use
required: false
gleam-version: gleam-version:
description: Version range or exact version of Gleam to use description: Version range or exact version of Gleam to use
required: false
install-hex: install-hex:
description: Whether to install Hex (with mix local.hex description: Whether to install Hex (with mix local.hex
when installing Elixir) when installing Elixir)
default: true default: true
required: false
install-rebar: install-rebar:
description: Whether to install Rebar (with mix local.rebar description: Whether to install Rebar (with mix local.rebar
when installing Elixir) when installing Elixir)
default: true default: true
required: false
rebar3-version: rebar3-version:
description: Version range or exact version of rebar3 to use (or nightly) description: Version range or exact version of rebar3 to use (or nightly)
required: false
version-type: version-type:
description: strict means the versions are take as-are; loose means we try description: strict means the versions are take as-are; loose means we try
to guess versions based on semver rules to guess versions based on semver rules
default: loose default: loose
required: false
disable_problem_matchers: disable_problem_matchers:
description: whether to have the problem matchers present in the results description: whether to have the problem matchers present in the results
(or not) (or not)
default: false default: false
required: false
version-file: 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: '' default: ''
required: false
hexpm-mirrors: hexpm-mirrors:
description: mirror(s) for hex.pm, one per line description: mirror(s) for hex.pm, one per line
default: | default: |
https://builds.hex.pm https://builds.hex.pm
required: false
outputs: outputs:
elixir-version: elixir-version:
description: Exact version of Elixir that was installed description: Exact version of Elixir that was installed
otp-version: otp-version:
description: Exact version of Erlang/OTP that was installed description: Exact version of Erlang/OTP that was installed
gleam-version: gleam-version:
description: Exact version of Gleam that was installed description: Exact version of Gleam that was installed
rebar3-version: rebar3-version:
description: Exact version of rebar3 that was installed description: Exact version of rebar3 that was installed
setup-beam-version: setup-beam-version:
description: The commit unique id of the execution action version description: The commit unique id of the execution action version
runs: runs:
using: node20 using: node24
main: dist/index.js main: dist/index.js
+66
View File
@@ -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
}
]
}
]
}
+52475 -6837
View File
File diff suppressed because one or more lines are too long
+27
View File
@@ -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,
},
},
]
+66
View File
@@ -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
}
]
}
]
}
+2211 -1369
View File
File diff suppressed because it is too large Load Diff
+22 -16
View File
@@ -1,36 +1,42 @@
{ {
"name": "setup-beam", "name": "setup-beam",
"type": "module",
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "ncc build src/setup-beam.js --no-cache", "build": "ncc build src/setup-beam.js --no-cache",
"format": "prettier src/**/*.js --write && prettier test/**/*.js --write", "format": "prettier src/**/*.js test/**/*.js *.mjs --write",
"jslint": "eslint src/**/*.js && eslint test/**/*.js", "eslint": "eslint src/**/*.js test/**/*.js *.mjs",
"licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES", "licenses": "yarn licenses generate-disclaimer > 3RD_PARTY_LICENSES",
"markdownlint": "markdownlint *.md ./github/**/*.md", "markdownlint": "markdownlint *.md ./github/**/*.md",
"shellcheck": "shellcheck .github/workflows/*.sh", "shellcheck": "shellcheck .github/workflows/*.sh",
"test": "node --test --test-reporter=spec", "test": "node --test --test-reporter=spec",
"yamllint": "yamllint .github/workflows/**.yml && yamllint .*.yml && yamllint *.yml", "yamllint": "eslint .github/workflows/**.yml .github/*.yml .*.yml *.yml",
"clean-dist": "rm -rf ./dist", "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" "build-dist": "npm run clean-dist && npm install && npm run build && npm run format && npm run lint"
}, },
"dependencies": { "dependencies": {
"@actions/core": "1.10.0", "@actions/core": "3.0.0",
"@actions/exec": "1.1.1", "@actions/exec": "3.0.0",
"@actions/tool-cache": "2.0.1", "@actions/tool-cache": "4.0.0",
"semver": "7.6.2" "csv-parse": "6.2.1",
"lodash": "4.17.23",
"semver": "7.7.4",
"smol-toml": "1.6.1"
}, },
"devDependencies": { "devDependencies": {
"@vercel/ncc": "0.36.1", "@eslint/js": "10.0.1",
"eslint": "8.43.0", "@vercel/ncc": "0.38.4",
"markdownlint-cli": "0.35.0", "eslint": "10.1.0",
"prettier": "2.8.8", "eslint-plugin-yml": "3.3.1",
"shellcheck": "2.2.0", "globals": "17.4.0",
"yaml-lint": "1.7.0", "markdownlint-cli": "0.48.0",
"yarn": "1.22.19" "prettier": "3.8.1",
"shellcheck": "4.1.0",
"yarn": "1.22.22"
}, },
"engines": { "engines": {
"node": ">=20" "node": ">=24"
} }
} }
+365 -153
View File
@@ -1,19 +1,27 @@
const core = require('@actions/core') import path from 'node:path'
const { exec } = require('@actions/exec') import fs from 'node:fs'
const tc = require('@actions/tool-cache') import os from 'node:os'
const path = require('path') import { fileURLToPath } from 'node:url'
const semver = require('semver') import * as core from '@actions/core'
const fs = require('fs') import { exec } from '@actions/exec'
const os = require('os') import * as tc from '@actions/tool-cache'
import * as semver from 'semver'
import * as csv from 'csv-parse/sync'
import _ from 'lodash'
import toml from 'smol-toml'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const MAX_HTTP_RETRIES = 3 const MAX_HTTP_RETRIES = 3
const APPS = ['erlang', 'elixir', 'gleam', 'rebar']
main().catch((err) => { if (process.env.NODE_ENV !== 'test') {
core.setFailed(err.message) main().catch((err) => {
}) core.setFailed(err.message)
})
}
async function main() { async function main() {
checkPlatform()
checkOtpArchitecture() checkOtpArchitecture()
const versionFilePath = getInput('version-file', false) const versionFilePath = getInput('version-file', false)
@@ -27,15 +35,14 @@ async function main() {
versions = parseVersionFile(versionFilePath) versions = parseVersionFile(versionFilePath)
} }
const osVersion = getRunnerOSVersion()
const otpSpec = getInput('otp-version', true, 'erlang', versions) const otpSpec = getInput('otp-version', true, 'erlang', versions)
const elixirSpec = getInput('elixir-version', false, 'elixir', versions) const elixirSpec = getInput('elixir-version', false, 'elixir', versions)
const gleamSpec = getInput('gleam-version', false, 'gleam', versions) const gleamSpec = getInput('gleam-version', false, 'gleam', versions)
const rebar3Spec = getInput('rebar3-version', false, 'rebar', versions) const rebar3Spec = getInput('rebar3-version', false, 'rebar', versions)
if (otpSpec !== 'false') { if (otpSpec !== 'false') {
await installOTP(otpSpec, osVersion) await installOTP(otpSpec)
const elixirInstalled = await maybeInstallElixir(elixirSpec, otpSpec) const elixirInstalled = await maybeInstallElixir(elixirSpec)
if (elixirInstalled === true) { if (elixirInstalled === true) {
const shouldMixRebar = getInput('install-rebar', false) const shouldMixRebar = getInput('install-rebar', false)
await mix(shouldMixRebar, 'rebar') await mix(shouldMixRebar, 'rebar')
@@ -51,11 +58,12 @@ async function main() {
await maybeInstallRebar3(rebar3Spec) await maybeInstallRebar3(rebar3Spec)
// undefined is replaced by a function, post- main branch merge // undefined is replaced by a function, post- main branch merge
const setupBeamVersion = '3e793a7' const setupBeamVersion = '7a27046'
core.setOutput('setup-beam-version', setupBeamVersion) core.setOutput('setup-beam-version', setupBeamVersion)
} }
async function installOTP(otpSpec, osVersion) { async function installOTP(otpSpec) {
const osVersion = getRunnerOSVersion()
const otpVersion = await getOTPVersion(otpSpec, osVersion) const otpVersion = await getOTPVersion(otpSpec, osVersion)
core.startGroup( core.startGroup(
`Installing Erlang/OTP ${otpVersion} - built on ${getRunnerOSArchitecture()}/${osVersion}`, `Installing Erlang/OTP ${otpVersion} - built on ${getRunnerOSArchitecture()}/${osVersion}`,
@@ -72,15 +80,16 @@ async function installOTP(otpSpec, osVersion) {
}, },
}) })
core.setOutput('otp-version', otpVersion) core.setOutput('otp-version', otpVersion)
maybeEnableProblemMatchers('erlang')
core.endGroup() core.endGroup()
return otpVersion return otpVersion
} }
async function maybeInstallElixir(elixirSpec, otpSpec) { async function maybeInstallElixir(elixirSpec) {
let installed = false let installed = false
if (elixirSpec) { if (elixirSpec) {
const elixirVersion = await getElixirVersion(elixirSpec, otpSpec) const elixirVersion = await getElixirVersion(elixirSpec)
core.startGroup(`Installing Elixir ${elixirVersion}`) core.startGroup(`Installing Elixir ${elixirVersion}`)
await doWithMirrors({ await doWithMirrors({
hexMirrors: hexMirrorsInput(), hexMirrors: hexMirrorsInput(),
@@ -93,7 +102,7 @@ async function maybeInstallElixir(elixirSpec, otpSpec) {
}, },
}) })
core.setOutput('elixir-version', elixirVersion) core.setOutput('elixir-version', elixirVersion)
maybeEnableElixirProblemMatchers() maybeEnableProblemMatchers('elixir')
core.endGroup() core.endGroup()
installed = true installed = true
@@ -102,16 +111,18 @@ async function maybeInstallElixir(elixirSpec, otpSpec) {
return installed return installed
} }
function maybeEnableElixirProblemMatchers() { function problemMatchersEnabled() {
const disableProblemMatchers = getInput('disable_problem_matchers', false) return getInput('disable_problem_matchers', false) === 'false'
if (disableProblemMatchers === 'false') { }
const elixirMatchers = path.join(
__dirname, // path.join with static strings helps ncc resolve and bundle the JSON files
'..', function maybeEnableProblemMatchers(language) {
'matchers', if (problemMatchersEnabled()) {
'elixir-matchers.json', const matcherFiles = {
) erlang: path.join(`${__dirname}/../matchers/erlang-matchers.json`),
core.info(`##[add-matcher]${elixirMatchers}`) elixir: path.join(`${__dirname}/../matchers/elixir-matchers.json`),
}
core.info(`##[add-matcher]${matcherFiles[language]}`)
} }
} }
@@ -167,54 +178,108 @@ async function maybeInstallRebar3(rebar3Spec) {
return installed return installed
} }
function maybeRemoveOTPPrefix(otpSpec) {
return otpSpec.replace(/^OTP-/, '')
}
async function getOTPVersion(otpSpec0, osVersion) { async function getOTPVersion(otpSpec0, osVersion) {
const otpVersions = await getOTPVersions(osVersion) const [otpVersions, originListing, hexMirrors] =
let spec = otpSpec0.replace(/^OTP-/, '') await getOTPVersions(osVersion)
let spec = maybeRemoveOTPPrefix(otpSpec0)
const versions = otpVersions const versions = otpVersions
const otpVersion = getVersionFromSpec(spec, versions) const otpVersion = getVersionFromSpec(spec, versions)
if (otpVersion === null) { if (otpVersion === null) {
throw new Error( throw new Error(
`Requested Erlang/OTP version (${otpSpec0}) not found in version list ` + requestedVersionFor('Erlang/OTP', otpSpec0, originListing, hexMirrors),
"(should you be using option 'version-type': 'strict'?)",
) )
} }
return otpVersion // from the reference, for download return otpVersion // from the reference, for download
} }
async function getElixirVersion(exSpec0, otpVersion0) { function requestedVersionFor(tool, version, originListing, mirrors) {
const otpVersion = otpVersion0.match(/^([^-]+-)?(.+)$/)[2] const isVersionTypeStrict = isStrictVersion()
let otpVersionMajor = otpVersion.match(/^([^.]+).*$/)[1]
const userSuppliedOtp = exSpec0.match(/-otp-(\d+)/)?.[1] ?? null 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)) { if (userSuppliedOtp && isVersion(userSuppliedOtp)) {
otpVersionMajor = 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] = await getElixirVersions() const [otpVersionsForElixirMap, elixirVersions, originListing, hexMirrors] =
const spec = exSpec0.replace(/-otp-.*$/, '') await getElixirVersions()
const spec = exSpec0.replace(otpSuffix, '')
const versions = elixirVersions const versions = elixirVersions
const elixirVersionFromSpec = getVersionFromSpec(spec, versions) const elixirVersionFromSpec = getVersionFromSpec(spec, versions)
if (elixirVersionFromSpec === null) { if (elixirVersionFromSpec === null) {
throw new Error( throw new Error(
`Requested Elixir version (${exSpec0}) not found in version list ` + requestedVersionFor('Elixir', exSpec0, originListing, hexMirrors),
"(should you be using option 'version-type': 'strict'?)",
) )
} }
const elixirVersionComp = otpVersionsForElixirMap[elixirVersionFromSpec] let foundCombo = false
if ( let otpVersionMajorIter = parseInt(otpVersionMajor)
(elixirVersionComp && elixirVersionComp.includes(otpVersionMajor)) || let otpVersionsMajor = []
!isVersion(otpVersionMajor) while (otpVersionMajorIter > otpVersionMajor - 3) {
) { otpVersionMajorIter += ''
core.info( otpVersionsMajor.push(otpVersionMajorIter)
`Using Elixir ${elixirVersionFromSpec} (built for Erlang/OTP ${otpVersionMajor})`, const elixirVersionComp = otpVersionsForElixirMap[elixirVersionFromSpec]
) if (
} else { (elixirVersionComp && elixirVersionComp.includes(otpVersionMajorIter)) ||
!isVersion(otpVersionMajorIter)
) {
core.info(
`Using Elixir ${elixirVersionFromSpec} (built for Erlang/OTP ${otpVersionMajorIter})`,
)
foundCombo = true
break
}
otpVersionMajorIter = parseInt(otpVersionMajorIter) - 1
}
if (!foundCombo) {
throw new Error( throw new Error(
`Requested Elixir / Erlang/OTP version (${exSpec0} / ${otpVersion0}) not ` + `Requested Elixir / Erlang/OTP version (${exSpec0} / tried ${otpVersionsMajor}) not ` +
'found in version list (did you check Compatibility between Elixir and Erlang/OTP?).' + 'found in version list (did you check Compatibility between Elixir and Erlang/OTP?).' +
'Elixir and Erlang/OTP compatibility can be found at: ' + 'Elixir and Erlang/OTP compatibility can be found at: ' +
'https://hexdocs.pm/elixir/compatibility-and-deprecations.html', 'https://hexdocs.pm/elixir/compatibility-and-deprecations.html',
@@ -223,62 +288,82 @@ async function getElixirVersion(exSpec0, otpVersion0) {
let elixirVersionForDownload = elixirVersionFromSpec let elixirVersionForDownload = elixirVersionFromSpec
if (isVersion(otpVersionMajor)) { if (isVersion(otpVersionMajorIter)) {
elixirVersionForDownload = `${elixirVersionFromSpec}-otp-${otpVersionMajor}` elixirVersionForDownload = `${elixirVersionFromSpec}-otp-${otpVersionMajorIter}`
} }
return maybePrependWithV(elixirVersionForDownload) return maybePrependWithV(elixirVersionForDownload)
} }
async function getGleamVersion(gleamSpec0) { async function getGleamVersion(gleamSpec0) {
const gleamVersions = await getGleamVersions() const [gleamVersions, originListing] = await getGleamVersions()
const spec = gleamSpec0 const spec = gleamSpec0
const versions = gleamVersions const versions = gleamVersions
const gleamVersion = getVersionFromSpec(spec, versions) const gleamVersion = getVersionFromSpec(spec, versions)
if (gleamVersion === null) { if (gleamVersion === null) {
throw new Error( throw new Error(requestedVersionFor('Gleam', gleamSpec0, originListing))
`Requested Gleam version (${gleamSpec0}) not found in version list ` +
"(should you be using option 'version-type': 'strict'?)",
)
} }
return maybePrependWithV(gleamVersion) return maybePrependWithV(gleamVersion)
} }
async function getRebar3Version(r3Spec) { async function getRebar3Version(r3Spec) {
const rebar3Versions = await getRebar3Versions() const [rebar3Versions, originListing] = await getRebar3Versions()
const spec = r3Spec const spec = r3Spec
const versions = rebar3Versions const versions = rebar3Versions
const rebar3Version = getVersionFromSpec(spec, versions) const rebar3Version = getVersionFromSpec(spec, versions)
if (rebar3Version === null) { if (rebar3Version === null) {
throw new Error( throw new Error(requestedVersionFor('rebar3', r3Spec, originListing))
`Requested rebar3 version (${r3Spec}) not found in version list ` +
"(should you be using option 'version-type': 'strict'?)",
)
} }
return rebar3Version return rebar3Version
} }
function otpArchitecture() {
return getInput('otp-architecture', false)
}
async function getOTPVersions(osVersion) { async function getOTPVersions(osVersion) {
let otpVersionsListings let otpVersionsListings
let originListing let originListing
let hexMirrors = null
if (process.platform === 'linux') { if (process.platform === 'linux') {
originListing = `/builds/otp/${getRunnerOSArchitecture()}/${osVersion}/builds.txt` originListing = `/builds/otp/${getRunnerOSArchitecture()}/${osVersion}/builds.txt`
hexMirrors = hexMirrorsInput()
otpVersionsListings = await doWithMirrors({ otpVersionsListings = await doWithMirrors({
hexMirrors: hexMirrorsInput(), hexMirrors,
actionTitle: `fetch ${originListing}`, actionTitle: `fetch ${originListing}`,
action: async (hexMirror) => { action: async (hexMirror) => {
return get(`${hexMirror}${originListing}`, []) return get(`${hexMirror}${originListing}`)
}, },
}) })
} else if (process.platform === 'win32') { } else if (process.platform === 'win32') {
originListing = originListing =
'https://api.github.com/repos/erlang/otp/releases?per_page=100' 'https://api.github.com/repos/erlang/otp/releases?per_page=100'
otpVersionsListings = await get(originListing, [1, 2, 3]) 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 = {} const otpVersions = {}
if (process.platform === 'linux') { if (process.platform === 'linux') {
@@ -286,17 +371,15 @@ async function getOTPVersions(osVersion) {
.trim() .trim()
.split('\n') .split('\n')
.forEach((line) => { .forEach((line) => {
const otpMatch = line const otpVersionOrig = line.match(/^([^ ]+)?( .+)/)[1]
.match(/^([^ ]+)?( .+)/)[1] const otpVersion = maybeRemoveOTPPrefix(otpVersionOrig)
.match(/^([^-]+-)?(.+)$/) debugLog('OTP line and parsing', [line, otpVersion, otpVersionOrig])
const otpVersion = otpMatch[2]
const otpVersionOrig = otpMatch[0]
debugLog('OTP line and parsing', [line, otpVersion, otpMatch])
otpVersions[otpVersion] = otpVersionOrig // we keep the original for later reference otpVersions[otpVersion] = otpVersionOrig // we keep the original for later reference
}) })
} else if (process.platform === 'win32') { } else if (process.platform === 'win32') {
const otpArch = otpArchitecture()
const file_regex = new RegExp( const file_regex = new RegExp(
`^otp_win${getInput('otp-architecture')}_(.*).exe$`, `^otp_win${_.escapeRegExp(otpArch)}_(.*).exe$`,
) )
otpVersionsListings.forEach((otpVersionsListing) => { otpVersionsListings.forEach((otpVersionsListing) => {
otpVersionsListing otpVersionsListing
@@ -304,26 +387,41 @@ async function getOTPVersions(osVersion) {
.flat() .flat()
.filter((x) => x.name.match(file_regex)) .filter((x) => x.name.match(file_regex))
.forEach((x) => { .forEach((x) => {
const otpMatch = x.name.match(file_regex) const otpVersionOrig = x.name.match(file_regex)[1]
const otpVersion = otpMatch[1] const otpVersion = otpVersionOrig
debugLog('OTP line and parsing', [otpMatch, otpVersion]) debugLog('OTP line and parsing', [x.name, otpVersion, otpVersionOrig])
otpVersions[otpVersion] = otpVersion 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() { async function getElixirVersions() {
const originListing = '/builds/elixir/builds.txt' const originListing = '/builds/elixir/builds.txt'
const hexMirrors = hexMirrorsInput()
const elixirVersionsListings = await doWithMirrors({ const elixirVersionsListings = await doWithMirrors({
hexMirrors: hexMirrorsInput(), hexMirrors,
actionTitle: `fetch ${originListing}`, actionTitle: `fetch ${originListing}`,
action: async (hexMirror) => { action: async (hexMirror) => {
return get(`${hexMirror}${originListing}`, []) return get(`${hexMirror}${originListing}`)
}, },
}) })
const otpVersionsForElixirMap = {} const otpVersionsForElixirMap = {}
@@ -346,14 +444,13 @@ async function getElixirVersions() {
elixirVersions[elixirVersion] = elixirVersion elixirVersions[elixirVersion] = elixirVersion
}) })
return [otpVersionsForElixirMap, elixirVersions] return [otpVersionsForElixirMap, elixirVersions, originListing, hexMirrors]
} }
async function getGleamVersions() { async function getGleamVersions() {
const resultJSONs = await get( const originListing =
'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100', 'https://api.github.com/repos/gleam-lang/gleam/releases?per_page=100'
[1, 2, 3], const resultJSONs = await get(originListing, [1, 2, 3])
)
const gleamVersionsListing = {} const gleamVersionsListing = {}
resultJSONs.forEach((resultJSON) => { resultJSONs.forEach((resultJSON) => {
resultJSON resultJSON
@@ -365,14 +462,13 @@ async function getGleamVersions() {
}) })
}) })
return gleamVersionsListing return [gleamVersionsListing, originListing]
} }
async function getRebar3Versions() { async function getRebar3Versions() {
const resultJSONs = await get( const originListing =
'https://api.github.com/repos/erlang/rebar3/releases?per_page=100', 'https://api.github.com/repos/erlang/rebar3/releases?per_page=100'
[1, 2, 3], const resultJSONs = await get(originListing, [1, 2, 3])
)
const rebar3VersionsListing = {} const rebar3VersionsListing = {}
resultJSONs.forEach((resultJSON) => { resultJSONs.forEach((resultJSON) => {
resultJSON resultJSON
@@ -382,7 +478,7 @@ async function getRebar3Versions() {
}) })
}) })
return rebar3VersionsListing return [rebar3VersionsListing, originListing]
} }
function isStrictVersion() { function isStrictVersion() {
@@ -395,7 +491,10 @@ function gt(left, right) {
function validVersion(v) { function validVersion(v) {
return ( 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('a') &&
!v.startsWith('b') !v.startsWith('b')
) )
@@ -422,8 +521,14 @@ function getVersionFromSpec(spec0, versions0) {
const altVersions = {} const altVersions = {}
Object.entries(versions0).forEach(([version, altVersion]) => { Object.entries(versions0).forEach(([version, altVersion]) => {
let coerced let coerced
if (isStrictVersion() || isRC(version)) { if (
// If `version-type: strict` or version is RC, we just try to remove a potential initial v 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) coerced = maybeRemoveVPrefix(version)
} else { } else {
// Otherwise, we place the version into a version bucket // Otherwise, we place the version into a version bucket
@@ -440,13 +545,19 @@ function getVersionFromSpec(spec0, versions0) {
const rangeMax = semver.maxSatisfying(versions, rangeForMax) const rangeMax = semver.maxSatisfying(versions, rangeForMax)
let version = null 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 (versions0[spec]) {
// If `version-type: strict` or version is RC, we obtain it directly // We obtain it directly
version = versions0[spec] version = versions0[spec]
} }
} else if (spec0 === 'latest') {
version = versions0[versions0.latest]
} else if (rangeMax !== null) { } else if (rangeMax !== null) {
// Otherwise, we compare alt. versions' semver ranges to this version, from highest to lowest // Otherwise, we compare alt. versions' semver ranges to this version, from highest to lowest
const thatVersion = spec const thatVersion = spec
@@ -473,7 +584,7 @@ function getVersionFromSpec(spec0, versions0) {
} }
function maybeCoerced(v) { function maybeCoerced(v) {
let ret = null let ret
try { try {
if (!isRC(v)) { if (!isRC(v)) {
ret = semver.coerce(v).version ret = semver.coerce(v).version
@@ -515,7 +626,11 @@ function isRC(ver) {
} }
function isKnownBranch(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() { function githubARMRunnerArchs() {
@@ -545,25 +660,46 @@ function getRunnerOSArchitecture() {
} }
function getRunnerOSVersion() { function getRunnerOSVersion() {
// List from https://github.com/actions/runner-images?tab=readme-ov-file#available-images
const ImageOSToContainer = { const ImageOSToContainer = {
ubuntu18: 'ubuntu-18.04',
ubuntu20: 'ubuntu-20.04',
ubuntu22: 'ubuntu-22.04', ubuntu22: 'ubuntu-22.04',
ubuntu24: 'ubuntu-24.04', ubuntu24: 'ubuntu-24.04',
'win11-arm64': 'windows-11-arm',
win19: 'windows-2019', win19: 'windows-2019',
win22: 'windows-2022', win22: 'windows-2022',
win25: 'windows-2025',
macos13: 'macOS-13',
macos14: 'macOS-14',
macos15: 'macOS-15',
macos26: 'macOS-26',
}
const deprecatedImageOSToContainer = {
ubuntu18: 'ubuntu-18.04',
ubuntu20: 'ubuntu-20.04',
} }
const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS] const containerFromEnvImageOS = ImageOSToContainer[process.env.ImageOS]
if (!containerFromEnvImageOS) { if (!containerFromEnvImageOS) {
throw new Error( const deprecatedContainerFromEnvImageOS =
"Tried to map a target OS from env. variable 'ImageOS' (got " + deprecatedImageOSToContainer[process.env.ImageOS]
`${process.env.ImageOS}` + if (deprecatedContainerFromEnvImageOS) {
"), but failed. If you're using a " + core.warning(
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " + `You are using deprecated ImageOS ${deprecatedContainerFromEnvImageOS}. ` +
"['" + 'Support for maintenance is very limited. Consider a non-deprecated version as ' +
`${Object.keys(ImageOSToContainer).join("', '")}` + '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}` +
"), but failed. If you're using a " +
"self-hosted runner, you should set 'env': 'ImageOS': ... to one of the following: " +
"['" +
`${Object.keys(ImageOSToContainer).join("', '")}` +
"']",
)
}
} }
return containerFromEnvImageOS return containerFromEnvImageOS
@@ -608,7 +744,7 @@ async function get(url0, pageIdxs) {
headers.authorization = `Bearer ${GithubToken}` headers.authorization = `Bearer ${GithubToken}`
} }
if (pageIdxs.length === 0) { if ((pageIdxs || []).length === 0) {
return getUrlResponse(url, headers) return getUrlResponse(url, headers)
} else { } else {
return Promise.all( return Promise.all(
@@ -643,7 +779,7 @@ function xyzAbcVersion(pref, suf) {
// https://www.erlang.org/doc/system_principles/versions.html // https://www.erlang.org/doc/system_principles/versions.html
const dd = '\\.?(\\d+)?' const dd = '\\.?(\\d+)?'
return new RegExp( 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}`,
) )
} }
@@ -675,28 +811,14 @@ alongside ${alternativeName}=${alternativeValue} \
return input return input
} }
function parseVersionFile(versionFilePath0) { function parseToolVersionsFile(versionFilePath) {
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}`)
const appVersions = new Map() const appVersions = new Map()
const versions = fs.readFileSync(versionFilePath, 'utf8') const versions = fs.readFileSync(versionFilePath, 'utf8')
// For the time being we parse .tool-versions versions.split(/\r?\n/).forEach((line) => {
// 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) => {
const appVersion = line.match(/^([^ ]+)[ ]+(ref:v?)?([^ #]+)/) const appVersion = line.match(/^([^ ]+)[ ]+(ref:v?)?([^ #]+)/)
if (appVersion) { if (appVersion) {
const app = appVersion[1] const app = appVersion[1]
if (['erlang', 'elixir', 'gleam', 'rebar'].includes(app)) { if (APPS.includes(app)) {
const [, , , version] = appVersion const [, , , version] = appVersion
core.info(`Consuming ${app} at version ${version}`) core.info(`Consuming ${app} at version ${version}`)
appVersions.set(app, version) appVersions.set(app, version)
@@ -713,6 +835,46 @@ function parseVersionFile(versionFilePath0) {
return appVersions return appVersions
} }
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 appVersions
}
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`,
)
}
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) { function debugLog(groupName, message) {
const group = `Debugging for ${groupName}` const group = `Debugging for ${groupName}`
core.debug( core.debug(
@@ -807,11 +969,13 @@ async function install(toolName, opts) {
}, },
}, },
win32: { win32: {
downloadToolURL: () => downloadToolURL: () => {
'https://github.com/erlang/otp/releases/download/' + const otpArch = otpArchitecture()
`OTP-${toolVersion}/otp_win${getInput( return (
'otp-architecture', 'https://github.com/erlang/otp/releases/download/' +
)}_${toolVersion}.exe`, `OTP-${toolVersion}/otp_win${_.escapeRegExp(otpArch)}_${toolVersion}.exe`
)
},
extract: async () => ['file', 'otp.exe'], extract: async () => ['file', 'otp.exe'],
postExtract: async (cachePath) => { postExtract: async (cachePath) => {
const cmd = path.join(cachePath, 'otp.exe') const cmd = path.join(cachePath, 'otp.exe')
@@ -823,6 +987,36 @@ async function install(toolName, opts) {
const args = ['+V'] const args = ['+V']
const env = {} 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] return [cmd, args, env]
}, },
}, },
@@ -863,12 +1057,14 @@ async function install(toolName, opts) {
tool: 'Gleam', tool: 'Gleam',
linux: { linux: {
downloadToolURL: () => { downloadToolURL: () => {
const arch = getRunnerOSArchitecture()
let gz let gz
if ( if (
versionSpec === 'nightly' || versionSpec === 'nightly' ||
semver.gt(versionSpec, 'v0.22.1') 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 { } else {
gz = `gleam-${versionSpec}-linux-amd64.tar.gz` gz = `gleam-${versionSpec}-linux-amd64.tar.gz`
} }
@@ -932,6 +1128,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 break
case 'rebar3': case 'rebar3':
installOpts = { installOpts = {
@@ -1005,6 +1221,7 @@ async function install(toolName, opts) {
}, },
}, },
} }
installOpts.darwin = installOpts.linux
break break
default: default:
throw new Error(`no installer for ${toolName}`) throw new Error(`no installer for ${toolName}`)
@@ -1021,7 +1238,7 @@ async function installTool(opts) {
core.debug(`Checking if ${installOpts.tool} is already cached...`) core.debug(`Checking if ${installOpts.tool} is already cached...`)
if (cachePath === '') { if (cachePath === '') {
core.debug(" ... it isn't!") core.debug(" ... it isn't!")
const downloadToolURL = platformOpts.downloadToolURL() const downloadToolURL = platformOpts.downloadToolURL(versionSpec)
const file = await tc.downloadTool(downloadToolURL) const file = await tc.downloadTool(downloadToolURL)
const [targetElemType, targetElem] = await platformOpts.extract(file) const [targetElemType, targetElem] = await platformOpts.extract(file)
@@ -1059,25 +1276,16 @@ async function installTool(opts) {
await exec(cmd, args, { env: { ...process.env, ...env } }) await exec(cmd, args, { env: { ...process.env, ...env } })
} }
function checkPlatform() {
if (process.platform !== 'linux' && process.platform !== 'win32') {
throw new Error(
'@erlef/setup-beam only supports Ubuntu and Windows at this time',
)
}
}
function checkOtpArchitecture() { function checkOtpArchitecture() {
if (process.platform !== 'win32' && getInput('otp-architecture') == '32') { const otpArch = otpArchitecture()
if (process.platform !== 'win32' && otpArch == '32') {
throw new Error( throw new Error(
'@erlef/setup-beam only supports otp-architecture=32 on Windows', '@erlef/setup-beam only supports otp-architecture=32 on Windows',
) )
} }
if ( if (!['32', '64'].includes(otpArch)) {
getInput('otp-architecture') !== '32' &&
getInput('otp-architecture') !== '64'
) {
throw new Error('otp-architecture must be 32 or 64') throw new Error('otp-architecture must be 32 or 64')
} }
} }
@@ -1086,15 +1294,19 @@ function debugLoggingEnabled() {
return !!process.env.RUNNER_DEBUG return !!process.env.RUNNER_DEBUG
} }
module.exports = { export default {
get, get,
getOTPVersion,
getElixirVersion, getElixirVersion,
getGleamVersion, getGleamVersion,
getOTPVersion,
getRebar3Version, getRebar3Version,
getVersionFromSpec, getVersionFromSpec,
githubAMDRunnerArchs, githubAMDRunnerArchs,
githubARMRunnerArchs, githubARMRunnerArchs,
install, install,
installOTP,
maybeInstallElixir,
maybeInstallGleam,
maybeInstallRebar3,
parseVersionFile, parseVersionFile,
} }
+97
View File
@@ -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
1 ref_name ref datetime sha256 openssl wxwidgets
2 master 09e092774c00416bb1635880ef210d13aa99fe98 2025-05-25T00:14:48Z fa14de4db946fa512193853bca8147e679feb1037d6cd33d3a6a1c156b86ee32 openssl-3.1.6 wxwidgets-3.2.6
3 maint-27 c388a2d1b3f9918652276d4798692dd4d8ef97fc 2025-05-25T00:24:14Z 7fdd623e4a13ff3ca10d62f180e721014a2cd5c4341e7d81d8182a56d21a1141 openssl-3.1.6 wxwidgets-3.2.6
4 maint-26 7335f79eeaa0094c274dab2aa2ced9e138027c75 2025-05-25T00:20:18Z 5fa92c05bf904a0fc20313f4f9c625c620b71fd905dbe5fc78c8af0f8285f341 openssl-3.1.6 wxwidgets-3.2.6
5 maint-25 52199ed7e79646b73bacc47c92967ce9970b2373 2025-05-25T00:16:01Z c12998e8ce96d9e2126e45a87428a1efde4a344f46d789ba62b46b02ae8222de openssl-1.1.1w wxwidgets-3.2.6
6 maint c16299eb821718afd337db67f89c0fac56f79496 2025-05-25T00:15:17Z b5385d907b9617d3c793a203f29d33617bf0a7c6c2d96beaebb02d743396b3e3 openssl-3.1.6 wxwidgets-3.2.6
7 OTP-28.0-rc4 bdd4594181242f0d681b2e464b8bf12205fba30b 2025-05-05T18:42:29Z 4d178928ffa49ad443bda09e336ff47cc0930998405ac77c56a31a98373b819c openssl-3.1.6 wxwidgets-3.2.6
8 OTP-28.0-rc3 cf38f1efc91853e384542ce105639226b7367ea2 2025-04-16T11:36:45Z 027bc40d1cbda304a83f368e46f3d7e66ca92f61b9af1507d14a83d52d75052b openssl-3.1.6 wxwidgets-3.2.6
9 OTP-28.0-rc2 5ddf7a91568cdc29cb85f43640dbdb40fb3b3985 2025-03-19T09:09:12Z 086d560a45d19add332ce62c42c9ebf09d7423ffea60c5b8c13d9a54389f21c8 openssl-3.1.6 wxwidgets-3.2.6
10 OTP-28.0-rc1 ba8f061732c41ad4bca7895e47acb5d26f54c032 2025-02-12T10:40:45Z 35d1538c04274bc30ffc2c5c28d2550cd7bf1dd361ea35b158066919b48d0fb8 openssl-3.1.6 wxwidgets-3.2.6
11 OTP-28.0 7a57568c13dedf4ab82ea2b881619788749bbdc5 2025-05-21T08:09:39Z 769d3712096a9e4b93754d7c9b3bd09ce705f1b22ba23adffc706facbfb05ec8 openssl-3.1.6 wxwidgets-3.2.6
12 OTP-27.3.4 fe31f32661e4e90ae4a1bb32551d2937f7c4e12a 2025-05-08T13:43:25Z c6ed988d1c32baef98e77a18131b5fe380c2ddb98792cefec0683778797989fa openssl-3.1.6 wxwidgets-3.2.6
13 OTP-27.3.3 48a429f47c03e0fee574417345be90efec815abc 2025-04-16T14:09:21Z feba87f1ee977730bfea58098ace38671c329e2f6bb3fbbe132b22b2dcd6a399 openssl-3.1.6 wxwidgets-3.2.6
14 OTP-27.3.2 94c2583f43441ecd788e85ad00982b03e6b572f7 2025-04-04T08:41:14Z 19dc3404f2bb09a8cdd0b08ab896dfe02cb9680bf5974bcaa2b60d06d455a325 openssl-3.1.6 wxwidgets-3.2.6
15 OTP-27.3.1 901752e05d3ef678b22ecddb7379e8fe2a5facdd 2025-03-28T13:14:09Z f56d69e199f675cc490e43a96de6522f104d3e2b5a07563a890f3542b557f011 openssl-3.1.6 wxwidgets-3.2.6
16 OTP-27.3 15637bf0ed9e2a5d015ae9260c0912e2de2d7108 2025-03-05T10:11:36Z a76eb513202c7131bcd62ee516f8498098b8adadd417bd90e30ae3a2e3f6762d openssl-3.1.6 wxwidgets-3.2.6
17 OTP-27.2.4 4df6b11359260d5e01161a651a35c7391021a218 2025-02-20T15:09:39Z 4acbc151870b3e4e295133f211da7d7904df7c093386e2229c6d62d617336c28 openssl-3.1.6 wxwidgets-3.2.6
18 OTP-27.2.3 7eb2efcf82912f24e3d8ccf4854b42f28b5955bd 2025-02-17T17:07:52Z 472bfc5303367a48ffe2ebe963556bfb7b02bc5cb442ee58de802a9a4b6ae731 openssl-3.1.6 wxwidgets-3.2.6
19 OTP-27.2.2 d7f17f87b48465e4a3ff8d427df1551f91672d2f 2025-02-06T14:40:59Z 5293c8338846eea6f4197775504fc047363adb57d2fdc34c36de88e530c9269f openssl-3.1.6 wxwidgets-3.2.6
20 OTP-27.2.1 c5725e0f7397b4c1296190bd96ac0fa50b850f20 2025-01-23T18:10:29Z 4f7b34919c31e9b34e749d7b9c9bfa6ddebb562621ff6dd1814d02d4e078a14a openssl-3.1.6 wxwidgets-3.2.6
21 OTP-27.2 46f2418451d1991d2060dc5b4d7d88f8259c9291 2024-12-11T10:09:04Z cfdc9eff4bc3d7ac1b61e1d7adee92153e707249e9a1ade899ea5b7c52f6850d openssl-3.1.6 wxwidgets-3.2.6
22 OTP-27.1.3 e8ab3f7fdc59da5dd4dc8ef8c1c7bcec22b52faa 2024-12-05T15:08:49Z 5c1714f94851c7523ab8f97b6c0d303e216b82eb4e7bb57eff3864369b1e402b openssl-3.1.6 wxwidgets-3.2.6
23 OTP-27.1.2 1926819171af845832795d87bf1be0220710852b 2024-10-28T13:04:09Z 14d65f1f918cc91d42318d72dcd07f8c8439d25385fba2ac5b7a87bc51d6ccb5 openssl-3.1.6 wxwidgets-3.2.6
24 OTP-27.1.1 67ded430d9be65e2e6c11bba323c0eb62d07cd1f 2024-10-28T13:03:51Z 292e121817b3a7c4276ac71fb4c5d8469f0d7e83691a4becfb29e6d890cb5939 openssl-3.1.6 wxwidgets-3.2.6
25 OTP-27.1 9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb 2024-10-26T01:30:37Z 2b60294d04245c89aa0e2d6269a4f78eb55c17573c98bea355a9848517761a89 openssl-3.1.6 wxwidgets-3.2.6
26 OTP-27.0.1 ee9628e7ed09ef02e767994a6da5b7a225316aaa 2024-10-26T01:17:39Z c709ae30c356888e3f361a3691c100eff90df5b0248ef413d6565faaa0b8ccb9 openssl-3.1.6 wxwidgets-3.2.6
27 OTP-27.0-rc3 5df3992d695da4d7e8777cf7605279ce9d131f1c 2024-10-26T01:08:27Z 058846679e52c761ad2a1cfdf6e310ec959f65c557f607ce52388afdac21f275 openssl-3.1.6 wxwidgets-3.2.6
28 OTP-27.0-rc2 e651174c569694c92b1794ddd0a1a4a199610091 2024-10-26T01:04:25Z b9f5efb99fd81f05ed840d6867a64f1ca13fe4f83599f52ba602781ac4a5e81c openssl-3.1.6 wxwidgets-3.2.6
29 OTP-27.0-rc1 b74bd21d5cb52e0fdc5ea321439c428783feea23 2024-10-26T01:03:29Z 7b0c54b1b8205a5c15e2df61cc446498ea8c40fffebff2b00d03a97722edac92 openssl-3.1.6 wxwidgets-3.2.6
30 OTP-27.0 f1c72ea22f0d0479807fbe543191f7a1ef325838 2024-10-29T19:25:07Z 9e1c483d12e9554257c5edffb9b07a03001a3ddd131bbda05519638aa8f2206b openssl-3.1.6 wxwidgets-3.2.6
31 OTP-26.2.5.9 f900850abbd2c45b618675d1342ac85492ed1c5d 2025-02-20T16:10:43Z f96951f4226b53ec529a1b4ee65cc85f7ffa93a5f08fee105033253ceacd19ac openssl-3.1.6 wxwidgets-3.2.6
32 OTP-26.2.5.8 45fd6b3adb81f0b245d9baf4dcbdde049221fbff 2025-02-12T14:07:59Z 95a823c5f504c6a9b5a6f92c243783af065b58f6771e3cd8512315e4d6084ea6 openssl-3.1.6 wxwidgets-3.2.6
33 OTP-26.2.5.7 fa62351cef47e7dc502c5d0b1348ef8988b5d7b8 2025-01-27T12:50:05Z 0b5fa2704e170871995a41a3bb4fbb327f885735482d85406cbfe3db9b2cad7b openssl-3.1.6 wxwidgets-3.2.6
34 OTP-26.2.5.6 1f4a3b013b1df4034d6fb63623e77bfb142cadda 2024-12-05T14:41:44Z b5cbcb34067420175e49b4d4ec3d2df88622d6b79ff410182abe46ef565dfefd openssl-3.1.6 wxwidgets-3.2.6
35 OTP-26.2.5.5 81399ff534e71be2425a0cae96e26c104fcde2f3 2024-11-01T07:09:27Z 24e1f777c46b2444cdaa965fe64da483c0609c2e9657567d359dc4a241b3dad1 openssl-3.1.6 wxwidgets-3.2.6
36 OTP-26.2.5.4 b6e7e233d0b781728e745dc04f4cb2645c6632ec 2024-10-26T00:55:17Z 1d2d18a519c82442d4b278844b2050d3c55dfe224e9c39174c2fc5c66030c4e9 openssl-3.1.6 wxwidgets-3.2.6
37 OTP-26.2.5.3 84152c2c9d85128d3cce471f645f154c34132d82 2024-10-26T00:55:31Z 0e1d19aad5078e9689574af9fce7b156ef1cf63acf1f248cb347e98bd75bfca3 openssl-3.1.6 wxwidgets-3.2.6
38 OTP-26.2.5.2 c1805ad6200cec57bf86640fb9a1c715db515b78 2024-10-26T00:49:14Z 63aca8ad98e2be6ec5656708f97aa35d8b627515b9b6f52a4edc5051e0c444e8 openssl-3.1.6 wxwidgets-3.2.6
39 OTP-26.2.5.12 a2f903599fe779380ec197c8ab41a193eec2d148 2025-05-08T15:41:10Z 34cebb1732abc21e2748dfe592f8d2a5ebfb70f34ff49b32ecd614e697332895 openssl-3.1.6 wxwidgets-3.2.6
40 OTP-26.2.5.11 c2fcd5185c0651630196b6997be848a344c4aa71 2025-04-16T14:40:01Z 576e1a5453e6774924dfbc8cfc0b4e4276951be6e9fdec3b07db0c566b039852 openssl-3.1.6 wxwidgets-3.2.6
41 OTP-26.2.5.10 eaa1b25cd65de117e82a4fbf709cb5cf6836f5ff 2025-03-28T14:41:04Z 369c227a41b6f8db3c67f8ef07c623f17692b7d518b62d240ca3ef6d66ebc602 openssl-3.1.6 wxwidgets-3.2.6
42 OTP-26.2.5.1 858efd5b35b572c71a8010ad323c4127eef5bc29 2024-10-26T00:48:18Z f010d0c5f6d202496608b7d6a23f5f6d855297423f9d4e706cd443be722c49e4 openssl-3.1.6 wxwidgets-3.2.6
43 OTP-26.2.5 412bff5196fc0ab88a61fe37ca30e5226fc7872d 2024-10-26T00:43:56Z 171a4e07c6ee48207a6245ddf7c7ea1be435c0d93e9230d85076d07d9c06f3cf openssl-3.1.6 wxwidgets-3.2.6
44 OTP-26.2.4 e26c5206dc98ec1b8f978fceaa61fd1354266ccb 2024-10-26T00:42:41Z e00dca5237cc0e3bb6b2533e7952bb5950948c0620d9bda38b2cd18ac0a8e22e openssl-3.1.6 wxwidgets-3.2.6
45 OTP-26.2.3 928d03e6da416208fce7b9a7dbbfbb4f25d26c37 2024-10-26T00:38:24Z 510f554e4de8f25ca7aff3cd400b8143ef8fa8fd6da3603b42a79f58e6ba64ec openssl-3.1.6 wxwidgets-3.2.6
46 OTP-26.2.2 b83df13eec5446beab06dd24315d37a5b0633fd2 2024-10-26T00:37:43Z 2f2076d378b7b1983e9a84cc96609887164c7860dbeba4f22dcfdc2d6c00545b openssl-3.1.6 wxwidgets-3.2.6
47 OTP-26.2.1 ca8b893f9d5bdd0957b78514ba523032e762c644 2024-10-26T00:33:38Z 137f717281ccc11d0df31b31aaf7485b1fa89967716f56ac1c77f8a9747ae80a openssl-3.1.6 wxwidgets-3.2.6
48 OTP-26.2 7fc0898502cb3370b7c6d523a7393cd101808493 2024-10-26T00:28:49Z 99c70f904e0f7d4d9337cd896a03da341f5e0e308c8f875c622c0cd07daa9cf2 openssl-3.1.6 wxwidgets-3.2.6
49 OTP-26.1.2 c41d424db42ba84b72f3e25167470c3555723d87 2024-10-26T00:24:31Z 8f3b51e4cc1cbf7d3cc012b52fadba57e27d54d6448c5e920b03d29ac13155bf openssl-3.1.6 wxwidgets-3.2.6
50 OTP-26.1.1 2bdd30b872ab91dc376998d2c417f2a8b514d1aa 2024-10-26T00:21:07Z 90e6418caa2554e5fd2dfc543c262b7b04456970208ec57714c1e00fb98c8a2a openssl-3.1.6 wxwidgets-3.2.6
51 OTP-26.1 e962af35263618665c1df57df5135c0c703ad502 2024-10-26T00:20:06Z d9fe597017557b37d02a377a66b5f582822c9d817eb08797740547bc396becc0 openssl-3.1.6 wxwidgets-3.2.6
52 OTP-26.0.2 d051172925a5c84b2f21850a188a533f885f201c 2024-10-26T00:19:26Z 216948062d898401b2294eb969f485542b7695640e3f45b7f2ada2d24c653d4d openssl-3.1.6 wxwidgets-3.2.6
53 OTP-26.0.1 b54b86ad4f1253f46fd4552a73923756660c1d53 2024-10-26T00:16:01Z 3eb422a565156cc03e3161d6e8c6ffe696141ad416bf24eeb0613683904dcf4f openssl-3.1.6 wxwidgets-3.2.6
54 OTP-26.0-rc3 1f897adc9df5e0de5d5a85633a8629a7e45ddeab 2024-10-26T00:16:19Z c3953f88da37c2d1a96f98f475ff79816493c3a3e282ee040ed10f09ec607e40 openssl-3.1.6 wxwidgets-3.2.6
55 OTP-26.0-rc2 dac89a6acc1a93a615930ca18f1dbf4e9323b038 2024-10-26T00:11:55Z 2f2d1d5d757489de3848334da9807d8f3e042828cd9d62f384f318e6c0622893 openssl-3.1.6 wxwidgets-3.2.6
56 OTP-26.0-rc1 127026003180a834e9fa5d5919c824a184faeb92 2024-10-26T00:10:07Z dafb60e6bc73a5a56d021cf9c1890c1932a32799321c70c917ee214ba04ac8ad openssl-3.1.6 wxwidgets-3.2.6
57 OTP-26.0 8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee 2024-10-26T00:08:49Z 97424466074b66d51345dfa62776685ba7b92022bb6d8a3ed2d181d93ccf8386 openssl-3.1.6 wxwidgets-3.2.6
58 OTP-25.3.2.9 68fa9c42426380772784eed26d24747bfee38fcc 2024-10-26T00:05:02Z 2231d17ea69be892c929f44f223bed471b1a782680a40d9b38e94ecd3ba2d1e6 openssl-1.1.1w wxwidgets-3.2.6
59 OTP-25.3.2.8 c08f5acfb4e47933d8128d0b41b01487d0eb97a1 2024-10-26T00:04:34Z ac22ac879d0aced4a6e9c7ff36930a0e35b3b2a60532177147d92c566e98cd99 openssl-1.1.1w wxwidgets-3.2.6
60 OTP-25.3.2.7 d3c9eeb17042e5567337e1f87c924b25186daae0 2024-10-26T00:01:05Z 8e6dd919122c09748c65bf85493d1111b4f3bfe0b8cfb2ece2925333cb6dea69 openssl-1.1.1w wxwidgets-3.2.6
61 OTP-25.3.2.6 fd0e27a5c1ca7afde30b10c1b33a35ebb3313fd1 2024-10-25T23:59:16Z 520c8f37a5362c9e00fa7d2d43ef851a7ba96005618b3bcae6fb64046bd472c5 openssl-1.1.1w wxwidgets-3.2.6
62 OTP-25.3.2.5 5cb360d524a5777ed4243ac03a0162a95f545a16 2024-10-25T23:58:39Z 7aaa85be4ac8c4c991a7109e2bbd9b574f9e19814933e2e948ca19d52a99dd5f openssl-1.1.1w wxwidgets-3.2.6
63 OTP-25.3.2.4 9e6d04dd18bef6136fc2b45cc60fe1348c4664a7 2024-10-25T23:54:16Z bdb23c1b6d23da81044147efa2227985a55ab064feb475d0d22258137cc954c8 openssl-1.1.1w wxwidgets-3.2.6
64 OTP-25.3.2.3 da340fd39fc6550b1432662ffa55c3b6da3db41f 2024-10-25T23:54:17Z f63ab07211826bf34e71f32e8fc9209dfe291a74c7b7896e749d3bf815afa729 openssl-1.1.1w wxwidgets-3.2.6
65 OTP-25.3.2.21 eb0176f76725c1d6cc594ac3c899cf5340f6a4aa 2025-05-08T16:43:21Z 2d5d58162888119919dc03e1b1a65c4a4dadb9081317f070336b9d9410fab360 openssl-1.1.1w wxwidgets-3.2.6
66 OTP-25.3.2.20 3d83272458f7b0fb05aed4981a15cfa72ef7d2ba 2025-04-16T15:07:42Z 1bb2f2efc91d4c6efeb9c9d3f16635286fe1af49b0aeb2f1b12aa8f5b4eedb0d openssl-1.1.1w wxwidgets-3.2.6
67 OTP-25.3.2.2 ba144817d5478b15a50ef0c398d925232005277e 2024-10-25T23:49:44Z 2e75e4cfcdd0437f618881d0e229cdea3b4d437a5ac0777b9cd9e2edcd1dc3d9 openssl-1.1.1w wxwidgets-3.2.6
68 OTP-25.3.2.19 2dc11e177ba8e5e051a2e88b731ec6de0eb8bb4c 2025-03-28T14:40:58Z 1997fa6b329a737cd4dabb06b1c21ccb77a3759b3191526d207ae9ef7764d741 openssl-1.1.1w wxwidgets-3.2.6
69 OTP-25.3.2.18 e1346297304a626ef9126f77e8b943d51646fe5a 2025-02-20T16:09:10Z 185c3eac7b10fb6864f72331a8b13145caa71cee6115f9cc5c6658cf84ff710f openssl-1.1.1w wxwidgets-3.2.6
70 OTP-25.3.2.17 90a7540d93530990531ec48a14594efea8974ca2 2025-02-12T15:08:50Z 33bbc526906eb14ffba2f0213ba3105476cdb395cc7026212d37fccd8d2c0410 openssl-1.1.1w wxwidgets-3.2.6
71 OTP-25.3.2.16 b21c9ee6961e5b6aa1595d1f7547b349973ea833 2024-12-05T15:49:06Z 89ef79aabbd97f4ae27f5ae91d5a68fd122de0b14f6d76ab3055766a5e24cbe7 openssl-1.1.1w wxwidgets-3.2.6
72 OTP-25.3.2.15 cd91473539f38e88d10cf9efce3551afa1dbdb45 2024-10-25T23:48:26Z 427455c139fca6937bd56f0fd041d4aabb512c699c30270e7c604b46e1275c13 openssl-1.1.1w wxwidgets-3.2.6
73 OTP-25.3.2.14 412febbe2eb15958f92dd6f908b14cfcd2ff2c16 2024-10-25T23:45:50Z 0316bd01404b8ed92807bdd903fcf2a1d5efe0534e4f524192e48f54d46fe013 openssl-1.1.1w wxwidgets-3.2.6
74 OTP-25.3.2.13 00c3a73a1a043f3ca76cc2cfd20ac5ccc1e3377a 2024-10-25T23:44:26Z 2823f24541a189d5024e2c121ff9d2032d40b6893f2dacfefa40a8ccdec790b7 openssl-1.1.1w wxwidgets-3.2.6
75 OTP-25.3.2.12 cee6d023f30d5cedb4eaa2b1384b49597a9bde66 2024-10-25T23:41:52Z 592fa60e391e2a10802e797ea260417b44c4f1e53c57bf5cf72da7a0274c5ee9 openssl-1.1.1w wxwidgets-3.2.6
76 OTP-25.3.2.11 e1e117f0e95cb373f9bd5e159e54e6ffae1bb32b 2024-10-25T23:38:27Z e29ae556a166a0cd71d4e855581c7e4e8231c40d0506cb29395d6d3a87cfe96b openssl-1.1.1w wxwidgets-3.2.6
77 OTP-25.3.2.10 733439dc03b21ea92c096b6cc31befc133cd9081 2024-10-25T23:37:09Z 1d1b51d5d09ccbaae94ca7f53d1d145bb92e10f90699a5306c020c994fc19d38 openssl-1.1.1w wxwidgets-3.2.6
78 OTP-25.3.2.1 3f0a5f136aa72f785ca86df64c4384db2e9c8bbb 2024-10-25T23:34:24Z 9155c5fc846d98128da1b0651729cfa381e38a33b9b9253bcd5c208574b1b811 openssl-1.1.1w wxwidgets-3.2.6
79 OTP-25.3.2 0418c10ec37fa374867eae49f2f776c72c55d623 2024-10-25T23:33:11Z 73f44c0dfeb77f46e1be5a6e8a8edc32202fe0a6fa1e52468f4c5ad5144679ee openssl-1.1.1w wxwidgets-3.2.6
80 OTP-25.3.1 c487c0ea418315edd4a8614854e82c5359f4b8f8 2024-10-25T23:30:56Z b351a214f26f0acb73e0d034eadeea27ffc83ed048a117bb121324e04f48104c openssl-1.1.1w wxwidgets-3.2.6
81 OTP-25.3 5400ccf243a31d664153a4b9ceb9de3edfce1e0e 2024-10-25T23:29:58Z e619064424f2e9b61fa06ea1c28fdeca9dab915910a8f2dbfe6fe933d02cbf57 openssl-1.1.1w wxwidgets-3.2.6
82 OTP-25.2.3 07cf1c5caab19852ccf85ae7000d788913f3411d 2024-10-25T23:27:02Z 9cfa97270bcb7107753a2e5d22afc72fa144eb83204dfb25ec5be0f92d0d55c3 openssl-1.1.1w wxwidgets-3.2.6
83 OTP-25.2.2 8adae7eebbc791433d5f0f58daab558a8fbe847d 2024-10-25T23:23:02Z 9d99b562eaaedca1b85cb90c3fa7c4348ee350d35176fc1703d4b3b9ed70eb2f openssl-1.1.1w wxwidgets-3.2.6
84 OTP-25.2.1 43361e793b63d57570a5a46da4a5cb4a1c3563c5 2024-10-25T23:22:57Z bc25a8c440bdb7ce597c25362430d3bd4a69338d013fe786547c4b169d416166 openssl-1.1.1w wxwidgets-3.2.6
85 OTP-25.2 d6eb1c53d688a242bfb5e3b4febcea66c49c0fe7 2024-10-25T23:18:52Z 06dabd5bf940f12315a3ce4c422de5279debaa7d22e4222d60ff9e8314ddf997 openssl-1.1.1w wxwidgets-3.2.6
86 OTP-25.1.2.1 7dc04c755eef47b34f5763dcfc8d16913c1b7a08 2024-10-25T23:18:49Z b991aa4334859db303bbeeaa4b707536e01f2b3250152379e3bf68e4be1e39d3 openssl-1.1.1w wxwidgets-3.2.6
87 OTP-25.1.2 38ad8e28421c745c06ef9bd55f6e6204cd1f15ef 2024-10-25T23:14:57Z 3ae9c79be39211330e9a3609df06e5de7c5413c9191507901a04e939d4c2bc0d openssl-1.1.1w wxwidgets-3.2.6
88 OTP-25.1.1 be6f05d34736fadf37328058f00e788cb88da61b 2024-10-25T23:14:47Z e26266e2cc4ac2a7b34e76aabec0a3f9a7c44479b13297938fb479d1f043c77c openssl-1.1.1w wxwidgets-3.2.6
89 OTP-25.1 6efb5e31df6bc512ed6c466584ef15b846dcecab 2024-10-25T23:09:56Z 80a1dad1f1fc792c6aec58fc2236937637589167d1f9072e748e7f0ac8e88a56 openssl-1.1.1w wxwidgets-3.2.6
90 OTP-25.0.4 c028b855ee3f12c835ff3538a90ac5dbc155631b 2024-10-25T23:09:55Z 4e7e2f39cb14e36641c9b7d8255629ccccd11cf2ce466797ab0c75bf3369c3e4 openssl-1.1.1w wxwidgets-3.2.6
91 OTP-25.0.3 89c04fb1836fb865565125a4d5880b93e784d856 2024-10-25T23:08:37Z b92aece9b6a5b1d010fac6bd603f12b3c3d1e897c18c77a1ba75e28c246082c1 openssl-1.1.1w wxwidgets-3.2.6
92 OTP-25.0.2 ac0c9879c68b23278178a7afe738285b33ff1832 2024-10-25T23:05:22Z 1fcd537d0254783b3fa5906831cb8e4ed042f667948908d541812eba5f0df0a8 openssl-1.1.1w wxwidgets-3.2.6
93 OTP-25.0.1 cf18f250a40f33cc648d869eac833cd9aee86ed6 2024-10-25T23:02:52Z 133d88f6a8b3e734bce16b226c956e56b10f198a442d872069cd3a850c0fd9ab openssl-1.1.1w wxwidgets-3.2.6
94 OTP-25.0-rc3 47f121af8ee55a0dbe2a8c9ab85031ba052bad6b 2024-10-25T22:57:10Z 9a42a8210f21099380bcf471fc5cb2914ac24fe0424b250f3bcc80de3d79a099 openssl-1.1.1w wxwidgets-3.2.6
95 OTP-25.0-rc2 85d0a8366e64f8272e332a63a2cba59afa3f7eb9 2024-10-25T22:57:09Z f06a17a07f0744fd60671fdf89845617712dd200e138dfbb4cc54a20b0ad2a51 openssl-1.1.1w wxwidgets-3.2.6
96 OTP-25.0-rc1 3c68ceea1f93119bed871866c690fbf5a95048c1 2024-10-25T23:00:53Z 368d833b711ad3a11b3241e6abee7184f103476a8d46e6d2d4940f7b454ec708 openssl-1.1.1w wxwidgets-3.2.6
97 OTP-25.0 4ed7957623e5ccbd420a09a506bd6bc9930fe93c 2024-10-25T22:03:32Z d3728dd03c29d29237c2bc682884f5fad5535b41256a78f3314240e6458215b2 openssl-1.1.1w wxwidgets-3.2.6
+97
View File
@@ -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
1 ref_name ref datetime sha256 openssl wxwidgets
2 master 09e092774c00416bb1635880ef210d13aa99fe98 2025-05-25T00:21:50Z 5a405999f2332111d10d70699ec659d7766a34c4339c915fe75aca16324a68e6 openssl-3.1.6 wxwidgets-3.2.6
3 maint-27 c388a2d1b3f9918652276d4798692dd4d8ef97fc 2025-05-25T00:28:26Z c1c79695b4559eba35cc4df207b6b6063fa38bd2f67bbf1531f43dddfff171e1 openssl-3.1.6 wxwidgets-3.2.6
4 maint-26 7335f79eeaa0094c274dab2aa2ced9e138027c75 2025-05-25T00:24:18Z 74323d309a36c3cd21a7e4daa4989852c6077949d1ee5a4ab2403ddba5757234 openssl-3.1.6 wxwidgets-3.2.6
5 maint-25 52199ed7e79646b73bacc47c92967ce9970b2373 2025-05-25T00:22:01Z cc76a4f8a183c5b077a955a520b7ff12afe4063bcae74de26e9bdd71b5fb39a0 openssl-1.1.1w wxwidgets-3.2.6
6 maint c16299eb821718afd337db67f89c0fac56f79496 2025-05-25T00:19:44Z b345cb6ac07ba03469833927f4de4e3e44885e44996d7f3e3e30e9b4f6dce0dc openssl-3.1.6 wxwidgets-3.2.6
7 OTP-28.0-rc4 bdd4594181242f0d681b2e464b8bf12205fba30b 2025-05-05T18:58:38Z 584ee2ce5b63331ba57bf362fb20a6e28b7e0b26040ea9100d5ee7522a7148ce openssl-3.1.6 wxwidgets-3.2.6
8 OTP-28.0-rc3 cf38f1efc91853e384542ce105639226b7367ea2 2025-04-16T11:51:19Z bce2b8383898fb5386bfc14ca4462e509ed7f5a0466fe5d215fd8a2dfb2f5c64 openssl-3.1.6 wxwidgets-3.2.6
9 OTP-28.0-rc2 5ddf7a91568cdc29cb85f43640dbdb40fb3b3985 2025-03-19T09:16:11Z e1d04af4b57b921b0edbddf0595bbda3d89f50db67460a04ce77ede3bad1b90a openssl-3.1.6 wxwidgets-3.2.6
10 OTP-28.0-rc1 ba8f061732c41ad4bca7895e47acb5d26f54c032 2025-02-12T10:47:48Z 028793678f35df042a565fb17552717506bcfbbce6e7dc395ed9f896cb7eee62 openssl-3.1.6 wxwidgets-3.2.6
11 OTP-28.0 7a57568c13dedf4ab82ea2b881619788749bbdc5 2025-05-21T08:16:14Z 31a8a7deb607f936a24024a6b3ed278a2fd16af608687e1e2f91c9a6554b43f8 openssl-3.1.6 wxwidgets-3.2.6
12 OTP-27.3.4 fe31f32661e4e90ae4a1bb32551d2937f7c4e12a 2025-05-08T13:53:15Z 2d63ddb0d51d2964e9d5f01bb2a54c43ec4840cffb243f6a70d300628e891b99 openssl-3.1.6 wxwidgets-3.2.6
13 OTP-27.3.3 48a429f47c03e0fee574417345be90efec815abc 2025-04-16T14:24:16Z b923cfb68d483cd3de99f1c00944e36b5596a7239c77675e5d07ce675357109f openssl-3.1.6 wxwidgets-3.2.6
14 OTP-27.3.2 94c2583f43441ecd788e85ad00982b03e6b572f7 2025-04-04T08:53:14Z 7e6f744f0b92bcf36697db476988ecfd9be96840667667561496cfa631bae402 openssl-3.1.6 wxwidgets-3.2.6
15 OTP-27.3.1 901752e05d3ef678b22ecddb7379e8fe2a5facdd 2025-03-28T13:21:24Z a1b94b8ce7c151c59e309599bc2c290c824e4805b66b135f5ff2db261bb1eac0 openssl-3.1.6 wxwidgets-3.2.6
16 OTP-27.3 15637bf0ed9e2a5d015ae9260c0912e2de2d7108 2025-03-05T10:13:39Z f52be7289b13755ee20121a40e2a910f707fce3c2e4f1d358a525377da7789de openssl-3.1.6 wxwidgets-3.2.6
17 OTP-27.2.4 4df6b11359260d5e01161a651a35c7391021a218 2025-02-20T15:13:30Z 7797d076b5e0d8df7f36fcb73b3d88898da8ab98d801441fb78a06bf609db6ac openssl-3.1.6 wxwidgets-3.2.6
18 OTP-27.2.3 7eb2efcf82912f24e3d8ccf4854b42f28b5955bd 2025-02-17T17:14:28Z bd7f58deb6c97cd75fe63f9d36395d1675aec4ca0914f8f0f389fd7f0d2286d1 openssl-3.1.6 wxwidgets-3.2.6
19 OTP-27.2.2 d7f17f87b48465e4a3ff8d427df1551f91672d2f 2025-02-06T15:01:49Z ef44d779e4f8cfebdd59240a41b3ef4e99bd2e35ca84f219b7842d42f1ec0721 openssl-3.1.6 wxwidgets-3.2.6
20 OTP-27.2.1 c5725e0f7397b4c1296190bd96ac0fa50b850f20 2025-01-23T18:18:42Z 13151d5f3f07efa4b30c9bd824b34d7d85f289bf28baf633e504d5eb4f8177ae openssl-3.1.6 wxwidgets-3.2.6
21 OTP-27.2 46f2418451d1991d2060dc5b4d7d88f8259c9291 2024-12-11T10:22:06Z 91fd068ed9748b83f95b6e4a8c60e59562567a507cf6d4da8f8d44a88523ce54 openssl-3.1.6 wxwidgets-3.2.6
22 OTP-27.1.3 e8ab3f7fdc59da5dd4dc8ef8c1c7bcec22b52faa 2024-12-05T15:17:20Z ea878ed7d9c13c2aa44f6ea5af8321e1111967828577e5532d6ee04d92f7194c openssl-3.1.6 wxwidgets-3.2.6
23 OTP-27.1.2 1926819171af845832795d87bf1be0220710852b 2024-10-28T13:12:50Z 7a634452ab85a23d210ef482c89af7e7e8448e063a1ccaf92e815daf52b1a135 openssl-3.1.6 wxwidgets-3.2.6
24 OTP-27.1.1 67ded430d9be65e2e6c11bba323c0eb62d07cd1f 2024-10-28T13:12:16Z 36790419f0f30260174474d2bda9a3a8e269b0f3ebc6d873af03a3da93243565 openssl-3.1.6 wxwidgets-3.2.6
25 OTP-27.1 9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb 2024-10-26T01:31:19Z 99601924bf4b9656e4ecaff9936d4a3c15761b69a64cec24a8b89f6cb4f0e4c7 openssl-3.1.6 wxwidgets-3.2.6
26 OTP-27.0.1 ee9628e7ed09ef02e767994a6da5b7a225316aaa 2024-10-26T01:24:32Z f95748869c9206d394369932532ca2c23a6d21447607c6705cea4d5ab28c921d openssl-3.1.6 wxwidgets-3.2.6
27 OTP-27.0-rc3 5df3992d695da4d7e8777cf7605279ce9d131f1c 2024-10-26T01:20:53Z b8cdb3aba95f10ca0b2c61a0a6e2383dfc1d9cee49ac77d1955f6f0e5e80e58a openssl-3.1.6 wxwidgets-3.2.6
28 OTP-27.0-rc2 e651174c569694c92b1794ddd0a1a4a199610091 2024-10-26T01:23:23Z 4e0351fcac3399a217fddf6af30db45377ffbba1fe59c5d3e7dc6d364c077aec openssl-3.1.6 wxwidgets-3.2.6
29 OTP-27.0-rc1 b74bd21d5cb52e0fdc5ea321439c428783feea23 2024-10-26T01:13:02Z cf0b249e72a1ec1db93c4d081bdf20309383a0ab47971f392484323ab58b62af openssl-3.1.6 wxwidgets-3.2.6
30 OTP-27.0 f1c72ea22f0d0479807fbe543191f7a1ef325838 2024-10-29T19:30:52Z 41b4ad3e7081151c10b964d1b63982704d6a840da8a525bda0423f42028d180c openssl-3.1.6 wxwidgets-3.2.6
31 OTP-26.2.5.9 f900850abbd2c45b618675d1342ac85492ed1c5d 2025-02-20T16:14:22Z 2f1cba5d0a752edab7f4394bc361854b69cd89fe71f06acfc9e42b82b9a42324 openssl-3.1.6 wxwidgets-3.2.6
32 OTP-26.2.5.8 45fd6b3adb81f0b245d9baf4dcbdde049221fbff 2025-02-12T14:13:26Z 21d6aa90527a2fa16a47a73ad739925c6d8811d47d530a81a987cb53f2def3bb openssl-3.1.6 wxwidgets-3.2.6
33 OTP-26.2.5.7 fa62351cef47e7dc502c5d0b1348ef8988b5d7b8 2025-01-27T12:57:08Z c204588b446faf19c189ca536803b818c5b8b46c529a3b0b7df67a11d92b8412 openssl-3.1.6 wxwidgets-3.2.6
34 OTP-26.2.5.6 1f4a3b013b1df4034d6fb63623e77bfb142cadda 2024-12-05T14:50:08Z db9635c0b1d6d79dc0a66bdf7b64c41a1323b8790551a6df3ddb659f3deb1d38 openssl-3.1.6 wxwidgets-3.2.6
35 OTP-26.2.5.5 81399ff534e71be2425a0cae96e26c104fcde2f3 2024-11-01T07:16:35Z fc58d3d471a552451e6682df652fe989d5be639e9179e3d6b44deb78d4867501 openssl-3.1.6 wxwidgets-3.2.6
36 OTP-26.2.5.4 b6e7e233d0b781728e745dc04f4cb2645c6632ec 2024-10-26T01:07:55Z bd3f246ddd8448c1cb877dd9d9137ab7e77f9700608b4c0f68968a81f13fbb04 openssl-3.1.6 wxwidgets-3.2.6
37 OTP-26.2.5.3 84152c2c9d85128d3cce471f645f154c34132d82 2024-10-26T00:58:33Z 941970ed37bb76d690e03355b7d4e6770af076d89b62f542ac140efafdb7a179 openssl-3.1.6 wxwidgets-3.2.6
38 OTP-26.2.5.2 c1805ad6200cec57bf86640fb9a1c715db515b78 2024-10-26T00:55:50Z 628bcc158e5662004135241e7ab3e71146860c9fc5d1f86829061da38119144a openssl-3.1.6 wxwidgets-3.2.6
39 OTP-26.2.5.12 a2f903599fe779380ec197c8ab41a193eec2d148 2025-05-08T15:46:20Z 6cd58a09426aff768fb0117b27e60cd2b671c1336424aada0d48e47e26d4449f openssl-3.1.6 wxwidgets-3.2.6
40 OTP-26.2.5.11 c2fcd5185c0651630196b6997be848a344c4aa71 2025-04-16T14:47:54Z dec9c637e619dbd9add023c50a5ba0b23a30657d543417d7ff0d9033abdbbebe openssl-3.1.6 wxwidgets-3.2.6
41 OTP-26.2.5.10 eaa1b25cd65de117e82a4fbf709cb5cf6836f5ff 2025-03-28T14:48:04Z aa5a5759222e4eec003f5aae0f2804e2e487da4c81feaed7305c3a9e87fcdbfd openssl-3.1.6 wxwidgets-3.2.6
42 OTP-26.2.5.1 858efd5b35b572c71a8010ad323c4127eef5bc29 2024-10-26T00:51:06Z 587a9b9f7d5178895194691fdb57fab4d9b819cba644129381a73944eadbc821 openssl-3.1.6 wxwidgets-3.2.6
43 OTP-26.2.5 412bff5196fc0ab88a61fe37ca30e5226fc7872d 2024-10-26T00:49:32Z 8eb273cf5c459829cca28a8caada5b0e289f43c126b0718fa85888731dccf7d4 openssl-3.1.6 wxwidgets-3.2.6
44 OTP-26.2.4 e26c5206dc98ec1b8f978fceaa61fd1354266ccb 2024-10-26T00:43:46Z ed9a515471bcf07ce392b0d3837f001b555f55d670f07f32cdd6c5ce510d78fb openssl-3.1.6 wxwidgets-3.2.6
45 OTP-26.2.3 928d03e6da416208fce7b9a7dbbfbb4f25d26c37 2024-10-26T00:44:24Z 92ec2364d9948b4885714aca32a1beb1115c753cf0a2b19b03012bc1805fe556 openssl-3.1.6 wxwidgets-3.2.6
46 OTP-26.2.2 b83df13eec5446beab06dd24315d37a5b0633fd2 2024-10-26T00:39:35Z e23a011e026687b66a25da9a1f6bcc4da94494c5de1eba6440b5b25b6f00ddb8 openssl-3.1.6 wxwidgets-3.2.6
47 OTP-26.2.1 ca8b893f9d5bdd0957b78514ba523032e762c644 2024-10-26T00:33:26Z 459bbf4efe65a4575bd16b26ab7d69d39327433233a712ebbe1dccd531fcf87c openssl-3.1.6 wxwidgets-3.2.6
48 OTP-26.2 7fc0898502cb3370b7c6d523a7393cd101808493 2024-10-26T00:33:56Z 6b9760085de085f3a12d20935f338fc99ee67fd35d2e62a7e3e9cffb9b21242c openssl-3.1.6 wxwidgets-3.2.6
49 OTP-26.1.2 c41d424db42ba84b72f3e25167470c3555723d87 2024-10-26T00:33:32Z 82ba154649c17be8ff45268239d36e4d34e82a520ee57a49b9b337e3fa77d69d openssl-3.1.6 wxwidgets-3.2.6
50 OTP-26.1.1 2bdd30b872ab91dc376998d2c417f2a8b514d1aa 2024-10-26T00:28:08Z d5ce0b59d827c751ab2f68e5e7f1757dabee399040eaedcfba491c8c79c66cc3 openssl-3.1.6 wxwidgets-3.2.6
51 OTP-26.1 e962af35263618665c1df57df5135c0c703ad502 2024-10-26T00:26:33Z 236ea16e738e5c57deae3ff424ede7944ffce14fac8b939a18ba2ccad85e4d81 openssl-3.1.6 wxwidgets-3.2.6
52 OTP-26.0.2 d051172925a5c84b2f21850a188a533f885f201c 2024-10-26T00:25:48Z 8cb58daa3694229068f5a3f621c5508907a20593955abfd17185720505946764 openssl-3.1.6 wxwidgets-3.2.6
53 OTP-26.0.1 b54b86ad4f1253f46fd4552a73923756660c1d53 2024-10-26T00:19:22Z fb7d35f7838fd9422cdc215f2177953fa43bf72357628c59eefeb4c0852c5121 openssl-3.1.6 wxwidgets-3.2.6
54 OTP-26.0-rc3 1f897adc9df5e0de5d5a85633a8629a7e45ddeab 2024-10-26T00:16:30Z ff2a6fe3e3c6f7aa851604c0ff3163cfe3dbf9ed06d2f1a62f753a758d9d39bc openssl-3.1.6 wxwidgets-3.2.6
55 OTP-26.0-rc2 dac89a6acc1a93a615930ca18f1dbf4e9323b038 2024-10-26T00:15:34Z c9f23a971cde0b7bb25d0b82a18f55f958ac169d499593c17b3d0c5d847a4714 openssl-3.1.6 wxwidgets-3.2.6
56 OTP-26.0-rc1 127026003180a834e9fa5d5919c824a184faeb92 2024-10-26T00:12:17Z abf7d8ffafe4dafc39df96c062a0aad392f03c0abbe9a5d9f7a5b01189e48f9d openssl-3.1.6 wxwidgets-3.2.6
57 OTP-26.0 8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee 2024-10-26T00:11:24Z 8952b4fb76ce8d1b95b2de8643ddf19ad84993563860b313382915b290ef2d97 openssl-3.1.6 wxwidgets-3.2.6
58 OTP-25.3.2.9 68fa9c42426380772784eed26d24747bfee38fcc 2024-10-26T00:08:03Z 5702fa82c48a9732a5f1196cb32b617c475851e3471fd2b6e7e719792dfc032a openssl-1.1.1w wxwidgets-3.2.6
59 OTP-25.3.2.8 c08f5acfb4e47933d8128d0b41b01487d0eb97a1 2024-10-26T00:06:15Z c6c1929c5408e9d6fc66c1b606e0926f362cd057db838b6013dac54b94cab39d openssl-1.1.1w wxwidgets-3.2.6
60 OTP-25.3.2.7 d3c9eeb17042e5567337e1f87c924b25186daae0 2024-10-26T00:04:48Z fe43af77747d7034204451ed630c4851d86c23432ce89d5f253505988656036a openssl-1.1.1w wxwidgets-3.2.6
61 OTP-25.3.2.6 fd0e27a5c1ca7afde30b10c1b33a35ebb3313fd1 2024-10-26T00:00:23Z 83bf16f30737ec14bf32a1acbfd86f65b89be2fa8b8bd4462c70c6c48d1e61b1 openssl-1.1.1w wxwidgets-3.2.6
62 OTP-25.3.2.5 5cb360d524a5777ed4243ac03a0162a95f545a16 2024-10-26T00:01:37Z ad254c611b29df084470bf3f757e619287b52c3145dced61a46aaa85bd58b36b openssl-1.1.1w wxwidgets-3.2.6
63 OTP-25.3.2.4 9e6d04dd18bef6136fc2b45cc60fe1348c4664a7 2024-10-25T23:56:58Z e1fd6458c109d6fc3f8ebca01b5d29a718d9612a7ffbac464ce870daf69cd6fa openssl-1.1.1w wxwidgets-3.2.6
64 OTP-25.3.2.3 da340fd39fc6550b1432662ffa55c3b6da3db41f 2024-10-25T23:55:04Z 3b40c8fbee2bab28e5d979994dce3dbb0761df348a21798b1c50467783781324 openssl-1.1.1w wxwidgets-3.2.6
65 OTP-25.3.2.21 eb0176f76725c1d6cc594ac3c899cf5340f6a4aa 2025-05-08T16:49:06Z 8aed83bc19798efd25e0a32fb1eb174904a2881b3d9a8039d86f7aff6375cdb1 openssl-1.1.1w wxwidgets-3.2.6
66 OTP-25.3.2.20 3d83272458f7b0fb05aed4981a15cfa72ef7d2ba 2025-04-16T15:09:30Z 7456c582f71f1f8448cd6d2349302985e4691bc24785f72495da7db9989c54f0 openssl-1.1.1w wxwidgets-3.2.6
67 OTP-25.3.2.2 ba144817d5478b15a50ef0c398d925232005277e 2024-10-25T23:54:34Z e7d36cab3aa0096c549f8e8fcd381fb3f4005dba698fc1f096dd9373b3862cd8 openssl-1.1.1w wxwidgets-3.2.6
68 OTP-25.3.2.19 2dc11e177ba8e5e051a2e88b731ec6de0eb8bb4c 2025-03-28T14:45:35Z 23b29d4fa18af2f0252b7d878316d492d114a0d3c2a97eed5e874601b36bddc7 openssl-1.1.1w wxwidgets-3.2.6
69 OTP-25.3.2.18 e1346297304a626ef9126f77e8b943d51646fe5a 2025-02-20T16:10:45Z adf16cfeab7e02003be2e13b23e37bc7952b45025e2400a008acab0e36c805db openssl-1.1.1w wxwidgets-3.2.6
70 OTP-25.3.2.17 90a7540d93530990531ec48a14594efea8974ca2 2025-02-12T15:11:54Z 6bd872e819aabdf2c07f81d6a0436f1a639c778440cf10be3dff783a88a9e4fc openssl-1.1.1w wxwidgets-3.2.6
71 OTP-25.3.2.16 b21c9ee6961e5b6aa1595d1f7547b349973ea833 2024-12-05T15:46:47Z 571677874adeeb77e585b0e732a13ccfe707497a6abfd45aa2c11df59ba4c46a openssl-1.1.1w wxwidgets-3.2.6
72 OTP-25.3.2.15 cd91473539f38e88d10cf9efce3551afa1dbdb45 2024-10-25T23:49:57Z 1f0d974438da48dbd15823a3e2753d5ca4a5aeccef49d7814af40393a3aff26f openssl-1.1.1w wxwidgets-3.2.6
73 OTP-25.3.2.14 412febbe2eb15958f92dd6f908b14cfcd2ff2c16 2024-10-25T23:49:51Z 9584a37799b64b3f095e36f000b0574ed5119ed8200899065da298b7e59aac32 openssl-1.1.1w wxwidgets-3.2.6
74 OTP-25.3.2.13 00c3a73a1a043f3ca76cc2cfd20ac5ccc1e3377a 2024-10-25T23:44:27Z eed02812b0104e5fa530bc2a932266fe5102412ced43efcbd7ce2ed9962c4017 openssl-1.1.1w wxwidgets-3.2.6
75 OTP-25.3.2.12 cee6d023f30d5cedb4eaa2b1384b49597a9bde66 2024-10-25T23:43:41Z c033ffd03966263de25794a1768813a0434c77e575b546a0b087fd587d5b63fa openssl-1.1.1w wxwidgets-3.2.6
76 OTP-25.3.2.11 e1e117f0e95cb373f9bd5e159e54e6ffae1bb32b 2024-10-25T23:42:59Z 5dbcce0b562c03c273c29acb92e56d0d8a1fd25da15a665ffc3f621d8abdf94a openssl-1.1.1w wxwidgets-3.2.6
77 OTP-25.3.2.10 733439dc03b21ea92c096b6cc31befc133cd9081 2024-10-25T23:40:26Z ec0305a15e69fa9aa669fc2c95b34ded49597e77be84121da7bba104ac92f06c openssl-1.1.1w wxwidgets-3.2.6
78 OTP-25.3.2.1 3f0a5f136aa72f785ca86df64c4384db2e9c8bbb 2024-10-25T23:37:53Z 08c5b69026a6405d8b7f684cc295d75c09c1caaa8b339019dda35daa29db11ba openssl-1.1.1w wxwidgets-3.2.6
79 OTP-25.3.2 0418c10ec37fa374867eae49f2f776c72c55d623 2024-10-25T23:36:51Z 8bd9f9a7f4580258b69dc6e4408ea300adc375c652ed519c5a51783aac200793 openssl-1.1.1w wxwidgets-3.2.6
80 OTP-25.3.1 c487c0ea418315edd4a8614854e82c5359f4b8f8 2024-10-25T23:34:37Z d8b7c21118650c8f2703b09b4af92ced093e497e54e876e77c0ca66f75a91605 openssl-1.1.1w wxwidgets-3.2.6
81 OTP-25.3 5400ccf243a31d664153a4b9ceb9de3edfce1e0e 2024-10-25T23:28:52Z 92a0ff47f7358c3d54dd2662f31209fcd429e625662891c34f995ae4f5046dcb openssl-1.1.1w wxwidgets-3.2.6
82 OTP-25.2.3 07cf1c5caab19852ccf85ae7000d788913f3411d 2024-10-25T23:29:00Z 73663617ee99d142ade4fb1f22148542d1c2cc81d34cb4dc9ca3a6df0fd6934b openssl-1.1.1w wxwidgets-3.2.6
83 OTP-25.2.2 8adae7eebbc791433d5f0f58daab558a8fbe847d 2024-10-25T23:26:48Z e4f1f0d8e822e2c65ea10d187b1123d421583db7c58a8ca75159d4387274b294 openssl-1.1.1w wxwidgets-3.2.6
84 OTP-25.2.1 43361e793b63d57570a5a46da4a5cb4a1c3563c5 2024-10-25T23:24:37Z 0ea3e0bf2e0e4b392cf5673df947087c9be8383c9a6bee33ce371529737c7e23 openssl-1.1.1w wxwidgets-3.2.6
85 OTP-25.2 d6eb1c53d688a242bfb5e3b4febcea66c49c0fe7 2024-10-25T23:22:03Z adb12459803d0eb2c7033af4a1262a788ef7d00a43bf3be83cb25d7ab3a63370 openssl-1.1.1w wxwidgets-3.2.6
86 OTP-25.1.2.1 7dc04c755eef47b34f5763dcfc8d16913c1b7a08 2024-10-25T23:21:03Z 67fe4b03b2d2539397df718c2d0161012fa4c6586e342021d6d47c04574551d5 openssl-1.1.1w wxwidgets-3.2.6
87 OTP-25.1.2 38ad8e28421c745c06ef9bd55f6e6204cd1f15ef 2024-10-25T23:16:01Z 4a1705e5976b51e24159dc7cd06d25d58aa0dbe343e30119c6211a26edf825d1 openssl-1.1.1w wxwidgets-3.2.6
88 OTP-25.1.1 be6f05d34736fadf37328058f00e788cb88da61b 2024-10-25T23:16:23Z 62640b84c7a211c3d66919dd21505e42c9cc6fbf2deaafc71b1d7afbdba0a851 openssl-1.1.1w wxwidgets-3.2.6
89 OTP-25.1 6efb5e31df6bc512ed6c466584ef15b846dcecab 2024-10-25T23:14:41Z 121b4ff6f86788cffb889836602f148dcb71ff60104cee838d5b953e2ddfc864 openssl-1.1.1w wxwidgets-3.2.6
90 OTP-25.0.4 c028b855ee3f12c835ff3538a90ac5dbc155631b 2024-10-25T23:10:57Z bedcacf4cddf158f68c6972a86be6fe1362957741738c53f37ba77d5902abed1 openssl-1.1.1w wxwidgets-3.2.6
91 OTP-25.0.3 89c04fb1836fb865565125a4d5880b93e784d856 2024-10-25T23:09:39Z fc5e45caad51eb4b684eef752ea8eb96385de1d826b4551e07f8e0b03df2c87b openssl-1.1.1w wxwidgets-3.2.6
92 OTP-25.0.2 ac0c9879c68b23278178a7afe738285b33ff1832 2024-10-25T23:04:51Z cdec63b483271cff74566977f346271ce3cc3508599de150d427a2e97e67fe4b openssl-1.1.1w wxwidgets-3.2.6
93 OTP-25.0.1 cf18f250a40f33cc648d869eac833cd9aee86ed6 2024-10-25T23:05:17Z 04f463cee1e252480916f221556e72bf1b1d03df45d58c6d09afd9adefd6699d openssl-1.1.1w wxwidgets-3.2.6
94 OTP-25.0-rc3 47f121af8ee55a0dbe2a8c9ab85031ba052bad6b 2024-10-25T22:57:47Z d287456c7bf237c5884d07445cfca277eb541e2fbae49d0d3b70946ba8132e59 openssl-1.1.1w wxwidgets-3.2.6
95 OTP-25.0-rc2 85d0a8366e64f8272e332a63a2cba59afa3f7eb9 2024-10-25T22:57:08Z 949bad8c339694cbf4e4f6a84a3dd36914718e37358e257705512ea7e6605c44 openssl-1.1.1w wxwidgets-3.2.6
96 OTP-25.0-rc1 3c68ceea1f93119bed871866c690fbf5a95048c1 2024-10-25T23:04:36Z 9a39912e8fb6c12f9bc7e589be7cc176667d3b8a9c48c525a83e069f1ef18b1b openssl-1.1.1w wxwidgets-3.2.6
97 OTP-25.0 4ed7957623e5ccbd420a09a506bd6bc9930fe93c 2024-10-25T22:09:27Z a6d318a64dc1593b6bea301a799352229b904ac6ff18a1c1fcaec97f7718f83d openssl-1.1.1w wxwidgets-3.2.6
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4.2.2
- uses: erlef/setup-beam@v1 - uses: erlef/setup-beam@v1
with: with:
otp-version: "26.0.2" otp-version: "26.0.2"
+2 -2
View File
@@ -13,7 +13,7 @@ version = "1.0.0"
# https://gleam.run/writing-gleam/gleam-toml/. # https://gleam.run/writing-gleam/gleam-toml/.
[dependencies] [dependencies]
gleam_stdlib = ">= 0.34.0 and < 2.0.0" gleam_stdlib = "0.60.0"
[dev-dependencies] [dev-dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0" gleeunit = "1.3.0"
+11
View File
@@ -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" }
+378 -124
View File
@@ -1,3 +1,17 @@
import assert from 'node:assert'
import http from 'node:http'
import fs from 'node:fs'
import os from 'node:os'
import path from 'node:path'
import { describe, it } from 'node:test'
import * as csv from 'csv-parse/sync'
import elixirMatchers from '../matchers/elixir-matchers.json' with { type: 'json' }
import erlangMatchers from '../matchers/erlang-matchers.json' with { type: 'json' }
const { problemMatcher } = elixirMatchers
const { problemMatcher: erlangProblemMatcher } = erlangMatchers
process.env.NODE_ENV = 'test'
simulateInput('otp-version', '25.1.2') simulateInput('otp-version', '25.1.2')
simulateInput('otp-architecture', '64') simulateInput('otp-architecture', '64')
simulateInput('elixir-version', '1.14.2') simulateInput('elixir-version', '1.14.2')
@@ -7,14 +21,7 @@ simulateInput('install-hex', 'true')
simulateInput('github-token', process.env.GITHUB_TOKEN) simulateInput('github-token', process.env.GITHUB_TOKEN)
simulateInput('hexpm-mirrors', 'https://builds.hex.pm', { multiline: true }) simulateInput('hexpm-mirrors', 'https://builds.hex.pm', { multiline: true })
const assert = require('assert') const { default: setupBeam } = await import('../src/setup-beam.js')
const http = require('http')
const fs = require('fs')
const os = require('os')
const path = require('path')
const setupBeam = require('../src/setup-beam')
const { problemMatcher } = require('../matchers/elixir-matchers.json')
const { describe, it } = require('node:test')
const matrix = { const matrix = {
otp: { otp: {
@@ -23,6 +30,8 @@ const matrix = {
'ubuntu-22.04': parseBuild('test/otp/ubuntu-22.04/builds.txt'), 'ubuntu-22.04': parseBuild('test/otp/ubuntu-22.04/builds.txt'),
'ubuntu-24.04': parseBuild('test/otp/ubuntu-24.04/builds.txt'), 'ubuntu-24.04': parseBuild('test/otp/ubuntu-24.04/builds.txt'),
windows: parseReleases('test/otp/releases.json'), windows: parseReleases('test/otp/releases.json'),
'macos-aarch64': parseCsv('test/otp/macos/aarch64-apple-darwin.csv'),
'macos-x86_64': parseCsv('test/otp/macos/x86_64-apple-darwin.csv'),
}, },
elixir: parseBuild('test/elixir/builds.txt'), elixir: parseBuild('test/elixir/builds.txt'),
gleam: parseReleases('test/gleam/releases.json'), gleam: parseReleases('test/gleam/releases.json'),
@@ -58,12 +67,21 @@ function parseReleases(version) {
} }
} }
function parseCsv(file) {
let versions = {}
let fileH = fs.readFileSync(file, 'utf8')
csv
.parse(fileH, { columns: true })
.forEach((line) => (versions[line.ref_name] = line.ref_name))
return versions
}
describe('OTP install', () => { describe('OTP install', () => {
it('fails for invalid OS version', async () => { it('fails for invalid OS version', async () => {
const otpOSVersion = 'ubuntu-08.04' const otpOSVersion = 'ubuntu-08.04'
const otpVersion = 'OTP-23.2' const otpVersion = 'OTP-23.2'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.install('otp', { await setupBeam.install('otp', {
hexMirror: 'https://builds.hex.pm', hexMirror: 'https://builds.hex.pm',
@@ -83,7 +101,7 @@ describe('OTP install', () => {
describe('Elixir install', () => { describe('Elixir install', () => {
it('fails for version 0.11 without OTP', async () => { it('fails for version 0.11 without OTP', async () => {
const exVersion = '0.11' const exVersion = '0.11'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.install('elixir', { await setupBeam.install('elixir', {
hexMirror: 'https://builds.hex.pm', hexMirror: 'https://builds.hex.pm',
@@ -100,7 +118,7 @@ describe('Elixir install', () => {
it('fails for version 1.0.0 on OTP 17 (without OTP)', async () => { it('fails for version 1.0.0 on OTP 17 (without OTP)', async () => {
const exVersion = 'v1.0.0-otp-17' const exVersion = 'v1.0.0-otp-17'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.install('elixir', { await setupBeam.install('elixir', {
hexMirror: 'https://builds.hex.pm', hexMirror: 'https://builds.hex.pm',
@@ -119,7 +137,7 @@ describe('Elixir install', () => {
describe('Gleam install', () => { describe('Gleam install', () => {
it('fails for unknown OTP', async () => { it('fails for unknown OTP', async () => {
const gleamVersion = '0.1.3' const gleamVersion = '0.1.3'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.install('gleam', { gleamVersion }) await setupBeam.install('gleam', { gleamVersion })
}, },
@@ -135,7 +153,7 @@ describe('Gleam install', () => {
describe('rebar3 install', () => { describe('rebar3 install', () => {
it('fails for unknown OTP', async () => { it('fails for unknown OTP', async () => {
const r3Version = '0.14.4' const r3Version = '0.14.4'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.install('rebar3', { r3Version }) await setupBeam.install('rebar3', { r3Version })
}, },
@@ -159,20 +177,9 @@ describe('.getOTPVersion(_) - Erlang', () => {
'https://repo.hex.pm, https://cdn.jsdelivr.net/hex', 'https://repo.hex.pm, https://cdn.jsdelivr.net/hex',
{ multiline: true }, { multiline: true },
) )
const previousRunnerArch = process.env.RUNNER_ARCH
if (process.platform === 'linux') { if (process.platform === 'linux') {
process.env.RUNNER_ARCH = 'X64'
it('is Ok for known linux version', async () => { it('is Ok for known linux version', async () => {
before = simulateInput('version-type', 'strict')
spec = '26'
osVersion = 'ubuntu-24.04'
expected = 'maint-26'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = '27.0' spec = '27.0'
osVersion = 'ubuntu-24.04' osVersion = 'ubuntu-24.04'
@@ -189,21 +196,21 @@ describe('.getOTPVersion(_) - Erlang', () => {
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
simulateInput('version-type', before) simulateInput('version-type', before)
spec = '19.3.x' spec = '20.3.x'
osVersion = 'ubuntu-16.04' osVersion = 'ubuntu-20.04'
expected = 'OTP-19.3.6.13' expected = 'OTP-20.3.8.26'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = '^19.3.6' spec = '^20.3.8'
osVersion = 'ubuntu-16.04' osVersion = 'ubuntu-20.04'
expected = 'OTP-19.3.6.13' expected = 'OTP-20.3.8.26'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = '^19.3' spec = '^20.3'
osVersion = 'ubuntu-18.04' osVersion = 'ubuntu-20.04'
expected = 'OTP-19.3.6.13' expected = 'OTP-20.3.8.26'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
@@ -297,19 +304,48 @@ describe('.getOTPVersion(_) - Erlang', () => {
} }
if (process.platform === 'linux') { if (process.platform === 'linux') {
it('is Ok for known linux ARM64 version', async () => { it('is main-... only if strict/maint-... is used as input', async () => {
const arm64Options = setupBeam.githubARMRunnerArchs() const arm64Options = setupBeam.githubARMRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH = process.env.RUNNER_ARCH =
arm64Options[Math.floor(Math.random() * arm64Options.length)] arm64Options[Math.floor(Math.random() * arm64Options.length)]
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = '26' await assert.rejects(
osVersion = 'ubuntu-24.04' async () => {
expected = 'maint-26' await setupBeam.getOTPVersion('27', 'ubuntu-24.04')
got = await setupBeam.getOTPVersion(spec, osVersion) },
assert.deepStrictEqual(got, expected) (err) => {
assert.ok(err instanceof Error)
return true
},
`Fetching strict OTP version maint-<v> with input <v> is supposed to fail`,
)
simulateInput('version-type', before) simulateInput('version-type', before)
before = simulateInput('version-type', 'strict')
assert.strictEqual(
await setupBeam.getOTPVersion('maint-27', 'ubuntu-24.04'),
'maint-27',
)
simulateInput('version-type', before)
before = simulateInput('version-type', 'loose')
assert.strictEqual(
await setupBeam.getOTPVersion('maint-27', 'ubuntu-24.04'),
'maint-27',
)
simulateInput('version-type', before)
process.env.RUNNER_ARCH = previousRunnerArch
})
it('is Ok for known linux ARM64 version', async () => {
const arm64Options = setupBeam.githubARMRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH =
arm64Options[Math.floor(Math.random() * arm64Options.length)]
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = '27.0' spec = '27.0'
osVersion = 'ubuntu-24.04' osVersion = 'ubuntu-24.04'
@@ -367,21 +403,16 @@ describe('.getOTPVersion(_) - Erlang', () => {
expected = 'master' expected = 'master'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
process.env.RUNNER_ARCH = previousRunnerArch
}) })
it('is Ok for known linux AMD64 version', async () => { it('is Ok for known linux AMD64 version', async () => {
const amd64Options = setupBeam.githubAMDRunnerArchs() const amd64Options = setupBeam.githubAMDRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH = process.env.RUNNER_ARCH =
amd64Options[Math.floor(Math.random() * amd64Options.length)] amd64Options[Math.floor(Math.random() * amd64Options.length)]
before = simulateInput('version-type', 'strict')
spec = '26'
osVersion = 'ubuntu-24.04'
expected = 'maint-26'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = '27.0' spec = '27.0'
osVersion = 'ubuntu-24.04' osVersion = 'ubuntu-24.04'
@@ -457,11 +488,78 @@ describe('.getOTPVersion(_) - Erlang', () => {
expected = 'master' expected = 'master'
got = await setupBeam.getOTPVersion(spec, osVersion) got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
process.env.RUNNER_ARCH = previousRunnerArch
})
}
if (process.platform === 'darwin') {
it('is main-... only if strict/maint-... is used as input', async () => {
const arm64Options = setupBeam.githubARMRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH =
arm64Options[Math.floor(Math.random() * arm64Options.length)]
before = simulateInput('version-type', 'strict')
await assert.rejects(
async () => {
await setupBeam.getOTPVersion('27')
},
(err) => {
assert.ok(err instanceof Error)
return true
},
`Fetching strict OTP version maint-<v> with input <v> is supposed to fail`,
)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict')
assert.strictEqual(await setupBeam.getOTPVersion('maint-27'), 'maint-27')
simulateInput('version-type', before)
before = simulateInput('version-type', 'loose')
assert.strictEqual(await setupBeam.getOTPVersion('maint-27'), 'maint-27')
simulateInput('version-type', before)
process.env.RUNNER_ARCH = previousRunnerArch
})
it('is Ok for known macos ARM64 version', async () => {
const arm64Options = setupBeam.githubARMRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH =
arm64Options[Math.floor(Math.random() * arm64Options.length)]
before = simulateInput('version-type', 'strict')
spec = '28.0'
osVersion = 'macos-15-arm64'
expected = 'OTP-28.0'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
process.env.RUNNER_ARCH = previousRunnerArch
})
it('is Ok for known macos AMD64 version', async () => {
const amd64Options = setupBeam.githubARMRunnerArchs()
const previousRunnerArch = process.env.RUNNER_ARCH
process.env.RUNNER_ARCH =
amd64Options[Math.floor(Math.random() * amd64Options.length)]
before = simulateInput('version-type', 'strict')
spec = '28.0'
osVersion = 'macos-15'
expected = 'OTP-28.0'
got = await setupBeam.getOTPVersion(spec, osVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
process.env.RUNNER_ARCH = previousRunnerArch
}) })
} }
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true }) simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
process.env.RUNNER_ARCH = previousRunnerArch
}) })
describe('OTP arch-specific install', () => { describe('OTP arch-specific install', () => {
@@ -473,7 +571,7 @@ describe('OTP arch-specific install', () => {
const spec = '26' const spec = '26'
const osVersion = 'ubuntu-24.04' const osVersion = 'ubuntu-24.04'
assert.rejects( await assert.rejects(
async () => { async () => {
await setupBeam.getOTPVersion(spec, osVersion) await setupBeam.getOTPVersion(spec, osVersion)
}, },
@@ -484,6 +582,7 @@ describe('OTP arch-specific install', () => {
`Fetching OTP Version with invalid Github runner architecture is supposed to fail`, `Fetching OTP Version with invalid Github runner architecture is supposed to fail`,
) )
} }
process.env.RUNNER_ARCH = previousRunnerArch process.env.RUNNER_ARCH = previousRunnerArch
}) })
}) })
@@ -494,77 +593,65 @@ describe('.getOTPVersion(_) - Elixir', () => {
let spec let spec
let otpVersion let otpVersion
let before let before
const hexMirrors = simulateInput('hexpm-mirrors', 'https://repo.hex.pm', {
multiline: true,
})
it('returns the expected value', async () => { if (process.platform === 'linux') {
spec = '1.1.x' it('returns the expected value', async () => {
otpVersion = 'OTP-17' spec = '1.18.x'
expected = 'v1.1.1-otp-17' otpVersion = 'OTP-27'
got = await setupBeam.getElixirVersion(spec, otpVersion) expected = 'v1.18.4-otp-27'
assert.deepStrictEqual(got, expected) await setupBeam.installOTP(otpVersion)
got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
spec = '1.10.4' spec = '1.18.2'
otpVersion = 'OTP-23' otpVersion = 'OTP-27'
expected = 'v1.10.4-otp-23' expected = 'v1.18.2-otp-27'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
spec = '1.16.2-otp-26' spec = '1.16.2-otp-26'
otpVersion = 'OTP-27' otpVersion = 'OTP-27'
expected = 'v1.16.2-otp-26' expected = 'v1.16.2-otp-26'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
spec = '1.12.1' spec = '1.12.1'
otpVersion = 'OTP-24.0.2' otpVersion = 'OTP-24.3.4'
expected = 'v1.12.1-otp-24' expected = 'v1.12.1-otp-24'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = '1.14.0' spec = '1.17'
otpVersion = 'main' otpVersion = 'master'
expected = 'v1.14.0' expected = 'v1.17-otp-27'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
simulateInput('version-type', before) assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = 'v1.11.0-rc.0' spec = 'v1.15.0-rc.2'
otpVersion = 'OTP-23' otpVersion = 'OTP-26.0'
expected = 'v1.11.0-rc.0-otp-23' expected = 'v1.15.0-rc.2-otp-26'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
simulateInput('version-type', before) assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict') before = simulateInput('version-type', 'strict')
spec = 'v1.11.0-rc.0-otp-23' spec = 'main'
otpVersion = 'OTP-23' otpVersion = '25.2'
expected = 'v1.11.0-rc.0-otp-23' expected = 'main-otp-25'
got = await setupBeam.getElixirVersion(spec, otpVersion) await setupBeam.installOTP(otpVersion)
assert.deepStrictEqual(got, expected) got = await setupBeam.getElixirVersion(spec, otpVersion)
simulateInput('version-type', before) assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict') })
spec = 'v1.11.0' }
otpVersion = '22.3.4.2'
expected = 'v1.11.0-otp-22'
got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
before = simulateInput('version-type', 'strict')
spec = 'main'
otpVersion = '23.1'
expected = 'main-otp-23'
got = await setupBeam.getElixirVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
simulateInput('version-type', before)
})
simulateInput('hexpm-mirrors', hexMirrors, { multiline: true })
}) })
describe('.getOTPVersion(_) - Gleam', () => { describe('.getOTPVersion(_) - Gleam', () => {
@@ -580,6 +667,12 @@ describe('.getOTPVersion(_) - Gleam', () => {
got = await setupBeam.getGleamVersion(spec, otpVersion) got = await setupBeam.getGleamVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = 'nightly'
otpVersion = '28'
expected = 'nightly'
got = await setupBeam.getGleamVersion(spec, otpVersion)
assert.deepStrictEqual(got, expected)
spec = '0.13.2' spec = '0.13.2'
otpVersion = 'OTP-24' otpVersion = 'OTP-24'
expected = 'v0.13.2' expected = 'v0.13.2'
@@ -833,11 +926,21 @@ describe('.getVersionFromSpec(_)', () => {
got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-20.04']) got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-20.04'])
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = '> 0'
expected = 'OTP-26.2.5'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-22.04'])
assert.deepStrictEqual(got, expected)
spec = 'latest' spec = 'latest'
expected = 'OTP-27.0-rc3' expected = 'OTP-27.0-rc3'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-22.04']) got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-22.04'])
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = '> 0'
expected = 'OTP-27.0'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-24.04'])
assert.deepStrictEqual(got, expected)
spec = 'latest' spec = 'latest'
expected = 'OTP-27.0' expected = 'OTP-27.0'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-24.04']) got = setupBeam.getVersionFromSpec(spec, matrix.otp['ubuntu-24.04'])
@@ -848,6 +951,16 @@ describe('.getVersionFromSpec(_)', () => {
got = setupBeam.getVersionFromSpec(spec, matrix.otp.windows) got = setupBeam.getVersionFromSpec(spec, matrix.otp.windows)
assert.deepStrictEqual(got, expected) assert.deepStrictEqual(got, expected)
spec = 'latest'
expected = 'OTP-28.0'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['macos-aarch64'])
assert.deepStrictEqual(got, expected)
spec = 'latest'
expected = 'OTP-28.0'
got = setupBeam.getVersionFromSpec(spec, matrix.otp['macos-x86_64'])
assert.deepStrictEqual(got, expected)
spec = 'latest' spec = 'latest'
expected = 'v1.16.2' expected = 'v1.16.2'
got = setupBeam.getVersionFromSpec(spec, matrix.elixir) got = setupBeam.getVersionFromSpec(spec, matrix.elixir)
@@ -865,23 +978,25 @@ describe('.getVersionFromSpec(_)', () => {
}) })
}) })
describe('version file', () => { describe('.tool-versions file', () => {
const otpVersion = unsimulateInput('otp-version') const otpVersion = unsimulateInput('otp-version')
const elixirVersion = unsimulateInput('elixir-version') const elixirVersion = unsimulateInput('elixir-version')
const gleamVersion = unsimulateInput('gleam-version') const gleamVersion = unsimulateInput('gleam-version')
const rebar3Version = unsimulateInput('rebar3-version')
it('is parsed correctly', async () => { it('is parsed correctly', async () => {
const erlang = '27' const erlang = '27.3.4.1'
const elixir = '1.17.0' const elixir = '1.18.4'
const gleam = '0.23.0' const gleam = '1.9.1'
const rebar3 = '3.24.0' let toolVersions = `# a comment
const toolVersions = `# a comment erlang ref:v${erlang}
erlang ref:v${erlang}# comment, no space, and ref:v
elixir ref:${elixir} # comment, with space and ref: elixir ref:${elixir} # comment, with space and ref:
not-gleam 0.23 # not picked up not-gleam 0.23 # not picked up
gleam ${gleam} \nrebar ${rebar3}` gleam ${gleam} \n`
const filename = 'test/.tool-versions' const filename = 'test/.tool-versions'
if (process.platform === 'win32') {
// Force \r\n to test in Windows
toolVersions = toolVersions.replace(/\n/g, '\r\n')
}
fs.writeFileSync(filename, toolVersions) fs.writeFileSync(filename, toolVersions)
process.env.GITHUB_WORKSPACE = '' process.env.GITHUB_WORKSPACE = ''
const appVersions = setupBeam.parseVersionFile(filename) const appVersions = setupBeam.parseVersionFile(filename)
@@ -905,15 +1020,62 @@ gleam ${gleam} \nrebar ${rebar3}`
assert.ok(async () => { assert.ok(async () => {
await setupBeam.install('gleam', { toolVersion: gleam }) await setupBeam.install('gleam', { toolVersion: gleam })
}) })
})
simulateInput('otp-version', otpVersion)
simulateInput('elixir-version', elixirVersion)
simulateInput('gleam-version', gleamVersion)
})
describe('mise.toml file', () => {
const otpVersion = unsimulateInput('otp-version')
const elixirVersion = unsimulateInput('elixir-version')
const gleamVersion = unsimulateInput('gleam-version')
it('is parsed correctly', async () => {
const erlang = '27.3.4.1'
const elixir = '1.18.4'
const gleam = '1.9.1'
let miseToml = `[tools]
"erlang" = "${erlang}"
elixir = { version = "${elixir}", postinstall="mix deps.get" } # comment, with space and ref:
"not-gleam" = 0.23 # not picked up
"gleam" = "${gleam}"
[env]
_.file = ".env"\n`
const filename = 'test/mise.toml'
if (process.platform === 'win32') {
// Force \r\n to test in Windows
miseToml = miseToml.replace(/\n/g, '\r\n')
}
fs.writeFileSync(filename, miseToml)
process.env.GITHUB_WORKSPACE = ''
const appVersions = setupBeam.parseVersionFile(filename)
assert.strictEqual(appVersions.get('erlang'), erlang)
assert.strictEqual(appVersions.get('elixir'), elixir)
const absoluteFilename = path.join(os.tmpdir(), 'mise.toml')
fs.writeFileSync(absoluteFilename, miseToml)
process.env.GITHUB_WORKSPACE = process.cwd()
const absoluteAppVersions = setupBeam.parseVersionFile(absoluteFilename)
assert.strictEqual(absoluteAppVersions.get('erlang'), erlang)
assert.strictEqual(absoluteAppVersions.get('elixir'), elixir)
assert.ok(async () => { assert.ok(async () => {
await setupBeam.install('rebar3', { toolVersion: rebar3 }) await setupBeam.install('otp', { toolVersion: erlang })
})
assert.ok(async () => {
await setupBeam.install('elixir', { toolVersion: elixir })
})
assert.ok(async () => {
await setupBeam.install('gleam', { toolVersion: gleam })
}) })
}) })
simulateInput('otp-version', otpVersion) simulateInput('otp-version', otpVersion)
simulateInput('elixir-version', elixirVersion) simulateInput('elixir-version', elixirVersion)
simulateInput('gleam-version', gleamVersion) simulateInput('gleam-version', gleamVersion)
simulateInput('rebar3-version', rebar3Version)
}) })
describe('.get(_)', () => { describe('.get(_)', () => {
@@ -1007,6 +1169,98 @@ describe("Elixir Mix matcher's", () => {
}) })
}) })
describe("Erlang matcher's", () => {
it('erlc errors are properly matched', () => {
const [matcher] = erlangProblemMatcher.find(
({ owner }) => owner === 'erlc-error',
).pattern
const output = 'src/mymod.erl:42:5: head mismatch'
const match = output.match(matcher.regexp)
assert.equal(match[1], 'src/mymod.erl')
assert.equal(match[2], '42')
assert.equal(match[3], '5')
assert.equal(match[4], 'head mismatch')
})
it('erlc errors do not match warnings', () => {
const [matcher] = erlangProblemMatcher.find(
({ owner }) => owner === 'erlc-error',
).pattern
const output = 'src/mymod.erl:42:5: Warning: variable X is unused'
const match = output.match(matcher.regexp)
assert.equal(match, null)
})
it('erlc warnings are properly matched', () => {
const [matcher] = erlangProblemMatcher.find(
({ owner }) => owner === 'erlc-warning',
).pattern
const output = 'src/mymod.erl:10:3: Warning: variable X is unused'
const match = output.match(matcher.regexp)
assert.equal(match[1], 'src/mymod.erl')
assert.equal(match[2], '10')
assert.equal(match[3], '3')
assert.equal(match[4], 'variable X is unused')
})
it('dialyzer warnings are matched via erlc patterns', () => {
const [matcher] = erlangProblemMatcher.find(
({ owner }) => owner === 'erlc-warning',
).pattern
const output =
'src/mymod.erl:25:1: warning: Function foo/0 has no local return'
const match = output.match(matcher.regexp)
assert.equal(match[1], 'src/mymod.erl')
assert.equal(match[2], '25')
assert.equal(match[3], '1')
assert.equal(match[4], 'Function foo/0 has no local return')
})
it('CT failures are properly matched', () => {
const [filePattern, reasonPattern] = erlangProblemMatcher.find(
({ owner }) => owner === 'ct-failure',
).pattern
const firstOutput = 'test/mymod_SUITE.erl failed on line 55'
const secondOutput = 'Reason: {badmatch,{error,timeout}}'
const fileMatch = firstOutput.match(filePattern.regexp)
assert.equal(fileMatch[1], 'test/mymod_SUITE.erl')
assert.equal(fileMatch[2], '55')
const reasonMatch = secondOutput.match(reasonPattern.regexp)
assert.equal(reasonMatch[1], '{badmatch,{error,timeout}}')
})
it('EUnit failures are properly matched', () => {
const [headerPattern, funcPattern, callPattern, errorPattern] =
erlangProblemMatcher.find(
({ owner }) => owner === 'eunit-failure',
).pattern
const header = 'mymod_test: hello_test....*failed*'
const func =
'in function mymod_test:hello_test/0 (test/mymod_test.erl, line 12)'
const call = 'in call from mymod_test:hello_test/0'
const error = '**error:{badmatch,false}'
assert.ok(header.match(headerPattern.regexp))
const funcMatch = func.match(funcPattern.regexp)
assert.equal(funcMatch[1], 'test/mymod_test.erl')
assert.equal(funcMatch[2], '12')
assert.ok(call.match(callPattern.regexp))
const errorMatch = error.match(errorPattern.regexp)
assert.equal(errorMatch[1], '{badmatch,false}')
})
})
function unsimulateInput(key) { function unsimulateInput(key) {
return simulateInput(key, '') return simulateInput(key, '')
} }