From a477e1ff549dee6c918a2df485deab2a2690f216 Mon Sep 17 00:00:00 2001 From: Oskar Kapala Date: Fri, 16 Jan 2026 15:49:40 +0100 Subject: [PATCH] ci: avoid python in change detection --- .forgejo/workflows/ci.yml | 85 ++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 51 deletions(-) diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 299224e..9e53ca5 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -18,61 +18,44 @@ jobs: - id: filter name: Detect changes run: | - python - <<'PY' - import json - import os - import subprocess - import sys + set -euo pipefail + git fetch --quiet --depth=1 origin "${GITHUB_BASE_REF:-}" || true - event_path = os.environ.get("GITHUB_EVENT_PATH") - base = None - head = None - if event_path and os.path.exists(event_path): - with open(event_path, "r", encoding="utf-8") as handle: - data = json.load(handle) - if "pull_request" in data: - base = data["pull_request"]["base"]["sha"] - head = data["pull_request"]["head"]["sha"] - else: - base = data.get("before") - head = data.get("after") or data.get("checkout_sha") + diff_range="" + if [ -n "${GITHUB_BASE_REF:-}" ]; then + base_ref="origin/${GITHUB_BASE_REF}" + if git rev-parse --verify "$base_ref" >/dev/null 2>&1; then + diff_range="$(git merge-base "$base_ref" HEAD)..HEAD" + fi + else + if git rev-parse --verify HEAD^ >/dev/null 2>&1; then + diff_range="HEAD^..HEAD" + fi + fi - if not head: - head = os.environ.get("GITHUB_SHA") + if [ -n "$diff_range" ]; then + files="$(git diff --name-only "$diff_range")" + else + files="$(git ls-files)" + fi - if not base or base == "0000000000000000000000000000000000000000": - try: - subprocess.check_call( - ["git", "rev-parse", f"{head}^"], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - base = f"{head}^" - except Exception: - base = None + backend=false + frontend=false + while IFS= read -r path; do + case "$path" in + back001/*|.forgejo/workflows/*|ci/*) backend=true ;; + esac + case "$path" in + front001/*|.forgejo/workflows/*|ci/*) frontend=true ;; + esac + done <> "$GITHUB_OUTPUT" outputs: backend: ${{ steps.filter.outputs.backend }} frontend: ${{ steps.filter.outputs.frontend }}