Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7a14ed6
chore(ci): sync update-test.yml with ci.yml (#12732)
jsklan Feb 24, 2026
d2520f0
fix(cli): Flush PostHog to emit events (#12729)
amckinney Feb 25, 2026
4fc97a0
fix(cli): fall back to 0.0.1 when AUTO versioning cannot extract prev…
Swimburger Feb 25, 2026
ed1f404
feat(cli): implement `fern sdk add` command (#12715)
amckinney Feb 25, 2026
d29ee4a
chore(python): update python-sdk seed (#12740)
fern-support Feb 25, 2026
0b519aa
feat(cli): add `collapsible` + `collapsed-by-default` to docs.yml nav…
kafkas Feb 25, 2026
a2505d3
chore(php): update php-sdk seed (#12738)
fern-support Feb 25, 2026
04a9d7e
chore(cli): Remove console.debug logs (#12733)
amckinney Feb 25, 2026
cb0c7d5
chore(swift): update swift-sdk seed (#12745)
fern-support Feb 25, 2026
c251d41
chore(cli): Exclude typescript in v2 tests (#12743)
amckinney Feb 25, 2026
c7fa7b7
chore(python): update python-sdk seed (#12746)
fern-support Feb 25, 2026
9e25f96
chore(go): update go-sdk seed (#12737)
fern-support Feb 25, 2026
7e0c236
chore(rust): update rust-sdk seed (#12739)
fern-support Feb 25, 2026
c999cc6
chore(java): update java-sdk seed (#12742)
fern-support Feb 25, 2026
f243157
chore(ruby): update ruby-sdk-v2 seed (#12734)
fern-support Feb 25, 2026
ce2ab77
feat(internal): Add replay step to post-generation pipeline (#12559)
tstanmay13 Feb 25, 2026
16a1752
chore(csharp): update csharp-sdk seed (#12736)
fern-support Feb 25, 2026
6b1d2a1
chore(csharp): update csharp-sdk seed (#12755)
fern-support Feb 25, 2026
f03a7f8
chore(postman): update postman seed (#12735)
fern-support Feb 25, 2026
7d76cc6
chore(typescript): update ts-sdk seed (#12741)
fern-support Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ jobs:
test:
if: github.repository == 'fern-api/fern'
runs-on: Test
timeout-minutes: 15
timeout-minutes: 25
steps:
- name: Checkout repo
uses: actions/checkout@v4
Expand Down Expand Up @@ -164,7 +164,7 @@ jobs:
test-ete:
if: github.repository == 'fern-api/fern'
runs-on: Test
timeout-minutes: 15
timeout-minutes: 25
steps:
- name: Checkout repo
uses: actions/checkout@v4
Expand All @@ -188,24 +188,24 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest

- name: Build CLI (dev)
timeout-minutes: 5
timeout-minutes: 10
run: pnpm turbo run dist:cli:dev --filter=@fern-api/cli --filter=@fern-api/cli-v2

- name: Build seed CLI
timeout-minutes: 5
timeout-minutes: 10
run: pnpm seed:build

- name: Run ETE tests
if: ${{ !github.event.inputs.update_snapshots }}
timeout-minutes: 10
timeout-minutes: 20
env:
FERN_ORG_TOKEN_DEV: ${{ secrets.FERN_ORG_TOKEN_DEV }}
run: |
FERN_TOKEN=${{ secrets.FERN_ORG_TOKEN_DEV }} pnpm --filter @fern-api/ete-tests test

- name: Run ETE tests with snapshot updates
if: ${{ github.event.inputs.update_snapshots == 'true' }}
timeout-minutes: 10
timeout-minutes: 20
env:
FERN_ORG_TOKEN_DEV: ${{ secrets.FERN_ORG_TOKEN_DEV }}
run: |
Expand Down
43 changes: 31 additions & 12 deletions .github/workflows/update-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,22 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: write

env:
DO_NOT_TRACK: "1"
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: "buildwithfern"
TURBO_REMOTE_CACHE_TIMEOUT: 60

jobs:
update-test:
if: github.repository == 'fern-api/fern' && github.ref != 'refs/heads/main'
runs-on: ubuntu-latest
timeout-minutes: 30
runs-on: Test
timeout-minutes: 90
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
lfs: true

- name: Install
uses: ./.github/actions/install
Expand All @@ -30,6 +32,9 @@ jobs:
with:
github_token: ${{ github.token }}

- name: Verify buf
run: buf --version

- uses: actions/setup-go@v5
with:
go-version: "stable"
Expand All @@ -41,15 +46,29 @@ jobs:
- name: Run test:update
run: pnpm test:update

- name: Build CLI (dev)
timeout-minutes: 15
run: pnpm turbo run dist:cli:dev --filter=@fern-api/cli --filter=@fern-api/cli-v2

- name: Build seed CLI
timeout-minutes: 15
run: pnpm seed:build

- name: Run test:ete:update
timeout-minutes: 30
env:
FERN_ORG_TOKEN_DEV: ${{ secrets.FERN_ORG_TOKEN_DEV }}
run: FERN_TOKEN=${{ secrets.FERN_ORG_TOKEN_DEV }} pnpm test:ete:update
run: |
FERN_TOKEN=${{ secrets.FERN_ORG_TOKEN_DEV }} pnpm --filter @fern-api/ete-tests test -- -u

- name: Commit and Push Changes
uses: EndBug/add-and-commit@v9
with:
add: "."
push: true
fetch: false
message: "chore: update test snapshots"
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add .
if ! git diff --staged --quiet; then
git commit -m "chore: update test snapshots"
git push
else
echo "No snapshot changes to commit"
fi
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
"typescript.disableAutomaticTypeAcquisition": true,
"typescript.updateImportsOnFileMove.enabled": "never",
"javascript.updateImportsOnFileMove.enabled": "never",
"extensions.ignoreRecommendations": false,
"extensions.ignoreRecommendations": true,
"git.ignoreLimitWarning": true,
"git.branchProtection": ["main", "master"]
}
40 changes: 40 additions & 0 deletions docs-yml.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1497,6 +1497,26 @@
}
]
},
"collapsible": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"collapsed-by-default": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"slug": {
"oneOf": [
{
Expand Down Expand Up @@ -2776,6 +2796,26 @@
}
]
},
"collapsible": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"collapsed-by-default": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"availability": {
"oneOf": [
{
Expand Down
32 changes: 29 additions & 3 deletions fern/apis/docs-yml/definition/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1093,7 +1093,19 @@ types:
docs: |
The relative path to the markdown file that will be displayed when the section is clicked.
contents: list<NavigationItem>
collapsed: 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.
collapsed-by-default:
type: optional<boolean>
docs: |
Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open).
slug: optional<string>
icon: optional<string>
hidden: optional<boolean>
Expand All @@ -1119,7 +1131,19 @@ types:
icon: optional<string>
hidden: optional<boolean>
skip-slug: optional<boolean>
collapsed: 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.
collapsed-by-default:
type: optional<boolean>
docs: |
Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open).
availability: optional<Availability>

TitleSource:
Expand Down Expand Up @@ -1156,7 +1180,9 @@ types:
type: optional<list<ApiReferenceLayoutItem>>
docs: |
Advanced usage: when specified, this object will be used to customize the order that your API endpoints are displayed in the docs site, including subpackages, and additional markdown pages (to be rendered in between API endpoints). If not specified, the order will be inferred from the OpenAPI Spec or Fern Definition.
collapsed: optional<boolean>
collapsed:
type: optional<boolean>
availability: deprecated
icon: optional<string>
slug: optional<string>
hidden: optional<boolean>
Expand Down
6 changes: 6 additions & 0 deletions fern/apis/generators-yml/definition/generators.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ imports:
file: ./fernDefinition/file.yml
environments: ./fernDefinition/environments.yml
group: ./group.yml
replay: ./replay.yml
reviewers: ./reviewers.yml
types:
GeneratorsConfigurationSchema:
Expand Down Expand Up @@ -36,6 +37,11 @@ types:
type: optional<map<string, group.GeneratorGroupSchema>>
reviewers:
type: optional<reviewers.ReviewersSchema>
replay:
type: optional<replay.ReplayConfigSchema>
docs: |
Configuration for SDK customization replay.
Automatically preserves user customizations across SDK regenerations.
ai: optional<ai.AIServicesSchema>
autorelease:
type: optional<boolean>
Expand Down
6 changes: 6 additions & 0 deletions fern/apis/generators-yml/definition/replay.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
types:
ReplayConfigSchema:
properties:
enabled:
type: boolean
docs: Whether to enable replay for this SDK
22 changes: 22 additions & 0 deletions generators-yml.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,16 @@
}
]
},
"replay": {
"oneOf": [
{
"$ref": "#/definitions/replay.ReplayConfigSchema"
},
{
"type": "null"
}
]
},
"ai": {
"oneOf": [
{
Expand Down Expand Up @@ -4139,6 +4149,18 @@
],
"additionalProperties": false
},
"replay.ReplayConfigSchema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"additionalProperties": false
},
"ai.ModelProvider": {
"type": "string",
"enum": [
Expand Down
3 changes: 2 additions & 1 deletion packages/cli/cli-v2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,10 @@
"inquirer": "^9.2.15",
"is-ci": "catalog:",
"js-yaml": "catalog:",
"yaml": "catalog:",
"jsonwebtoken": "catalog:",
"ora": "catalog:",
"posthog-node": "^4.3.2",
"posthog-node": "^5.14.0",
"tsup": "catalog:",
"typescript": "catalog:",
"uuid": "catalog:",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ export class LegacyFernWorkspaceAdapter {
groups: [],
whitelabel: undefined,
ai: undefined,
replay: undefined,
rawConfiguration: {}
};
}
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/cli-v2/src/commands/init/command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import { mkdir, writeFile } from "fs/promises";
import path from "path";
import type { Argv } from "yargs";
import { FERN_YML_FILENAME } from "../../config/fern-yml/constants";
import { FernYmlBuilder } from "../../config/fern-yml/FernYmlBuilder";
import type { Context } from "../../context/Context";
import type { GlobalArgs } from "../../context/GlobalArgs";
Expand All @@ -21,7 +22,6 @@ export declare namespace InitCommand {
}
}

const FERN_YML_FILENAME = "fern.yml";
const SPECS_DIR = "openapi";

export class InitCommand {
Expand Down
Loading
Loading