File: ci.yml

package info (click to toggle)
elixir-lang 1.19.5.dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 15,524 kB
  • sloc: erlang: 12,234; sh: 321; makefile: 288
file content (174 lines) | stat: -rw-r--r-- 5,732 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: 2021 The Elixir Team

name: CI

on:
  push:
    paths-ignore:
      - "lib/**/*.md"
  pull_request:
    paths-ignore:
      - "lib/**/*.md"

env:
  ELIXIR_ASSERT_TIMEOUT: 2000
  ELIXIRC_OPTS: "--warnings-as-errors"
  LANG: C.UTF-8

permissions:
  contents: read

jobs:
  test_linux:
    name: Ubuntu 24.04, Erlang/OTP ${{ matrix.otp_version }}${{ matrix.deterministic && ' (deterministic)' || '' }}${{ matrix.coverage && ' (coverage)' || '' }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - otp_version: "28.1"
            deterministic: true
          - otp_version: "28.1"
            erlc_opts: "warnings_as_errors"
            coverage: true
          - otp_version: "28.1"
            otp_latest: true
            erlc_opts: "warnings_as_errors"
          - otp_version: "27.3"
            erlc_opts: "warnings_as_errors"
          - otp_version: "27.0"
            erlc_opts: "warnings_as_errors"
          - otp_version: "26.0"
          - otp_version: master
            development: true
          - otp_version: maint
            development: true
    runs-on: ubuntu-24.04
    # Earlier Erlang/OTP versions ignored compiler directives
    # when using warnings_as_errors. So we only set ERLC_OPTS
    # from Erlang/OTP 27+.
    env:
      ERLC_OPTS: ${{ matrix.erlc_opts || '' }}
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 50
      - uses: erlef/setup-beam@8aa8a857c6be0daae6e97272bb299d5b942675a4 # v1.19.0
        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 }}
      - name: Elixir test suite
        run: make test_elixir
        continue-on-error: ${{ matrix.development }}
        env:
          COVER: "${{ matrix.coverage }}"
      - name: "Calculate Coverage"
        run: make cover | tee "$GITHUB_STEP_SUMMARY"
        if: "${{ matrix.coverage }}"
      - 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/
          git fetch --tags
          DOCS_OPTIONS="--warnings-as-errors" make docs
      - name: Check reproducible builds
        if: ${{ matrix.deterministic }}
        run: |
          rm -rf .git
          # Recompile System without .git
          cd lib/elixir && ../../bin/elixirc -o ebin lib/system.ex && cd -
          taskset 1 make check_reproducible
      - name: "Upload Coverage Artifact"
        if: "${{ matrix.coverage }}"
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: TestCoverage
          path: cover/*

  test_windows:
    name: Windows Server 2019, Erlang/OTP ${{ matrix.otp_version }}
    strategy:
      matrix:
        otp_version: ["26.2", "27.3", "28.1"]
    runs-on: windows-2022
    steps:
      - name: Configure Git
        run: git config --global core.autocrlf input
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 50
      - uses: erlef/setup-beam@8aa8a857c6be0daae6e97272bb299d5b942675a4 # v1.19.0
        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

  check_posix_compliant:
    name: Check POSIX-compliant
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        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"

  license_compliance:
    name: Check Licence Compliance

    runs-on: ubuntu-24.04

    steps:
      - name: Use HTTPS instead of SSH for Git cloning
        id: git-config
        shell: bash
        run: git config --global url.https://github.com/.insteadOf ssh://git@github.com/

      - name: Checkout project
        id: checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: "Run OSS Review Toolkit"
        id: ort
        uses: ./.github/workflows/ort
        with:
          upload-reports: true
          fail-on-violation: true
          report-formats: "WebApp"
          version: "${{ github.sha }}"