Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.0-alpha.4"
".": "0.1.0"
}
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -58,7 +58,7 @@ repositories {
}

dependencies {
implementation("org.dexpace:kuri:0.1.0-alpha.1")
implementation("org.dexpace:kuri:0.1.0")
}
```

Expand All @@ -70,7 +70,7 @@ Gradle module metadata resolves the correct per-platform variant automatically.
<dependency>
<groupId>org.dexpace</groupId>
<artifactId>kuri-jvm</artifactId>
<version>0.1.0-alpha.1</version>
<version>0.1.0</version>
</dependency>
```

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)).
Expand Down
52 changes: 30 additions & 22 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<version>` 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

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion kuri/src/commonMain/kotlin/org/dexpace/kuri/Kuri.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 0 additions & 3 deletions release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
Expand Down
Loading