diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml
new file mode 100644
index 00000000..6e15850b
--- /dev/null
+++ b/.github/workflows/release-please.yml
@@ -0,0 +1,48 @@
+name: release-please
+
+permissions:
+ contents: read
+
+on:
+ push:
+ branches: [main]
+ workflow_dispatch:
+ inputs:
+ bump-type:
+ description: >
+ Version bump type. Select 'explicit' to supply an exact version via
+ the 'release-version' field below. Select 'auto' to let
+ conventional-commits determine the bump automatically.
+ required: false
+ type: choice
+ default: 'auto'
+ options:
+ - auto
+ - patch
+ - minor
+ - major
+ - explicit
+ release-version:
+ description: >
+ Explicit version to release (e.g. 1.2.3 or 1.4.0-beta.1).
+ required: false
+ type: string
+
+jobs:
+ release:
+ permissions:
+ contents: write
+ pull-requests: write
+ if: |
+ github.event_name == 'workflow_dispatch' ||
+ startsWith(github.event.head_commit.message, 'release:')
+ uses: openfga/sdk-generator/.github/workflows/release-please.yml@main
+ with:
+ trigger-event: ${{ github.event_name }}
+ bump-type: ${{ inputs.bump-type || 'auto' }}
+ release-version: ${{ inputs.release-version || '' }}
+ secrets:
+ RELEASER_APP_ID: ${{ secrets.RELEASER_APP_ID }}
+ RELEASER_APP_PRIVATE_KEY: ${{ secrets.RELEASER_APP_PRIVATE_KEY }}
+ GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
+ GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
new file mode 100644
index 00000000..755d7b47
--- /dev/null
+++ b/.release-please-manifest.json
@@ -0,0 +1,3 @@
+{
+ ".": "0.9.7"
+}
diff --git a/README.md b/README.md
index a0d528ea..264d5376 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
[](https://central.sonatype.com/artifact/dev.openfga/openfga-sdk)
[](https://javadoc.io/doc/dev.openfga/openfga-sdk)
-[](https://socket.dev/maven/package/dev.openfga:openfga-sdk)
+[](https://socket.dev/maven/package/dev.openfga:openfga-sdk)
[](https://deepwiki.com/openfga/java-sdk)
[](https://github.com/openfga/java-sdk/releases)
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenfga%2Fjava-sdk?ref=badge_shield)
@@ -82,18 +82,23 @@ It can be used with the following:
* Gradle (Groovy)
+
```groovy
implementation 'dev.openfga:openfga-sdk:0.9.7'
```
+
* Gradle (Kotlin)
+
```kotlin
implementation("dev.openfga:openfga-sdk:0.9.7")
```
+
* Apache Maven
+
```xml
dev.openfga
@@ -101,24 +106,31 @@ implementation("dev.openfga:openfga-sdk:0.9.7")
0.9.7
```
+
* Ivy
+
```xml
```
+
* SBT
+
```scala
libraryDependencies += "dev.openfga" % "openfga-sdk" % "0.9.7"
```
+
* Leiningen
+
```edn
[dev.openfga/openfga-sdk "0.9.7"]
```
+
## Getting Started
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 00000000..772dbad0
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,103 @@
+# Release guide
+
+This project uses [release-please](https://github.com/googleapis/release-please) via a
+`workflow_dispatch`-triggered GitHub Actions workflow. This document explains how to cut
+a release and what to watch out for.
+
+---
+
+## Versioning rules for this project
+
+We are pre-1.0.0. Semver conventions are relaxed:
+
+| Change type | Bump | Example |
+|--- |--- |--- |
+| Breaking change | **Minor** (`0.x.0`) | `0.9.0` → `0.10.0` |
+| Everything else | **Patch** (`0.0.x`) | `0.9.7` → `0.9.8` |
+
+Major bumps (`1.0.0`) are reserved for a deliberate stable-API graduation decision — not for
+routine breaking changes.
+
+---
+
+## Cutting a release
+
+1. Go to **Actions → release-please** and click **Run workflow**.
+2. Choose a bump type:
+ - `patch` — bugfixes, docs, small changes
+ - `minor` — breaking changes (see above)
+ - `explicit` — you specify the exact version string (e.g. `0.10.0` or `0.10.0-beta.1`)
+3. The workflow creates a release PR. Review it, then merge.
+4. The GitHub Release and tag are created automatically on merge.
+
+> **Note — release-please only understands `auto` or an explicit version string.**
+> The `patch`, `minor`, and `major` options in the workflow dropdown are conveniences
+> implemented in the workflow. The workflow reads the current manifest version, computes
+> the next version (e.g. `0.9.7` + patch = `0.9.8`), and passes that computed string
+> to release-please as an explicit `Release-As:` commit — exactly the same as choosing
+> `explicit` and typing it yourself. There is no native patch/minor/major mode in
+> release-please. This is why `explicit` is always the safest option when in doubt —
+> you are just skipping the arithmetic step.
+
+---
+
+## When to use `explicit`
+
+Use `explicit` and type the version yourself in any of these situations:
+
+**After a beta or non-conventional tag.**
+If the previous release was something like `0.9.7-beta.1`, release-please tracks the
+base semver (`0.9.7`) but cannot reliably decide whether the next release should be
+`0.9.7`, `0.9.8`, or `0.10.0`. It will often guess wrong.
+
+The rule of thumb: **if the last tag had a pre-release suffix, always use `explicit` for
+the next release.**
+
+**After a manually created tag.**
+Any tag created outside of the release-please workflow (e.g. hotfixes, manual git tags)
+is invisible to release-please's version logic. Use `explicit` to anchor the next version
+correctly.
+
+**When you want a beta.**
+Release-please does not increment pre-release suffixes automatically. Use `explicit` for
+every beta, incrementing the suffix manually:
+```
+0.10.0-beta.1 → explicit: 0.10.0-beta.2 → explicit: 0.10.0
+```
+
+---
+
+## What goes in the changelog
+
+Commit messages must follow [Conventional Commits](https://www.conventionalcommits.org/)
+for release-please to group them correctly:
+
+```
+feat: add support for batch check → Added
+fix: correct retry logic for transient errors → Fixed
+docs: update API reference → Documentation
+perf: cache DNS lookups → Changed
+refactor: extract auth helper → (hidden)
+chore: bump dependencies → (hidden)
+```
+
+---
+
+## Troubleshooting
+
+**"Invalid previous_tag parameter" error.**
+The manifest version does not have a corresponding GitHub Release object. Reset the
+manifest to the last valid tag:
+```bash
+echo '{ ".": "0.x.y" }' > .release-please-manifest.json
+git commit -am "chore: reset manifest to v0.x.y"
+git push origin main
+```
+
+**Duplicate release PRs.**
+Close all stale ones. The workflow auto-closes stale open PRs on each dispatch, but
+merged duplicates need manual labelling with `autorelease: tagged`.
+
+**Changelog shows everything ungrouped.**
+Make sure `changelog-type` in `release-please-config.json` is set to `"default"`, not
+`"github"`.
diff --git a/build.gradle b/build.gradle
index 97d4e1e7..bf9f601b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,7 +19,7 @@ plugins {
apply from: 'publish.gradle'
group = 'dev.openfga'
-version = '0.9.7'
+version = '0.9.7' // x-release-please-version
repositories {
mavenCentral()
diff --git a/examples/basic-examples/build.gradle b/examples/basic-examples/build.gradle
index d622cfb9..9fe88d37 100644
--- a/examples/basic-examples/build.gradle
+++ b/examples/basic-examples/build.gradle
@@ -23,7 +23,7 @@ ext {
}
dependencies {
- implementation("dev.openfga:openfga-sdk:0.9.7")
+ implementation("dev.openfga:openfga-sdk:0.9.7") // x-release-please-version
// Serialization
implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion")
diff --git a/examples/opentelemetry/build.gradle b/examples/opentelemetry/build.gradle
index 7bb82835..76b246d1 100644
--- a/examples/opentelemetry/build.gradle
+++ b/examples/opentelemetry/build.gradle
@@ -74,7 +74,7 @@ repositories {
}
ext {
- fgaSdkVersion = "0.9.7"
+ fgaSdkVersion = "0.9.7" // x-release-please-version
openTelemetryVersion = "1.60.1"
openTelemetryAlphaVersion = "1.60.1-alpha"
}
diff --git a/examples/streamed-list-objects/build.gradle b/examples/streamed-list-objects/build.gradle
index 1610ddb2..5b690ccd 100644
--- a/examples/streamed-list-objects/build.gradle
+++ b/examples/streamed-list-objects/build.gradle
@@ -17,7 +17,7 @@ ext {
dependencies {
// Use local build of SDK
- implementation files('../../build/libs/openfga-sdk-0.9.7.jar')
+ implementation files('../../build/libs/openfga-sdk-0.9.7.jar') // x-release-please-version
// OpenFGA Language SDK for DSL transformation
implementation("dev.openfga:openfga-language:v0.2.0-beta.1")
diff --git a/publish.gradle b/publish.gradle
index c5b598c8..93cddedc 100644
--- a/publish.gradle
+++ b/publish.gradle
@@ -6,7 +6,7 @@ publishing {
pom {
group = 'dev.openfga'
name = 'openfga-sdk'
- version = '0.9.7'
+ version = project.version
description = 'This is an autogenerated Java SDK for OpenFGA. It provides a wrapper around the [OpenFGA API definition](https://openfga.dev/api).'
url = 'https://openfga.dev'
licenses {
diff --git a/release-please-config.json b/release-please-config.json
new file mode 100644
index 00000000..199ea161
--- /dev/null
+++ b/release-please-config.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
+ "release-type": "simple",
+ "packages": {
+ ".": {
+ "include-component-in-tag": false,
+ "changelog-path": "CHANGELOG.md",
+ "changelog-type": "default",
+ "bump-minor-pre-major": true,
+ "bump-patch-for-minor-pre-major": true,
+ "changelog-sections": [
+ { "type": "feat", "section": "Added", "hidden": false },
+ { "type": "fix", "section": "Fixed", "hidden": false },
+ { "type": "perf", "section": "Changed", "hidden": false },
+ { "type": "refactor", "section": "Changed", "hidden": false },
+ { "type": "revert", "section": "Removed", "hidden": false },
+ { "type": "docs", "section": "Documentation", "hidden": false },
+ { "type": "test", "section": "Tests", "hidden": true },
+ { "type": "ci", "section": "CI", "hidden": true },
+ { "type": "chore", "section": "Miscellaneous", "hidden": true }
+ ],
+ "extra-files": [
+ { "type": "generic", "path": "build.gradle" },
+ { "type": "generic", "path": "src/main/java/dev/openfga/sdk/constants/FgaConstants.java" },
+ { "type": "generic", "path": "README.md" },
+ { "type": "generic", "path": "examples/opentelemetry/build.gradle" },
+ { "type": "generic", "path": "examples/basic-examples/build.gradle" },
+ { "type": "generic", "path": "examples/streamed-list-objects/build.gradle" }
+ ]
+ }
+ }
+}
diff --git a/src/main/java/dev/openfga/sdk/constants/FgaConstants.java b/src/main/java/dev/openfga/sdk/constants/FgaConstants.java
index 8a568a74..6d2061a1 100644
--- a/src/main/java/dev/openfga/sdk/constants/FgaConstants.java
+++ b/src/main/java/dev/openfga/sdk/constants/FgaConstants.java
@@ -19,7 +19,7 @@
public final class FgaConstants {
/** Version of the OpenFGA Java SDK. */
- public static final String SDK_VERSION = "0.9.7";
+ public static final String SDK_VERSION = "0.9.7"; // x-release-please-version
/** User agent used in HTTP requests. */
public static final String USER_AGENT = "openfga-sdk java/" + SDK_VERSION;