ci: expand changes detection to rewire all pipeline nodes
CI / changes (push) Successful in 7s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 28s
CI / web (push) Successful in 40s
CI / go (push) Failing after 21s
CI / bird2 (push) Has been skipped
CI / release (push) Has been skipped
CI / changes (push) Successful in 7s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 28s
CI / web (push) Successful in 40s
CI / go (push) Failing after 21s
CI / bird2 (push) Has been skipped
CI / release (push) Has been skipped
Полный прогон при scripts/*, workflows, golangci, pre-commit; openapi в full_pipeline; миграции и deploy-пути; исправлен fallback пустого diff. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+1
-1
@@ -12,7 +12,7 @@ Workflow: [workflows/ci.yaml](workflows/ci.yaml).
|
|||||||
|
|
||||||
## CI (quality gates)
|
## CI (quality gates)
|
||||||
|
|
||||||
Job **changes** вычисляет флаги по путям в diff. Изменение `.gitea/workflows/*` поднимает полный прогон.
|
Job **changes** вычисляет флаги по путям в diff. Полный прогон (все узлы openapi / web / go / bird2 в графе): `.gitea/workflows/*`, `scripts/*`, `.golangci.yml`, `.pre-commit-config.yaml`, корневой `package.json` / `.releaserc.json`. Отдельно: `migrations/*`, `docs/openapi.yaml` → `go` / `openapi` и т.д. (см. `ci.yaml`).
|
||||||
|
|
||||||
На **pull request** — **commitlint** (Conventional Commits).
|
На **pull request** — **commitlint** (Conventional Commits).
|
||||||
|
|
||||||
|
|||||||
+76
-38
@@ -8,10 +8,9 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Гранулярная детекция изменений по модулям.
|
# Детекция изменений по модулям (флаги → downstream-джобы в графе CI).
|
||||||
# Каждый флаг соответствует группе файлов; downstream-джобы запускаются
|
# Полный прогон (все флаги true): .gitea/workflows/*, scripts/*, .golangci.yml,
|
||||||
# только когда их группа затронута. Изменение CI-конфигурации (.gitea/workflows/*)
|
# .pre-commit-config.yaml — чтобы при правках CI/CD пересобирались все узлы.
|
||||||
# поднимает все флаги, чтобы гарантировать полный прогон.
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
changes:
|
changes:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -40,6 +39,23 @@ jobs:
|
|||||||
docker_web=false
|
docker_web=false
|
||||||
docker_bird=false
|
docker_bird=false
|
||||||
|
|
||||||
|
# Все флаги true → openapi, web, go, bird2 (и release на main) в графе CI.
|
||||||
|
set_all_flags_true() {
|
||||||
|
openapi=true
|
||||||
|
go=true
|
||||||
|
web=true
|
||||||
|
bird_conf=true
|
||||||
|
docker_go=true
|
||||||
|
docker_web=true
|
||||||
|
docker_bird=true
|
||||||
|
}
|
||||||
|
|
||||||
|
write_outputs() {
|
||||||
|
for v in openapi go web bird_conf docker_go docker_web docker_bird; do
|
||||||
|
eval "echo \"\$v=\$$v\"" >> "$GITHUB_OUTPUT"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
||||||
base="${{ github.event.pull_request.base.sha }}"
|
base="${{ github.event.pull_request.base.sha }}"
|
||||||
head="${{ github.event.pull_request.head.sha }}"
|
head="${{ github.event.pull_request.head.sha }}"
|
||||||
@@ -52,62 +68,84 @@ jobs:
|
|||||||
elif git rev-parse --verify HEAD~1 >/dev/null 2>&1; then
|
elif git rev-parse --verify HEAD~1 >/dev/null 2>&1; then
|
||||||
FILES="$(git diff --name-only HEAD~1 HEAD)"
|
FILES="$(git diff --name-only HEAD~1 HEAD)"
|
||||||
else
|
else
|
||||||
openapi=true; go=true; web=true; bird_conf=true
|
set_all_flags_true
|
||||||
docker_go=true; docker_web=true; docker_bird=true
|
write_outputs
|
||||||
for v in openapi go web bird_conf docker_go docker_web docker_bird; do
|
echo "No parent commit — full pipeline (all modules)"
|
||||||
echo "$v=true" >> "$GITHUB_OUTPUT"
|
|
||||||
done
|
|
||||||
echo "No parent commit — full pipeline"
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$(printf '%s' "$FILES" | tr -d '[:space:]')" ]; then
|
if [ -z "$(printf '%s' "$FILES" | tr -d '[:space:]')" ]; then
|
||||||
go=true; web=true
|
set_all_flags_true
|
||||||
for v in openapi go web bird_conf docker_go docker_web docker_bird; do
|
write_outputs
|
||||||
eval "echo \"\$v=\$$v\"" >> "$GITHUB_OUTPUT"
|
echo "Empty diff — full pipeline fallback"
|
||||||
done
|
|
||||||
echo "Empty diff — safe fallback: go=true web=true"
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ci_changed=false
|
full_pipeline=false
|
||||||
|
|
||||||
while IFS= read -r f || [ -n "${f:-}" ]; do
|
while IFS= read -r f || [ -n "${f:-}" ]; do
|
||||||
[ -z "${f:-}" ] && continue
|
[ -z "${f:-}" ] && continue
|
||||||
case "$f" in
|
case "$f" in
|
||||||
.gitea/workflows/*) ci_changed=true ;;
|
# CI/CD инфраструктура — все узлы quality gates
|
||||||
docs/openapi.yaml|redocly.yaml) openapi=true ;;
|
.gitea/workflows/*|.golangci.yml|.pre-commit-config.yaml|scripts/*)
|
||||||
web/README.md) ;; # doc-only
|
full_pipeline=true
|
||||||
web/*) web=true ;;
|
;;
|
||||||
deploy/bird/*) bird_conf=true ;;
|
docs/openapi.yaml|redocly.yaml)
|
||||||
deploy/docker/bird/*) docker_bird=true; docker_go=true ;;
|
openapi=true
|
||||||
deploy/docker/gobinary/*) docker_go=true ;;
|
;;
|
||||||
deploy/docker/docker-bake.hcl) docker_go=true; docker_web=true ;;
|
docs/api.md|docs/access.md)
|
||||||
deploy/docker/evobgp-agent/*) docker_go=true ;;
|
openapi=true
|
||||||
deploy/docker/evobgp-web/*) docker_web=true ;;
|
go=true
|
||||||
deploy/docker/bird2/*) docker_bird=true ;;
|
;;
|
||||||
go.mod|go.sum|go.work) go=true ;;
|
web/README.md|web/components.json)
|
||||||
migrations/*) go=true ;;
|
;;
|
||||||
*.go) go=true ;;
|
web/*)
|
||||||
cmd/*|internal/*) go=true ;;
|
web=true
|
||||||
|
;;
|
||||||
|
deploy/bird/*)
|
||||||
|
bird_conf=true
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
|
deploy/compose/*|deploy/docker/*)
|
||||||
|
docker_go=true
|
||||||
|
docker_web=true
|
||||||
|
docker_bird=true
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
|
go.mod|go.sum|go.work)
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
|
migrations/*)
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
|
cmd/*|internal/*|*.go)
|
||||||
|
go=true
|
||||||
|
bird_conf=true
|
||||||
|
;;
|
||||||
|
docs/*)
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
|
package.json|package-lock.json|.releaserc.json)
|
||||||
|
full_pipeline=true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
go=true
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done <<< "$FILES"
|
done <<< "$FILES"
|
||||||
|
|
||||||
if $ci_changed; then
|
if $full_pipeline; then
|
||||||
go=true; web=true; bird_conf=true
|
set_all_flags_true
|
||||||
docker_go=true; docker_web=true; docker_bird=true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for v in openapi go web bird_conf docker_go docker_web docker_bird; do
|
write_outputs
|
||||||
eval "echo \"\$v=\$$v\"" >> "$GITHUB_OUTPUT"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Changed files (first 30):"
|
echo "Changed files (first 30):"
|
||||||
printf '%s\n' "$FILES" | head -n 30
|
printf '%s\n' "$FILES" | head -n 30
|
||||||
echo "--- flags ---"
|
echo "--- flags ---"
|
||||||
echo "openapi=$openapi go=$go web=$web bird_conf=$bird_conf"
|
echo "openapi=$openapi go=$go web=$web bird_conf=$bird_conf"
|
||||||
echo "docker_go=$docker_go docker_web=$docker_web docker_bird=$docker_bird ci=$ci_changed"
|
echo "docker_go=$docker_go docker_web=$docker_web docker_bird=$docker_bird full_pipeline=$full_pipeline"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
openapi:
|
openapi:
|
||||||
|
|||||||
Reference in New Issue
Block a user