• Stars
    star
    377
  • Rank 113,535 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 4 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Set up your BEAM-based GitHub Actions workflow (Erlang, Elixir, Gleam, ...)

setup-beam GitHub Actions GitHub Actions GitHub Actions

This action sets up an Erlang/OTP environment for use in a GitHub Actions workflow by:

  • installing Erlang/OTP
  • optionally, installing Elixir
  • optionally, installing Gleam
  • optionally, installing rebar3
  • optionally, installing hex
  • optionally, opting for strict or loose version matching
  • optionally, having problem matchers show warnings and errors on pull requests
  • optionally, using a version file (as explained in "Version file", below), to identify versions

Note: currently, this action only supports Actions' ubuntu- and windows- runtimes.

Usage

See action.yml for the action's specification.

Note: the Erlang/OTP release version specification is relatively complex. For best results, we recommend specifying exact versions, and setting option version-type to strict. However, values like 22.x, or even >22, are also accepted, and we attempt to resolve them according to semantic versioning rules. This implicitly means version-type is loose, which is also the default value for this option.

Additionally, it is recommended that one specifies versions using YAML strings, as these examples do, so that numbers like 23.0 don't end up being parsed as 23, which is not equivalent.

For pre-release versions, such as v1.11.0-rc.0, use the full version specifier (v1.11.0-rc.0) and set option version-type to strict. Pre-release versions are opt-in, so 1.11.x will not match a pre-release.

Compatibility between Operating System and Erlang/OTP

This list presents the known working version combos between the target operating system and Erlang/OTP.

Operating system Erlang/OTP Status
ubuntu-18.04 17 - 25 โœ…
ubuntu-20.04 20 - 25 โœ…
ubuntu-22.04 24.2 - 25 โœ…
windows-2019 21* - 25 โœ…
windows-2022 21* - 25 โœ…

Note *: prior to 23, Windows builds are only available for minor versions, e.g. 21.0, 21.3, 22.0, etc.

Self-hosted runners

Self-hosted runners need to set env. variable ImageOS to one of the following, since the action uses that to download assets:

ImageOS Operating system
ubuntu18 ubuntu-18.04
ubuntu20 ubuntu-20.04
ubuntu22 ubuntu-22.04
win19 windows-2019
win22 windows-2022

as per the following example:

...

jobs:
  test:
    runs-on: self-hosted
    env:
      ImageOS: ubuntu20 # equivalent to runs-on ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        ...

Version file

A version file is specified via input version-file (e.g..tool-versions). This allows not having to use YML input for versions, though the action does check (and will exit with error) if both inputs are set.

Note: if you're using a version file, option version-type is checked to be strict, and will make the action exit with error otherwise.

The following version file formats are supported:

Supported version elements are the same as the ones defined for the YML portion of the action, with the following correspondence.

.tool-versions format

YML .tool-versions
otp-version erlang
elixir-version elixir
gleam-version gleam
rebar3-version rebar

Example (Erlang/OTP + Elixir, on Ubuntu)

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-20.04
    name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
    strategy:
      matrix:
        otp: ['20.3', '21.3', '22.2']
        elixir: ['1.8.2', '1.9.4']
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        with:
          otp-version: ${{matrix.otp}}
          elixir-version: ${{matrix.elixir}}
      - run: mix deps.get
      - run: mix test

Example (Erlang/OTP + rebar3, on Ubuntu)

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-20.04
    name: Erlang/OTP ${{matrix.otp}} / rebar3 ${{matrix.rebar3}}
    strategy:
      matrix:
        otp: ['20.3', '21.3', '22.2']
        rebar3: ['3.14.1', '3.14.3']
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        with:
          otp-version: ${{matrix.otp}}
          rebar3-version: ${{matrix.rebar3}}
      - run: rebar3 ct

Example (Erlang/OTP + rebar3, on Windows)

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: windows-2022
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        with:
          otp-version: '24'
          rebar3-version: '3.16.1'
      - run: rebar3 ct

Example (Gleam on Ubuntu)

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        with:
          otp-version: '24'
          gleam-version: '0.23.0-rc1'
      - run: gleam test

