diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml deleted file mode 100644 index 54bcee37..00000000 --- a/.github/workflows/docs.yaml +++ /dev/null @@ -1,31 +0,0 @@ -name: Documentation - -on: - push: - branches: - - 'main' - -jobs: - Documentation: - name: Generate and publish documentation - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: erlef/setup-beam@v1 - with: - otp-version: 27 - rebar3-version: '3.23.0' - - - name: Change doc version to "Development branch" - run: sed -E -i -e 's/^@version.*/@version Development branch/' doc/overview.edoc - - - name: Generate - run: rebar3 edoc - - - name: Publish - uses: peaceiris/actions-gh-pages@v4 - if: ${{ github.ref == 'refs/heads/main' }} - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./doc diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index c59b9a75..00000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: Publish release - -on: - push: - tags: - - v0* - - v1* - - v2* - - v3* - - v4* - - v5* - - v6* - - v7* - - v8* - - v9* - -jobs: - Publish: - name: Publish release - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Publish to Hex.pm - uses: erlangpack/github-action@v3 - env: - HEX_API_KEY: ${{ secrets.HEX_API_KEY }} diff --git a/.github/workflows/test-and-release.yaml b/.github/workflows/test-and-release.yaml new file mode 100644 index 00000000..e84f0fe9 --- /dev/null +++ b/.github/workflows/test-and-release.yaml @@ -0,0 +1,147 @@ +name: Test → Docs → Release + +on: + - pull_request + - push + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + REBAR_VERSION: '3.23.0' + LATEST_ERLANG_VERSION: '27' + +jobs: + # `env_to_output` works around a limitation of GitHub Actions that prevents + # the use of environment variables in places such as a workflow call's `with` + # arguments. + # + # https://github.com/actions/runner/issues/1189#issuecomment-1832389701 + env_to_output: + name: Env. variable to outputs + runs-on: ubuntu-latest + outputs: + REBAR_VERSION: ${{ steps.from_env.outputs.REBAR_VERSION }} + steps: + - id: from_env + run: | + vars=" + REBAR_VERSION + " + setOutput() { + echo "${1}=${!1}" >> "${GITHUB_OUTPUT}" + } + for name in $vars; do + setOutput $name + done + + test: + name: Test + needs: env_to_output + uses: ./.github/workflows/test-job.yaml + with: + rebar_version: ${{ needs.env_to_output.outputs.REBAR_VERSION }} + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + dialyzer: + name: Dialyzer + runs-on: ubuntu-latest + needs: env_to_output + + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + id: install-erlang + with: + otp-version: ${{ env.LATEST_ERLANG_VERSION }} + rebar3-version: ${{ env.REBAR_VERSION }} + + - name: Restore Dialyzer PLT files from cache + uses: actions/cache@v4 + with: + path: _build/*/rebar3_*_plt + key: dialyzer-plt-cache-${{ steps.install-erlang.outputs.otp-version }}-${{ runner.os }}-${{ hashFiles('rebar.config*') }}-v1 + + - name: Dialyzer + run: rebar3 clean && rebar3 as test dialyzer + + benchmark: + name: Trigger benchmark + runs-on: ubuntu-latest + needs: + - test + - dialyzer + if: github.repository == 'rabbitmq/khepri' && github.ref == 'refs/heads/main' + + steps: + - name: Repository Dispatch + uses: peter-evans/repository-dispatch@v3 + with: + token: ${{ secrets.KHEPRI_BENCHMARK_REPO_ACCESS_TOKEN }} + repository: rabbitmq/khepri-benchmark + event-type: push-in-khepri + client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}' + + build_docs: + name: Generate docs + runs-on: ubuntu-latest + needs: + - test + - dialyzer + + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.LATEST_ERLANG_VERSION }} + rebar3-version: ${{ env.REBAR_VERSION }} + + - name: Change doc version to "Development branch" + run: sed -E -i -e 's/^@version.*/@version Development branch/' doc/overview.edoc + + - name: Generate + run: rebar3 edoc + + - name: Upload docs for next job + uses: actions/upload-artifact@v4 + with: + name: docs_dir + path: ./doc + if-no-files-found: error + + publish_docs: + name: Publish docs + runs-on: ubuntu-latest + needs: build_docs + if: github.repository == 'rabbitmq/khepri' && github.ref == 'refs/heads/main' + + steps: + - name: Download docs from previous job + uses: actions/download-artifact@v4 + with: + name: docs_dir + path: ./doc + + - name: Publish + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./doc + + publish_release: + name: Publish release + runs-on: ubuntu-latest + needs: + - test + - dialyzer + - build_docs + if: github.repository == 'rabbitmq/khepri' && (startsWith(github.ref, 'refs/tags/v0') || startsWith(github.ref, 'refs/tags/v1') || startsWith(github.ref, 'refs/tags/v2') || startsWith(github.ref, 'refs/tags/v3') || startsWith(github.ref, 'refs/tags/v4') || startsWith(github.ref, 'refs/tags/v5') || startsWith(github.ref, 'refs/tags/v6') || startsWith(github.ref, 'refs/tags/v7') || startsWith(github.ref, 'refs/tags/v8') || startsWith(github.ref, 'refs/tags/v9')) + + steps: + - uses: actions/checkout@v4 + - name: Publish to Hex.pm + uses: erlangpack/github-action@v3 + env: + HEX_API_KEY: ${{ secrets.HEX_API_KEY }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test-job.yaml similarity index 52% rename from .github/workflows/test.yaml rename to .github/workflows/test-job.yaml index 95d03582..7ed79477 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test-job.yaml @@ -1,40 +1,32 @@ -name: Test +name: Test → Docs → Release on: - - pull_request - - push + workflow_call: + inputs: + rebar_version: + required: true + type: string + secrets: + CODECOV_TOKEN: + required: true jobs: - Test: - name: Test on Erlang/OTP ${{ matrix.otp_version }} and ${{ matrix.os }} + test: + name: "Erlang/OTP ${{ matrix.otp_version }} + ${{ matrix.os }}" runs-on: ${{ matrix.os }} - strategy: + fail-fast: false matrix: - otp_version: [25, 26, 27] + otp_version: ['25', '26', '27'] os: [ubuntu-latest, windows-latest] - exclude: - # Erlang 26.2.5.2 Windows installer fails to work in CI. - - otp_version: 26 - os: windows-latest - - env: - RUN_DIALYZER_ON_OTP_RELEASE: 27 steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 id: install-erlang with: - otp-version: ${{matrix.otp_version}} - rebar3-version: '3.23.0' - - - name: Restore Dialyzer PLT files from cache - uses: actions/cache@v4 - if: ${{ matrix.otp_version == env.RUN_DIALYZER_ON_OTP_RELEASE && matrix.os == 'ubuntu-latest' }} - with: - path: _build/*/rebar3_*_plt - key: dialyzer-plt-cache-${{ steps.install-erlang.outputs.otp-version }}-${{ runner.os }}-${{ hashFiles('rebar.config*') }}-v1 + otp-version: ${{ matrix.otp_version }} + rebar3-version: ${{ inputs.rebar_version }} - name: Compile run: rebar3 compile @@ -48,10 +40,6 @@ jobs: - name: Common test (integration tests) run: rebar3 ct --verbose --cover --sname ct - - name: Dialyzer - if: ${{ matrix.otp_version == env.RUN_DIALYZER_ON_OTP_RELEASE && matrix.os == 'ubuntu-latest' }} - run: rebar3 clean && rebar3 as test dialyzer - - name: Generate code coverage report run: rebar3 as test covertool generate diff --git a/.github/workflows/trigger-benchmark.yaml b/.github/workflows/trigger-benchmark.yaml deleted file mode 100644 index 38f5362f..00000000 --- a/.github/workflows/trigger-benchmark.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: Trigger benchmark - -on: - push: - branches: - - 'main' - -jobs: - Trigger: - name: Trigger benchmark - runs-on: ubuntu-latest - - steps: - - name: Repository Dispatch - uses: peter-evans/repository-dispatch@v3 - with: - token: ${{ secrets.KHEPRI_BENCHMARK_REPO_ACCESS_TOKEN }} - repository: rabbitmq/khepri-benchmark - event-type: push-in-khepri - client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'