Skip to content

Fix skills-publish-dry-run acceptance test error message mismatch#13187

Merged
williammartin merged 1 commit into
sm/add-skills-commandfrom
sammorrowdrums/fix-skills-acceptance-test
Apr 16, 2026
Merged

Fix skills-publish-dry-run acceptance test error message mismatch#13187
williammartin merged 1 commit into
sm/add-skills-commandfrom
sammorrowdrums/fix-skills-acceptance-test

Conversation

@SamMorrowDrums

Copy link
Copy Markdown
Contributor

Fixes the broken acceptance test flagged in https://github.com/cli/cli/pull/13165/changes#r3093956593

The skills-publish-dry-run txtar test expected no skills/ directory found on stderr, but the actual error from discovery.DiscoverSkills is no skills found in <dir>. Updated the stderr matcher to match the current error message.

Change: stderr 'no skills/ directory found'stderr 'no skills found in'

The skills-publish-dry-run acceptance test expected 'no skills/ directory
found' on stderr, but the actual error message from discovery is
'no skills found in <dir>'. Update the stderr matcher accordingly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@SamMorrowDrums SamMorrowDrums requested a review from a team as a code owner April 16, 2026 14:37
@SamMorrowDrums SamMorrowDrums changed the base branch from trunk to sm/add-skills-command April 16, 2026 14:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a new gh skill command group (search/preview/update) and supporting internal skills infrastructure (discovery, metadata parsing, lockfile + file locking), along with acceptance tests for the new skills flows. It also updates the skills-publish-dry-run acceptance test to match the current stderr wording (no skills found in …).

Changes:

  • Introduce gh skill root command wiring plus search, preview, and update subcommands.
  • Add internal skills plumbing: discovery helpers, frontmatter metadata injection, install lockfile + cross-platform file locking, and registry of agent hosts.
  • Add/expand unit and acceptance tests for skills commands, plus adjust skills-publish-dry-run stderr matching.
Show a summary per file
File Description
pkg/cmd/skills/update/update.go New gh skill update implementation (scan installed skills, resolve refs, reinstall updates).
pkg/cmd/skills/skills.go New top-level gh skill command group wiring.
pkg/cmd/skills/search/search.go New gh skill search implementation (GitHub Code Search, ranking, enrichment, interactive install).
pkg/cmd/skills/search/search_test.go Unit tests for search behavior, ranking, JSON output, and error handling.
pkg/cmd/skills/preview/preview.go New gh skill preview implementation (resolve version, discover skills, render file tree + pager).
pkg/cmd/skills/preview/preview_test.go Unit tests for preview behavior (interactive/non-interactive, file browsing, limits).
pkg/cmd/root/root.go Registers the new gh skill command under the root CLI.
internal/skills/source/source.go Helpers for supported host validation + parsing/storing repo metadata URLs.
internal/skills/source/source_test.go Unit tests for repo URL parsing + host validation.
internal/skills/registry/registry.go Registry of agent hosts and install directory resolution logic.
internal/skills/registry/registry_test.go Unit tests for agent lookup, install dir resolution, labels, and parsing remotes.
internal/skills/lockfile/lockfile.go New .skill-lock.json writer with process-wide file locking.
internal/skills/lockfile/lockfile_test.go Unit tests for lockfile creation/update and lock acquisition failures.
internal/skills/installer/installer.go Skill installer (remote + local), metadata injection, concurrency, and lockfile recording.
internal/skills/installer/installer_test.go Unit tests for install behaviors, safety checks, and lockfile output.
internal/skills/frontmatter/frontmatter.go Frontmatter parsing + metadata injection/serialization.
internal/skills/frontmatter/frontmatter_test.go Unit tests for frontmatter parsing and metadata injection.
internal/skills/discovery/discovery.go Skill discovery in repos/local dirs; ref resolution; blob/tree helpers.
internal/skills/discovery/collisions.go Name collision detection/formatting helpers.
internal/skills/discovery/collisions_test.go Unit tests for collision detection/formatting.
internal/flock/flock.go OS-agnostic sentinel error for file lock contention.
internal/flock/flock_unix.go Unix implementation of non-blocking file locks.
internal/flock/flock_windows.go Windows implementation of non-blocking file locks.
internal/flock/flock_test.go Unit tests for file locking behavior.
git/client.go Adds helper methods for reading remote URL + checking gitignore, plus ShortSHA.
git/client_test.go Unit tests for the new git client helpers.
go.mod Promotes golang.org/x/sys to a direct dependency (used by Windows file locking).
acceptance/acceptance_test.go Adds a new acceptance test runner for the skills testscript directory.
acceptance/testdata/skills/skills-update.txtar Acceptance coverage for update (dry-run, force update, rewritten SKILL.md).
acceptance/testdata/skills/skills-update-noinstalled.txtar Acceptance coverage for update with no installed skills.
acceptance/testdata/skills/skills-search*.txtar Acceptance coverage for search (basic, pagination, no results).
acceptance/testdata/skills/skills-preview*.txtar Acceptance coverage for preview (interactive + non-interactive failure).
acceptance/testdata/skills/skills-install*.txtar Acceptance coverage for install flows (dir/scope/pin/namespaced/local/force).
acceptance/testdata/skills/skills-publish-*.txtar Acceptance coverage for publish flows; includes updated stderr matcher for dry-run.
.gitignore Ignores the gh binary artifact.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread acceptance/testdata/skills/skills-publish-dry-run.txtar
@williammartin williammartin merged commit a69a5fb into sm/add-skills-command Apr 16, 2026
29 checks passed
@williammartin williammartin deleted the sammorrowdrums/fix-skills-acceptance-test branch April 16, 2026 14:53
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 7, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.89.0` → `v2.90.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>cli/cli (cli/cli)</summary>

