# Release Publish

> Finalize a SkiaSharp release after the team publication pipeline has pushed packages to NuGet.org. Use when the user says "finalize X", "tag X", "finish release X", or confirms that exact packages are public.

- Skill: `mono/release-publish` (Agent Skill)
- Install (CLI): `npx skillmds@latest add mono/release-publish`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mono/release-publish/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: mono (https://skillmd.com/u/mono)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/mono/release-publish

---


# Release Publish

The internal Build, Tests, signing, BAR, promotion, and NuGet.org publication
process is owned by the team pipeline and is outside this skill.

After the exact packages appear on NuGet.org, use **Release - Finish**. Leave
`push` unchecked for the read-only plan, then dispatch again with `push`
checked after approval. The equivalent local commands are:

```powershell
# Read-only
./scripts/infra/publishing/finish-release.ps1 `
  -Version 4.153.0-preview.1 `
  -Mode DryRun

# Apply the support-tier file update locally without publishing
./scripts/infra/publishing/finish-release.ps1 `
  -Version 4.153.0-preview.1 `
  -Mode Apply

# Publish the tag and GitHub Release
./scripts/infra/publishing/finish-release.ps1 `
  -Version 4.153.0-preview.1 `
  -Mode Push
```

An abbreviated prerelease identity must resolve to exactly one public SkiaSharp
package version. The `Push` run reads that package's source commit, creates the
immutable exact NuGet version tag at that commit, publishes a GitHub-generated
Release whose generated notes start at the immediately preceding exact shipment
in global release topology, opens or updates the released line's support-tier
PR, and dispatches release-note generation. Run **Release - Milestones**
separately when milestone reconciliation is needed.

Always present the dry-run and obtain confirmation before `-Mode Push`. Never move
or delete a tag, replace a published release, or substitute a newer package.

