Skip to content

feat(copilot-skills)!: drop lockfile, lean on gh skill frontmatter#95

Merged
botantler[bot] merged 3 commits intomainfrom
devantler/lean-into-gh-skill-frontmatter
Apr 19, 2026
Merged

feat(copilot-skills)!: drop lockfile, lean on gh skill frontmatter#95
botantler[bot] merged 3 commits intomainfrom
devantler/lean-into-gh-skill-frontmatter

Conversation

@devantler
Copy link
Copy Markdown
Contributor

Replace the skills-lock.json-driven flow with a thin wrapper around gh skill install / gh skill update --all. Each installed SKILL.md now self-describes its upstream via the metadata.github-* frontmatter that gh skill install injects natively — no sidecar manifest required.

Type of change

  • 🚀 New feature
  • 🧹 Refactor
  • ⛓️‍💥 Breaking change
  • 📚 Documentation update

What changed

setup-copilot-skills

  • Inputs consolidated onto a single skills list — newline-separated <owner/repo> <skill>[@pin] entries so consumers can mix upstreams freely. # comments and blank lines are allowed.
  • skills-lock, source, and the old skills-means-names-from-one-source input are removed.
  • jq dependency dropped.
  • Per-line @<tag|branch|sha> pins map to gh skill install --pin; reproducible installs work without a lockfile.

update-copilot-skills

  • Implementation replaced with gh skill update --all --dir <dir>; the CLI edits installed SKILL.md files in place.
  • New dir, dry-run, and unpin inputs; skills-lock input removed.
  • changed output computed from SKILL.md content hashes before/after the run, so the action works regardless of whether the caller is in a git workspace.

Both READMEs gain a Migrating from v1 section with a before/after snippet, and the root README.md action list is refreshed.

Breaking change

setup-copilot-skills and update-copilot-skills both remove the skills-lock input; setup-copilot-skills also removes the source input and redefines skills as the sole list input. Consumers should delete any skills-lock.json and move each entry onto its own <owner/repo> <skill> line in setup-copilot-skills.with.skills. Companion PRs in devantler-tech/skills, devantler-tech/reusable-workflows, devantler-tech/ksail, and devantler-tech/platform migrate the upstream-index repo, reusable workflow, and downstream consumers to match.

`gh skill install` now records upstream provenance in each installed
SKILL.md's `metadata.github-*` frontmatter, and `gh skill update`
reads that to detect drift — so a sidecar skills-lock.json is
redundant.

setup-copilot-skills:
- Replace `skills-lock` / `source` / `skills` inputs with a single
  `skills` input: newline list of `<owner/repo> <skill>[@pin]` entries,
  so consumers can mix upstreams freely.
- Drop the jq dependency.
- Pin per line via `@<tag|branch|sha>`; reproducible installs no longer
  need a lockfile.

update-copilot-skills:
- Replace the gh-api ref-resolution loop with `gh skill update --all
  --dir <dir>`; the CLI edits installed SKILL.md files in place.
- New `dry-run`, `unpin`, `dir` inputs; drop `skills-lock`.
- `changed` output computed from SKILL.md content hashes before/after,
  so git is not required in the caller's environment.

Both READMEs gain a "Migrating from v1" section showing the diff.

BREAKING CHANGE: `setup-copilot-skills` and `update-copilot-skills` both
remove the `skills-lock` input; `setup-copilot-skills` also removes the
`source` input and redefines `skills` as the sole list input. Delete any
skills-lock.json and move each entry onto its own `<owner/repo> <skill>`
line in `setup-copilot-skills.with.skills`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 19, 2026 16:02
@botantler botantler Bot enabled auto-merge (squash) April 19, 2026 16:02
Copy link
Copy Markdown

Copilot AI left a comment

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 refactors the Copilot skills actions to remove the skills-lock.json workflow and instead rely on the upstream provenance frontmatter that gh skill install injects into each installed SKILL.md. Updates are delegated to gh skill update --all, and both actions’ inputs/outputs and documentation are updated accordingly.

Changes:

  • Replace update-copilot-skills lockfile pinning logic with gh skill update --all --dir <dir> plus before/after content hashing to compute changed.
  • Simplify setup-copilot-skills to a single required newline-separated skills list (<owner/repo> <skill>[@pin]) supporting comments and blanks.
  • Update READMEs and root action list, including “Migrating from v1” guidance.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
update-copilot-skills/action.yaml Switches implementation to gh skill update, adds dir/dry-run/unpin, and computes changed via SKILL.md hashing.
update-copilot-skills/README.md Updates docs for new behavior/inputs/outputs and adds v1→v2 migration section.
setup-copilot-skills/action.yaml Removes lockfile/source modes; parses a unified <owner/repo> <skill>[@pin] list and installs via gh skill install.
setup-copilot-skills/README.md Documents new unified input format and adds migration notes.
README.md Updates action catalog descriptions to reflect the new v2 behavior.

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

