From 8193e7bc96f845b5c05e87657bcd485ce04b3729 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 21 Mar 2026 10:23:00 +0000 Subject: [PATCH] fix: extract build_formula_issue_body to eliminate duplicate code blocks Move TOML frontmatter construction into a shared helper in lib/file-action-issue.sh, used by both gardener-poll.sh and gardener-run.sh. Fixes CI duplicate-detection failure. Co-Authored-By: Claude Opus 4.6 (1M context) --- gardener/gardener-poll.sh | 11 +++-------- gardener/gardener-run.sh | 11 +++-------- lib/file-action-issue.sh | 12 ++++++++++++ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/gardener/gardener-poll.sh b/gardener/gardener-poll.sh index 9b966c5..43aa8db 100755 --- a/gardener/gardener-poll.sh +++ b/gardener/gardener-poll.sh @@ -134,16 +134,11 @@ Format: '1a 2c 3b' means question 1→option (a), 2→option (c), 3→option (b) ${ESCALATION_REPLY}" fi -ISSUE_BODY="--- -formula: run-gardener -model: opus ---- - -Periodic gardener housekeeping run. The action-agent reads \`formulas/run-gardener.toml\` +_DESCRIPTION="Periodic gardener housekeeping run. The action-agent reads \`formulas/run-gardener.toml\` and executes the steps: preflight, grooming, blocked-review, -AGENTS.md update, and commit-and-pr.${ESCALATION_CONTEXT} +AGENTS.md update, and commit-and-pr.${ESCALATION_CONTEXT}" -Filed automatically by \`gardener-poll.sh\`." +ISSUE_BODY=$(build_formula_issue_body "run-gardener" "opus" "$_DESCRIPTION" "gardener-poll.sh") _rc=0 file_action_issue "run-gardener" "action: run-gardener — periodic housekeeping" "$ISSUE_BODY" || _rc=$? diff --git a/gardener/gardener-run.sh b/gardener/gardener-run.sh index 8ee6493..5410ba9 100755 --- a/gardener/gardener-run.sh +++ b/gardener/gardener-run.sh @@ -45,16 +45,11 @@ fi log "--- Gardener run start ---" # ── File action issue for run-gardener formula ──────────────────────────── -ISSUE_BODY="--- -formula: run-gardener -model: opus ---- - -Periodic gardener housekeeping run. The action-agent reads \`formulas/run-gardener.toml\` +_DESCRIPTION="Periodic gardener housekeeping run. The action-agent reads \`formulas/run-gardener.toml\` and executes the steps: preflight, grooming, blocked-review, -AGENTS.md update, and commit-and-pr. +AGENTS.md update, and commit-and-pr." -Filed automatically by \`gardener-run.sh\`." +ISSUE_BODY=$(build_formula_issue_body "run-gardener" "opus" "$_DESCRIPTION" "gardener-run.sh") _rc=0 file_action_issue "run-gardener" "action: run-gardener — periodic housekeeping" "$ISSUE_BODY" || _rc=$? diff --git a/lib/file-action-issue.sh b/lib/file-action-issue.sh index f9458b5..2568fa2 100644 --- a/lib/file-action-issue.sh +++ b/lib/file-action-issue.sh @@ -4,6 +4,9 @@ # Usage: source this file, then call file_action_issue. # Requires: codeberg_api() from lib/env.sh, jq, lib/secret-scan.sh # +# build_formula_issue_body +# Outputs a standard issue body with TOML frontmatter to stdout. +# # file_action_issue <body> # Sets FILED_ISSUE_NUM on success. # Returns: 0=created, 1=duplicate exists, 2=label not found, 3=API error, 4=secrets detected @@ -12,6 +15,15 @@ # shellcheck source=secret-scan.sh source "$(dirname "${BASH_SOURCE[0]}")/secret-scan.sh" +# build_formula_issue_body <formula_name> <model> <description> <source_script> +# Builds a standard issue body with TOML frontmatter for formula-driven action issues. +# Outputs the body to stdout. +build_formula_issue_body() { + local formula_name="$1" model="$2" description="$3" source_script="$4" + printf -- '---\nformula: %s\nmodel: %s\n---\n\n%s\n\nFiled automatically by `%s`.' \ + "$formula_name" "$model" "$description" "$source_script" +} + file_action_issue() { local formula_name="$1" title="$2" body="$3" FILED_ISSUE_NUM=""