-
Notifications
You must be signed in to change notification settings - Fork 7
Update self-hosted changelog: v0.114.60 #5446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
6fe60cd
16410ca
4914d57
bcad8c7
34839f7
2bb9258
f516a31
69867e4
f0a082b
981ca1f
b0b548d
fb7d1e1
fb7e22a
d44c4b9
250a73e
7534186
c91113b
9676969
a5b09c5
d558c7e
b59a7ba
d558a34
7095515
5adb4ff
5aa4766
ce7e56d
b102364
82b7035
81fe7fe
88749c1
72dd460
881f408
ed1274b
876280a
cb9e8f2
6abd5c6
cf1be84
7f053b0
6b0a66f
699107a
d216354
04549e6
c636fbe
d3e80b5
e8b7138
f84fecd
135a255
a82c481
5af1a60
069bd8f
5416daa
ca5526e
4d1670f
9170f05
d94403e
6d7b154
87333d3
5c40f51
fdd8683
5764258
37499bb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| ## 5.22.0 | ||
| **`(feat):`** Add `fern sdk list` command to list configured and available SDK generators. | ||
| Displays configured SDKs from local fern.yml and available generators from the | ||
| Fern registry. Supports `--language`, `--type`, and `--json` flags. | ||
|
|
||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| ## 5.23.1 | ||
| **`(fix):`** Fix `fern docs dev` hanging indefinitely on Node.js v26+ on Linux by disabling | ||
| io_uring in the child server process. Node 26 enables io_uring by default in | ||
| libuv, which has a busy-loop bug where worker threads spin on an internal | ||
| eventfd, starving the main event loop. | ||
|
|
||
|
|
||
| ## 5.23.0 | ||
| **`(internal):`** Add an opt-in `VerificationStep` to the post-generation pipeline that runs | ||
| `.fern/verify.sh` (when emitted by the generator) inside a language-specific | ||
| `{generatorImage}-validator` container after replay and before any GitHub | ||
| push. A failing script aborts the pipeline before opening a PR and surfaces | ||
| raw stderr through the pipeline logger; a missing script is a silent no-op. | ||
|
|
||
| The step is gated on a hidden `--verify` flag for `fern generate`; when | ||
| passed (with `--local` or `--runner`), the local workspace runner sets | ||
| `config.verify.enabled = true` on the pipeline and the configured container | ||
| runtime (`docker` or `podman`) is forwarded to the validator container. | ||
| Remote/Fiddle generation does not honor this flag yet. | ||
|
|
||
|
|
||
| ## 5.22.1 | ||
| **`(fix):`** Fix `fern docs dev` failing with pnpm 11 due to esbuild build scripts being blocked by default. | ||
| Writes `onlyBuiltDependencies` config to the bundle folder before installing esbuild. | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| ## 5.23.3 | ||
| **`(fix):`** Property-level `x-fern-audiences` filtering now also applies on the V3 OpenAPI / AsyncAPI / | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| OpenRPC import path used by `fern docs dev` and `fern generate --from-openapi`. Inline | ||
| request-body properties, query parameters, inline webhook payload properties, named-type | ||
| properties, `v2RequestBodies`, and the docs `v2Examples` blocks (type-level, request body, | ||
| response body, endpoint-level, `v2Responses`, and webhook payload examples) are now scrubbed | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| using the same exclusion semantics as the Fern Definition path. Untagged elements remain | ||
| universal and are never silently removed. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
|
|
||
|
|
||
| ## 5.23.2 | ||
| **`(fix):`** Suppress Fern's platform `User-Agent` header in generated SDKs when the API definition | ||
| declares a global `User-Agent` header (case-insensitive) under `api.headers`. This | ||
| allows customers to fully override the SDK User-Agent via their Fern Definition without | ||
| the auto-generated `<package>/<version>` value also being emitted. | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| ## 5.24.0 | ||
| **`(internal):`** Plumb `verify`, `verifyRunner`, and `verifyValidatorVersion` flags through | ||
| `GenerationRunner.RunArgs` so the seed runner can invoke | ||
| `PostGenerationPipeline` with `VerificationStep` and exercise the same | ||
| validator-container code path that `fern generate --local --verify` uses. | ||
| No customer-facing CLI behavior change — the flags are opt-in and used only | ||
| by the seed test runner today. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
|
|
||
| ## 5.23.6 | ||
| **`(fix):`** Fix `fern docs dev` hot reload not working for .mdx file changes. The backend | ||
| now updates the docs definition before notifying the browser to refresh, and | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| the reload handler properly recovers from errors instead of silently blocking | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
| all future reloads. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
|
|
||
| ## 5.23.5 | ||
| **`(fix):`** Fix SDK generation crashing with `fatal: <sha> is not a valid object` | ||
| when the prior fern-bot PR was squash-merged and its branch deleted. | ||
| The stale `fern-generation-base` tag update is now skipped with a | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| warning; the SDK PR still opens. | ||
|
|
||
|
|
||
| ## 5.23.4 | ||
| **`(fix):`** Fix allOf composition so inline elements with real constraints (e.g. `pattern`, `minLength`) produce a properly merged type instead of being silently dropped. Also refactored the allOf shortcircuit logic to use a metadata allowlist, which is safer against new OpenAPI fields. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
|
|
||
|
|
||
| **`(fix):`** Fix example generation for allOf compositions to merge base schema fields into property overrides. When an allOf override specifies only `items` without `type: array`, the base schema's type is now correctly inherited, producing properly typed examples instead of null. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| ## 5.25.0 | ||
| **`(feat):`** Register the new `fernapi/fern-cli` generator in the CLI configuration. | ||
|
|
||
|
|
||
| ## 5.24.2 | ||
| **`(fix):`** Fix `fern config migrate` producing wrong file path references in the generated `fern.yml`. Paths from `generators.yml` (relative to the `fern/` directory) are now correctly re-rooted to be relative to the project root where `fern.yml` is created. This also fixes the `docs` `$ref` pointer to use `./fern/docs.yml` instead of `./docs.yml`. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
|
|
||
| ## 5.24.1 | ||
| **`(chore):`** Propagate Fern `docs:` strings into generated JSON Schemas so editor hovers | ||
| work for schemas served from `schema.buildwithfern.dev`. | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| --- | ||
| title: Authentication | ||
| description: Configure how generated CLIs authenticate with your API using environment variables, CLI flags, files, or fallback chains. | ||
| availability: beta | ||
| --- | ||
|
|
||
| <Note title="Early access"> | ||
| The CLI generator is in early access. [Reach out](https://buildwithfern.com/book-demo?type=cli) to get started. | ||
| </Note> | ||
|
|
||
| Each generated CLI reads authentication credentials from the security schemes declared in your OpenAPI spec. Credentials can come from environment variables, CLI flags, files, or a combination of these through fallback chains. | ||
|
|
||
| Without a credential, the CLI still works — you can explore the command tree, view help, and use `--dry-run`. | ||
|
|
||
| ## Credential sources | ||
|
|
||
| The CLI supports several ways to supply credentials, configured at build time. | ||
|
|
||
| | Source | Description | | ||
| | --- | --- | | ||
| | Environment variable | Read from an env var (the most common option). | | ||
| | CLI flag | Auto-registered as a `--<flag-name>` global flag. | | ||
| | File | Read trimmed contents from a file path (`~` is expanded). | | ||
| | Literal | Baked into the binary at compile time. | | ||
| | Fallback chain | Try multiple sources in order; first non-empty value wins. | | ||
|
|
||
| A typical fallback chain lets the CLI flag override the env var, which in turn overrides a file: | ||
|
|
||
| ```bash | ||
| # CLI flag takes priority | ||
| box users get-current-user --api-token sk-123 | ||
|
|
||
| # Otherwise falls back to the environment variable | ||
| export BOX_API_KEY=sk-123 | ||
| box users get-current-user | ||
|
|
||
| # Otherwise reads from a file | ||
| echo "sk-123" > ~/.box/token | ||
| box users get-current-user | ||
| ``` | ||
|
|
||
| ## Supported auth schemes | ||
|
|
||
| The CLI supports every scheme type that OpenAPI's `securitySchemes` defines: | ||
|
|
||
| | Scheme | How the CLI applies it | | ||
| | --- | --- | | ||
| | Bearer (`http: bearer`) | Sends `Authorization: Bearer <token>`. | | ||
| | API key (`apiKey`) | Sends the key in the configured header (for example, `X-Auth-Token`). | | ||
| | Basic (`http: basic`) | Sends `Authorization: Basic <base64(user:pass)>`. Each field has its own credential source. | | ||
| | OAuth 2 | Treated as bearer — sends `Authorization: Bearer <token>`. | | ||
|
|
||
| ## Auth strategies | ||
|
|
||
| When a spec declares multiple security schemes, the CLI composes them according to one of these strategies: | ||
|
|
||
| | Strategy | Behavior | | ||
| | --- | --- | | ||
| | Auto | Default. Infers the right composition from the spec's `security` blocks. | | ||
| | Any | The API accepts any one of the declared schemes. The first scheme with a credential wins. | | ||
| | All | The API requires every scheme simultaneously (for example, HMAC signature plus API key). | | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
| | Routing | Per-operation dispatch. Each endpoint's `security` block determines which schemes to use. | | ||
|
|
||
| Operations that declare `security: []` (an empty list) opt out of authentication entirely — no credentials are sent regardless of what's configured. | ||
|
|
||
| ## Help output | ||
|
|
||
| Every generated CLI includes a dynamically rendered `Authentication:` section in its `--help` output listing every scheme, the expected env var or flag, and whether a credential is detected. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| --- | ||
| title: Customization | ||
| description: Customize generated CLIs with overrides, overlays, multi-spec merging, and custom commands. | ||
| availability: beta | ||
| --- | ||
|
|
||
| <Note title="Early access"> | ||
| The CLI generator is in early access. [Reach out](https://buildwithfern.com/book-demo?type=cli) to get started. | ||
| </Note> | ||
|
|
||
| A generated CLI can be customized at three levels: the OpenAPI spec it's built from, the configuration that combines multiple specs into a single command tree, and code that adds custom commands alongside the spec-derived ones. | ||
|
|
||
| ## Overrides and overlays | ||
|
|
||
| The CLI generator supports both [overrides](/learn/api-definitions/openapi/overrides) and [overlays](/learn/api-definitions/openapi/overlays) for customizing the OpenAPI spec before the CLI is built. This lets you add Fern extensions, rename parameters, or remove internal endpoints without modifying your original spec. | ||
|
|
||
| Overlays follow the [OpenAPI Overlay Specification](https://spec.openapis.org/overlay/v1.0.0.html) and use JSONPath to target elements: | ||
|
|
||
| ```yaml title="overlay.yaml" | ||
| overlay: 1.0.0 | ||
| info: | ||
| title: CLI customizations | ||
| version: 1.0.0 | ||
| actions: | ||
| - target: $.paths['/plants'].get | ||
| update: | ||
| x-fern-sdk-group-name: plants | ||
| x-fern-sdk-method-name: list | ||
| - target: $.paths['/internal/debug'] | ||
| remove: true | ||
| ``` | ||
|
|
||
| When both are present, overrides are applied first, then overlays. | ||
|
|
||
| ## Multi-spec merging | ||
|
|
||
| A single CLI can combine multiple OpenAPI specs into one command tree. This is useful for APIs that split their spec across domains or versions. | ||
|
|
||
| Specs can be merged flat (all commands at the top level) or under a namespace prefix: | ||
|
|
||
| ```rust title="main.rs" | ||
| CliApp::new("my-api") | ||
| .spec(include_str!("core.yaml")) | ||
| .spec_under("billing", include_str!("billing.yaml")) | ||
| .run() | ||
| ``` | ||
|
|
||
| This produces a CLI where core commands live at the top level and billing commands live under a `billing` subcommand: | ||
|
|
||
| ```bash | ||
| my-api users list # from core.yaml | ||
| my-api billing invoices list # from billing.yaml | ||
| ``` | ||
|
|
||
| When a namespace matches a top-level resource in the incoming spec, the CLI hoists that resource's methods into the namespace to avoid repetition (for example, `billing billing invoices list` becomes `billing invoices list`). | ||
|
|
||
| ## Custom commands | ||
|
|
||
| Generated CLIs can include custom commands alongside the spec-derived ones. Custom commands have access to the same API executor, so they can chain multiple API calls into a single workflow. | ||
|
|
||
| ```rust title="main.rs" | ||
| CliApp::new("my-api") | ||
| .spec(include_str!("openapi.yaml")) | ||
| .auth_scheme_env("bearerAuth", "MY_API_TOKEN") | ||
| .command(whoami_cmd(), whoami_handler) | ||
| .run() | ||
| ``` | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [vale] reported by reviewdog 🐶
[Microsoft.Contractions] Use 'doesn't' instead of 'does not'.