25fe4107e6
- Fix subdirectory matching: use prefix match for .github/* paths instead of exact dirname match (fixes .github/workflows/ not matching) - Upgrade tj-actions/changed-files from v44 to v47 (Node 24 support) - Extract detection logic into scripts/detect-pipeline.sh for testability - Add 22 automated tests in scripts/test-detect-pipeline.sh covering infra-only, plugin code, mixed, and edge cases - Add test-detection-logic CI job to run tests on every PR - Update README.md to reference v47 cc @cpfarhood Co-Authored-By: Paperclip <noreply@paperclip.ing>
45 lines
1.0 KiB
Bash
Executable File
45 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Reads a newline-separated list of changed files from stdin.
|
|
# Outputs "pipeline-a" or "pipeline-b" to stdout.
|
|
# Pipeline B: all files are infra-only (config, docs, workflows).
|
|
# Pipeline A: any non-infra file present.
|
|
|
|
detect_pipeline() {
|
|
local all_infra=true
|
|
|
|
while IFS= read -r file; do
|
|
[ -z "$file" ] && continue
|
|
|
|
local filename
|
|
local dir
|
|
filename=$(basename "$file")
|
|
dir=$(dirname "$file")
|
|
|
|
if [[ "$dir" == ".github" || "$dir" == .github/* ]] || \
|
|
[[ "$filename" == *.md ]] || \
|
|
[[ "$filename" == .eslintrc* ]] || \
|
|
[[ "$filename" == .prettierrc* ]] || \
|
|
[[ "$filename" == renovate.json* ]] || \
|
|
[[ "$filename" == .gitignore ]] || \
|
|
[[ "$filename" == .editorconfig ]] || \
|
|
[[ "$filename" == LICENSE ]]; then
|
|
continue
|
|
else
|
|
all_infra=false
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$all_infra" = true ]; then
|
|
echo "pipeline-b"
|
|
else
|
|
echo "pipeline-a"
|
|
fi
|
|
}
|
|
|
|
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
|
|
detect_pipeline
|
|
fi
|