Update Fedora package forks to match the latest versions available through dnf. Use this skill when the user mentions "new Fedora updates", "Fedora updates", "Fedora package updates", or wants to sync their package forks with the latest dnf versions.
This skill automates updating Fedora package forks to match the latest versions
available through dnf. It uses checkout.sh — bundled in this skill's directory
alongside this SKILL.md — to branch off upstream tags, mark build sources, and
identify which forks require cherry-picking of customization commits.
Supported packages: libinput, kf6-kio, dolphin, aurorae, kscreenlocker, kwin, kdeplasma-addons, plasma-workspace, plasma-desktop.
checkout.shLocate checkout.sh in this skill's directory:
${CLAUDE_SKILL_DIR}/checkout.shcheckout.sh alongside this SKILL.md
file (e.g. ~/.copilot/skills/fedora-update/checkout.sh,
~/.claude/skills/fedora-update/checkout.sh, or
)~/.agents/skills/fedora-update/checkout.shDetermine the current working directory at the time the prompt was received.
Run the script, passing the current working directory with the -C option:
<path_to_checkout_sh> -C <current_working_directory>
Capture the complete stdout output of the script for use in the next step.
Scan the captured output for forks that require cherry-picking. The output is structured as one log block per fork:
⑂ Fork: <fork_directory>
📋 Checkout log:
━━━━━━━━━━━━━━━━━━━━ Log begin ━━━━━━━━━━━━━━━━━━━━
...
🍒 Cherry pick the following commits from <source_branch> (based on <upstream_tag>) for <project>:
<short_hash_1> <commit_subject_1>
<short_hash_2> <commit_subject_2>
...
━━━━━━━━━━━━━━━━━━━━ Log end ━━━━━━━━━━━━━━━━━━━━
A fork requires cherry-picking when its log block contains a line that starts with the 🍒 emoji.
For each such fork, extract:
⑂ Fork: <path> line in the
same log block🍒 Cherry pick the following commits from <source_branch> ...git log --oneline entry after the 🍒 line up to (but
not including) the ━━━... Log end ━━━ separator; each entry has the form
<short_hash> <subject>Note: The commit list is ordered newest-first (output of
git log <tag>..<branch>). Reverse the list before cherry-picking so that commits are applied in chronological order (oldest first).
Present the parsed results to the user:
Then ask: "Would you like to proceed with cherry-picking the above commits?"
Stop if the user does not confirm.
For each fork that requires cherry-picking, spawn a separate sub-agent, providing it with the per-fork context and the sub-agent instructions below. Sub-agents for different forks may run in parallel.
Fork directory : <fork_directory>
Source branch : <source_branch>
Commits to cherry-pick (oldest-first after reversing the list):
<oldest_hash> <oldest_subject>
...
<newest_hash> <newest_subject>
Navigate to the fork directory
cd <fork_directory>
Verify the directory exists and is a Git repository (git status). If not,
report an error and stop.
Reset the working tree to a clean state
git reset --hard HEAD
This ensures no leftover changes pollute the cherry-pick work.
Cherry-pick each commit sequentially (oldest first)
For each commit hash in the list:
git cherry-pick <commit_hash>
Resolve conflicts, if any
If git cherry-pick exits with a non-zero status due to conflicts:
a. Run git status to identify conflicting files.
b. For each conflicting file, attempt to resolve:
c. Stage all resolved files:
git add <resolved_file> ...
d. Continue the cherry-pick:
git cherry-pick --continue --no-edit
e. Record this commit hash in a conflicts list to include in the final report.
Abort on unresolvable conflicts
If a conflict cannot be resolved, abort the cherry-pick:
git cherry-pick --abort
Stop processing further commits for this fork and report:
Push to origin once all commits have been applied successfully:
git push origin HEAD
Report results back to the parent agent:
After all sub-agents complete, present a summary to the user: