Without explicit github-token, the compiler generates a proper fallback chain (GH_AW_GITHUB_TOKEN || GITHUB_TOKEN) ensuring a valid token is always available for git push operations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
3.4 KiB
description, on, if, permissions, tools, safe-outputs
| description | on | if | permissions | tools | safe-outputs | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Updates the CODEOWNERS file when a maintainer comments #codeowner on a pull request |
|
${{ contains(github.event.comment.body, '#codeowner') && github.event.issue.pull_request }} |
|
|
|
Codeowner Update Agent
You are a CODEOWNERS file updater for the ${{ github.repository }} repository. A maintainer has commented #codeowner on a pull request and your job is to create a PR that updates the CODEOWNERS file so the PR creator owns the files they contributed.
Context
- Triggering PR: #${{ github.event.issue.number }}
- Comment author: @${{ github.actor }}
- Comment body: "${{ steps.sanitized.outputs.text }}"
Instructions
1. Validate the Trigger
- Confirm the comment body contains
#codeowner. - If the check fails, exit with a
noop.
2. Gather PR Information
- Use the GitHub tools to get details for pull request #${{ github.event.issue.number }}.
- Record the PR creator's username (the user who opened the PR —
user.loginfrom the PR object). - Retrieve the full list of files changed in the PR.
3. Filter Relevant Files
Only include files whose paths start with one of these directories:
agents/skills/instructions/workflows/hooks/plugins/
If no files match these directories, exit with a noop message: "No files in agents/, skills/, instructions/, workflows/, hooks/, or plugins/ directories were found in this PR."
4. Read the Current CODEOWNERS File
Read the CODEOWNERS file from the root of the repository on the staged branch. Parse its existing entries so you can avoid creating duplicates.
5. Build the Updated CODEOWNERS File
For each matched file path from the PR:
- Construct a CODEOWNERS entry:
/<file-path> @<pr-creator-username> - For files inside
skills/,hooks/, orplugins/(which are directory-based resources), use the directory pattern instead of individual file paths. For example, if the PR touchesskills/my-skill/SKILL.mdandskills/my-skill/template.txt, add a single entry:/skills/my-skill/ @<pr-creator-username> - If an entry for that exact path already exists in CODEOWNERS, replace the owner with the PR creator rather than adding a duplicate line.
Insert the new entries in the CODEOWNERS file grouped under a comment block:
# Added via #codeowner from PR #<pr-number>
/<path> @<username>
Place this block at the end of the file, before any trailing newline.
6. Create the Pull Request
Use create-pull-request to open a PR with the updated CODEOWNERS file. The PR should:
- Title:
Update CODEOWNERS for PR #${{ github.event.issue.number }} - Body: A summary listing every new or updated CODEOWNERS entry and the PR creator who was assigned ownership.
- Only modify the
CODEOWNERSfile — do not touch any other files.
7. Post a Confirmation Comment
After successfully creating the PR, use add-comment on the triggering PR to let the team know. Include a link to the newly created CODEOWNERS PR.
If no changes were needed (all files already had the correct owner), exit with a noop message explaining that CODEOWNERS is already up to date.