Skip to content
Open
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
36 changes: 36 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -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
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reusable workflow is referenced by branch (openfga/sdk-generator/...@main). For release automation, pinning to an immutable ref (tag or commit SHA) helps avoid supply-chain risk and unexpected behavior changes when main moves.

Suggested change
uses: openfga/sdk-generator/.github/workflows/release-please.yml@main
uses: openfga/sdk-generator/.github/workflows/release-please.yml@3c5c1b9c8d4e2f6a7b8c9d0e1f2a3b4c5d6e7f8

Copilot uses AI. Check for mistakes.
with:
bump-type: ${{ inputs.bump-type || 'auto' }}
release-version: ${{ inputs.release-version || '' }}
Comment on lines +32 to +33
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow is triggered on both push and workflow_dispatch, but the with: block references inputs.*. The inputs context only exists for workflow_dispatch/workflow_call, and the input names also contain hyphens (which require bracket notation). This will fail on push runs and may also fail to parse for the hyphenated keys. Use github.event.inputs['bump-type'] / github.event.inputs['release-version'] (with sensible defaults) or gate access based on github.event_name.

Suggested change
bump-type: ${{ inputs.bump-type || 'auto' }}
release-version: ${{ inputs.release-version || '' }}
bump-type: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs['bump-type'] || 'auto' }}
release-version: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs['release-version'] || '' }}

Copilot uses AI. Check for mistakes.
secrets:
APP_ID: ${{ secrets.APP_ID }}
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
3 changes: 3 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
".": "0.10.0"
}
103 changes: 103 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -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.
Comment on lines +3 to +5
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide says releases use a workflow_dispatch-triggered workflow, but .github/workflows/release-please.yml is also configured to run on push to main. Please update the wording to reflect the actual triggers so operators aren’t surprised by automatic runs.

Copilot uses AI. Check for mistakes.

---

## 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.10.0` → `0.11.0` |
| Everything else | **Patch** (`0.0.x`) | `0.10.0` → `0.10.1` |

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.11.0` or `0.11.0-beta.1`)
Comment on lines +27 to +29
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bump-type list omits auto and major, but the workflow dropdown includes both, and later text references patch/minor/major convenience options. Update the step to document all available choices and when to use them to avoid operator error.

Suggested change
- `patch` — bugfixes, docs, small changes
- `minor` — breaking changes (see above)
- `explicit` — you specify the exact version string (e.g. `0.11.0` or `0.11.0-beta.1`)
- `auto` — let release-please infer the next version from Conventional Commit types;
use this only when the previous tag was a normal release (no pre-release suffix)
and there are no manually created tags since then.
- `patch` — convenience option for a patch bump (`0.0.x`): bugfixes, docs, small
changes that are not intentionally breaking.
- `minor` — convenience option for a minor bump (`0.x.0`): use for breaking changes
under the pre-1.0.0 rules described above.
- `major` — convenience option for a major bump (`1.0.0`, `2.0.0`, …); in this
project, use only for a deliberate stable-API graduation decision, not for routine
breaking changes.
- `explicit` — you specify the exact version string (e.g. `0.11.0` or
`0.11.0-beta.1`); recommended when in doubt, and in all the situations listed in
the **When to use `explicit`** section below.

Copilot uses AI. Check for mistakes.
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.10.0` + patch = `0.10.1`), 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.10.0-beta.1`, release-please tracks the
base semver (`0.10.0`) but cannot reliably decide whether the next release should be
`0.10.0`, `0.10.1`, or `0.11.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.11.0-beta.1 → explicit: 0.11.0-beta.2 → explicit: 0.11.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)
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Conventional Commits → changelog mapping example marks refactor as “(hidden)”, but release-please-config.json configures refactor as visible (hidden: false) under the “Changed” section. Align the example with the config (or adjust the config) so the generated changelog matches the documented expectations.

Suggested change
refactor: extract auth helper → (hidden)
refactor: extract auth helper → Changed

Copilot uses AI. Check for mistakes.
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"`.
2 changes: 1 addition & 1 deletion openfga_sdk/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@


# Version of the OpenFGA Python SDK.
SDK_VERSION: Final[str] = "0.10.0"
SDK_VERSION: Final[str] = "0.10.0" # x-release-please-version

# User agent used in HTTP requests.
USER_AGENT: Final[str] = "openfga-sdk python/0.10.0"
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

USER_AGENT hardcodes the version string (0.10.0). When release-please bumps SDK_VERSION, USER_AGENT will drift and will likely break test/constants_consistency_test.py (it asserts SDK_VERSION in USER_AGENT). Consider deriving USER_AGENT from SDK_VERSION (e.g. via f-string) or add an x-release-please-version marker so both get updated together.

Suggested change
USER_AGENT: Final[str] = "openfga-sdk python/0.10.0"
USER_AGENT: Final[str] = f"openfga-sdk python/{SDK_VERSION}"

Copilot uses AI. Check for mistakes.
Expand Down
28 changes: 28 additions & 0 deletions release-please-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"release-type": "python",
"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": "toml", "path": "pyproject.toml", "jsonpath": "$.project.version" },
{ "type": "generic", "path": "openfga_sdk/constants.py" }
]
}
}
}
Loading