Agent skill
upload-release-assets
Upload firmware hex files and configurator packages to GitHub releases
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/upload-release-assets
SKILL.md
Upload Release Assets
Upload files/artifacts/assets to a GitHub release.
Usage
Invoke this skill when you need to upload firmware hex files or configurator packages to a GitHub release.
Parameters
When invoking this skill, provide:
- repo: The repository (e.g.,
iNavFlight/inavoriNavFlight/inav-configurator) - tag: The release tag (e.g.,
9.0.0-RC2) - source_dir: Directory containing files to upload
Procedure
- Navigate to the source directory:
bash
cd {source_dir}
- Rename files if needed (firmware only):
Files from nightly builds have CI suffixes that must be removed before upload.
bash
# For RC releases (e.g., 9.0.0-RC2):
# Changes: inav_9.0.0_ZEEZF7_ci-20251129-0e9f842.hex -> inav_9.0.0_RC2_ZEEZF7.hex
RC_NUM="RC2" # Set to empty string for final releases
for f in *_ci-*.hex 2>/dev/null; do
[ -e "$f" ] || continue # Skip if no matches
target=$(echo "$f" | sed -E 's/inav_[0-9]+\.[0-9]+\.[0-9]+_(.*)_ci-.*/\1/')
version=$(echo "$f" | sed -E 's/inav_([0-9]+\.[0-9]+\.[0-9]+)_.*/\1/')
if [ -n "$RC_NUM" ]; then
newname="inav_${version}_${RC_NUM}_${target}.hex"
else
newname="inav_${version}_${target}.hex"
fi
mv "$f" "$newname"
done
Expected file name formats after renaming:
- RC release:
inav_9.0.0_RC2_MATEKF405.hex - Final release:
inav_9.0.0_MATEKF405.hex
- Count files to upload:
bash
ls -1 | wc -l
- Upload all files to the release:
bash
gh release upload {tag} * --repo {repo}
Or for specific file types:
bash
# Hex files only
gh release upload {tag} *.hex --repo {repo}
# Configurator packages
gh release upload {tag} *.deb *.rpm *.zip *.dmg *.msi --repo {repo}
- Verify upload:
bash
gh release view {tag} --repo {repo} --json assets --jq '.assets | length'
Notes
- The
gh release uploadcommand works for both draft and published releases - If a file with the same name already exists, the upload will fail unless you use
--clobber - For large uploads (200+ files), this may take several minutes
- Upload progress is not shown; wait for the command to complete
- Firmware: Source directory should be FLAT (no subdirectories)
- Configurator: Source directory should have platform subdirectories (linux/, macos/, windows/)
Examples
Upload firmware hex files
bash
cd claude/release-manager/downloads/firmware-9.0.0-rc2
gh release upload 9.0.0-RC2 *.hex --repo iNavFlight/inav
Upload configurator packages (BY PLATFORM)
IMPORTANT: Configurator artifacts are organized by platform. Upload each platform separately.
bash
cd claude/release-manager/downloads/configurator-9.0.0-rc2
# Upload Linux packages
gh release upload 9.0.0-RC2 linux/* --repo iNavFlight/inav-configurator
# Upload macOS packages
gh release upload 9.0.0-RC2 macos/* --repo iNavFlight/inav-configurator
# Upload Windows packages
gh release upload 9.0.0-RC2 windows/* --repo iNavFlight/inav-configurator
Overwrite existing files
bash
gh release upload 9.0.0-RC2 *.hex --repo iNavFlight/inav --clobber
Typical Workflow
- Clear existing assets (see
remove-release-assetsskill) - Upload new assets using this skill
- Verify the count matches expected files
Related Skills
- download-release-artifacts - Download artifacts before uploading
- remove-release-assets - Remove old assets before uploading new ones
Didn't find tool you were looking for?