### [`v2.90.0`](https://github.com/cli/cli/releases/tag/v2.90.0): GitHub CLI 2.90.0

[Compare Source](cli/cli@v2.89.0...v2.90.0)

#### Manage agent skills with `gh skill` (Public Preview)

[Agent skills](https://agentskills.io) are portable sets of instructions, scripts, and resources that teach AI coding agents how to perform specific tasks. The new `gh skill` command makes it easy to discover, install, manage, and publish agent skills from GitHub repositories - right from the CLI.

```

# Discover skills
gh skill search copilot

# Preview a skill without installing
gh skill preview github/awesome-copilot documentation-writer

# Install a skill
gh skill install github/awesome-copilot documentation-writer

# Pin to a specific version
gh skill install github/awesome-copilot documentation-writer --pin v1.2.0

# Check installed skills for updates
gh skill update --all

# Validate and publish your own skills
gh skill publish --dry-run
```

Skills are automatically installed to the correct directory for your agent host. `gh skill` supports GitHub Copilot, Claude Code, Cursor, Codex, Gemini CLI, and Antigravity. Target a specific agent and scope with `--agent` and `--scope` flags.

`gh skill publish` validates skills against the [Agent Skills specification](https://agentskills.io/specification) and checks remote settings like tag protection and immutable releases to improve supply chain security.

Read the full announcement on the [GitHub Blog](https://github.blog/changelog/2026-04-16-manage-agent-skills-with-github-cli/).

`gh skill` is launching in public preview and is subject to change without notice.

#### Official extension suggestions

When you run a command that matches a known official extension that isn't installed (e.g. `gh stack`), the CLI now offers to install it instead of showing a generic "unknown command" error.

This feature is available for [github/gh-aw](https://github.com/github/gh-aw) and [github/gh-stack](https://github.com/github/gh-stack).

When possible, you'll be prompted to install immediately. When prompting isn't possible, the CLI prints the `gh extension install` command to run.

#### `gh extension install` no longer requires authentication

`gh extension install` previously required a valid auth token even though it only needs to download a public release asset. The auth check has been removed, so you can install extensions without being logged in.

#### What's Changed

##### ✨ Features

- Add `gh skill` command group: install, preview, search, update, publish by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13165](cli/cli#13165)
- Suggest and install official extensions for unknown commands by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13175](cli/cli#13175)
- `gh skill publish`: auto-push unpushed commits before publish by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13171](cli/cli#13171)
- Disable auth check for `gh extension install` by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13176](cli/cli#13176)

##### 🐛 Fixes

- Fix infinite loop in `gh release list --limit 0` by [@&#8203;Bahtya](https://github.com/Bahtya) in [#&#8203;13097](cli/cli#13097)
- Ensure `api` and `auth` commands record agentic invocations by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13046](cli/cli#13046)
- Disable auth check for local-only skill flags by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13173](cli/cli#13173)
- URL-encode parentPath in skills discovery API call by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13172](cli/cli#13172)
- Fix: use target directory remotes in skills publish by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13169](cli/cli#13169)
- Fix: preserve namespace in skills search deduplication by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13170](cli/cli#13170)

##### 📚 Docs & Chores

- docs: include PGP key fingerprints by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13112](cli/cli#13112)
- docs: add sha/md5 checksums of keyring files by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13150](cli/cli#13150)
- docs: fix SHA512 checksum for GPG key by [@&#8203;timsu92](https://github.com/timsu92) in [#&#8203;13157](cli/cli#13157)
- docs(skill): polish skill commandset docs by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13183](cli/cli#13183)
- Document dependency CVE policy in SECURITY.md by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13119](cli/cli#13119)
- Replace github.com/golang/snappy with klauspost/compress/snappy by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13048](cli/cli#13048)
- chore: bump to go1.26.2 by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13116](cli/cli#13116)
- chore: delete experimental script/debian-devel by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13127](cli/cli#13127)
- Suggest first party extensions by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13182](cli/cli#13182)
- Add cli/skill-reviewers as CODEOWNERS for skills packages by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13189](cli/cli#13189)
- Add [@&#8203;cli/code-reviewers](https://github.com/cli/code-reviewers) to all CODEOWNERS rules by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13190](cli/cli#13190)
- Address post-merge review feedback for skills commands by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13185](cli/cli#13185)
- Fix skills-publish-dry-run acceptance test error message mismatch by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13187](cli/cli#13187)
- Skills: replace real git in publish tests with CommandStubber by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13188](cli/cli#13188)
- Remove redundant nil-client fallback in skills publish by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13168](cli/cli#13168)
- Publish: use shared discovery logic instead of requiring skills/ directory by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13167](cli/cli#13167)

##### :dependabot: Dependencies

- chore(deps): bump github.com/klauspost/compress from 1.18.4 to 1.18.5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13071](cli/cli#13071)
- chore(deps): bump github.com/yuin/goldmark from 1.7.16 to 1.8.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13045](cli/cli#13045)
- chore(deps): bump charm.land/bubbles/v2 from 2.0.0 to 2.1.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13051](cli/cli#13051)
- chore(deps): bump github.com/sigstore/timestamp-authority/v2 from 2.0.3 to 2.0.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13152](cli/cli#13152)
- chore(deps): bump github.com/google/go-containerregistry from 0.21.3 to 0.21.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13129](cli/cli#13129)
- chore(deps): bump github.com/sigstore/protobuf-specs from 0.5.0 to 0.5.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13128](cli/cli#13128)
- chore(deps): bump github.com/in-toto/attestation from 1.1.2 to 1.2.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13044](cli/cli#13044)
- chore(deps): bump advanced-security/filter-sarif from 1.0.1 to 1.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;12918](cli/cli#12918)
- chore(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13076](cli/cli#13076)
- chore(deps): bump github.com/hashicorp/go-version from 1.8.0 to 1.9.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13065](cli/cli#13065)

#### New Contributors

- [@&#8203;thaJeztah](https://github.com/thaJeztah) made their first contribution in [#&#8203;13048](cli/cli#13048)
- [@&#8203;Bahtya](https://github.com/Bahtya) made their first contribution in [#&#8203;13097](cli/cli#13097)
- [@&#8203;timsu92](https://github.com/timsu92) made their first contribution in [#&#8203;13157](cli/cli#13157)
- [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) made their first contribution in [#&#8203;13173](cli/cli#13173)

**Full Changelog**: <cli/cli@v2.89.0...v2.90.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjMuNiIsInVwZGF0ZWRJblZlciI6IjQzLjEyMy42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
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.

4 participants