Skip to content

fix(ci): surface dockhand errors in Build Skill Artifacts step#516

Merged
JAORMX merged 1 commit into
mainfrom
fix/build-skill-step-unmask-errors
Apr 20, 2026
Merged

fix(ci): surface dockhand errors in Build Skill Artifacts step#516
JAORMX merged 1 commit into
mainfrom
fix/build-skill-step-unmask-errors

Conversation

@JAORMX
Copy link
Copy Markdown
Collaborator

@JAORMX JAORMX commented Apr 20, 2026

Summary

  • The Build skill artifact step in .github/workflows/build-skills.yml captured dockhand's combined output with output=\$(/tmp/dockhand build-skill ... 2>&1) and then echo \"\$output\". Under set -e, a dockhand failure exits the shell on the assignment line before echo runs, so the only signal in the job log is ##[error]Process completed with exit code 1. — the actual dockhand error is never printed.
  • This is exactly why we could not diagnose the post-merge failures on feat(skills): package 4 Google Gemini skills #502 and feat(skills): package 3 Neon skills #506 (some matrix cells fail, others succeed; logs are silent either way).
  • Stream dockhand output through tee to a tempfile and enable pipefail, so output is visible in real time and a non-zero exit still fails the step.

Behavior

  • Success path: unchanged — digest is extracted from the captured log and written to steps.build.outputs.digest.
  • Failure path: dockhand's stdout/stderr now appears in the job log, then pipefail + errexit fails the step.
  • Empty-digest path preserved via || true on the grep | awk pipeline; downstream steps already gate on digest != ''.

Test plan

🤖 Generated with Claude Code

The `Build skill artifact` step captured dockhand's output with
`output=$(/tmp/dockhand build-skill ... 2>&1)` and then `echo "$output"`.
Under `set -e`, a dockhand failure exits the shell on the assignment line
before `echo` runs, so the job log only shows
`##[error]Process completed with exit code 1.` with no dockhand output.

Stream output through `tee` to a tempfile so it's visible in the job log
as dockhand runs, and enable pipefail so a dockhand failure still fails
the step. Digest extraction reads the tempfile; `|| true` preserves the
prior behavior where a missing `Digest:` line yields an empty digest
(downstream steps already gate on `digest != ''`).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

🛡️ Skill Security Scan Results

⚠️ No skills were scanned in this PR.

Copy link
Copy Markdown
Contributor

@samuv samuv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚢

@JAORMX JAORMX merged commit 63aadbd into main Apr 20, 2026
34 checks passed
@JAORMX JAORMX deleted the fix/build-skill-step-unmask-errors branch April 20, 2026 09:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants