.ai/skills/publish-release/SKILL.md
Orchestrate XerahS release flow in strict order: run maintenance prep first, update-changelog second (optional only if docs/CHANGELOG.md is intentionally absent), verify build, bump/commit/push/tag while syncing Chocolatey version metadata, monitor GitHub Actions every 2 minutes, ensure standard release notes content, then set pre-release by default (use explicit opt-out for stable). On failures, inspect logs, fix root cause, and retry with the next patch release.
npx skillsauth add sharex/xerahs publish-releaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill to run release steps in strict order:
git pull --recurse-submodules and git submodule update --init --recursive).ai/skills/update-changelog/SKILL.md second (optional only if docs/CHANGELOG.md is intentionally absent)Step 3 performs:
dotnet build src/desktop/XerahS.sln; do not proceed if build fails.x/y/z bump type (major/minor/patch) unless specified.Directory.Build.props file that defines <Version>.build/windows/chocolatey/xerahs.nuspec <version> with the release version.vX.Y.Z.Step 4-5 performs:
Release Build (All Platforms).Step 6 performs:
Change log:https://xerahs.com/changelog.html### macOS Troubleshooting ("App is damaged") section with Gatekeeper xattr -cr guidance.xerahs.X.Y.Z.nupkg to the GitHub release.build/windows/chocolatey/Sync-ChocolateyPackage.ps1 -Version X.Y.Z remains the manual recovery path for re-syncing checksums or repacking.XerahS-X.Y.Z-win-x64.exe, XerahS-X.Y.Z-win-x64.msi, XerahS-X.Y.Z-win-arm64.exe, XerahS-X.Y.Z-win-arm64.msi.From repository root:
./.ai/skills/publish-release/scripts/run-release-sequence.sh
Automated monitor + default pre-release (recommended):
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --monitor --set-prerelease --bump z --yes
Stable release opt-out example:
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --monitor --no-prerelease --bump z --yes
Manual monitor (fallback, PowerShell example):
gh run list --limit 10 --json databaseId,workflowName,headBranch,status,conclusion,url
Start-Sleep -Seconds 120
gh run view <run-id> --json status,conclusion,jobs,url
Patch bump, no prompts:
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --bump z --yes
Patch bump with built-in 2-minute monitoring:
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --monitor --monitor-interval 120 --bump z --yes
Minor bump with custom commit token/summary:
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --bump y --type CI --summary "Prepare release artifacts" --yes
Preview only:
./.ai/skills/publish-release/scripts/run-release-sequence.sh --assume-changelog-done --bump z --dry-run --yes
On environments where bash is not in PATH, execute the sequence manually:
Step 1 - Maintenance
git pull --recurse-submodulesgit submodule update --init --recursiveStep 2 - Changelog
.ai/skills/update-changelog/SKILL.md.docs/CHANGELOG.md is intentionally absent or the user confirms skip.Step 3 - Bump, commit, push, tag
dotnet build src/desktop/XerahS.sln; abort if it fails.Directory.Build.props.Z+1, minor Y+1.0, major X+1.0.0.v<new-version> does not exist locally or on origin.if (git rev-parse <tag>)):
git show-ref --verify --quiet "refs/tags/v<new-version>"if ($LASTEXITCODE -eq 0) { throw "Local tag exists" }git ls-remote --exit-code --tags origin "refs/tags/v<new-version>" *> $nullif ($LASTEXITCODE -eq 0) { throw "Remote tag exists" }--no-bump: if v<current-version> already exists, do not try to recreate it. Use --no-tag for commit-only flow, or bump patch for a new tag.Directory.Build.props files containing <Version>.build/windows/chocolatey/xerahs.nuspec <version> to match.git add -A -> git commit -m "[v<new-version>] [CI] Release v<new-version>" -> git push origin <current-branch> -> git tag -a v<new-version> -m "v<new-version>" -> git push origin v<new-version>.Step 4 - Monitor every 2 minutes
gh run list --limit 10 --json databaseId,workflowName,headBranch,status,conclusion,urlStart-Sleep -Seconds 120; then gh run view <run-id> --json status,conclusion,jobs,urlStep 5 - On failure, fix and retry
gh run view <run-id> --job <job-id> --logdotnet build src/desktop/XerahS.sln.Step 6 - Ensure standard release notes content
gh release view v<new-version> --json bodygh release edit v<new-version> --notes-file <file>-win-x64.exe, -win-x64.msi, -win-arm64.exe, -win-arm64.msi) plus macOS and Linux assets.Step 7 - Set pre-release (default behavior)
gh release edit v<new-version> --prereleasegh release view v<new-version> --json isPrerelease,url,assetsOptional post-release Chocolatey maintenance
xerahs.<new-version>.nupkg.powershell -File build/windows/chocolatey/Sync-ChocolateyPackage.ps1 -Version <new-version> -Packpowershell -File build/windows/chocolatey/Test-ChocolateyPackage.ps1 -Version <new-version> -SourceDirectory dist\chocolateypowershell -File build/windows/chocolatey/Sync-ChocolateyPackage.ps1 -Version <new-version> -Pack -Push -ApiKey <key>Default bump when unspecified: patch (z). Default commit type token: CI.
run-maintenance first.
--skip-maintenance (or legacy alias --assume-maintenance-done).update-changelog second (skip only if docs/CHANGELOG.md is intentionally absent or user confirms).dotnet build src/desktop/XerahS.sln; abort on failure.scripts/bump-version-commit-tag.sh (or PowerShell/manual equivalent when bash unavailable).--skip-maintenance).X.Y.Z.git show-ref --verify --quiet "refs/tags/<tag>" and git ls-remote --exit-code --tags with $LASTEXITCODE checks for tag existence.--no-push and --no-tag when partial flow is needed.When executing this skill:
z) when unspecified.Default pre-release policy: unless explicitly instructed otherwise, keep --set-prerelease enabled. Use --no-prerelease only for intentional stable publishes.
if (git rev-parse <tag>) for local tag existence checks; use git show-ref --verify --quiet refs/tags/<tag> and inspect $LASTEXITCODE.docs/CHANGELOG.md is intentionally absent unless user requires it.Directory.Build.props with <Version> and sync build/windows/chocolatey/xerahs.nuspec.XerahS-X.Y.Z-win-x64.exe, XerahS-X.Y.Z-win-x64.msi, XerahS-X.Y.Z-win-arm64.exe, XerahS-X.Y.Z-win-arm64.msi. The EXE is built by Inno Setup; the MSI is built by WiX Toolset v4 (build/windows/XerahS-setup.wxs). Both are produced by build/windows/package-windows.ps1 in the same loop iteration.dotnet tool install --global wix + wix extension add --global WixToolset.UI.wixext. The release-build-all-platforms.yml workflow installs WiX automatically in the build-windows job. For local MSI builds: install WiX first; if not present the script emits a warning and skips MSI.%LocalAppData%\Programs\XerahS\; Plugins → %USERPROFILE%\Documents\XerahS\Plugins\; Start Menu shortcut created automatically.InstallerType: nullsoft (EXE) and InstallerType: wix (MSI) entries must be included for each architecture when submitting to winget-pkgs. See build/windows/winget/manifests/0.16.0/ShareX.XerahS.yaml as the template.build/windows/chocolatey/tools/chocolateyInstall.ps1 resolves XerahS-<version>-win-x64.exe or XerahS-<version>-win-arm64.exe from ChocolateyPackageVersion, so release bumps should not hardcode installer filenames there.build/windows/chocolatey/Sync-ChocolateyPackage.ps1 remains the manual fallback.testing
Reference for writing effective XerahS Improvement Proposals (XIPs), including structure, templates, review checks, and implementation patterns. Use sync-xips for creating, editing, and syncing XIP GitHub issues and local backups.
documentation
Rules and workflows for updating docs/CHANGELOG.md, including version grouping, consolidation, and commit-entry attribution.
testing
Create and maintain XerahS Improvement Proposals (XIPs) with GitHub as source of truth and docs/proposals/xip folder as backup. Use when creating or editing XIPs, syncing XIPs between GitHub issues and the docs/proposals/xip folder, or when the user mentions XIP, GitHub issues for XIP, or local XIP files.
documentation
Repository maintenance preparation for XerahS. Use before release or changelog work to sync repositories, inspect submodule state, identify version/changelog needs, and hand off commit/push/version rules to git-workflow.