Comment thread update-copilot-skills/action.yaml Outdated
Comment thread setup-copilot-skills/action.yaml Outdated
devantler added a commit to devantler-tech/ksail that referenced this pull request Apr 19, 2026
Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json` + remove its mega-linter exclusions.
- Reinstall 15 skills from upstream via `gh skill install <owner/repo> <path>
  --agent github-copilot --scope project --dir .agents/skills`.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. Tooling that reads it
must now discover skills under `.agents/skills/` instead.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
devantler added a commit to devantler-tech/platform that referenced this pull request Apr 19, 2026
Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json`.
- Reinstall 11 of 12 skills from upstream via
  `gh skill install <owner/repo> <path> --agent github-copilot
   --scope project --dir .agents/skills`.
- `siderolabs/docs` is not re-installed: the upstream ships
  `public/skill.md` (lowercase) which `gh skill install` rejects
  (it only recognises `SKILL.md`). Tracking upstream for a fix —
  until then, manage that skill out-of-band or drop it.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. The `siderolabs`
skill is temporarily unavailable pending an upstream rename to
`SKILL.md`.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Rewrite `test-setup-copilot-skills.yaml` to exercise the new flat
  `skills: <owner/repo> <skill>[@pin]` input (inline, pinned,
  missing-input, malformed-line cases).
- Rewrite `test-update-copilot-skills.yaml` to seed a pinned install
  and assert `gh skill update --all` is a no-op, that `--dry-run`
  does not mutate SKILL.md, and that a missing `dir` fails.
- `setup-copilot-skills/action.yaml`: require exactly two
  whitespace-separated tokens per line (reject silent extra tokens).
- `update-copilot-skills/action.yaml`: fail fast when `shasum` is
  missing and drop the `|| true` swallow so hashing errors surface.

Addresses review threads on PR #95.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The whitespace-only guard accepted inputs that consisted entirely of
`#` comment lines, letting the action "succeed" without installing
anything. Track whether any entry was actually processed and fail
with a clear message when none were.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 19, 2026 16:19
github-merge-queue Bot pushed a commit to devantler-tech/platform that referenced this pull request Apr 19, 2026
)

* refactor(skills)!: reinstall from upstreams, drop skills-lock.json

Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json`.
- Reinstall 11 of 12 skills from upstream via
  `gh skill install <owner/repo> <path> --agent github-copilot
   --scope project --dir .agents/skills`.
- `siderolabs/docs` is not re-installed: the upstream ships
  `public/skill.md` (lowercase) which `gh skill install` rejects
  (it only recognises `SKILL.md`). Tracking upstream for a fix —
  until then, manage that skill out-of-band or drop it.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. The `siderolabs`
skill is temporarily unavailable pending an upstream rename to
`SKILL.md`.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(update-skills): pin to merged reusable-workflows commit on main

The previous PR-head SHA was unreachable from the default branch after
reusable-workflows#207 squash-merged, triggering zizmor's
"commit with no history in referenced repository" alert. Repoint at
the merge commit on `main`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@botantler botantler Bot merged commit 7906319 into main Apr 19, 2026
43 checks passed
@botantler botantler Bot deleted the devantler/lean-into-gh-skill-frontmatter branch April 19, 2026 16:20
@botantler
Copy link
Copy Markdown

botantler Bot commented Apr 19, 2026

🎉 This PR is included in version 3.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@botantler botantler Bot added the released label Apr 19, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.


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

Comment on lines +146 to +148
cleaned=$(sed -e 's/\r/\n/g' -e 's/\x1B\[[0-9;]*[a-zA-Z]//g' "$out" \
| grep -vE '^Checking .* installed skill' \
| sed '/^$/d')
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

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

The cleaned=$( ... | grep -vE ... | ... ) pipeline can cause the action to fail on no-op runs. With set -euo pipefail, grep -vE exits with status 1 when it filters out all lines (i.e., no output), which will terminate the step even though this is a valid “nothing to report” case. Make the filtering pipeline tolerant of empty output (e.g., ignore grep’s 1 exit code or restructure to avoid relying on grep’s exit status).

Suggested change
cleaned=$(sed -e 's/\r/\n/g' -e 's/\x1B\[[0-9;]*[a-zA-Z]//g' "$out" \
| grep -vE '^Checking .* installed skill' \
| sed '/^$/d')
cleaned=$(sed \
-e 's/\r/\n/g' \
-e 's/\x1B\[[0-9;]*[a-zA-Z]//g' \
-e '/^Checking .* installed skill/d' \
-e '/^$/d' \
"$out")

Copilot uses AI. Check for mistakes.
Comment on lines +123 to +125
find "$INPUT_DIR" -type f -name SKILL.md -print0 \
| sort -z \
| xargs -0 -r shasum -a 256 >"$before"
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

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

The checksum snapshot uses sort -z and xargs -0 -r, which are not consistently available across BSD userlands (notably on macOS) even though this repo runs macos-latest in CI. Consider switching to a more portable approach (e.g., iterate find -print0 results in a while read -d '' loop and avoid sort -z/xargs -r), and apply it in both the before/after snapshots.

Copilot uses AI. Check for mistakes.
| `changed` | `true` when the lockfile was modified, `false` otherwise |
| `updated-skills` | Newline-separated list of `name old-digest -> new-digest` lines for skills whose pins changed |
| `changed` | `true` when at least one `SKILL.md` was modified, `false` otherwise |
| `updated-skills` | Cleaned stdout from `gh skill update --all` (blank when nothing changed) |
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

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

The README says updated-skills is “blank when nothing changed”, but the action always writes this output and will emit at least a newline even when there is no cleaned stdout. Either adjust the implementation to only set updated-skills when there is meaningful content, or relax the documentation so consumers don’t rely on it being empty on no-op runs.

Suggested change
| `updated-skills` | Cleaned stdout from `gh skill update --all` (blank when nothing changed) |
| `updated-skills` | Cleaned stdout from `gh skill update --all`; do not rely on this output being empty on no-op runs |

Copilot uses AI. Check for mistakes.
github-merge-queue Bot pushed a commit to devantler-tech/ksail that referenced this pull request Apr 19, 2026
)

* refactor(skills)!: reinstall from upstreams, drop skills-lock.json

Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json` + remove its mega-linter exclusions.
- Reinstall 15 skills from upstream via `gh skill install <owner/repo> <path>
  --agent github-copilot --scope project --dir .agents/skills`.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. Tooling that reads it
