name: CI on: push: paths-ignore: - "lib/**/*.md" pull_request: paths-ignore: - "lib/**/*.md" env: ELIXIR_ASSERT_TIMEOUT: 2000 ELIXIRC_OPTS: "--warnings-as-errors" ERLC_OPTS: "warnings_as_errors" LANG: C.UTF-8 permissions: contents: read jobs: test_linux: name: Ubuntu 20.04, Erlang/OTP ${{ matrix.otp_version }} strategy: fail-fast: false matrix: include: - otp_version: "26.0" otp_latest: true - otp_version: "25.3" - otp_version: "25.0" - otp_version: "24.3" - otp_version: "24.0" - otp_version: master development: true - otp_version: maint development: true runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 with: fetch-depth: 50 - uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.otp_version }} - 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 }} - name: Elixir test suite run: make test_elixir continue-on-error: ${{ matrix.development }} - name: Build docs (ExDoc main) if: ${{ matrix.otp_latest }} 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/ make docs - name: Check reproducible builds run: | rm -rf .git # Recompile System without .git cd lib/elixir && ../../bin/elixirc -o ebin lib/system.ex && cd - taskset 1 make check_reproducible if: ${{ matrix.otp_latest }} test_windows: name: Windows Server 2019, Erlang/OTP ${{ matrix.otp_version }} strategy: matrix: otp_version: ["24", "25", "26.0"] runs-on: windows-2019 steps: - name: Configure Git run: git config --global core.autocrlf input - uses: actions/checkout@v4 with: fetch-depth: 50 - uses: erlef/setup-beam@v1 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 --keep-going test_erlang - name: Elixir test suite run: | Remove-Item 'c:/Windows/System32/drivers/etc/hosts' make --keep-going test_elixir check_posix_compliant: name: Check POSIX-compliant runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 with: fetch-depth: 50 - name: Install Shellcheck run: | sudo apt update sudo apt install -y shellcheck - name: Check POSIX-compliant run: | shellcheck -e SC2039,2086 bin/elixir && echo "bin/elixir is POSIX compliant" shellcheck bin/elixirc && echo "bin/elixirc is POSIX compliant" shellcheck bin/iex && echo "bin/iex is POSIX compliant"