diff --git a/gardener/recipes/cascade-rebase.toml b/gardener/recipes/cascade-rebase.toml new file mode 100644 index 0000000..1cd09ee --- /dev/null +++ b/gardener/recipes/cascade-rebase.toml @@ -0,0 +1,16 @@ +# gardener/recipes/cascade-rebase.toml — PR outdated after main moved +# +# Trigger: PR mergeable=false (stale branch or dismissed approval) +# Playbook: rebase only — merge and re-approval happen on subsequent cycles +# after CI reruns on the rebased branch (rebase is async via Gitea API) + +name = "cascade-rebase" +description = "PR outdated after main moved — mergeable=false or stale approval" +priority = 20 + +[trigger] +pr_mergeable = false + +[[playbook]] +action = "rebase-pr" +description = "Rebase PR onto main (async — CI reruns, merge on next cycle)" diff --git a/gardener/recipes/chicken-egg-ci.toml b/gardener/recipes/chicken-egg-ci.toml new file mode 100644 index 0000000..cc71e02 --- /dev/null +++ b/gardener/recipes/chicken-egg-ci.toml @@ -0,0 +1,25 @@ +# gardener/recipes/chicken-egg-ci.toml — PR introduces CI step that fails on pre-existing code +# +# Trigger: New .woodpecker/*.yml in PR + lint/check step + failures on unchanged files +# Playbook: make step non-blocking, create per-file issues, create follow-up to remove bypass + +name = "chicken-egg-ci" +description = "PR introduces a CI pipeline/linting step that fails on pre-existing code" +priority = 10 + +[trigger] +pr_files = '\.woodpecker/.*\.yml$' +step_name = '(?i)(lint|shellcheck|check)' +failures_on_unchanged = true + +[[playbook]] +action = "make-step-non-blocking" +description = "Make failing step non-blocking (|| true) in the PR" + +[[playbook]] +action = "lint-per-file" +description = "Create per-file fix issues for pre-existing violations (generic linter support)" + +[[playbook]] +action = "create-followup-remove-bypass" +description = "Create follow-up issue to remove || true once fixes land" diff --git a/gardener/recipes/flaky-test.toml b/gardener/recipes/flaky-test.toml new file mode 100644 index 0000000..5a76940 --- /dev/null +++ b/gardener/recipes/flaky-test.toml @@ -0,0 +1,20 @@ +# gardener/recipes/flaky-test.toml — CI fails intermittently +# +# Trigger: Test step fails + multiple CI attempts (same step, different output) +# Playbook: retrigger CI (max 2x), quarantine test if still failing + +name = "flaky-test" +description = "CI fails intermittently — same step fails across multiple attempts" +priority = 30 + +[trigger] +step_name = '(?i)test' +min_attempts = 2 + +[[playbook]] +action = "retrigger-ci" +description = "Retrigger CI (max 2 retries)" + +[[playbook]] +action = "quarantine-test" +description = "If still failing, quarantine test and create fix issue" diff --git a/gardener/recipes/shellcheck-violations.toml b/gardener/recipes/shellcheck-violations.toml new file mode 100644 index 0000000..0bc9d57 --- /dev/null +++ b/gardener/recipes/shellcheck-violations.toml @@ -0,0 +1,20 @@ +# gardener/recipes/shellcheck-violations.toml — ShellCheck step fails +# +# Trigger: Step named *shellcheck* fails with SC#### codes in output +# Playbook: parse per-file, create one issue per file, label backlog + +name = "shellcheck-violations" +description = "ShellCheck step fails with SC#### codes in output" +priority = 40 + +[trigger] +step_name = '(?i)shellcheck' +output = 'SC\d{4}' + +[[playbook]] +action = "shellcheck-per-file" +description = "Parse output by file, create one fix issue per file with specific SC codes" + +[[playbook]] +action = "label-backlog" +description = "Label created issues as backlog"