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 COWBOY_QUICER: ${{ vars.COWBOY_QUICER || 0 }} GUN_QUICER: ${{ vars.GUN_QUICER || 0 }} jobs: build-erlang: name: Build Erlang ${{ inputs.erlang }} on ${{ inputs.os }} runs-on: ${{ inputs.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Manage CI cache id: cache uses: actions/cache@v4 with: path: | ~/erlang/ key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.erlang }} - name: Run ci-prepare if: steps.cache.outputs.cache-hit != 'true' run: make -k ci-prepare CI_OTP=${{ inputs.erlang }} test: name: Run tests using ${{ inputs.erlang }} on ${{ inputs.os }} needs: build-erlang runs-on: ${{ inputs.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Restore CI cache uses: actions/cache/restore@v4 with: path: | ~/erlang/ key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.erlang }} - name: Run tests (macOS) if: runner.os == 'macOS' run: > brew install coreutils make && gmake -k ci-${{ inputs.erlang }} - name: Run tests (Unix) if: runner.os != 'macOS' run: make -k ci-${{ inputs.erlang }} - name: Upload logs uses: actions/upload-artifact@v4 if: always() with: name: Common Test logs (${{ inputs.erlang }} ${{ runner.os }}) path: | logs/ !logs/**/log_private dialyze: name: Run Dialyzer using ${{ inputs.erlang }} 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 - name: Restore CI cache uses: actions/cache/restore@v4 with: path: | ~/erlang/ key: ${{ runner.os }}-${{ runner.arch }}-Erlang-${{ inputs.latest }} - name: Run Dialyzer run: make dialyze LATEST_ERLANG_OTP=1