From b65a1e77508f6a855a60e6fd200f9f863f010e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Thu, 30 Nov 2023 14:45:03 +0100 Subject: Add reusable workflows for ci.erlang.mk projects --- .github/workflows/ci.yaml | 138 +++++++++++++++++++++++++++++++++++++++++ .github/workflows/unix-ci.yaml | 102 ++++++++++++++++++++++++++++++ 2 files changed, 240 insertions(+) create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/unix-ci.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..5dde652 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,138 @@ +## @todo Describe. + +name: Check a ci.erlang.mk project + +on: + workflow_call: + +env: + CI_ERLANG_MK: 1 + AUTO_CI_MASTER: weekly + +jobs: + + prepare-unix: + name: Prepare Unix CI + runs-on: ubuntu-latest + outputs: + erlang: ${{ steps.versions.outputs.erlang }} + latest: ${{ steps.latest_version.outputs.latest }} + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Checkout ci.erlang.mk repository + uses: actions/checkout@v4.1.1 + with: + repository: ninenines/ci.erlang.mk + path: deps/ci.erlang.mk + + - name: Output Erlang/OTP versions + id: versions + run: | + { + echo "erlang<> "$GITHUB_OUTPUT" + + - name: Output latest Erlang/OTP version + id: latest_version + run: | + { + echo "latest<> "$GITHUB_OUTPUT" + + check: + name: Unix + needs: prepare-unix + strategy: + fail-fast: false + matrix: + erlang: ${{ fromJson(needs.prepare-unix.outputs.erlang) }} + os: [ubuntu-latest, macos-latest] + uses: ./.github/workflows/unix-ci.yaml + with: + latest: ${{ needs.prepare-unix.outputs.latest }} + erlang: ${{ matrix.erlang }} + os: ${{ matrix.os }} + + prepare-windows: + name: Prepare Windows CI + runs-on: windows-latest + outputs: + erlang: ${{ steps.versions.outputs.erlang }} + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Checkout ci.erlang.mk repository + uses: actions/checkout@v4.1.1 + with: + repository: ninenines/ci.erlang.mk + path: deps/ci.erlang.mk + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2.21.0 + with: + msystem: mingw64 + update: true + install: >- + git + make + mingw-w64-x86_64-jq + + - name: Output Erlang/OTP versions + id: versions + shell: msys2 {0} + run: | + { + echo "erlang<> "$GITHUB_OUTPUT" + + test-windows: + name: Windows + needs: prepare-windows + strategy: + fail-fast: false + matrix: + erlang: ${{ fromJson(needs.prepare-windows.outputs.erlang) }} + runs-on: windows-latest + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Install Erlang/OTP + uses: erlef/setup-beam@v1.16.0 + with: + otp-version: '${{ matrix.erlang }}' + version-type: loose + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2.21.0 + with: + msystem: mingw64 + update: true + install: >- + git + make + + - name: Run tests + shell: msys2 {0} + run: PATH=$INSTALL_DIR_FOR_OTP/bin:$PATH make -k ci-windows-${{ matrix.erlang }} + + - name: Upload logs + uses: actions/upload-artifact@v3.1.3 + if: always() + with: + name: Common Test logs (${{ matrix.erlang }} ${{ runner.os }}) + path: | + logs/ + !logs/**/log_private diff --git a/.github/workflows/unix-ci.yaml b/.github/workflows/unix-ci.yaml new file mode 100644 index 0000000..896685e --- /dev/null +++ b/.github/workflows/unix-ci.yaml @@ -0,0 +1,102 @@ +name: Reusable Unix jobs + +## @todo Self-hosted runners for +## - archlinux +## - alpine +## - debian +## - freebsd + +on: + workflow_call: + inputs: + latest: + required: true + type: string + erlang: + required: true + type: string + os: + required: true + type: string + +env: + CI_ERLANG_MK: 1 + AUTO_CI_MASTER: weekly + +jobs: + + build-erlang: + name: Build Erlang + runs-on: ${{ inputs.os }} + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Manage CI cache + id: cache + uses: actions/cache@v3.3.2 + with: + path: | + ~/erlang/ + ~/.kerl/ + key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.erlang }} + + - name: Run ci-prepare + if: steps.cache.outputs.cache-hit != 'true' || inputs.erlang == 'master' + run: make -k ci-prepare CI_OTP=${{ inputs.erlang }} + + test: + name: Run tests + needs: build-erlang + runs-on: ${{ inputs.os }} + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Restore CI cache + uses: actions/cache/restore@v3.3.2 + with: + path: | + ~/erlang/ + ~/.kerl/ + key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.erlang }} + + - name: Install required software + if: runner.os == 'macOS' + run: brew install coreutils + + - name: Run tests + run: make -k ci-${{ inputs.erlang }} + + - name: Upload logs + uses: actions/upload-artifact@v3.1.3 + if: always() + with: + name: Common Test logs (${{ inputs.erlang }} ${{ runner.os }}) + path: | + logs/ + !logs/**/log_private + + dialyze: + name: Run Dialyzer + needs: build-erlang + runs-on: ${{ inputs.os }} + if: inputs.erlang == inputs.latest && inputs.os == 'ubuntu-latest' + continue-on-error: true + steps: + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Restore CI cache + uses: actions/cache/restore@v3.3.2 + with: + path: | + ~/erlang/ + ~/.kerl/ + key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.latest }} + + - name: Run Dialyzer + run: make dialyze LATEST_ERLANG_OTP=1 -- cgit v1.2.3