| name: Clippy changelog check |
| |
| on: |
| merge_group: |
| pull_request: |
| types: [opened, reopened, synchronize, edited] |
| |
| concurrency: |
| # For a given workflow, if we push to the same PR, cancel all previous builds on that PR. |
| # If the push is not attached to a PR, we will cancel all builds on the same branch. |
| group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" |
| cancel-in-progress: true |
| |
| jobs: |
| changelog: |
| runs-on: ubuntu-latest |
| |
| steps: |
| # Run |
| - name: Check Changelog |
| if: ${{ github.event_name == 'pull_request' }} |
| run: | |
| if [[ -z $(grep -oP 'changelog: *\K\S+' <<< "$PR_BODY") ]]; then |
| echo "::error::Pull request message must contain 'changelog: ...' with your changelog. Please add it." |
| exit 1 |
| fi |
| env: |
| PR_BODY: ${{ github.event.pull_request.body }}) |
| |
| |
| # We need to have the "conclusion" job also on PR CI, to make it possible |
| # to add PRs to a merge queue. |
| conclusion_changelog: |
| needs: [ changelog ] |
| # We need to ensure this job does *not* get skipped if its dependencies fail, |
| # because a skipped job is considered a success by GitHub. So we have to |
| # overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run |
| # when the workflow is canceled manually. |
| # |
| # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB! |
| if: ${{ !cancelled() }} |
| runs-on: ubuntu-latest |
| steps: |
| # Manually check the status of all dependencies. `if: failure()` does not work. |
| - name: Conclusion |
| run: | |
| # Print the dependent jobs to see them in the CI log |
| jq -C <<< '${{ toJson(needs) }}' |
| # Check if all jobs that we depend on (in the needs array) were successful. |
| jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' |