diff --git a/actions/setup/js/install_frontmatter_skills.cjs b/actions/setup/js/install_frontmatter_skills.cjs index dfc0c5a02ce..4d6664529de 100644 --- a/actions/setup/js/install_frontmatter_skills.cjs +++ b/actions/setup/js/install_frontmatter_skills.cjs @@ -132,17 +132,18 @@ function appendSkillInstallFailure(skillSpec, errorMessage) { * @returns {Promise} */ async function writeSkillSummary(skillDir, skills, installedSkillCount, failures) { - core.summary - .addRaw("### Frontmatter skills installed\n\n") - .addRaw(`- Engine skill directory: \`${skillDir}\`\n`) - .addRaw(`- Requested references: \`${JSON.stringify(skills)}\`\n`) - .addRaw(`- Installed SKILL.md files: ${installedSkillCount}\n`); + let body = ""; + body += `- Engine skill directory: \`${skillDir}\`\n`; + body += `- Requested references: \`${JSON.stringify(skills)}\`\n`; + body += `- Installed SKILL.md files: ${installedSkillCount}\n`; if (failures.length > 0) { - core.summary.addRaw("\n#### ⚠️ Skill install failures\n\n"); + body += "\n#### Skill install failures\n\n"; for (const f of failures) { - core.summary.addRaw(`- \`${f.skill}\`: ${f.error}\n`); + body += `- \`${f.skill}\`: ${f.error}\n`; } } + const openAttr = failures.length > 0 ? " open" : ""; + core.summary.addRaw(`### Frontmatter skills installed\n\n\nSkill install details\n\n${body}\n\n\n`); await core.summary.write(); } diff --git a/actions/setup/js/install_frontmatter_skills.test.cjs b/actions/setup/js/install_frontmatter_skills.test.cjs index 48c38921fcf..061b09c599a 100644 --- a/actions/setup/js/install_frontmatter_skills.test.cjs +++ b/actions/setup/js/install_frontmatter_skills.test.cjs @@ -123,6 +123,7 @@ describe("install_frontmatter_skills", () => { expect(global.exec.exec).toHaveBeenNthCalledWith(2, "gh", ["skill", "install", "githubnext/skills", "review/security", "--pin", "def456", "--agent", "claude-code", "--dir", "/tmp/gh-aw/.claude/skills", "--force"]); expect(global.exec.exec).toHaveBeenNthCalledWith(3, "gh", ["skill", "install", "${{ inputs.skill_ref }}", "--agent", "claude-code", "--dir", "/tmp/gh-aw/.claude/skills", "--force"]); expect(global.core.summary.addRaw).toHaveBeenCalledWith(expect.stringContaining("### Frontmatter skills installed")); + expect(global.core.summary.addRaw).toHaveBeenCalledWith(expect.stringContaining("
")); expect(global.core.summary.addRaw).toHaveBeenCalledWith(expect.stringContaining('["githubnext/skills@abc123","githubnext/skills/review/security@def456","${{ inputs.skill_ref }}"]')); }); @@ -145,5 +146,6 @@ describe("install_frontmatter_skills", () => { const failures = JSON.parse(fs.readFileSync("/tmp/gh-aw/skill_install_failures.json", "utf8")); expect(failures).toEqual([{ skill: "bad/repo@abc123", error: "exit code 1 HTTP 404" }]); expect(global.core.warning).toHaveBeenCalledWith(expect.stringContaining("Failed to install skill 'bad/repo@abc123'")); + expect(global.core.summary.addRaw).toHaveBeenCalledWith(expect.stringContaining("
")); }); });