Skip to content
Merged
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
10 changes: 10 additions & 0 deletions docs-yml.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -2051,6 +2051,16 @@
}
]
},
"collapsed": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"collapsible": {
"oneOf": [
{
Expand Down
14 changes: 12 additions & 2 deletions fern-docs.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,17 @@
}
},
"collapsed": {
"type": "boolean"
"oneOf": [
{
"type": "boolean"
},
{
"type": "string",
"enum": [
"open-by-default"
]
}
]
},
"slug": {
"type": "string"
Expand Down Expand Up @@ -1409,4 +1419,4 @@
]
}
}
}
}
5 changes: 5 additions & 0 deletions fern/apis/docs-yml/definition/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,11 @@ types:
icon: optional<string>
hidden: optional<boolean>
skip-slug: optional<boolean>
collapsed:
type: optional<boolean>
docs: |
Deprecated. Use `collapsible` and `collapsed-by-default` instead.
availability: deprecated
collapsible:
type: optional<boolean>
docs: Whether the section can be expanded/collapsed by the user in the sidebar.
Expand Down
14 changes: 12 additions & 2 deletions generators/csharp/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,13 +287,23 @@ export class SdkGeneratorCLI extends AbstractCsharpGeneratorCli {
endpointSnippets: snippets.endpoints
});
} catch (e) {
context.logger.warn("Failed to generate README.md, this is OK.");
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}

try {
await this.generateReference({ context });
} catch (e) {
context.logger.warn("Failed to generate reference.md, this is OK.");
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}
}
context.logger.debug(`[TIMING] code generation took ${Date.now() - generateStartTime}ms`);
Expand Down
10 changes: 10 additions & 0 deletions generators/csharp/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
- version: 2.24.1
changelogEntry:
- summary: |
Improve error logging for README.md and reference.md generation failures.
The generator now logs the actual error message and stack trace instead
of a generic "this is OK" message, making it easier to diagnose generation issues.
type: chore
createdAt: "2026-03-09"
irVersion: 65

- version: 2.24.0
changelogEntry:
- summary: |
Expand Down
18 changes: 10 additions & 8 deletions generators/go-v2/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,21 +72,23 @@ export class SdkGeneratorCLI extends AbstractGoGeneratorCli<SdkCustomConfigSchem
endpointSnippets
});
} catch (e) {
context.logger.error("Failed to generate README.md");
if (e instanceof Error) {
context.logger.debug(e.message);
context.logger.debug(e.stack ?? "");
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}
}

try {
await this.generateReference({ context });
} catch (error) {
context.logger.warn("Failed to generate reference.md, this is OK.");
if (error instanceof Error) {
context.logger.warn((error as Error)?.message);
context.logger.warn((error as Error)?.stack ?? "");
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/go/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
- version: 1.28.5
changelogEntry:
- summary: |
Improve error logging for reference.md generation failures. The generator
now logs the actual error message and stack trace instead of a generic
"this is OK" message, making it easier to diagnose generation issues.
type: chore
createdAt: "2026-03-09"
irVersion: 61

- version: 1.28.4
changelogEntry:
- summary: |
Expand Down
18 changes: 12 additions & 6 deletions generators/php/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,24 @@ export class SdkGeneratorCLI extends AbstractPhpGeneratorCli<SdkCustomConfigSche
endpointSnippets: snippets
});
} catch (e) {
context.logger.warn(
`Failed to generate README.md: ${e instanceof Error ? e.message : "Unknown error"}. This is non-critical and generation will continue.`
);
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}

try {
await context.snippetGenerator.populateSnippetsCache();
await this.generateReference({ context });
} catch (e) {
context.logger.warn(
`Failed to generate reference.md: ${e instanceof Error ? e.message : "Unknown error"}. This is non-critical and generation will continue.`
);
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/php/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
- version: 2.1.7
changelogEntry:
- summary: |
Improve error logging for README.md and reference.md generation failures.
The generator now logs the actual error message and stack trace instead
of a generic message, making it easier to diagnose generation issues.
type: chore
createdAt: "2026-03-09"
irVersion: 62

- version: 2.1.6
changelogEntry:
- summary: |
Expand Down
18 changes: 10 additions & 8 deletions generators/python-v2/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,11 @@ export class SdkGeneratorCli extends AbstractPythonGeneratorCli<SdkCustomConfigS
try {
await this.generateReadme({ context, endpointSnippets });
} catch (error) {
context.logger.error("Failed to generate README.md");
if (error instanceof Error) {
context.logger.debug(error.message);
context.logger.debug(error.stack ?? "");
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}
}
Expand All @@ -76,10 +77,11 @@ export class SdkGeneratorCli extends AbstractPythonGeneratorCli<SdkCustomConfigS
try {
await this.generateReference({ context, endpointSnippets });
} catch (error) {
context.logger.warn("Failed to generate reference.md, this is OK.");
if (error instanceof Error) {
context.logger.debug(error.message);
context.logger.debug(error.stack ?? "");
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/python/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
# For unreleased changes, use unreleased.yml
- version: 4.62.2
changelogEntry:
- summary: |
Improve error logging for reference.md generation failures. The generator
now logs the actual error message and stack trace instead of a generic
"this is OK" message, making it easier to diagnose generation issues.
type: chore
createdAt: "2026-03-09"
irVersion: 65

- version: 4.62.1
changelogEntry:
- summary: |
Expand Down
18 changes: 10 additions & 8 deletions generators/ruby-v2/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,21 +117,23 @@ export class SdkGeneratorCLI extends AbstractRubyGeneratorCli<SdkCustomConfigSch
});
context.logger.debug("Generated readme!");
} catch (e) {
context.logger.error("Failed to generate README.md");
if (e instanceof Error) {
context.logger.debug(e.message);
context.logger.debug(e.stack ?? "");
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}
}

