RE

release-publish

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.zip

Installs 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".
473 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

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

You give it
Release version and branch
You get back
Published NuGet package and GitHub release

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:

  1. Run audit-release-state.ps1 -Version A.B -Json for the requested release/<identity>. Require its exact-tip skiasharp-package (1642) build to have succeeded with one BAR, and the resource-triggered skiasharp-tests (1630) run to have succeeded for the same branch, commit and build number with a matching triggerInfo.pipelineId. Any release-testing approval must match the BAR. Use that SkiaSharp commit, not the maintenance tip or mono/skia SHA.
  2. 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.
  3. Require the dotnet-maui-release (1445) pipeline to default to refs/heads/main and 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:

  1. 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.
  2. Match NuGetReleaseAudit BAR, repository, commit and selected/staged package identities to the release record. Present it for human ManualValidation; the approver confirms package ownership and quota. Preparation alone is not approval.
  3. 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

Release testing completionAzure DevOps access

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.

SkillInstallsUpdatedSafetyDifficulty
release-publish (this skill)12moReviewAdvanced
gcp-cloud-run57moReviewIntermediate
flow-nexus-platform66moReviewBeginner
smithery-mcp-deployment810moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

add-api

mono

Add new C# APIs to SkiaSharp by wrapping Skia C++ functionality. Structured 6-phase workflow: C++ analysis → C API creation → submodule commits → binding generation → C# wrapper → testing. Triggers: - Issue classified as "New API" (after fetching and classification) - Direct request: "add DrawFoo method", "expose SkSurface::draw", "wrap sk_foo_bar" - Keywords: "add API", "expose function", "wrap method", "create binding for"

68

bug-fix

mono

Fix bugs in SkiaSharp C# bindings. Structured workflow for investigating, fixing, and testing bug reports. Triggers: Crash, exception, AccessViolationException, incorrect output, wrong behavior, memory leak, disposal issues, "fails", "broken", "doesn't work", "investigate issue", "fix issue", "look at #NNNN", any GitHub issue number referencing a bug. For adding new APIs, use `add-api` skill instead.

426

api-docs

mono

Write and review XML API documentation for SkiaSharp following .NET guidelines. Triggers: "document class", "add XML docs", "write XML documentation", "add triple-slash comments", "review documentation quality", "check docs for errors", "fix doc issues", "fill in missing docs", "remove To be added placeholders", API documentation requests.

110

native-dependency-update

mono

Update native dependencies (libpng, libexpat, zlib, libwebp, harfbuzz, freetype, libjpeg-turbo, etc.) in SkiaSharp's Skia fork. Handles security CVE fixes, bug fixes, and version bumps. Use when user asks to: - Bump/update a native dependency (libpng, zlib, expat, webp, etc.) - Fix a CVE or security vulnerability in a native library - Update Skia's DEPS file - Check what version of a dependency is currently used - Analyze breaking changes between dependency versions Triggers: "bump libpng", "update zlib", "fix CVE in expat", "update native deps", "what version of libpng", "check for breaking changes". For security audits (finding CVEs, checking PR coverage), use the `security-audit` skill instead.

11

release-branch

mono

Create a release branch for SkiaSharp. Use when user says "release X", "start release X", "create release branch for X", "I want to release", or "release now". This is the FIRST step of releasing - creates branch and pushes to trigger CI. Can auto-detect next preview version from main branch.

12

release-testing

mono

Run integration tests to verify SkiaSharp NuGet packages work correctly before publishing. Use when user asks to: - Test/verify packages before release - Run integration tests - Test on specific device (iPad, iPhone, Android emulator, Mac, Windows) - Verify SkiaSharp rendering works - Check if packages are ready for publishing - Run smoke/console/blazor/maui tests - Continue with release - Test version X Triggers: "test the release", "verify packages", "run tests on iPad", "check ios tests", "test mac catalyst", "run android tests", "continue", "test 3.119.2-preview.2".

14

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.

5107

flow-nexus-platform

ruvnet

Comprehensive Flow Nexus platform management - authentication, sandboxes, app deployment, payments, and challenges

691

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

881

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.

670

vercel-deployment

davila7

Expert knowledge for deploying to Vercel with Next.js Use when: vercel, deploy, deployment, hosting, production.

359

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.

740

Search skills

Search the agent skills registry