diff --git a/.github/workflows/linter-failure-notifier.yml b/.github/workflows/linter-failure-notifier.yml new file mode 100644 index 0000000000..7690a2ea3e --- /dev/null +++ b/.github/workflows/linter-failure-notifier.yml @@ -0,0 +1,52 @@ +name: Notify on linter failure +permissions: + contents: read + +on: + workflow_run: + workflows: + - Lint OpenAPI Descriptions + types: + - completed + +jobs: + notify: + name: Notify #api-platform about failed lint + if: | + github.event.workflow_run.conclusion == 'failure' && + contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event.workflow_run.event) && + github.event.workflow_run.repository.full_name == 'github/rest-api-description' + runs-on: ubuntu-latest + steps: + - name: Post failure to chatterbox + env: + CHATTERBOX_URL: ${{ secrets.CHATTERBOX_URL }} + CHATTERBOX_TOKEN: ${{ secrets.CHATTERBOX_TOKEN }} + RUN_URL: ${{ github.event.workflow_run.html_url }} + RUN_NAME: ${{ github.event.workflow_run.name }} + BRANCH: ${{ github.event.workflow_run.head_branch }} + COMMIT: ${{ github.event.workflow_run.head_sha }} + PR_URL: ${{ github.event.workflow_run.pull_requests[0].html_url }} + REPO: ${{ github.event.workflow_run.repository.full_name }} + TRIGGER_EVENT: ${{ github.event.workflow_run.event }} + run: | + if [ -z "$CHATTERBOX_URL" ] || [ -z "$CHATTERBOX_TOKEN" ]; then + echo "CHATTERBOX_URL or CHATTERBOX_TOKEN is not configured; skipping notification." + exit 0 + fi + + short_sha="${COMMIT:0:7}" + + if [ -n "$PR_URL" ]; then + target_line="• PR: ${PR_URL}" + else + target_line="• Trigger: ${TRIGGER_EVENT}" + fi + + message=":warning: Linter workflow failed in ${REPO}.\n• Workflow: ${RUN_NAME}\n${target_line}\n• Branch: ${BRANCH}\n• Commit: ${short_sha}\n• Run: ${RUN_URL}" + + curl --fail --silent --show-error \ + -X POST \ + -u "${CHATTERBOX_TOKEN}:" \ + "${CHATTERBOX_URL%/}/topics/%23api-platform" \ + --data "$message" diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index e9b8c9d2f1..1e0b2d48e1 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -4,7 +4,9 @@ permissions: contents: read on: - - push + push: + pull_request: + workflow_dispatch: jobs: lint: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cad2f99492..6f0126ff4e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,17 @@ Please note that this project is released with a [Contributor Code of Conduct][c We will gladly accept pull requests for contributions to other files in this repository. +## CI notifications + +The `Notify on linter failure` workflow posts failed pull request lint runs to `#api-platform` through chatterbox. + +To enable notifications, configure these repository-level Actions secrets: + +- `CHATTERBOX_URL` +- `CHATTERBOX_TOKEN` + +This workflow is defined in `.github/workflows/linter-failure-notifier.yml`. + ### Submitting a pull request 0. [Fork][fork] and clone the repository