try {
await this.generateReference({ context });
} catch (error) {
context.logger.warn("Failed to generate reference.md, this is OK.");
if (error instanceof Error) {
context.logger.warn((error as Error)?.message);
context.logger.warn((error as Error)?.stack ?? "");
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/ruby-v2/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json

- version: 1.0.6
changelogEntry:
- summary: |
Improve error logging for reference.md generation failures. The generator
now logs the actual error message and stack trace instead of a generic
"this is OK" message, making it easier to diagnose generation issues.
type: chore
createdAt: "2026-03-09"
irVersion: 61

- version: 1.0.5
changelogEntry:
- summary: |
Expand Down
19 changes: 12 additions & 7 deletions generators/rust/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { GeneratorNotificationService } from "@fern-api/base-generator";
import { extractErrorMessage } from "@fern-api/core-utils";
import { RelativeFilePath } from "@fern-api/fs-utils";
import {
AbstractRustGeneratorCli,
Expand Down Expand Up @@ -783,9 +782,12 @@ export class SdkGeneratorCli extends AbstractRustGeneratorCli<SdkCustomConfigSch

context.logger.debug("Successfully added README.md to project");
} catch (error) {
const errorMsg = extractErrorMessage(error);
context.logger.debug(`README generation failed: ${errorMsg}`);
throw new Error(`Failed to generate README.md: ${errorMsg}`);
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}
}

Expand Down Expand Up @@ -850,9 +852,12 @@ export class SdkGeneratorCli extends AbstractRustGeneratorCli<SdkCustomConfigSch
context.project.addSourceFiles(referenceFile);
context.logger.debug("Successfully added reference.md to project");
} catch (error) {
const errorMsg = extractErrorMessage(error);
context.logger.debug(`Reference generation failed: ${errorMsg}`);
throw new Error(`Failed to generate reference.md: ${errorMsg}`);
const errorMessage = error instanceof Error ? error.message : String(error);
const errorStack = error instanceof Error ? error.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/rust/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json

- version: 0.19.1
changelogEntry:
- summary: |
Improve error logging for README.md and reference.md generation failures.
The generator now logs the actual error message and stack trace instead
of crashing the entire generation, making it easier to diagnose issues.
type: fix
createdAt: "2026-03-09"
irVersion: 62

- version: 0.19.0
changelogEntry:
- summary: |
Expand Down
16 changes: 13 additions & 3 deletions generators/swift/sdk/src/SdkGeneratorCli.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { File, GeneratorNotificationService } from "@fern-api/base-generator";
import { assertNever, entries, extractErrorMessage, noop } from "@fern-api/core-utils";
import { assertNever, entries, noop } from "@fern-api/core-utils";
import { join, RelativeFilePath } from "@fern-api/fs-utils";
import { AbstractSwiftGeneratorCli, SourceTemplateFiles, TestTemplateFiles } from "@fern-api/swift-base";
import { sanitizeSelf, swift } from "@fern-api/swift-codegen";
Expand Down Expand Up @@ -98,7 +98,12 @@ export class SdkGeneratorCLI extends AbstractSwiftGeneratorCli<SdkCustomConfigSc
});
context.project.addRootFiles(new File("README.md", RelativeFilePath.of(""), content));
} catch (e) {
throw new Error(`Failed to generate README.md: ${extractErrorMessage(e)}`);
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate README.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`README.md generation error stack: ${errorStack}`);
}
}
}

Expand All @@ -108,7 +113,12 @@ export class SdkGeneratorCLI extends AbstractSwiftGeneratorCli<SdkCustomConfigSc
const content = await context.generatorAgent.generateReference(builder);
context.project.addRootFiles(new File("reference.md", RelativeFilePath.of(""), content));
} catch (e) {
throw new Error(`Failed to generate reference.md: ${extractErrorMessage(e)}`);
const errorMessage = e instanceof Error ? e.message : String(e);
const errorStack = e instanceof Error ? e.stack : undefined;
context.logger.warn(`Failed to generate reference.md: ${errorMessage}`);
if (errorStack) {
context.logger.debug(`reference.md generation error stack: ${errorStack}`);
}
}
}

Expand Down
10 changes: 10 additions & 0 deletions generators/swift/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
- version: 0.27.1
changelogEntry:
- summary: |
Improve error logging for README.md and reference.md generation failures.
The generator now logs the actual error message and stack trace instead
of crashing the entire generation, making it easier to diagnose issues.
type: fix
createdAt: "2026-03-09"
irVersion: 61

- version: 0.27.0
changelogEntry:
- type: feat
Expand Down
Loading
Loading