Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/workflows/linter-failure-notifier.yml
Original file line number Diff line number Diff line change
@@ -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 }}
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow_run payload’s pull_requests array can be empty in some cases, which would leave PR_URL blank and degrade the alert. Add a fallback (e.g., link to RUN_URL, or query the PR via the GitHub API using head_sha when pull_requests[0] is missing).

Copilot uses AI. Check for mistakes.
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"
4 changes: 3 additions & 1 deletion .github/workflows/linter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ permissions:
contents: read

on:
- push
push:
pull_request:
workflow_dispatch:

jobs:
lint:
Expand Down
11 changes: 11 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down