You ask GitHub Copilot to create an Actions workflow. It produces a plausible uses: line, but the version it selected is long out of date. You correct it, and then you see the same problem with the next workflow. The model learned from older data – it knows facts from an earlier time. However, GitHub Actions repositories continue to evolve. This means relying solely on the model’s knowledge will often result in outdated references. So, you need to teach it how to identify and use the correct versions.
You could add a long reminder to your repository instructions. That makes every task carry an operational rule that applies only to workflow edits. A better fit is an Agent Skill: a small, on-demand procedure that tells Copilot when to check and how to use the result. If skills are new to you, A Chef’s Guide to Customizing GitHub Copilot explains why they work well for focused, repeatable processes.
In this post, you’ll see a process for creating a more efficient skill that can help you keep your Actions up to date.
Start with a focused investigation
A prompt like “always use the latest Action” leaves several important questions unanswered. Does “latest” include prereleases? Should the workflow use a movable tag such as v4, use a more precise tag like v4.1.3, or point to an immutable SHA reference? What happens when an Action has no GitHub release – should it use the main branch? Should Copilot silently adopt a major version if it is available?
A large language model can’t infer your preferences and policies unless you tell it. Be specific about what you want for the best results.
1Create a skill that finds the latest stable release for
2third-party GitHub Actions used in workflow YAML. Research the authoritative GitHub
3repository. Identify the version used in the workflow, then determine whether there is a newer
4minor or patch version that is at least three days old. Use that to update the Action
5to the associated SHA reference. Include a comment with the version number. If there is
6a major version available, notify the user but do not update the workflow.Copilot is likely to create a skill that:
- Uses GitHub’s
releases/latestendpoint to find the publisher’s latest published release. It excludes draft and prerelease releases and sorts by the release target commit’s creation time. That endpoint does not promise the highest semantic version or compatibility with your workflow. - Resolve the release tag to a full-length commit SHA (Secure Hash Algorithm) value. For repositories that cannot use dependency lockfiles, GitHub recommends pinning Actions to full-length commit SHAs. Tags can move, so a SHA provides a more stable reference. GitHub’s secure-use guidance explains the tradeoff.
- Keep the readable release tag in a comment beside the SHA, such as
# v4.2.2, so a reviewer can see what they are approving. - Stop if the repository is inaccessible, has no published stable release, or has an update that is too new. This limits the checker to Actions with published releases, so it won’t invent an unverified version.
- Treat a major-version change as a review decision, not an automatic edit.
The more details you give Copilot about your preferred approach, the more likely it is to follow it.
Make it predictable
The first skill works, but it asks the model to reason through a process and reproduce many steps every time it runs. The agent must determine which commands to run to perform the update. Reconstructing those steps on every run makes the process less predictable and harder to test.
Now give a second subagent the first design and a different goal:
1Simplify this SKILL.md to use a script that accepts an array of
2external Action paths in the form owner/repo@version or owner/repo/folder/path@version.
3Keep the existing policy: only update to a minor or patch release that is at least three
4days old, and report major-version updates without applying them.
5For each Action, the script must resolve an updated reference when available and
6return it with the complete Action path.
7The script should then replace each existing Actions reference with its corresponding
8updated reference.The first agent focused on one task – reasoning through the steps and process for updating Action versions. This agent also focuses on one task – converting the steps from the original skill into a script that deterministically achieves the same results. In most cases, Copilot will go a step further and create appropriate unit tests beside the script.
By moving the logic from non-deterministic statements to a deterministic script, you’ve made it reproducible and predictable. The model’s reasoning only becomes necessary for more advanced cases, like correcting the workflow to handle changes after a major version update. Any unit tests help ensure that as you fine-tune the process, you don’t introduce unexpected behavior.
Fine-tuning the skill
With this in place, you can continue to refine the script and the process. A clear skill name and description can help the model recognize when to use it while writing a workflow. Alternatively, you could migrate the process into a deterministic, non-AI check for a pull request or local development flow.
A dependable process
The next time Copilot suggests an old Action, you do not need to argue with its memory or paste a current version into a prompt. Just make sure you have a skill that teaches Copilot how to create better Actions workflows and apply your policies.
That is the real benefit of this pattern. You are not trying to make the model reason through the same approach from scratch each time. You are giving it a small, testable procedure that helps it follow your rules consistently. A short skill plus a deterministic script can provide clearer guidance than a growing document full of conditional instructions.
