From 1952b87b1f9886a5d838442c670fd19bdcdfee2a Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Mon, 30 Mar 2026 17:18:16 +0530 Subject: [PATCH 1/3] feat: release automation configs --- .github/workflows/release-please.yml | 36 ++++++ .release-please-manifest.json | 3 + RELEASE.md | 103 ++++++++++++++++++ build.gradle | 2 +- release-please-config.json | 28 +++++ .../openfga/sdk/constants/FgaConstants.java | 2 +- 6 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release-please.yml create mode 100644 .release-please-manifest.json create mode 100644 RELEASE.md create mode 100644 release-please-config.json diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000..00c6d537 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,36 @@ +name: release-please + +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: + uses: openfga/sdk-generator/.github/workflows/release-please.yml@main + with: + bump-type: ${{ inputs.bump-type || 'auto' }} + release-version: ${{ inputs.release-version || '' }} + secrets: + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} 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/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 14a2ab68..36d60600 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/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..ac7adfdd --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,28 @@ +{ + "$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" } + ] + } + } +} 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; From 981b6962db789a33da9f2ec541b1d70a08ad32d8 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Mon, 6 Apr 2026 18:24:40 +0530 Subject: [PATCH 2/3] feat: address comments --- .github/workflows/release-please.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 00c6d537..571af2d4 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -1,5 +1,8 @@ name: release-please +permissions: + contents: read + on: push: branches: [main] @@ -27,10 +30,19 @@ on: 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: - bump-type: ${{ inputs.bump-type || 'auto' }} + trigger-event: ${{ github.event_name }} + bump-type: ${{ inputs.bump-type || 'auto' }} release-version: ${{ inputs.release-version || '' }} secrets: - APP_ID: ${{ secrets.APP_ID }} - APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From c99125cae8a28d93cf50763b27a07b10f01423ad Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Thu, 9 Apr 2026 20:33:06 +0530 Subject: [PATCH 3/3] feat: update workflow --- .github/workflows/release-please.yml | 8 ++++---- README.md | 14 +++++++++++++- examples/basic-examples/build.gradle | 2 +- examples/opentelemetry/build.gradle | 2 +- examples/streamed-list-objects/build.gradle | 2 +- publish.gradle | 2 +- release-please-config.json | 6 +++++- 7 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 571af2d4..6e15850b 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -42,7 +42,7 @@ jobs: bump-type: ${{ inputs.bump-type || 'auto' }} release-version: ${{ inputs.release-version || '' }} secrets: - APP_ID: ${{ secrets.APP_ID }} - APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + 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/README.md b/README.md index a0d528ea..264d5376 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/dev.openfga/openfga-sdk.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/dev.openfga/openfga-sdk) [![Javadoc](https://javadoc.io/badge2/dev.openfga/openfga-sdk/javadoc.svg)](https://javadoc.io/doc/dev.openfga/openfga-sdk) -[![Socket Badge](https://badge.socket.dev/maven/package/dev.openfga:openfga-sdk/0.9.7)](https://socket.dev/maven/package/dev.openfga:openfga-sdk) +[![Socket Badge](https://badge.socket.dev/maven/package/dev.openfga:openfga-sdk/0.9.7)](https://socket.dev/maven/package/dev.openfga:openfga-sdk) [![DeepWiki](https://img.shields.io/badge/DeepWiki-openfga%2Fjava--sdk-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/openfga/java-sdk) [![Release](https://img.shields.io/github/v/release/openfga/java-sdk?sort=semver&color=green)](https://github.com/openfga/java-sdk/releases) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenfga%2Fjava-sdk.svg?type=shield)](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/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 index ac7adfdd..199ea161 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -21,7 +21,11 @@ ], "extra-files": [ { "type": "generic", "path": "build.gradle" }, - { "type": "generic", "path": "src/main/java/dev/openfga/sdk/constants/FgaConstants.java" } + { "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" } ] } }