must now discover skills under `.agents/skills/` instead.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(update-skills): pin to merged reusable-workflows commit on main

The previous PR-head SHA was unreachable from the default branch after
reusable-workflows#207 squash-merged, triggering zizmor's
"commit with no history in referenced repository" alert. Repoint at
the merge commit on `main`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
github-merge-queue Bot pushed a commit to devantler-tech/ksail that referenced this pull request Apr 19, 2026
)

* refactor(skills)!: reinstall from upstreams, drop skills-lock.json

Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json` + remove its mega-linter exclusions.
- Reinstall 15 skills from upstream via `gh skill install <owner/repo> <path>
  --agent github-copilot --scope project --dir .agents/skills`.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. Tooling that reads it
must now discover skills under `.agents/skills/` instead.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(update-skills): pin to merged reusable-workflows commit on main

The previous PR-head SHA was unreachable from the default branch after
reusable-workflows#207 squash-merged, triggering zizmor's
"commit with no history in referenced repository" alert. Repoint at
the merge commit on `main`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
github-merge-queue Bot pushed a commit to devantler-tech/ksail that referenced this pull request Apr 19, 2026
)

* refactor(skills)!: reinstall from upstreams, drop skills-lock.json

Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json` + remove its mega-linter exclusions.
- Reinstall 15 skills from upstream via `gh skill install <owner/repo> <path>
  --agent github-copilot --scope project --dir .agents/skills`.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. Tooling that reads it
must now discover skills under `.agents/skills/` instead.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(update-skills): pin to merged reusable-workflows commit on main

The previous PR-head SHA was unreachable from the default branch after
reusable-workflows#207 squash-merged, triggering zizmor's
"commit with no history in referenced repository" alert. Repoint at
the merge commit on `main`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
devantler added a commit to devantler-tech/ksail that referenced this pull request Apr 20, 2026
)

* refactor(skills)!: reinstall from upstreams, drop skills-lock.json

Re-install each agent skill from its original upstream repo via
`gh skill install`, so every installed SKILL.md now carries
`metadata.github-*` frontmatter pointing at the true origin instead
of `devantler-tech/skills`. `gh skill update --all` reads that
metadata directly, making the sidecar `skills-lock.json` redundant.

- Delete `skills-lock.json` + remove its mega-linter exclusions.
- Reinstall 15 skills from upstream via `gh skill install <owner/repo> <path>
  --agent github-copilot --scope project --dir .agents/skills`.
- Bump `update-skills.yaml` to pin the refreshed reusable workflow and
  swap `skills-lock` for the new `dir` input.

BREAKING CHANGE: `skills-lock.json` is removed. Tooling that reads it
must now discover skills under `.agents/skills/` instead.

Refs: devantler-tech/skills#16, devantler-tech/actions#95,
devantler-tech/reusable-workflows#207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(update-skills): pin to merged reusable-workflows commit on main

The previous PR-head SHA was unreachable from the default branch after
reusable-workflows#207 squash-merged, triggering zizmor's
"commit with no history in referenced repository" alert. Repoint at
the merge commit on `main`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants