ref: Use RunLoop observer for watchdog detection #1965
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Lint Clang | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
# Concurrency configuration: | |
# - We use workflow-specific concurrency groups to prevent multiple lint runs on the same code, | |
# as linting checks are deterministic and don't require parallel validation. | |
# - For pull requests, we cancel in-progress runs when new commits are pushed since only the | |
# latest linting matters for merge decisions. | |
# - For main branch pushes, we never cancel formatting checks to ensure our code maintains consistent style | |
# standards across the entire project. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
jobs: | |
files-changed: | |
name: Detect File Changes | |
runs-on: ubuntu-latest | |
outputs: | |
run_lint_clang_formatting_for_prs: ${{ steps.changes.outputs.run_lint_clang_formatting_for_prs }} | |
steps: | |
- uses: actions/checkout@v5 | |
- name: Get changed files | |
id: changes | |
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
with: | |
token: ${{ github.token }} | |
filters: .github/file-filters.yml | |
lint: | |
# While ubuntu runners have clang-format preinstalled, they use an older version. We want to use the most recent one, | |
# that we can easily install locally via brew. | |
name: Lint | |
# Run the job only for PRs with related changes or non-PR events. | |
if: github.event_name != 'pull_request' || needs.files-changed.outputs.run_lint_clang_formatting_for_prs == 'true' | |
needs: files-changed | |
runs-on: macos-15 | |
steps: | |
- uses: actions/checkout@v5 | |
- name: Install tooling | |
run: make init-ci-format | |
- name: Format with Clang | |
run: make format-clang | |
- name: Check for Formatting Changes | |
run: | | |
if [[ -n "$(git status --porcelain)" ]]; then | |
echo "❌ Some code formatted with clang-format is not formatted correctly. Please run 'make format' and commit the changes." | |
git status | |
git diff | |
exit 1 | |
else | |
echo "✅ All code is formatted correctly." | |
fi | |
- name: Run CI Diagnostics | |
if: failure() | |
run: ./scripts/ci-diagnostics.sh | |
lint_clang_formatting-required-check: | |
needs: | |
[ | |
files-changed, | |
lint, | |
] | |
name: Lint Clang | |
# This is necessary since a failed/skipped dependent job would cause this job to be skipped | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
# If any jobs we depend on fails gets cancelled or times out, this job will fail. | |
# Skipped jobs are not considered failures. | |
- name: Check for failures | |
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') | |
run: | | |
echo "One of the clang formatting check jobs has failed." && exit 1 |