- name
- release-branch
- description
- Prepare SkiaSharp release branches with the repository-owned PowerShell script. Use when a maintainer asks to start, prepare, preview, RC, or cut a stable release branch.
# Release Branch
Use the **Release - Prepare** GitHub workflow for normal releases. In chat,
dispatch it on `main` with `push=false` first, inspect the read-only plan, and
obtain confirmation before dispatching the same inputs with `push=true`:
```bash
gh workflow run release-prepare.yml --repo mono/SkiaSharp --ref main \
-f base=main -f release=4.153.0-preview.1 -f push=false
# After reviewing the plan and receiving confirmation:
gh workflow run release-prepare.yml --repo mono/SkiaSharp --ref main \
-f base=main -f release=4.153.0-preview.1 -f push=true
```
Replace the example base and identity with the requested values. Locate and
inspect each dispatched run; never infer success from a successful dispatch.
Verify both release branches exist at the planned commits before proceeding.
The branch push starts the internal `skiasharp-package` and `skiasharp-tests`
chain. Package publication is a separate, explicitly requested
`release-publish` action; Prepare must not queue it.
The Prepare workflow accepts:
- `base`: a SkiaSharp branch or commit SHA;
- `release`: `X.Y.Z[-preview.N|-rc.N|-stable]`, or the corresponding
four-part hotfix form `X.Y.Z.F[-preview.N|-rc.N|-stable]`.
## Local fallback
Use the local script only when the workflow is unavailable or the user
explicitly requests local execution. It does not replace workflow verification:
```powershell
# Read-only
./scripts/infra/publishing/prepare-release.ps1 -Base main -Release 4.153.0-preview.1 -Mode DryRun
# Create and validate local branches and commits
./scripts/infra/publishing/prepare-release.ps1 -Base main -Release 4.153.0-preview.1 -Mode Apply
# Create locally, push mono/skia then mono/SkiaSharp, and create a stable bump PR
./scripts/infra/publishing/prepare-release.ps1 -Base main -Release 4.153.0-preview.1 -Mode Push
```
Before `-Mode Push`, show the resolved base SHA and every planned ref to the user and
obtain confirmation. Never force-update a release branch. Existing matching
state is reused; conflicting state blocks the run.
Stable input deliberately uses the explicit `-stable` sentinel to prevent an
accidental stable cut, but creates the bare `release/X.Y.Z` branch. A three-part
stable release also prepares the next SkiaSharp patch and HarfBuzzSharp
revision on `bump-version-X.Y.Z`. Its PR targets a manually created
`release/X.Y.x` servicing line when one exists, otherwise `main`; release
preparation never creates the `.x` line.
View on GitHub