# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: 2021 The Elixir Team # SPDX-FileCopyrightText: 2012 Plataformatec name: CI on: push: pull_request: workflow_dispatch: env: ELIXIR_ASSERT_TIMEOUT: 2000 ELIXIRC_OPTS: "--warnings-as-errors" LANG: C.UTF-8 permissions: contents: read jobs: test_linux: name: Ubuntu 24.04, OTP ${{ matrix.otp_version }}${{ matrix.deterministic && ' (deterministic)' || '' }}${{ matrix.coverage && ' (coverage)' || '' }} runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: include: - otp_version: "29.0" deterministic: true - otp_version: "28.4" docs: true coverage: true - otp_version: "28.1" - otp_version: "27.3" - otp_version: "27.0" - otp_version: master development: true - otp_version: maint development: true env: ERLC_OPTS: "warnings_as_errors" steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 with: otp-version: ${{ matrix.otp_version }} - name: Set ERL_COMPILER_OPTIONS if: ${{ matrix.deterministic }} run: echo "ERL_COMPILER_OPTIONS=deterministic" >> $GITHUB_ENV - name: Compile Elixir run: | make compile echo "$PWD/bin" >> $GITHUB_PATH - name: Build info run: bin/elixir --version - name: Check format run: make test_formatted && echo "All Elixir source code files are properly formatted." - name: Erlang test suite run: make test_erlang continue-on-error: ${{ matrix.development == true }} - name: Elixir test suite run: make test_elixir continue-on-error: ${{ matrix.development == true }} env: COVER: "${{ matrix.coverage }}" - name: Build docs (ExDoc main) if: ${{ matrix.docs }} run: | cd .. git clone https://github.com/elixir-lang/ex_doc.git --depth 1 cd ex_doc ../elixir/bin/mix do local.rebar --force + local.hex --force + deps.get + compile cd ../elixir/ git fetch --tags DOCS_OPTIONS="--warnings-as-errors" make docs - name: "Calculate Coverage" if: ${{ matrix.coverage }} run: make cover | tee "$GITHUB_STEP_SUMMARY" - name: "Upload Coverage Artifact" if: ${{ matrix.coverage }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: TestCoverage path: cover/* - name: Check reproducible builds if: ${{ matrix.deterministic }} run: taskset 1 make check_reproducible - name: Check git is not required if: ${{ matrix.deterministic }} run: | rm -rf .git cd lib/elixir elixirc --ignore-module-conflict -o ebin "lib/**/*.ex" test_windows: name: Windows Server 2022, OTP ${{ matrix.otp_version }} runs-on: windows-2022 strategy: matrix: otp_version: - "29.0" - "28.1" - "27.3" steps: - name: Configure Git run: git config --global core.autocrlf input - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 with: otp-version: ${{ matrix.otp_version }} - name: Compile Elixir run: | Remove-Item -Recurse -Force '.git' make compile - name: Build info run: bin/elixir --version - name: Check format run: make test_formatted && echo "All Elixir source code files are properly formatted." - name: Erlang test suite run: make test_erlang - name: Elixir test suite run: | Remove-Item 'c:/Windows/System32/drivers/etc/hosts' make test_elixir