Example (Gleam on Ubuntu without OTP)

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: erlef/setup-beam@v1
        with:
          otp-version: false
          gleam-version: '0.23.0-rc1'
      - run: gleam check

Note: the otp-version: false input is only applicable when installing Gleam.

Alternative hex.pm mirrors

It is possible to use alternative hex.pm mirror(s), in their declared order, with option hexpm-mirrors. By default, the action will use builds.hex.pm. To use other alternative mirrors, add one per line, as shown below.

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: erlef/setup-beam@v1
        with:
          otp-version: '25'
          # Use `cdn.jsdelivr.net/hex` as an alternative to `builds.hex.pm`
          hexpm-mirrors: https://cdn.jsdelivr.net/hex

Alternatively, you may try cdn.jsdelivr.net/hex if builds.hex.pm fails:

# create this in .github/workflows/ci.yml
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: erlef/setup-beam@v1
        with:
          otp-version: '25'
          hexpm-mirrors: |
            https://builds.hex.pm
            https://cdn.jsdelivr.net/hex

Environment variables

Base installation folders (useful for e.g. fetching headers for NIFs) are available in the following environment variables:

  • INSTALL_DIR_FOR_OTP: base folder for Erlang/OTP
  • INSTALL_DIR_FOR_ELIXIR: base folder for Elixir
  • INSTALL_DIR_FOR_GLEAM: base folder for Gleam
  • INSTALL_DIR_FOR_REBAR3: base folder for rebar3

Elixir Problem Matchers

The Elixir Problem Matchers in this repository are adapted from here. See MATCHER_NOTICE for license details.

Action versioning

setup-beam has three version paths, described below, for example version 1.8.0:

  • @v1: the latest in the 1.y.z series (this tag is movable),
  • @v1.8: the latest in the 1.8.z series (this tag is movable),
  • @v1.8.0: release 1.8.0 (this tag is not movable).

We make a real effort to not introduce incompatibilities without changing the major version number. To be extra safe against changes causing issues in your CI you should specify an exact version with @vx.y.z.

License

The scripts and documentation in this project are released under the MIT license.

Contributing

Check out this doc.

Current Status

This action is in active development.

More Repositories

1

security-wg

Repo for the Security Working Group
Ruby
195
star
2

oidcc

OpenId Connect client library in Erlang & Elixir
Erlang
166
star
3

rebar3_hex

Rebar3 Hex library
Erlang
101
star
4

website

Erlang Ecosystem Foundation Website
Elixir
78
star
5

machine-learning-wg

Machine Learning Working Group
63
star
6

observability-wg

Project for tracking the work of the Observability Working Group
61
star
7

embedded-wg

Embedded Systems Working Group
20
star
8

build-and-packaging-wg

Build and Packaging Working Group
19
star
9

rosie

Robot Operating System in Erlang
Erlang
17
star
10

gsoc

Projects to participate to GSOC
15
star
11

libs-and-frameworks

To provide resources for library and framework authors to ensure that BEAM languages have a rich, vibrant ecosystem with a high degree of developer experience.
12
star
12

education-wg

Working Group for Education, Training, and Adoption
11
star
13

language-interop-wg

Language Interoperability Working Group Repository
10
star
14

documentation-wg

EEF Documentation Working Group
9
star
15

marketing-wg

Marketing Working Group - https://erlef.org/wg/marketing
7
star
16

phx_gen_oidcc

An OpenID Login Generator for Phoenix 1.7 Projects
Elixir
6
star
17

oidcc_plug

Plug Integration for the oidcc OpenID Connect Library
Elixir
6
star
18

infra-wg

ErlEF infrastructure working group
6
star
19

epc-wg

External Process Communication Working Group
5
star
20

erlang_snap

Snap packages for Erlang/OTP
Shell
4
star
21

otp_builds

Community-maintained pre-compiled Erlang/OTP for macOS
4
star
22

oidcc_cowboy

Cowboy OpenId Connect support by using oidcc
Erlang
3
star
23

setup-elp

A GitHub action to run ELP eqWAlizer in your CI pipelines
JavaScript
3
star
24

oidcc_conformance

OpenID Conformance Test Suite
Elixir
2
star
25

reports

1
star
26

gh-actions

1
star