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
1 change: 1 addition & 0 deletions .asf.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ github:
- "Check Markdown Links"
- "Validate required_status_checks in .asf.yaml"
- "Spell Check with Typos"
- "Detect changes"
- "Circular Dependency Check"
- "Detect Unused Dependencies"
- "linux build test"
Expand Down
93 changes: 93 additions & 0 deletions .github/actions/detect-changes/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# Single source of truth for which PR diffs should skip code CI.
#
# Workflows that gate jobs on "is this a real code change?" call this
# composite action; every existing job downstream then uses
# `if: needs.detect-changes.outputs.has_code == 'true'`. The caller is
# responsible for `actions/checkout` with `fetch-depth: 0` before invoking
# this action; we need full history to compute the PR diff.

name: 'Detect changes'
description: >-
Emit has_code='true' if the PR contains any changed file that does NOT
match `ignore-paths`. When every changed file matches, has_code='false'
and dependent jobs should report `skipped`.

inputs:
ignore-paths:
description: |
Newline-separated glob patterns. If EVERY changed file in the PR
matches one of these globs, has_code='false' (code CI is skipped,
only dev.yml / docs*.yaml jobs run).

Glob syntax matches `pull_request: paths-ignore:`:
** any depth
* any chars within one path segment
foo/bar.txt a single specific file
subdir/** everything under subdir/
**.png any .png file at any depth
**/CHANGELOG.md CHANGELOG.md in any directory

To add a new entry: append one line below. To override per-workflow,
pass `with: ignore-paths: |` from the caller.
required: false
default: |
docs/**
**.md
.github/ISSUE_TEMPLATE/**
.github/pull_request_template.md

outputs:
has_code:
description: >-
'true' if at least one changed file is outside `ignore-paths`,
'false' if every changed file matches one of those globs.
value: ${{ steps.filter.outputs.has_code }}

runs:
using: composite
steps:
- id: filter
shell: bash
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
IGNORE_CODE_CI_FOR_PATHS: ${{ inputs.ignore-paths }}
run: |
# Fail-open: if anything goes wrong, default to running every job
# rather than silently skipping (which would let broken CI merge).
set +e
if [ -z "$BASE_SHA" ]; then
echo "has_code=true" >> "$GITHUB_OUTPUT"; exit 0
fi
# Translate IGNORE_CODE_CI_FOR_PATHS (one glob per line) into git
# pathspec excludes; `:(exclude,glob)` activates ** globbing.
excludes=()
while IFS= read -r pattern; do
[ -n "$pattern" ] && excludes+=( ":(exclude,glob)$pattern" )
done <<< "$IGNORE_CODE_CI_FOR_PATHS"
# If anything remains after stripping ignored paths, the PR has
# real code changes and code CI should run.
diff_output=$(git diff --name-only "$BASE_SHA..$HEAD_SHA" -- "${excludes[@]}")
if [ -n "$diff_output" ]; then
echo "has_code=true" >> "$GITHUB_OUTPUT"
else
echo "has_code=false" >> "$GITHUB_OUTPUT"
fi
exit 0
5 changes: 5 additions & 0 deletions .github/workflows/breaking_changes_detector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ on:
pull_request:
branches:
- main
paths-ignore:
- "docs/**"
- "**.md"
- ".github/ISSUE_TEMPLATE/**"
- ".github/pull_request_template.md"

permissions:
contents: read
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ on:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
paths-ignore:
- "docs/**"
- "**.md"
- ".github/ISSUE_TEMPLATE/**"
- ".github/pull_request_template.md"
schedule:
- cron: '16 4 * * 1'

Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,25 @@ permissions:
contents: read

jobs:
detect-changes:
name: Detect changes
runs-on: ubuntu-latest
outputs:
has_code: ${{ steps.filter.outputs.has_code }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0
# Glob list and detection logic live in
# .github/actions/detect-changes/action.yml (single source of truth).
# To override the patterns for this workflow, pass `with: ignore-paths:`.
- id: filter
uses: ./.github/actions/detect-changes

depcheck:
name: Circular Dependency Check
needs: detect-changes
if: needs.detect-changes.outputs.has_code == 'true'
runs-on: ubuntu-latest
container:
image: amd64/rust
Expand All @@ -56,6 +73,8 @@ jobs:

detect-unused-dependencies:
name: Detect Unused Dependencies
needs: detect-changes
if: needs.detect-changes.outputs.has_code == 'true'
runs-on: ubuntu-latest
container:
image: amd64/rust
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/large_files.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ concurrency:

on:
pull_request:
paths-ignore:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we keep this check even for doc files?

- "docs/**"
- "**.md"
- ".github/ISSUE_TEMPLATE/**"
- ".github/pull_request_template.md"
merge_group:

permissions:
Expand Down
Loading
Loading