chore(ci): run CI on push to feature branches #195
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#195
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/ci-on-feature-branches"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
CI gates сейчас триггерятся только на:
push: mainpull_request: → mainПри push в
feat/**etc до PR open — CI не запускается, ошибки находятся поздно. User asked: «настрой чтобы в ветках собирался ci».Change
.github/workflows/ci.yml— расширилon.push.branches:Conventional prefixes only —
experiment/,wip/,temp/ветки не triggers (intentional — saves runner capacity).Side effects
pushevent на feature branch → CI run 1;pull_requestevent → CI run 2. Acceptable при runner capacity=2 (queued). Если станет проблемой → removepull_requesttrigger.chore/ci-on-feature-branches→ CI триггернётся уже по новому правилу (ветка matcheschore/**после merge).Test plan
'**'globs (required), structure list-of-stringsForgejo Actions compatibility
'feat/**'glob patterns поддерживаются Forgejo Actions per Gitea-compat (тот же синтаксис что GHA). Если runner v6.3.1 не resolve'ит — fallback наbranches-ignore: [main]+ job-level filter.Closes none (нет issue, user feedback inline).
Deep Code Review — verdict
Status: 🟡 MEDIUM (2 🟡, no blockers)
Reviewer: deep-code-reviewer (opus) · Head SHA:
bf7f12f· Lines: +10 / -1🟡 Medium
.github/workflows/ci.yml:3-16— double-run безconcurrency:group → удвоение нагрузки на single Beget runner (v6.3.1, capacity≈2). Каждый push в feature branch до PR-open + push после PR-open → 2 CI run (~7-10 min с postgis service + uv sync + mypy + pytest). PR body признаёт ("Acceptable при capacity=2"), но fix копеечный:Автоматически кенселит in-flight run при новом push, снимает заодно cache-thrash. Без этого capacity-2 runner может заблокировать
.forgejo/workflows/deploy.yml(тоже шарит runner). Рекомендую добавить тем же PR — 4 строки.Cache contention — uv-cache и npm-cache пишутся в shared runner cache; параллельные runs на разных ветках → episodic mtime-конфликты / partial hit. С
concurrency: cancel-in-progress: true(выше) автоматически снимается.🟢 Low / nits
hotfix/**glob есть в PR, но не упомянут вgit-pr.md"Conventional prefixes" list (feat/fix/refactor/chore/docs/perf/test) — синхронизировать post-mergechore/**после merge" слегка вводит в заблуждение (ветка удалится после merge — self-reference moot)Cross-file impact
.forgejo/workflows/deploy.yml—push: mainonly, не пересекается с feature-branch триггером. Никакого конфликта..github/workflows/deploy-obsidian.yml—push: main + paths:, не пересекается.infra/Self_Hosted_Git_Forgejo_Architecture.md§6 — подтверждает что Forgejo Runner читает И.github/workflows/, И.forgejo/workflows/..github/workflows/ci.ymlНЕ dead code, действительно исполняется.fixes/Bug_Forgejo_Runner_v6.4_YAML_Parse.md— runner pinned v6.3.1;'feat/**'globs supported с v3+; v6.4.0 regression была проruns-onparsing, не branch globs. Compat OK.Vault cross-check
infra/Self_Hosted_Git_Forgejo_Architecture.md(раздел "CI conventions"), либо новымdecisions/2026-05-16-ci-on-feature-branches.md.claude/rules/deploy.mdупоминает только.github/workflows/**под path-triggers — после полной migration нужен апдейт на.forgejo/workflows/**(отдельный PR)Pre-flight
chore/ci-on-feature-branches)--no-verify/--amend/--forceвgit logветкиmergeable=true, no conflictsSecurity
pull_request(неpull_request_target— fork-attack-safe)deploy.yml, не вci.ymlPerformance findings
deploy.ymlна main. Mitigation —concurrencygroup выше.Positive observations
'feat/**'корректно (unquoted**в YAML = ошибка парсера)pull_request: branches: [main]сохранён — contributors flow не сломанBlast radius
.github/workflows/**) BLOCKS auto-merge — human approval requiredNext steps
concurrency:group → fixup commitinfra/Self_Hosted_Git_Forgejo_Architecture.md.claude/rules/deploy.mdна.forgejo/workflows/**(отдельный PR)Deep Code Review — re-review verdict (head
d1e2de0)Summary
bf7f12f(2x 🟡 concurrency findings).github/workflows/ci.yml)What was fixed in fixup commit
d1e2de0Added top-level
concurrency:block exactly per recommendation:Semantics verified:
${{ github.ref }}— per-branch isolation (parallel ветки не cancel'ят друг друга) ✅${{ github.workflow }}— namespace prevents collision с deploy.yml / future workflows ✅ci-prefix — extra explicit namespace ✅cancel-in-progress: true— stale runs cancelled при новом push ✅on:, beforejobs:) — correct ✅Both previous 🟡 findings resolved
push+pull_requestсобытия одновременно для одного SHA)github.refcancel-in-progress: trueгарантирует один active run per branch — никакого write conflict🟢 Nits (post-merge, не блокирует)
hotfix/**не в списке prefixes в.claude/rules/git-pr.md(PR добавил его в CI, но git-pr.md его не documents). Optional follow-up: либо добавить в git-pr.md, либо убрать из ci.yml для consistency.Auto-merge decision
Per Auto-merge policy (deep-code-reviewer.md L340 +
.claude/rules/git-pr.md):✅ Approved, but needs human merge per scope policy (touches
.github/workflows/ci.yml).Recommended merge: squash + delete branch
chore/ci-on-feature-branches. Self-referential trigger expected — push of merge commit вmainmatchespush.branches: [main]→ новый CI run будет первой validation нового правила.Risk / blast radius