···135135136136[More about rules →](rules.md)
137137138138-## Release Process
139139-140140-Osprey uses [Semantic Versioning](https://semver.org/) (SemVer) with a 1.x.y series. This is a lightweight, bootstrap release process so downstream users can depend on version tags instead of commit hashes. The process may evolve as project usage grows.
141141-142142-### Patch releases (1.x.y)
143143-144144-Patch releases are backward-compatible fixes or small improvements already merged to `main`.
145145-146146-Cut a patch release when:
147147-148148-- Downstream users need a stable version tag, or
149149-- Meaningful fixes have accumulated and CI is green
150150-151151-There is no fixed cadence; releases are event-driven.
152152-153153-### Patch release checklist
154154-155155-Before cutting a release:
156156-157157-- [ ] Code quality CI passing on `main` (see [Code Quality Checks](https://github.com/roostorg/osprey/actions))
158158-- [ ] No breaking changes
159159-- [ ] [CHANGELOG.md](../CHANGELOG.md) updated (if applicable)
160160-161161-### How to cut a release
162162-163163-1. Ensure the checklist above is satisfied.
164164-2. In GitHub: **Releases** → **Draft a new release**.
165165-3. Choose or create a tag `X.Y.Z` (e.g. `1.0.1`) from `main`.
166166-4. Publish the release.
167167-168168-Publishing the release triggers existing automation:
169169-170170-- **osprey-rpc**: build and attach sdist (and zip) to the release ([release-osprey-rpc](https://github.com/roostorg/osprey/blob/main/.github/workflows/release-osprey-rpc.yml)).
171171-- **Osprey Coordinator**: build and push Docker image to GHCR with version tags ([publish-coordinator-image](https://github.com/roostorg/osprey/blob/main/.github/workflows/publish-coordinator-image.yml)).
172172-173173-Downstreams can depend on version tags (e.g. `1.0.1`) instead of commit SHAs.
174174-175138## Test Data
176139177140Generate sample JSON actions:
···11+# Release Process
22+33+Osprey uses [Semantic Versioning](https://semver.org/) (SemVer) with a 1.x.y series. This is a lightweight, bootstrap release process so downstream users can depend on version tags instead of commit hashes. The process may evolve as project usage grows.
44+55+## Patch releases (1.x.y)
66+77+Patch releases are backward-compatible fixes or small improvements already merged to `main`.
88+99+Cut a patch release when:
1010+1111+- Downstream users need a stable version tag, or
1212+- Meaningful fixes have accumulated and CI is green
1313+1414+There is no fixed cadence; releases are event-driven.
1515+1616+## Patch release checklist
1717+1818+Before cutting a release:
1919+2020+- [ ] Code quality CI passing on `main` (see [Code Quality Checks](https://github.com/roostorg/osprey/actions))
2121+- [ ] No breaking changes
2222+- [ ] [CHANGELOG.md](https://github.com/roostorg/osprey/blob/main/CHANGELOG.md) updated (if applicable)
2323+2424+## How to cut a release
2525+2626+1. Ensure the checklist above is satisfied.
2727+2. In GitHub: **Releases** → **Draft a new release**.
2828+3. Choose or create a tag `X.Y.Z` (e.g. `1.0.1`) from `main`.
2929+4. Publish the release.
3030+3131+Publishing the release triggers existing automation:
3232+3333+- **osprey-rpc**: build and attach sdist (and zip) to the release ([release-osprey-rpc](https://github.com/roostorg/osprey/blob/main/.github/workflows/release-osprey-rpc.yml)).
3434+- **Osprey Coordinator**: build and push Docker image to GHCR with version tags ([publish-coordinator-image](https://github.com/roostorg/osprey/blob/main/.github/workflows/publish-coordinator-image.yml)).
3535+3636+Downstreams can depend on version tags (e.g. `1.0.1`) instead of commit SHAs.