From 2938371b18ceb062dd36c5482ccdb7f8f7e2771c Mon Sep 17 00:00:00 2001 From: fullstackjam Date: Mon, 1 Jun 2026 21:29:44 +0800 Subject: [PATCH 1/2] fix: replace log.Fatalf with panic in config init() functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit log.Fatal calls os.Exit(1) which skips all deferred cleanup. The embedded YAML cannot fail at runtime (compiled-in), so these are effectively startup assertions — panic is the right primitive here. Also removes the unused log import from both files. --- internal/config/packages.go | 5 ++--- internal/config/presets.go | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/internal/config/packages.go b/internal/config/packages.go index 52d67d7..b366e16 100644 --- a/internal/config/packages.go +++ b/internal/config/packages.go @@ -2,7 +2,6 @@ package config import ( "embed" - "log" "sync" "gopkg.in/yaml.v3" @@ -36,12 +35,12 @@ var ( func init() { data, err := packagesYAML.ReadFile("data/packages.yaml") if err != nil { - log.Fatalf("Failed to read packages.yaml: %v", err) + panic("corrupt binary: embedded packages.yaml unreadable: " + err.Error()) } var pd packagesData if err := yaml.Unmarshal(data, &pd); err != nil { - log.Fatalf("Failed to parse packages.yaml: %v", err) + panic("corrupt binary: embedded packages.yaml unparseable: " + err.Error()) } Categories = pd.Categories diff --git a/internal/config/presets.go b/internal/config/presets.go index 391a660..b01b9b1 100644 --- a/internal/config/presets.go +++ b/internal/config/presets.go @@ -2,7 +2,6 @@ package config import ( "embed" - "log" "gopkg.in/yaml.v3" ) @@ -16,12 +15,12 @@ var presetOrder = []string{"minimal", "developer", "full"} func init() { data, err := presetsYAML.ReadFile("data/presets.yaml") if err != nil { - log.Fatalf("Failed to read presets.yaml: %v", err) + panic("corrupt binary: embedded presets.yaml unreadable: " + err.Error()) } var pd presetsData if err := yaml.Unmarshal(data, &pd); err != nil { - log.Fatalf("Failed to parse presets.yaml: %v", err) + panic("corrupt binary: embedded presets.yaml unparseable: " + err.Error()) } Presets = pd.Presets From 84871c98aeedd8a1171f3652edd476946c4810b7 Mon Sep 17 00:00:00 2001 From: fullstackjam Date: Mon, 1 Jun 2026 21:45:39 +0800 Subject: [PATCH 2/2] ci: stop skipped-job emails from drift-to-issue workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When Harness succeeds, the drift-to-issue job was skipped entirely (job-level if: condition). GitHub treats a workflow where all jobs are skipped as conclusion=skipped, not success, which triggers failure notification emails even though nothing is wrong. Move the condition to the step level so the job always runs and concludes as success — the actual issue-filing step only fires when Harness truly fails. --- .github/workflows/drift-to-issue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/drift-to-issue.yml b/.github/workflows/drift-to-issue.yml index 5d0bfa6..64b1fe4 100644 --- a/.github/workflows/drift-to-issue.yml +++ b/.github/workflows/drift-to-issue.yml @@ -21,12 +21,12 @@ permissions: jobs: open-or-update-issue: - if: github.event.workflow_run.conclusion == 'failure' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Find failed jobs and (re)open issues + if: github.event.workflow_run.conclusion == 'failure' env: GH_TOKEN: ${{ github.token }} RUN_ID: ${{ github.event.workflow_run.id }}