Release workflow for QtPass - versioning, builds, publishing
64
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.opencode/skills/qtpass-releasing/SKILL.mdUpdate version in all build files:
qtpass.pri - VERSION = X.Y.Z (note: .pri not .pro, unquoted number)qtpass.spec - Version:qtpass.iss - AppVerName=Doxyfile - PROJECT_NUMBERdownloads.html (gh-pages) - multiple referencesindex.html (gh-pages)getting-started.html (gh-pages)changelog.html (gh-pages)changelog.1.4.html (gh-pages)old.html (gh-pages)NOTE: qtpass.appdata.xml and appdmg.json don't have version fields to update.
# Find version strings (replace X.Y with actual version)
grep -rn "X\.Y" qtpass.pri qtpass.spec qtpass.iss DoxyfileUpdate CHANGELOG.md:
# Run full test suite
make check# Create source tarball
./scripts/release-linux.sh
# Or manually:
git archive --prefix=qtpass-x.y.z/ -o qtpass-x.y.z.tar.gz HEAD./scripts/release-mac.sh# Via GitHub Actions or locally with Inno Setup
qtpass.issgit tag -a vX.Y.Z -m "QtPass vX.Y.Z Release"
git push origin vX.Y.Zgh release create vX.Y.Z \
--title "QtPass vX.Y.Z" \
--notes-file CHANGELOG.md \
qtpass-x.y.z.tar.gzUpdate version in HTML files on gh-pages branch:
git checkout gh-pages
# Update downloads.html (download links)
# Update index.html (main page)
# Update getting-started.html
# Update changelog.html (add new release notes + version)
# Update changelog.1.4.html, old.html (version only)
git add -A
git commit -m "Release vX.Y.Z"
git push origin gh-pagesCommon version search:
grep -rn "1\.5" *.htmlFollow semantic versioning: MAJOR.MINOR.PATCH
| Platform | Output |
|---|---|
| Linux | qtpass-x.y.z.tar.gz |
| macOS | QtPass-x.y.z.dmg |
| Windows | QtPass-Setup-x.y.z.exe |
Release workflow via GitHub Actions: .github/workflows/release-installers.yml
See qtpass-linting skill for full CI workflow. Pattern:
# Run linter locally BEFORE pushing
act push -W .github/workflows/linter.yml -j buildmain is protected - cannot push directly. Must create PR from a release branch:
# Create release branch
git checkout -b release/vX.Y.Z
# Make changes, commit
git add -A
git commit -m "Release vX.Y.Z"
# Update with latest main before pushing
git fetch upstream
git rebase upstream/main
# Push branch (force-with-lease since we rebased)
git push origin release/vX.Y.Z --force-with-lease
# Create PR
gh pr create --base main --head release/vX.Y.Z --title "Release vX.Y.Z"For scripts that modify remote state (uploading releases, signing files), add a --dryrun flag to enable testing without making changes:
# Parse arguments at the start
dryrun=false
while [ $# -gt 0 ]; do
case "$1" in
--dryrun)
dryrun=true
shift
;;
*)
break
;;
esac
done
# Use in conditional
if [ "$dryrun" = true ]; then
echo "[dryrun] Would upload files: ${files[*]}"
else
gh release upload ...
fiWhen iterating over files matched by a glob pattern, use array assignment to handle the case where no files match:
# Without nullglob, loops over literal "*" when no files exist
for file in *; do
[ -f "$file" ] || continue
# With array assignment, iterates over empty array when no files
files=(*)
for file in "${files[@]}"; do
[ -f "$file" ] || continue04899e4
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.