aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2023-11-30 14:45:03 +0100
committerLoïc Hoguin <[email protected]>2023-11-30 14:45:03 +0100
commitb65a1e77508f6a855a60e6fd200f9f863f010e8d (patch)
tree754f39d8b7585367f9c88556972939877ea8c3c4
parent8bf2f7580419b91d482dcc03e9f9055805f6f725 (diff)
downloadci.erlang.mk-b65a1e77508f6a855a60e6fd200f9f863f010e8d.tar.gz
ci.erlang.mk-b65a1e77508f6a855a60e6fd200f9f863f010e8d.tar.bz2
ci.erlang.mk-b65a1e77508f6a855a60e6fd200f9f863f010e8d.zip
Add reusable workflows for ci.erlang.mk projects
-rw-r--r--.github/workflows/ci.yaml138
-rw-r--r--.github/workflows/unix-ci.yaml102
2 files changed, 240 insertions, 0 deletions
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/[email protected]
+
+ - name: Checkout ci.erlang.mk repository
+ uses: actions/[email protected]
+ with:
+ repository: ninenines/ci.erlang.mk
+ path: deps/ci.erlang.mk
+
+ - name: Output Erlang/OTP versions
+ id: versions
+ run: |
+ {
+ echo "erlang<<EOF"
+ make ci-list | jq -Rn '[inputs]'
+ echo EOF
+ } >> "$GITHUB_OUTPUT"
+
+ - name: Output latest Erlang/OTP version
+ id: latest_version
+ run: |
+ {
+ echo "latest<<EOF"
+ make ci-list AUTO_CI_MASTER=daily | grep -v rc | grep -v master | tail -n1
+ echo EOF
+ } >> "$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/[email protected]
+
+ - name: Checkout ci.erlang.mk repository
+ uses: actions/[email protected]
+ with:
+ repository: ninenines/ci.erlang.mk
+ path: deps/ci.erlang.mk
+
+ - name: Setup MSYS2
+ uses: msys2/[email protected]
+ 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<<EOF"
+ make ci-windows-list | jq -Rn '[inputs]'
+ echo EOF
+ } >> "$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/[email protected]
+
+ - name: Install Erlang/OTP
+ uses: erlef/[email protected]
+ with:
+ otp-version: '${{ matrix.erlang }}'
+ version-type: loose
+
+ - name: Setup MSYS2
+ uses: msys2/[email protected]
+ 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/[email protected]
+ 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/[email protected]
+
+ - name: Manage CI cache
+ id: cache
+ uses: actions/[email protected]
+ 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/[email protected]
+
+ - name: Restore CI cache
+ uses: actions/cache/[email protected]
+ 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/[email protected]
+ 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/[email protected]
+
+ - name: Restore CI cache
+ uses: actions/cache/[email protected]
+ with:
+ path: |
+ ~/erlang/
+ ~/.kerl/
+ key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.latest }}
+
+ - name: Run Dialyzer
+ run: make dialyze LATEST_ERLANG_OTP=1