release-publish
mono/SkiaSharp/.agents/skills/release-publish/SKILL.md
Publish SkiaSharp release packages to NuGet.org from chat and finish public releases. Use when a maintainer says "push the packages", "publish the BAR", "resume publication", "finalize X", "tag X", or "finish release X". Queue the protected MAUI pipeline only on explicit request; after exact packages are public, use the SkiaSharp Release - Finish workflow with a separate confirmation.
Skill5.6k starsChanged yesterday
What's in it
- Release Publish
- Push the packages
- Finish after the packages are public
- Local Finish fallback
---
name: release-publish
description: >
Publish SkiaSharp release packages to NuGet.org from chat and finish public
releases. Use when a maintainer says "push the packages", "publish the BAR",
"resume publication", "finalize X", "tag X", or "finish release X". Queue the
protected MAUI pipeline only on explicit request; after exact packages are
public, use the SkiaSharp Release - Finish workflow with a separate
confirmation.
---
# 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`. The producing
Build/Tests runs and BAR are the release-validation evidence; do not require
a separate local approval report. 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:
```bash
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`:
```bash
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:
```powershell
./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.
More agent context in mono/SkiaSharp
26 other files this repository gives its agents.
AGENTS.md
CLAUDE.md
Copilot instructions
Skill
- api-add-review.agents/skills/api-add-review/SKILL.md
- api-docs.agents/skills/api-docs/SKILL.md
- ci-status.agents/skills/ci-status/SKILL.md
- issue-bulk-process.agents/skills/issue-bulk-process/SKILL.md
- issue-fix.agents/skills/issue-fix/SKILL.md
- issue-repro.agents/skills/issue-repro/SKILL.md
- issue-triage.agents/skills/issue-triage/SKILL.md
- memory-leak-fixer.agents/skills/memory-leak-fixer/SKILL.md
- merge-skia-update.agents/skills/merge-skia-update/SKILL.md
- native-dependency-update.agents/skills/native-dependency-update/SKILL.md
- performance-fixer.agents/skills/performance-fixer/SKILL.md
- pr-commit-message.agents/skills/pr-commit-message/SKILL.md
- release-audit.agents/skills/release-audit/SKILL.md
- release-branch.agents/skills/release-branch/SKILL.md
- release-milestones.agents/skills/release-milestones/SKILL.md
- release-notes.agents/skills/release-notes/SKILL.md
- review-skia-update.agents/skills/review-skia-update/SKILL.md
- sample-scout.agents/skills/sample-scout/SKILL.md
- security-audit.agents/skills/security-audit/SKILL.md
- skia-analyst.agents/skills/skia-analyst/SKILL.md
- skill-creator.agents/skills/skill-creator/SKILL.md
- update-skia.agents/skills/update-skia/SKILL.md
- agentic-workflows.github/skills/agentic-workflows/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
No reports yet. Be the first to say whether it worked.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

