From 7f78b483197707c7936ea79319fb3c4db5b53c61 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 21:47:52 -0400 Subject: [PATCH 1/2] feat(cli-generator): add 'CLI generated by Fern' shield to generated CLI README (#17441) * feat(cli-generator): add Built with Fern shield to generated CLI README Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * feat(cli-generator): use 'CLI generated by Fern' badge text Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * feat(cli-generator): add Fern shield to github-distribution-app fixture The fixture landed on main after this branch regenerated the seed CLI READMEs, so it was the only one without the shield. Co-Authored-By: Claude --------- Co-authored-by: rishabh.dhadda Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Claude --- .../unreleased/fern-shield-in-readme.yml | 7 +++ .../cli/src/__test__/emitReadme.test.ts | 52 ++++++++++++++++++- generators/cli/src/__test__/identity.test.ts | 3 +- .../cli/src/__test__/runPipeline.test.ts | 3 +- generators/cli/src/emitReadme.ts | 31 +++++++++-- generators/cli/src/ir.ts | 9 +++- generators/cli/src/runPipeline.ts | 3 +- seed/cli/allof-inline/README.md | 2 + seed/cli/allof/README.md | 2 + .../api-wide-base-path-with-default/README.md | 2 + .../with-split-type-crates/README.md | 2 + .../cli-basic-auth/with-wire-tests/README.md | 2 + .../cli-header-auth/with-wire-tests/README.md | 2 + .../no-custom-config/README.md | 2 + .../with-split-type-crates/README.md | 2 + .../with-wire-tests/README.md | 2 + .../cli-multi-spec/no-custom-config/README.md | 2 + .../with-wire-tests/README.md | 2 + .../with-wire-tests/README.md | 2 + .../cli-oauth/client-credentials/README.md | 2 + .../with-wire-tests/README.md | 2 + .../with-split-type-crates/README.md | 2 + .../README.md | 2 + .../with-wire-tests/README.md | 2 + seed/cli/imdb/README.md | 2 + .../inline-enum-type-name-override/README.md | 2 + .../cli/multi-content-type-examples/README.md | 2 + .../multi-url-environment-reference/README.md | 2 + seed/cli/no-content-response/README.md | 2 + seed/cli/null-type/README.md | 2 + seed/cli/nullable-allof-extends/README.md | 2 + seed/cli/nullable-request-body/README.md | 2 + .../with-wire-tests/README.md | 2 + .../with-wire-tests/README.md | 2 + seed/cli/openapi-request-body-ref/README.md | 2 + seed/cli/openapi-subtitle/README.md | 2 + seed/cli/query-param-name-conflict/README.md | 2 + .../README.md | 2 + .../github-distribution-app/README.md | 2 + .../github-distribution/README.md | 2 + .../github-no-publish/README.md | 2 + .../github-npm/README.md | 1 + .../no-custom-config/README.md | 2 + .../with-split-type-crates/README.md | 2 + .../with-wire-tests/README.md | 2 + .../respect-optional-request-body/README.md | 2 + .../README.md | 2 + seed/cli/server-sent-events-openapi/README.md | 2 + .../README.md | 2 + seed/cli/server-url-templating/README.md | 2 + seed/cli/url-form-encoded/README.md | 2 + seed/cli/webhook-audience/README.md | 2 + seed/cli/x-fern-default/README.md | 2 + .../no-custom-config/README.md | 2 + 54 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 generators/cli/changes/unreleased/fern-shield-in-readme.yml diff --git a/generators/cli/changes/unreleased/fern-shield-in-readme.yml b/generators/cli/changes/unreleased/fern-shield-in-readme.yml new file mode 100644 index 000000000000..7ecd75edcdfc --- /dev/null +++ b/generators/cli/changes/unreleased/fern-shield-in-readme.yml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../../../fern-changes-yml.schema.json + +- summary: | + Generated CLI READMEs now include a "CLI generated by Fern" shield in the + header, matching the branding SDK READMEs already carry. The shield is + omitted for orgs configured for white-labeling. + type: feat diff --git a/generators/cli/src/__test__/emitReadme.test.ts b/generators/cli/src/__test__/emitReadme.test.ts index 68df575fb64b..25f252ca047d 100644 --- a/generators/cli/src/__test__/emitReadme.test.ts +++ b/generators/cli/src/__test__/emitReadme.test.ts @@ -102,7 +102,57 @@ describe("emitReadme", () => { }); expect(readme).not.toContain("npm shield"); - expect(readme).not.toContain("img.shields.io"); + expect(readme).not.toContain("img.shields.io/npm"); + }); + + // ── Fern shield in header ─────────────────────────────────────── + + it("includes the Fern shield linked to the repo", async () => { + const readme = await emitAndRead({ + outputDir, + binaryName: "petstore-api", + apiDisplayName: "Petstore", + authBindings: [bearerBinding], + npmPublishInfo, + repoUrl: "https://github.com/fern-api/petstore-cli" + }); + + expect(readme).toContain( + "[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Ffern-api%2Fpetstore-cli)" + ); + }); + + it("falls back to the display name in the Fern shield link when repoUrl is absent", async () => { + const readme = await emitAndRead({ + outputDir, + binaryName: "acme", + apiDisplayName: "Acme", + authBindings: [bearerBinding], + npmPublishInfo: undefined, + repoUrl: undefined + }); + + expect(readme).toContain( + "[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)]" + ); + expect(readme).toContain("utm_source=Acme%2FCLI)"); + }); + + it("omits the Fern shield when white-labeling is enabled", async () => { + const readme = await emitAndRead({ + outputDir, + binaryName: "acme", + apiDisplayName: "Acme", + authBindings: [bearerBinding], + npmPublishInfo, + repoUrl: "https://github.com/acme/acme-cli", + whiteLabel: true + }); + + expect(readme).not.toContain("fern shield"); + expect(readme).not.toContain("buildwithfern.com"); + // The npm badge is unaffected by white-labeling. + expect(readme).toContain("npm shield"); }); // ── Build from source when npmPublishInfo absent ──────────────── diff --git a/generators/cli/src/__test__/identity.test.ts b/generators/cli/src/__test__/identity.test.ts index 801c20554152..04afc749a2d6 100644 --- a/generators/cli/src/__test__/identity.test.ts +++ b/generators/cli/src/__test__/identity.test.ts @@ -7,7 +7,8 @@ const emptyIr = (apiDisplayName: string | undefined = undefined): IrSummary => ( auth: { schemes: [] }, globalParameters: [], services: {}, - environments: undefined + environments: undefined, + whiteLabel: false }); describe("toKebabCase", () => { diff --git a/generators/cli/src/__test__/runPipeline.test.ts b/generators/cli/src/__test__/runPipeline.test.ts index f71f87edee51..172197bf87d8 100644 --- a/generators/cli/src/__test__/runPipeline.test.ts +++ b/generators/cli/src/__test__/runPipeline.test.ts @@ -111,7 +111,8 @@ describe("runPipeline", () => { auth: overrides.auth ?? { schemes: [] }, globalParameters: overrides.globalParameters ?? [], services: overrides.services ?? {}, - environments: overrides.environments + environments: overrides.environments, + whiteLabel: overrides.whiteLabel ?? false }); const localFilesConfig: ResolvedOutputConfig = { diff --git a/generators/cli/src/emitReadme.ts b/generators/cli/src/emitReadme.ts index fdc8b6744d04..dd7e5a605523 100644 --- a/generators/cli/src/emitReadme.ts +++ b/generators/cli/src/emitReadme.ts @@ -36,12 +36,17 @@ export async function emitReadme(args: { * `packageIdentity.name` is set (or left at the template default). */ packageName?: string; + /** + * The IR's `readmeConfig.whiteLabel`. White-labeled orgs get no Fern + * shield, matching `ReadmeGenerator`'s behavior for SDK READMEs. + */ + whiteLabel?: boolean; }): Promise { const { outputDir, binaryName, apiDisplayName, authBindings, npmPublishInfo, repoUrl, distribution } = args; const installerName = args.packageName ?? TEMPLATE_PACKAGE_NAME; const displayName = apiDisplayName ?? binaryName; - const header = generateHeader({ displayName, npmPublishInfo }); + const header = generateHeader({ displayName, npmPublishInfo, repoUrl, whiteLabel: args.whiteLabel ?? false }); const blocks = generateBlocks({ binaryName, displayName, @@ -65,10 +70,18 @@ export async function emitReadme(args: { // Header // --------------------------------------------------------------------------- -function generateHeader(args: { displayName: string; npmPublishInfo: ResolvedNpmPublishInfo | undefined }): string { - const { displayName, npmPublishInfo } = args; +function generateHeader(args: { + displayName: string; + npmPublishInfo: ResolvedNpmPublishInfo | undefined; + repoUrl: string | undefined; + whiteLabel: boolean; +}): string { + const { displayName, npmPublishInfo, repoUrl, whiteLabel } = args; const suffix = displayName.toUpperCase().endsWith("API") ? "" : " API"; const shieldLines: string[] = []; + if (!whiteLabel) { + shieldLines.push(fernShield({ displayName, repoUrl })); + } if (npmPublishInfo != null) { shieldLines.push( `[![npm shield](https://img.shields.io/npm/v/${npmPublishInfo.packageName})](https://www.npmjs.com/package/${npmPublishInfo.packageName})` @@ -87,6 +100,18 @@ function generateHeader(args: { displayName: string; npmPublishInfo: ResolvedNpm return lines(`# ${displayName} CLI`, "", `Command-line interface for the ${displayName}${suffix}.`, ""); } +/** + * The "Built with Fern" badge, identical in shape to the one + * `ReadmeGenerator` writes for SDK READMEs so both surfaces carry the same + * branding. The `utm_source` identifies the repo the badge was clicked from, + * falling back to `/CLI` when the CLI isn't published to a + * known repo. + */ +function fernShield(args: { displayName: string; repoUrl: string | undefined }): string { + const repoSource = args.repoUrl ?? `${args.displayName}/CLI`; + return `[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=${encodeURIComponent(repoSource)})`; +} + // --------------------------------------------------------------------------- // Table of contents — generated after the block merge so it reflects // customer-added sections too. ReadmeParser strips any existing diff --git a/generators/cli/src/ir.ts b/generators/cli/src/ir.ts index e409818c7e6c..0bc7ea4b214c 100644 --- a/generators/cli/src/ir.ts +++ b/generators/cli/src/ir.ts @@ -30,6 +30,12 @@ export interface IrSummary { * to resolve the base URL the OAuth token endpoint path is joined to. */ environments: FernIr.EnvironmentsConfig | undefined; + /** + * The IR's `readmeConfig.whiteLabel`, defaulted to `false`. Set for orgs + * configured for white-labeling; suppresses the Fern shield in the + * generated README. + */ + whiteLabel: boolean; } /** @@ -58,7 +64,8 @@ export async function readIr(irFilepath: string): Promise { auth: { schemes: ir.auth.schemes }, globalParameters: ir.globalParameters ?? [], services: ir.services, - environments: ir.environments + environments: ir.environments, + whiteLabel: ir.readmeConfig?.whiteLabel ?? false }; } diff --git a/generators/cli/src/runPipeline.ts b/generators/cli/src/runPipeline.ts index 9b69968bb830..7835ede99fe8 100644 --- a/generators/cli/src/runPipeline.ts +++ b/generators/cli/src/runPipeline.ts @@ -155,7 +155,8 @@ export async function runPipeline(args: { npmPublishInfo: outputConfig.npmPublishInfo, repoUrl: outputConfig.repoUrl, distribution, - packageName: customConfig.packageIdentity?.name + packageName: customConfig.packageIdentity?.name, + whiteLabel: ir.whiteLabel }); await emitReference({ outputDir, diff --git a/seed/cli/allof-inline/README.md b/seed/cli/allof-inline/README.md index ef042193ce12..698912db152c 100644 --- a/seed/cli/allof-inline/README.md +++ b/seed/cli/allof-inline/README.md @@ -1,5 +1,7 @@ # allOf Composition CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=allOf%20Composition%2FCLI) + Command-line interface for the allOf Composition API. ## Table of contents diff --git a/seed/cli/allof/README.md b/seed/cli/allof/README.md index ef042193ce12..698912db152c 100644 --- a/seed/cli/allof/README.md +++ b/seed/cli/allof/README.md @@ -1,5 +1,7 @@ # allOf Composition CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=allOf%20Composition%2FCLI) + Command-line interface for the allOf Composition API. ## Table of contents diff --git a/seed/cli/api-wide-base-path-with-default/README.md b/seed/cli/api-wide-base-path-with-default/README.md index 20a1b1995f39..ea8255cf014b 100644 --- a/seed/cli/api-wide-base-path-with-default/README.md +++ b/seed/cli/api-wide-base-path-with-default/README.md @@ -1,5 +1,7 @@ # api-wide-base-path-with-default CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=api-wide-base-path-with-default%2FCLI) + Command-line interface for the api-wide-base-path-with-default API. ## Table of contents diff --git a/seed/cli/cli-basic-auth/with-split-type-crates/README.md b/seed/cli/cli-basic-auth/with-split-type-crates/README.md index 4f6409fc87fd..ce22ba7ae395 100644 --- a/seed/cli/cli-basic-auth/with-split-type-crates/README.md +++ b/seed/cli/cli-basic-auth/with-split-type-crates/README.md @@ -1,5 +1,7 @@ # Basic Auth CLI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Basic%20Auth%20CLI%2FCLI) + Command-line interface for the Basic Auth CLI API. ## Table of contents diff --git a/seed/cli/cli-basic-auth/with-wire-tests/README.md b/seed/cli/cli-basic-auth/with-wire-tests/README.md index 4f6409fc87fd..ce22ba7ae395 100644 --- a/seed/cli/cli-basic-auth/with-wire-tests/README.md +++ b/seed/cli/cli-basic-auth/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Basic Auth CLI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Basic%20Auth%20CLI%2FCLI) + Command-line interface for the Basic Auth CLI API. ## Table of contents diff --git a/seed/cli/cli-header-auth/with-wire-tests/README.md b/seed/cli/cli-header-auth/with-wire-tests/README.md index 6c4a8d9d9260..0a9951f9c4ba 100644 --- a/seed/cli/cli-header-auth/with-wire-tests/README.md +++ b/seed/cli/cli-header-auth/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Header Auth CLI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Header%20Auth%20CLI%2FCLI) + Command-line interface for the Header Auth CLI API. ## Table of contents diff --git a/seed/cli/cli-multi-spec-namespaced/no-custom-config/README.md b/seed/cli/cli-multi-spec-namespaced/no-custom-config/README.md index 70d438798dac..421340016a90 100644 --- a/seed/cli/cli-multi-spec-namespaced/no-custom-config/README.md +++ b/seed/cli/cli-multi-spec-namespaced/no-custom-config/README.md @@ -1,5 +1,7 @@ # Users API (v1) CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Users%20API%20(v1)%2FCLI) + Command-line interface for the Users API (v1) API. ## Table of contents diff --git a/seed/cli/cli-multi-spec-namespaced/with-split-type-crates/README.md b/seed/cli/cli-multi-spec-namespaced/with-split-type-crates/README.md index 70d438798dac..421340016a90 100644 --- a/seed/cli/cli-multi-spec-namespaced/with-split-type-crates/README.md +++ b/seed/cli/cli-multi-spec-namespaced/with-split-type-crates/README.md @@ -1,5 +1,7 @@ # Users API (v1) CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Users%20API%20(v1)%2FCLI) + Command-line interface for the Users API (v1) API. ## Table of contents diff --git a/seed/cli/cli-multi-spec-namespaced/with-wire-tests/README.md b/seed/cli/cli-multi-spec-namespaced/with-wire-tests/README.md index 70d438798dac..421340016a90 100644 --- a/seed/cli/cli-multi-spec-namespaced/with-wire-tests/README.md +++ b/seed/cli/cli-multi-spec-namespaced/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Users API (v1) CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Users%20API%20(v1)%2FCLI) + Command-line interface for the Users API (v1) API. ## Table of contents diff --git a/seed/cli/cli-multi-spec/no-custom-config/README.md b/seed/cli/cli-multi-spec/no-custom-config/README.md index 28416d6bee13..70b41dc731b2 100644 --- a/seed/cli/cli-multi-spec/no-custom-config/README.md +++ b/seed/cli/cli-multi-spec/no-custom-config/README.md @@ -1,5 +1,7 @@ # Users API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Users%20API%2FCLI) + Command-line interface for the Users API. ## Table of contents diff --git a/seed/cli/cli-namespace-stutter/with-wire-tests/README.md b/seed/cli/cli-namespace-stutter/with-wire-tests/README.md index 3fd9d0dc1fff..5b1d5200364f 100644 --- a/seed/cli/cli-namespace-stutter/with-wire-tests/README.md +++ b/seed/cli/cli-namespace-stutter/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Versioned Store CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Versioned%20Store%2FCLI) + Command-line interface for the Versioned Store API. ## Table of contents diff --git a/seed/cli/cli-oauth-login-flow/with-wire-tests/README.md b/seed/cli/cli-oauth-login-flow/with-wire-tests/README.md index 1a5113308c83..9ed5a0ea73d6 100644 --- a/seed/cli/cli-oauth-login-flow/with-wire-tests/README.md +++ b/seed/cli/cli-oauth-login-flow/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Login Flow Test API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Login%20Flow%20Test%20API%2FCLI) + Command-line interface for the Login Flow Test API. ## Table of contents diff --git a/seed/cli/cli-oauth/client-credentials/README.md b/seed/cli/cli-oauth/client-credentials/README.md index 0168ef6767b7..089cf2cc75fd 100644 --- a/seed/cli/cli-oauth/client-credentials/README.md +++ b/seed/cli/cli-oauth/client-credentials/README.md @@ -1,5 +1,7 @@ # OAuth Test API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=OAuth%20Test%20API%2FCLI) + Command-line interface for the OAuth Test API. ## Table of contents diff --git a/seed/cli/cli-reserved-keywords/with-wire-tests/README.md b/seed/cli/cli-reserved-keywords/with-wire-tests/README.md index 63fac11c6761..2a5a1436b2da 100644 --- a/seed/cli/cli-reserved-keywords/with-wire-tests/README.md +++ b/seed/cli/cli-reserved-keywords/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Reserved Keyword CLI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Reserved%20Keyword%20CLI%2FCLI) + Command-line interface for the Reserved Keyword CLI API. ## Table of contents diff --git a/seed/cli/cli-shared-types/with-split-type-crates/README.md b/seed/cli/cli-shared-types/with-split-type-crates/README.md index d29859333f1a..e95ea3216d90 100644 --- a/seed/cli/cli-shared-types/with-split-type-crates/README.md +++ b/seed/cli/cli-shared-types/with-split-type-crates/README.md @@ -1,5 +1,7 @@ # Shared Types CLI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Shared%20Types%20CLI%2FCLI) + Command-line interface for the Shared Types CLI API. ## Table of contents diff --git a/seed/cli/discriminated-union-with-nested-oneof/README.md b/seed/cli/discriminated-union-with-nested-oneof/README.md index c2893d59db4a..1b926e393588 100644 --- a/seed/cli/discriminated-union-with-nested-oneof/README.md +++ b/seed/cli/discriminated-union-with-nested-oneof/README.md @@ -1,5 +1,7 @@ # Discriminated Union with Nested OneOf CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Discriminated%20Union%20with%20Nested%20OneOf%2FCLI) + Command-line interface for the Discriminated Union with Nested OneOf API. ## Table of contents diff --git a/seed/cli/file-upload-openapi/with-wire-tests/README.md b/seed/cli/file-upload-openapi/with-wire-tests/README.md index 2f777a6de928..eedff1c5d146 100644 --- a/seed/cli/file-upload-openapi/with-wire-tests/README.md +++ b/seed/cli/file-upload-openapi/with-wire-tests/README.md @@ -1,5 +1,7 @@ # api CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=api%2FCLI) + Command-line interface for the api. ## Table of contents diff --git a/seed/cli/imdb/README.md b/seed/cli/imdb/README.md index 98f9d72d8a50..6e5ceb094c8d 100644 --- a/seed/cli/imdb/README.md +++ b/seed/cli/imdb/README.md @@ -1,5 +1,7 @@ # api CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=api%2FCLI) + Command-line interface for the api. ## Table of contents diff --git a/seed/cli/inline-enum-type-name-override/README.md b/seed/cli/inline-enum-type-name-override/README.md index 4d1c7d114da6..48bd302a8ff8 100644 --- a/seed/cli/inline-enum-type-name-override/README.md +++ b/seed/cli/inline-enum-type-name-override/README.md @@ -1,5 +1,7 @@ # Inline Enum Type Name Override CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Inline%20Enum%20Type%20Name%20Override%2FCLI) + Command-line interface for the Inline Enum Type Name Override API. ## Table of contents diff --git a/seed/cli/multi-content-type-examples/README.md b/seed/cli/multi-content-type-examples/README.md index 79b553c9e01d..bbf5ece64805 100644 --- a/seed/cli/multi-content-type-examples/README.md +++ b/seed/cli/multi-content-type-examples/README.md @@ -1,5 +1,7 @@ # Multi Content Type Examples CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Multi%20Content%20Type%20Examples%2FCLI) + Command-line interface for the Multi Content Type Examples API. ## Table of contents diff --git a/seed/cli/multi-url-environment-reference/README.md b/seed/cli/multi-url-environment-reference/README.md index d6fca3f6287e..27b8997b1a7a 100644 --- a/seed/cli/multi-url-environment-reference/README.md +++ b/seed/cli/multi-url-environment-reference/README.md @@ -1,5 +1,7 @@ # multi-url-environment-reference CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=multi-url-environment-reference%2FCLI) + Command-line interface for the multi-url-environment-reference API. ## Table of contents diff --git a/seed/cli/no-content-response/README.md b/seed/cli/no-content-response/README.md index 44345a16c95b..65b4c3b8a3a5 100644 --- a/seed/cli/no-content-response/README.md +++ b/seed/cli/no-content-response/README.md @@ -1,5 +1,7 @@ # no-content-response CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=no-content-response%2FCLI) + Command-line interface for the no-content-response API. ## Table of contents diff --git a/seed/cli/null-type/README.md b/seed/cli/null-type/README.md index 63a63d2f75bc..bd52be3accc4 100644 --- a/seed/cli/null-type/README.md +++ b/seed/cli/null-type/README.md @@ -1,5 +1,7 @@ # null-type CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=null-type%2FCLI) + Command-line interface for the null-type API. ## Table of contents diff --git a/seed/cli/nullable-allof-extends/README.md b/seed/cli/nullable-allof-extends/README.md index 4720f6c7c88d..a0832d917eb4 100644 --- a/seed/cli/nullable-allof-extends/README.md +++ b/seed/cli/nullable-allof-extends/README.md @@ -1,5 +1,7 @@ # Nullable AllOf Extends Test CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Nullable%20AllOf%20Extends%20Test%2FCLI) + Command-line interface for the Nullable AllOf Extends Test API. ## Table of contents diff --git a/seed/cli/nullable-request-body/README.md b/seed/cli/nullable-request-body/README.md index 04948d106a23..766534429121 100644 --- a/seed/cli/nullable-request-body/README.md +++ b/seed/cli/nullable-request-body/README.md @@ -1,5 +1,7 @@ # nullable-request-body CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=nullable-request-body%2FCLI) + Command-line interface for the nullable-request-body API. ## Table of contents diff --git a/seed/cli/oauth-client-credentials-openapi/with-wire-tests/README.md b/seed/cli/oauth-client-credentials-openapi/with-wire-tests/README.md index 01c271fd4158..661651c7ad83 100644 --- a/seed/cli/oauth-client-credentials-openapi/with-wire-tests/README.md +++ b/seed/cli/oauth-client-credentials-openapi/with-wire-tests/README.md @@ -1,5 +1,7 @@ # OAuth Client Credentials OpenAPI CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=OAuth%20Client%20Credentials%20OpenAPI%2FCLI) + Command-line interface for the OAuth Client Credentials OpenAPI. ## Table of contents diff --git a/seed/cli/openapi-path-param-body-collision/with-wire-tests/README.md b/seed/cli/openapi-path-param-body-collision/with-wire-tests/README.md index 24bd1a0d7441..10f1b454dfc5 100644 --- a/seed/cli/openapi-path-param-body-collision/with-wire-tests/README.md +++ b/seed/cli/openapi-path-param-body-collision/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Path Param Body Collision CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Path%20Param%20Body%20Collision%2FCLI) + Command-line interface for the Path Param Body Collision API. ## Table of contents diff --git a/seed/cli/openapi-request-body-ref/README.md b/seed/cli/openapi-request-body-ref/README.md index 9c3470d2186a..68a05107eb46 100644 --- a/seed/cli/openapi-request-body-ref/README.md +++ b/seed/cli/openapi-request-body-ref/README.md @@ -1,5 +1,7 @@ # openapi-request-body-ref CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=openapi-request-body-ref%2FCLI) + Command-line interface for the openapi-request-body-ref API. ## Table of contents diff --git a/seed/cli/openapi-subtitle/README.md b/seed/cli/openapi-subtitle/README.md index 466ad0a219f2..1207faeb74fc 100644 --- a/seed/cli/openapi-subtitle/README.md +++ b/seed/cli/openapi-subtitle/README.md @@ -1,5 +1,7 @@ # Plant Store API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Plant%20Store%20API%2FCLI) + Command-line interface for the Plant Store API. ## Table of contents diff --git a/seed/cli/query-param-name-conflict/README.md b/seed/cli/query-param-name-conflict/README.md index 8527929e79b3..c4cf4f552ea1 100644 --- a/seed/cli/query-param-name-conflict/README.md +++ b/seed/cli/query-param-name-conflict/README.md @@ -1,5 +1,7 @@ # Query Param Name Conflict API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Query%20Param%20Name%20Conflict%20API%2FCLI) + Command-line interface for the Query Param Name Conflict API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi-as-objects/README.md b/seed/cli/query-parameters-openapi-as-objects/README.md index bf6980fa7f00..53ea8f5c5797 100644 --- a/seed/cli/query-parameters-openapi-as-objects/README.md +++ b/seed/cli/query-parameters-openapi-as-objects/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Query%20Parameters%20API%2FCLI) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/github-distribution-app/README.md b/seed/cli/query-parameters-openapi/github-distribution-app/README.md index 5fd4200d43bd..a85e6dbe305f 100644 --- a/seed/cli/query-parameters-openapi/github-distribution-app/README.md +++ b/seed/cli/query-parameters-openapi/github-distribution-app/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fquery-parameters-openapi%2Ffern) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/github-distribution/README.md b/seed/cli/query-parameters-openapi/github-distribution/README.md index 5fd4200d43bd..a85e6dbe305f 100644 --- a/seed/cli/query-parameters-openapi/github-distribution/README.md +++ b/seed/cli/query-parameters-openapi/github-distribution/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fquery-parameters-openapi%2Ffern) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/github-no-publish/README.md b/seed/cli/query-parameters-openapi/github-no-publish/README.md index 147b9270627b..834c1d5c1e44 100644 --- a/seed/cli/query-parameters-openapi/github-no-publish/README.md +++ b/seed/cli/query-parameters-openapi/github-no-publish/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fquery-parameters-openapi%2Ffern) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/github-npm/README.md b/seed/cli/query-parameters-openapi/github-npm/README.md index c8909f8e68a6..029e3129738f 100644 --- a/seed/cli/query-parameters-openapi/github-npm/README.md +++ b/seed/cli/query-parameters-openapi/github-npm/README.md @@ -1,5 +1,6 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fquery-parameters-openapi%2Ffern) [![npm shield](https://img.shields.io/npm/v/@fern/query-parameters-openapi)](https://www.npmjs.com/package/@fern/query-parameters-openapi) Command-line interface for the Query Parameters API. diff --git a/seed/cli/query-parameters-openapi/no-custom-config/README.md b/seed/cli/query-parameters-openapi/no-custom-config/README.md index bf6980fa7f00..53ea8f5c5797 100644 --- a/seed/cli/query-parameters-openapi/no-custom-config/README.md +++ b/seed/cli/query-parameters-openapi/no-custom-config/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Query%20Parameters%20API%2FCLI) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/with-split-type-crates/README.md b/seed/cli/query-parameters-openapi/with-split-type-crates/README.md index bf6980fa7f00..53ea8f5c5797 100644 --- a/seed/cli/query-parameters-openapi/with-split-type-crates/README.md +++ b/seed/cli/query-parameters-openapi/with-split-type-crates/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Query%20Parameters%20API%2FCLI) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/query-parameters-openapi/with-wire-tests/README.md b/seed/cli/query-parameters-openapi/with-wire-tests/README.md index bf6980fa7f00..53ea8f5c5797 100644 --- a/seed/cli/query-parameters-openapi/with-wire-tests/README.md +++ b/seed/cli/query-parameters-openapi/with-wire-tests/README.md @@ -1,5 +1,7 @@ # Query Parameters API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Query%20Parameters%20API%2FCLI) + Command-line interface for the Query Parameters API. ## Table of contents diff --git a/seed/cli/respect-optional-request-body/README.md b/seed/cli/respect-optional-request-body/README.md index 9f4b4500c2e0..065ef1992845 100644 --- a/seed/cli/respect-optional-request-body/README.md +++ b/seed/cli/respect-optional-request-body/README.md @@ -1,5 +1,7 @@ # Optional referenced request bodies CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Optional%20referenced%20request%20bodies%2FCLI) + Command-line interface for the Optional referenced request bodies API. ## Table of contents diff --git a/seed/cli/schemaless-request-body-examples/README.md b/seed/cli/schemaless-request-body-examples/README.md index 8153400665db..125def0445db 100644 --- a/seed/cli/schemaless-request-body-examples/README.md +++ b/seed/cli/schemaless-request-body-examples/README.md @@ -1,5 +1,7 @@ # Schemaless Request Body Examples API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Schemaless%20Request%20Body%20Examples%20API%2FCLI) + Command-line interface for the Schemaless Request Body Examples API. ## Table of contents diff --git a/seed/cli/server-sent-events-openapi/README.md b/seed/cli/server-sent-events-openapi/README.md index 861cc5e62ead..88077036243e 100644 --- a/seed/cli/server-sent-events-openapi/README.md +++ b/seed/cli/server-sent-events-openapi/README.md @@ -1,5 +1,7 @@ # server-sent-events-openapi CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=server-sent-events-openapi%2FCLI) + Command-line interface for the server-sent-events-openapi. ## Table of contents diff --git a/seed/cli/server-url-templating-single-url/README.md b/seed/cli/server-url-templating-single-url/README.md index 906fab2593a9..031aaab6616f 100644 --- a/seed/cli/server-url-templating-single-url/README.md +++ b/seed/cli/server-url-templating-single-url/README.md @@ -1,5 +1,7 @@ # Server URL Templating API (single base URL) CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Server%20URL%20Templating%20API%20(single%20base%20URL)%2FCLI) + Command-line interface for the Server URL Templating API (single base URL) API. ## Table of contents diff --git a/seed/cli/server-url-templating/README.md b/seed/cli/server-url-templating/README.md index cd0a1b065eb8..28d9df81217b 100644 --- a/seed/cli/server-url-templating/README.md +++ b/seed/cli/server-url-templating/README.md @@ -1,5 +1,7 @@ # Server URL Templating API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Server%20URL%20Templating%20API%2FCLI) + Command-line interface for the Server URL Templating API. ## Table of contents diff --git a/seed/cli/url-form-encoded/README.md b/seed/cli/url-form-encoded/README.md index 4d36256a89ba..2c5da9c4e5b0 100644 --- a/seed/cli/url-form-encoded/README.md +++ b/seed/cli/url-form-encoded/README.md @@ -1,5 +1,7 @@ # URL Form Encoded API CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=URL%20Form%20Encoded%20API%2FCLI) + Command-line interface for the URL Form Encoded API. ## Table of contents diff --git a/seed/cli/webhook-audience/README.md b/seed/cli/webhook-audience/README.md index 7d9acbad358f..df93d1c85821 100644 --- a/seed/cli/webhook-audience/README.md +++ b/seed/cli/webhook-audience/README.md @@ -1,5 +1,7 @@ # Webhook Audience Test CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Webhook%20Audience%20Test%2FCLI) + Command-line interface for the Webhook Audience Test API. ## Table of contents diff --git a/seed/cli/x-fern-default/README.md b/seed/cli/x-fern-default/README.md index e4f6c1844f17..ff17d3d5e24c 100644 --- a/seed/cli/x-fern-default/README.md +++ b/seed/cli/x-fern-default/README.md @@ -1,5 +1,7 @@ # x-fern-default test CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=x-fern-default%20test%2FCLI) + Command-line interface for the x-fern-default test API. ## Table of contents diff --git a/seed/cli/x-fern-global-parameters/no-custom-config/README.md b/seed/cli/x-fern-global-parameters/no-custom-config/README.md index fa5fa882938a..57e0e0db729e 100644 --- a/seed/cli/x-fern-global-parameters/no-custom-config/README.md +++ b/seed/cli/x-fern-global-parameters/no-custom-config/README.md @@ -1,5 +1,7 @@ # Test x-fern-global-parameters extension CLI +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-CLI%20generated%20by%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Test%20x-fern-global-parameters%20extension%2FCLI) + Command-line interface for the Test x-fern-global-parameters extension API. ## Table of contents From 8267efd89ca389394fa69b84c2e4006928790e40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 22 Aug 2026 01:52:14 +0000 Subject: [PATCH 2/2] chore(cli-generator): release 0.38.0 --- .../{unreleased => 0.38.0}/fern-shield-in-readme.yml | 0 generators/cli/versions.yml | 9 +++++++++ 2 files changed, 9 insertions(+) rename generators/cli/changes/{unreleased => 0.38.0}/fern-shield-in-readme.yml (100%) diff --git a/generators/cli/changes/unreleased/fern-shield-in-readme.yml b/generators/cli/changes/0.38.0/fern-shield-in-readme.yml similarity index 100% rename from generators/cli/changes/unreleased/fern-shield-in-readme.yml rename to generators/cli/changes/0.38.0/fern-shield-in-readme.yml diff --git a/generators/cli/versions.yml b/generators/cli/versions.yml index 949e136062e0..6ac9fd10145c 100644 --- a/generators/cli/versions.yml +++ b/generators/cli/versions.yml @@ -1,4 +1,13 @@ # yaml-language-server: $schema=../../fern-versions-yml.schema.json +- version: 0.38.0 + changelogEntry: + - summary: | + Generated CLI READMEs now include a "CLI generated by Fern" shield in the + header, matching the branding SDK READMEs already carry. The shield is + omitted for orgs configured for white-labeling. + type: feat + createdAt: "2026-08-22" + irVersion: 67 - version: 0.37.0 changelogEntry: - summary: |