diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b3b5e58..466df71 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.4" + ".": "0.1.0" } diff --git a/README.md b/README.md index 5eca2d3..97b3aa1 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,10 @@ module metadata selects the right per-platform variant automatically. |------------|-----------------| | Group | `org.dexpace` | | Artifact | `kuri` | -| Version | `0.1.0-alpha.1` | +| Version | `0.1.0` | > [!NOTE] -> kuri is in an early **alpha** series: the public API is not yet frozen and may change between releases, so pin to an +> kuri is in the `0.x` series: the public API is not yet frozen and may change between releases, so pin to an > exact version. **Gradle (Kotlin Multiplatform or Kotlin/JVM)** — add the dependency to your common (or JVM) source set: @@ -58,7 +58,7 @@ repositories { } dependencies { - implementation("org.dexpace:kuri:0.1.0-alpha.1") + implementation("org.dexpace:kuri:0.1.0") } ``` @@ -70,7 +70,7 @@ Gradle module metadata resolves the correct per-platform variant automatically. org.dexpace kuri-jvm - 0.1.0-alpha.1 + 0.1.0 ``` @@ -314,7 +314,7 @@ has no facade type — start from `Url` or `Uri`): Percent.encode("a b/c", Percent.Component.COMPONENT); // "a%20b%2Fc" Idn.toAscii("bücher.example").getOrNull(); // "xn--bcher-kva.example" Schemes.defaultPort("https"); // 443 (Integer) -String version = Kuri.VERSION; // e.g. "0.1.0-alpha.1" +String version = Kuri.VERSION; // e.g. "0.1.0" ``` ## Recipes @@ -572,7 +572,7 @@ the native test suites requires a matching operating system or simulator. ## Versioning and stability -kuri follows [Semantic Versioning 2.0.0](https://semver.org/). At `0.1.0-alpha.1` the public API is not yet frozen and +kuri follows [Semantic Versioning 2.0.0](https://semver.org/). At `0.1.0` the public API is not yet frozen and may change before `1.0.0`, and minor releases in the `0.x` series may carry breaking changes, so pin to an exact version. Every public signature is tracked in a checked-in binary-compatibility snapshot under `api/`, so an unintended API change fails the build (see [Building from source](#building-from-source)). diff --git a/RELEASING.md b/RELEASING.md index 7b8ac91..869174e 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -7,8 +7,11 @@ one-time setup a maintainer needs, and the day-to-day flow of cutting a release. ## How it works - **Versioning.** The version lives in `gradle.properties` and is owned by release-please, which - derives the next version from Conventional Commit history. kuri is currently on an **alpha - prerelease series** (`0.1.0-alpha.1` → `0.1.0-alpha.2` → …). + derives the next version from Conventional Commit history. kuri is in the **`0.x` series**: while + the major version is `0`, release-please bumps the minor for breaking changes and the patch for + everything else, so the major digit never moves on its own (`bump-minor-pre-major` / + `bump-patch-for-minor-pre-major` in `release-please-config.json`). Graduating to `1.0.0` is a + deliberate manual step (see below), not something the automation does for you. - **Pipeline.** On every push to `main`, release-please maintains a *release PR* that rolls the landed commits into the next version bump and the `CHANGELOG.md`. Merging that PR tags the release and creates a GitHub Release, which triggers the publish job. Publishing runs on a **macOS** runner @@ -95,33 +98,38 @@ the user/password pair. ### Which commits trigger a release -release-please cuts a release only for `feat` (minor), `fix` (patch), and breaking changes -(`!` / `BREAKING CHANGE`, which bump within the alpha series). No other type triggers a release. -Housekeeping types — `ci`, `chore`, `docs`, `test`, `style`, `refactor`, `build` — are also hidden -from the changelog; `perf` and `revert` don't trigger a release either, but do appear in it (under -*Performance* and *Reverted*). +release-please cuts a release only for `feat`, `fix`, and breaking changes +(`!` / `BREAKING CHANGE`). No other type triggers a release. Housekeeping types — `ci`, `chore`, +`docs`, `test`, `style`, `refactor`, `build` — are also hidden from the changelog; `perf` and +`revert` don't trigger a release either, but do appear in it (under *Performance* and *Reverted*). -### Prerelease cadence and graduation +### Version cadence and graduating to `1.0.0` -While on the alpha series, `feat` and `fix` both advance the prerelease counter -(`0.1.0-alpha.N` → `0.1.0-alpha.N+1`). To graduate to a stable `0.1.0` (or move to a new series such -as `0.2.0-alpha.1`), either add a `Release-As: 0.1.0` footer to a commit, or drop the -`"versioning": "prerelease"` / `"prerelease"` settings in `release-please-config.json`. +While the major version is `0`, the pre-major settings in `release-please-config.json` keep the +major digit pinned: `bump-minor-pre-major` routes breaking changes to a **minor** bump +(`0.1.0` → `0.2.0`) instead of `1.0.0`, and `bump-patch-for-minor-pre-major` routes both `feat` and +`fix` to a **patch** bump (`0.1.0` → `0.1.1`). So automated releases stay within `0.y.z` no matter +what lands. When the API is ready to freeze, cut `1.0.0` deliberately by adding a `Release-As: 1.0.0` +footer to a commit (or by opening a release PR with that version); the automation will not cross to +`1.0.0` on its own. -## Publishing the initial `0.1.0-alpha.1` +## Bootstrapping publishing for a version with no prior tag -`.release-please-manifest.json` records `0.1.0-alpha.1` as the *current* version, so release-please's -first *automated* release will be `0.1.0-alpha.2`. To put `0.1.0-alpha.1` itself on Maven Central, -publish it manually once (after the secrets above are configured): +release-please's publish job runs off a GitHub Release, so it can only build a version that already +has one. The first time the pipeline runs for a version — the initial `0.1.0`, or after resetting +`.release-please-manifest.json` to start a new line — there is no prior tag for it to build from, so +the version currently recorded in `gradle.properties` has to be published manually once (after the +secrets above are configured): -- **Actions → Publish → Run workflow**, on `main` (where `gradle.properties` reads - `version=0.1.0-alpha.1`). Leave the `ref` input blank to publish the branch as-is. +- **Actions → Publish → Run workflow**, on `main`. Leave the `ref` input blank to publish the + branch as-is, using whatever version `gradle.properties` currently declares. -This manual `workflow_dispatch` run automatically creates the `v0.1.0-alpha.1` git tag and GitHub -Release — you no longer have to tag it by hand — and the same run attaches the artifacts zip to that -Release. +This manual `workflow_dispatch` run automatically creates the matching `v` git tag and +GitHub Release — you don't have to tag it by hand — and the same run attaches the artifacts zip to +that Release. -From then on, merging release-please's release PRs publishes automatically. +From then on, merging release-please's release PRs publishes automatically; this manual step is only +needed again if a future version starts from a point with no existing tag. ## Manual / re-publish diff --git a/gradle.properties b/gradle.properties index c52b024..544a0c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,5 +18,5 @@ org.jetbrains.dokka.experimental.gradle.pluginMode.nowarn=true # between the annotation markers on each release. Gradle applies a root `version=` to every project, so # the `:kuri` module inherits it without an explicit assignment in its build script. # x-release-please-start-version -version=0.1.0-alpha.4 +version=0.1.0 # x-release-please-end diff --git a/kuri/src/commonMain/kotlin/org/dexpace/kuri/Kuri.kt b/kuri/src/commonMain/kotlin/org/dexpace/kuri/Kuri.kt index f1af4a2..12bca20 100644 --- a/kuri/src/commonMain/kotlin/org/dexpace/kuri/Kuri.kt +++ b/kuri/src/commonMain/kotlin/org/dexpace/kuri/Kuri.kt @@ -16,7 +16,7 @@ package org.dexpace.kuri */ public object Kuri { /** - * The kuri library version, for example `0.1.0-alpha.1`. + * The kuri library version, for example `0.1.0`. * * Generated at build time from the project's `version` (the single source in `gradle.properties`, * owned by release automation), so it always matches the published Maven coordinate and can never diff --git a/release-please-config.json b/release-please-config.json index f6503d9..8be776b 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -5,9 +5,6 @@ "bootstrap-sha": "38204f042bc6a31aa565a94d598fedd3b130b6cb", "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": true, - "prerelease": true, - "prerelease-type": "alpha", - "versioning": "prerelease", "changelog-sections": [ { "type": "feat", "section": "Added" }, { "type": "fix", "section": "Fixed" },