Publish and finalize NuGet packages and GitHub releases.
Install
mkdir -p .claude/skills/release-publish && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2987" && unzip -o skill.zip -d .claude/skills/release-publish && rm skill.zipInstalls to .claude/skills/release-publish
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Publish SkiaSharp packages and finalize the release. Use when user says "publish X", "finalize X", "tag X", or "finish release X". This is the FINAL step - after release-testing passes. Publishes to NuGet.org, creates tag, GitHub release, and closes milestone. Triggers: "publish the release", "push to nuget", "create github release", "tag the release", "close the milestone", "annotate release notes", "testing passed what's next", "finalize 3.119.2", "release is ready".Key capabilities
- →Publish packages to NuGet.org
- →Create and push git tags
- →Generate GitHub releases
- →Close version-specific milestones
How it works
It executes a multi-step pipeline to publish packages, tag the repository, update release notes, and close milestones.
Inputs & outputs
When to use release-publish
- →Publish package to NuGet
- →Finalize the release process
- →Create a git tag and release
About this skill
Release Publish
Use this skill for two separate chat requests: "push the packages" queues the MAUI publication pipeline; "finish the release" dispatches the SkiaSharp Finish workflow after the packages are public. Neither runs automatically after Prepare, Build/Tests, or the other operation.
Push the packages
Before triggering:
- Run
audit-release-state.ps1 -Version A.B -Jsonfor the requestedrelease/<identity>. Require its exact-tipskiasharp-package (1642)build to have succeeded with one BAR, and the resource-triggeredskiasharp-tests (1630)run to have succeeded for the same branch, commit and build number with a matchingtriggerInfo.pipelineId. Anyrelease-testingapproval must match the BAR. Use that SkiaSharp commit, not the maintenance tip or mono/skia SHA. - Check the complete public package set and existing
dotnet-maui-release (1445)runs for that commit (templateParameters.commitHash). Monitor an existing run instead of queueing another; if fully public, verify provenance and use the Finish path only on a separate request. Stop on mismatched evidence. - Require the
dotnet-maui-release (1445)pipeline to default torefs/heads/mainand the internal MAUI mirror to contain the merged SkiaSharp release support. Wait if the mirror is behind; never use the old feature branch.
Queue dotnet-maui-release (1445) on its verified default MAUI main tip
only on explicit request:
az pipelines run \
--organization https://dev.azure.com/dnceng --project internal --id 1445 \
--parameters \
ghOwner=mono \
ghRepo=SkiaSharp \
commitHash=<exact-SkiaSharp-release-commit> \
pushWorkloadSet=false \
pushNugetOrg=true \
pushPackages=true \
nugetIncludeFilters=skip \
nugetExcludeFilters=skip \
--output json
The pipeline's default branch selects the current MAUI main tip;
commitHash remains the exact SkiaSharp BAR commit. The real run prepares
packages and pauses at ManualValidation, so no separate dry run is required.
After triggering:
- Read back the run's MAUI ref/SHA and parameters. Require
refs/heads/main, the requested SkiaSharp commit and flags, and a MAUI SHA containing release support; stop on a mismatch without retrying. - Match
NuGetReleaseAuditBAR, repository, commit and selected/staged package identities to the release record. Present it for humanManualValidation; the approver confirms package ownership and quota. Preparation alone is not approval. - Monitor that run after approval and independently verify every staged shipping ID/version on NuGet.org. On failure or partial publication, preserve evidence; do not automatically requeue or run Finish.
Finish after the packages are public
Once the complete exact package set is public, use Release - Finish on
main, first with push=false to inspect the read-only plan. Resolve an
abbreviated prerelease identity to one exact public version; stop if ambiguous.
Present the source commit, exact tag, release title, support updates and
milestone changes to the user and obtain separate confirmation before
dispatching the same inputs with push=true:
gh workflow run release-finish.yml --repo mono/SkiaSharp --ref main \
-f version=4.153.0-preview.1 -f push=false
# After the plan is reviewed and separately approved:
gh workflow run release-finish.yml --repo mono/SkiaSharp --ref main \
-f version=4.153.0-preview.1 -f push=true
Inspect both workflow runs; do not treat dispatch as success. Finish verifies the public package's branch and commit, publishes the exact tag and GitHub Release, and coordinates support, release notes, and milestones. Rerun the read-only audit afterward. Never move a tag or replace a public package.
Local Finish fallback
Only when the GitHub workflow is unavailable or local execution is explicitly requested, use the repository-owned Finish script:
./scripts/infra/publishing/finish-release.ps1 -Version 4.153.0-preview.1 -Mode DryRun
# After reviewing the plan and receiving confirmation:
./scripts/infra/publishing/finish-release.ps1 -Version 4.153.0-preview.1 -Mode Push
Local Finish does not replace the protected MAUI package pipeline or its human NuGet approval. Do not use it to bypass a failed workflow.
When not to use it
- →Before release testing passes
- →When modifying protected branches directly
Prerequisites
Limitations
- →Cannot undo publishing to NuGet
- →Requires strict adherence to semver ordering
How it compares
It automates the final release steps, replacing manual publishing and repository management.
Compared to similar skills
release-publish side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| release-publish (this skill) | 1 | 2mo | Review | Advanced |
| gcp-cloud-run | 5 | 7mo | Review | Intermediate |
| flow-nexus-platform | 6 | 6mo | Review | Beginner |
| smithery-mcp-deployment | 8 | 10mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by mono
View all by mono →You might also like
gcp-cloud-run
aj-geddes
Deploy containerized applications on Google Cloud Run with automatic scaling, traffic management, and service mesh integration. Use for container-based serverless computing.
flow-nexus-platform
ruvnet
Comprehensive Flow Nexus platform management - authentication, sandboxes, app deployment, payments, and challenges
smithery-mcp-deployment
CaullenOmdahl
Best practices for creating, optimizing, and deploying MCP servers to Smithery. Use this skill when:(1) Creating new MCP servers for Smithery deployment(2) Optimizing quality scores (achieving 90/100)(3) Troubleshooting deployment issues (0/0 tools, missing annotations, low scores)(4) Migrating existing MCP servers to Smithery format(5) Understanding Smithery's schema format requirements(6) Adding workflow prompts, tool annotations, or documentation resources(7) Configuring smithery.yaml and package.json for deployment
deployment-pipeline-design
wshobson
Design multi-stage CI/CD pipelines with approval gates, security checks, and deployment orchestration. Use when architecting deployment workflows, setting up continuous delivery, or implementing GitOps practices.
vercel-deployment
davila7
Expert knowledge for deploying to Vercel with Next.js Use when: vercel, deploy, deployment, hosting, production.
netlify-deploy
openai
Deploy web projects to Netlify using the Netlify CLI (`npx netlify`). Use when the user asks to deploy, host, publish, or link a site/repo on Netlify, including preview and production deploys.