aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/ci.yaml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/ci.yaml')
-rw-r--r--.github/workflows/ci.yaml448
1 files changed, 448 insertions, 0 deletions
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..e51ef0b
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,448 @@
+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: |
+ erl -sname init_cookie -run erlang halt
+ make check c=${{ matrix.suite }} -j4 -k ${{ matrix.extra }}
+
+ - name: Run tests (Windows)
+ if: matrix.os == 'windows-latest'
+ shell: msys2 {0}
+ run: |
+ export PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH
+ erl -sname init_cookie -run erlang halt
+ 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.18.0/asdf-v0.18.0-linux-amd64.tar.gz
+ tar xf asdf-v*-linux-amd64.tar.gz
+ ./asdf plugin add elixir
+ ./asdf install elixir 1.18.4-otp-27
+ ./asdf set elixir 1.18.4-otp-27
+
+ - name: Install libsodium
+ run: sudo apt-get -y install libsodium-dev
+
+ - name: Run tests
+ run: |
+ export PATH=$PWD:/home/runner/.asdf/shims:$PATH
+ erl -sname init_cookie -run erlang halt
+ make check c=core-elixir -j4 -k
+
+ 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: |
+ erl -sname init_cookie -run erlang halt
+ make check c=hex -j4 -k ${{ matrix.extra }}
+
+ - name: Run tests (Windows)
+ if: matrix.os == 'windows-latest'
+ shell: msys2 {0}
+ run: |
+ export PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH
+ erl -sname init_cookie -run erlang halt
+ 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
+
+ check-in-vm:
+ strategy:
+ fail-fast: false
+ matrix:
+ os:
+ - freebsd
+ 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
+ # Don't run tests with CACHE_DEPS or LEGACY. Running them on Linux is
+ # good enough.
+ # extra: ['', 'CACHE_DEPS=1', 'LEGACY=1']
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Run tests (FreeBSD)
+ uses: cross-platform-actions/[email protected]
+ timeout-minutes: 60
+ with:
+ operating_system: ${{ matrix.os }}
+ version: '14.3'
+ run: |
+ sudo pkg update
+ sudo pkg upgrade -y
+ sudo pkg install -y erlang elixir bash ca_root_nss gmake git libsodium perl5 7-zip
+
+ git config --global safe.directory '*'
+ erl -sname init_cookie -run erlang halt
+
+ gmake check c=${{ matrix.suite }} -j4 USE_NODETOOL=1
+
+ - name: Upload artifacts
+ if: failure()
+ uses: actions/upload-artifact@v4
+ with:
+ name: ${{ matrix.os }} ${{ matrix.suite }}
+ path: |
+ test/test_*/