name: Check Erlang.mk on: push: branches: - master pull_request: schedule: ## Every Monday at 4am. - cron: 0 4 * * 1 concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: check: strategy: fail-fast: false matrix: erlang: - '27' elixir: - '1.17' os: # - macos-latest - ubuntu-latest # - windows-latest suite: - core-app - core-apps - core-autopatch - core-compat # Trick GH runners into picking this slower job early. - ACME=1 c=core-deps - core-elixir - core-makedep - core-misc - core-plugins - core-query - core-upgrade - asciidoc - bootstrap - concuerror - cover - c-src - ct - dialyzer SET=1 - dialyzer SET=2 - dialyzer SET=3 - dialyzer SET=4 - edoc - erlydtl - escript - eunit - proper - protobuffs # Trick GH runners into picking this slower job early. - ACME=1 c=relx - shell - sphinx - triq - xref extra: ['', 'CACHE_DEPS=1', 'LEGACY=1'] exclude: # We disable proper/triq tests until ubuntu-latest includes GNU Make 4.4 or later. - os: ubuntu-latest suite: proper - os: ubuntu-latest suite: triq # We disable Concuerror as it doesn't seem to compile on Windows. - os: windows-latest suite: concuerror runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.erlang }} elixir-version: ${{ matrix.elixir }} version-type: loose - name: Setup MSYS2 (Windows) if: matrix.os == 'windows-latest' uses: msys2/setup-msys2@v2 with: msystem: mingw64 release: false update: true install: >- git make mingw-w64-x86_64-gcc gnu-netcat diffutils - name: Install libsodium (Linux, Elixir) if: matrix.os == 'ubuntu-latest' && matrix.suite == 'core-elixir' run: sudo apt-get -y install libsodium-dev - name: Run tests (Linux) if: matrix.os == 'ubuntu-latest' run: make check c=${{ matrix.suite }} -j4 -k ${{ matrix.extra }} - name: Run tests (Windows) if: matrix.os == 'windows-latest' shell: msys2 {0} run: PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH make check c=${{ matrix.suite }} -j4 -k ${{ matrix.extra }} - name: Upload artifacts if: failure() uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} OTP-${{ matrix.erlang }} ${{ matrix.suite }} ${{ matrix.extra }} path: | test/test_*/ check-asdf-elixir: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP uses: erlef/setup-beam@v1 with: otp-version: 27 version-type: loose - name: Install asdf along with Elixir run: | wget https://github.com/asdf-vm/asdf/releases/download/v0.16.5/asdf-v0.16.5-linux-amd64.tar.gz tar xf asdf-v*-linux-amd64.tar.gz ./asdf plugin add elixir ./asdf install elixir latest ./asdf set elixir latest - name: Install libsodium run: sudo apt-get -y install libsodium-dev - name: Run tests run: make check c=core-elixir -j4 -k PATH=$PWD:/home/runner/.asdf/shims:$PATH check-hex: strategy: fail-fast: false matrix: erlang: - '27' os: # - macos-latest - ubuntu-latest # - windows-latest extra: ['', 'CACHE_DEPS=1', 'LEGACY=1'] services: postgres: image: postgres:14 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP and Elixir uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.erlang }} elixir-version: '1.18' version-type: loose - name: Setup MSYS2 (Windows) if: matrix.os == 'windows-latest' uses: msys2/setup-msys2@v2 with: msystem: mingw64 release: false update: true install: >- git make mingw-w64-x86_64-gcc gnu-netcat diffutils - name: Setup local Hexpm run: | git clone https://github.com/hexpm/hexpm cd hexpm perl -ni.bak -e 'print;if ($.==3) {print " user_confirm: false,\n"}' config/dev.exs mix setup mix phx.server & - name: Run tests (Linux) if: matrix.os == 'ubuntu-latest' run: make check c=hex -j4 -k ${{ matrix.extra }} - name: Run tests (Windows) if: matrix.os == 'windows-latest' shell: msys2 {0} run: PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH make check c=hex -j4 -k ${{ matrix.extra }} - name: Upload artifacts if: failure() uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} OTP-${{ matrix.erlang }} ${{ matrix.suite }} ${{ matrix.extra }} path: | test/test_*/ packages: strategy: fail-fast: false matrix: erlang: - '27' os: # - macos-latest - ubuntu-latest # - windows-latest extra: ['', 'LEGACY=1'] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.erlang }} version-type: loose - name: Setup MSYS2 (Windows) if: matrix.os == 'windows-latest' uses: msys2/setup-msys2@v2 with: msystem: mingw64 release: false update: true install: >- git make mingw-w64-x86_64-gcc gnu-netcat diffutils - name: Check packages (Linux) if: matrix.os == 'ubuntu-latest' run: make packages -k ${{ matrix.extra }} - name: Check packages (Windows) if: matrix.os == 'windows-latest' shell: msys2 {0} run: PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH make packages -k ${{ matrix.extra }} - name: Upload artifacts if: failure() uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} OTP-${{ matrix.erlang }} packages ${{ matrix.extra }} path: | test/packages/ hexpm-packages: strategy: fail-fast: false matrix: erlang: - '27' os: # - macos-latest - ubuntu-latest # - windows-latest packages: - '^cowboy \|^cowlib \|^gun \|^ranch ' - '^amqp_client \|^amqp10_client \|^aten \|^credentials_obfuscation \|^cuttlefish ' - '^gen_batch_server \|^ra \|^seshat \|^stdout_formatter \|^sysmon_handler ' extra: ['', 'LEGACY=1'] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.erlang }} version-type: loose - name: Setup MSYS2 (Windows) if: matrix.os == 'windows-latest' uses: msys2/setup-msys2@v2 with: msystem: mingw64 release: false update: true install: >- git make mingw-w64-x86_64-gcc gnu-netcat diffutils - name: Check select packages (Linux) if: matrix.os == 'ubuntu-latest' run: | cat test/hexpm_packages.txt | grep "${{ matrix.packages }}" > select_hexpm_packages.txt mv select_hexpm_packages.txt test/hexpm_packages.txt make hexpm-packages -k ${{ matrix.extra }} - name: Check select packages (Windows) if: matrix.os == 'windows-latest' shell: msys2 {0} run: | cat test/hexpm_packages.txt | grep "${{ matrix.packages }}" > select_hexpm_packages.txt mv select_hexpm_packages.txt test/hexpm_packages.txt PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH make hexpm-packages -k ${{ matrix.extra }} - name: Upload artifacts if: failure() uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} OTP-${{ matrix.erlang }} packages ${{ matrix.extra }} path: | test/hexpm_packages.txt test/packages/ templates: strategy: fail-fast: false matrix: erlang: - '27' runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Erlang/OTP uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.erlang }} version-type: loose - name: Check templates run: make check-templates