diff --git a/.github/workflows/update-self-hosted-changelog.yml b/.github/workflows/update-self-hosted-changelog.yml new file mode 100644 index 0000000000..72b99d818a --- /dev/null +++ b/.github/workflows/update-self-hosted-changelog.yml @@ -0,0 +1,66 @@ +name: Update Self-Hosted Changelog + +on: + schedule: + - cron: "0 * * * *" + workflow_dispatch: + +jobs: + update-self-hosted-changelog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + ref: main + - name: Sync self-hosted releases from fern-platform + env: + GH_TOKEN: ${{ secrets.FERN_GITHUB_TOKEN }} + run: | + set -euo pipefail + DIR="fern/products/docs/pages/self-hosted/changelog" + mkdir -p "$DIR" + + gh api -H "Accept: application/vnd.github+json" \ + "repos/fern-api/fern-platform/releases?per_page=50" \ + --jq '.[] | select(.tag_name | startswith("docs@")) | "\(.tag_name)\t\(.published_at)"' \ + | sort -k2 \ + > /tmp/releases.tsv + + while IFS=$'\t' read -r tag published; do + version="${tag#docs@}" + date="${published%%T*}" + file="$DIR/$date.mdx" + version_escaped="${version//./\\.}" + + if grep -rqE "^### v${version_escaped}$" "$DIR" 2>/dev/null; then + continue + fi + + if [ -s "$file" ]; then + printf '\n### v%s\n\n```dockerfile\nFROM fernenterprise/fern-self-hosted:%s\n```\n' "$version" "$version" >> "$file" + else + printf '### v%s\n\n```dockerfile\nFROM fernenterprise/fern-self-hosted:%s\n```\n' "$version" "$version" > "$file" + fi + done < /tmp/releases.tsv + - name: create PR + id: cpr + uses: peter-evans/create-pull-request@v8 + with: + commit-message: "update self-hosted changelog from fern-platform releases" + title: "Update self-hosted changelog" + branch: update-self-hosted-changelog + base: main + delete-branch: true + - name: Enable Pull Request Automerge + if: steps.cpr.outputs.pull-request-operation == 'created' + uses: peter-evans/enable-pull-request-automerge@v3 + with: + pull-request-number: ${{ steps.cpr.outputs.pull-request-number }} + merge-method: squash + - name: Approving PR + if: steps.cpr.outputs.pull-request-operation == 'created' + env: + GH_TOKEN: ${{ secrets.FERN_GITHUB_TOKEN }} + run: | + echo "Approving PR" + gh pr review ${{ steps.cpr.outputs.pull-request-number }} --approve diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index 61e6d04e54..a94479cf20 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -393,6 +393,8 @@ navigation: slug: previews - page: Health check endpoints path: ./pages/self-hosted/health-check-endpoints.mdx + - changelog: ./pages/self-hosted/changelog + title: Releases - section: Analytics & integrations slug: integrations collapsed: true diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-15.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-15.mdx new file mode 100644 index 0000000000..11c9612118 --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-15.mdx @@ -0,0 +1,5 @@ +### v0.114.1 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.1 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-17.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-17.mdx new file mode 100644 index 0000000000..3306947e6b --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-17.mdx @@ -0,0 +1,17 @@ +### v0.114.2 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.2 +``` + +### v0.114.3 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.3 +``` + +### v0.114.4 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.4 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-20.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-20.mdx new file mode 100644 index 0000000000..6dea828cfa --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-20.mdx @@ -0,0 +1,11 @@ +### v0.114.5 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.5 +``` + +### v0.114.6 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.6 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-21.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-21.mdx new file mode 100644 index 0000000000..5887e6825f --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-21.mdx @@ -0,0 +1,11 @@ +### v0.114.7 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.7 +``` + +### v0.114.8 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.8 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-22.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-22.mdx new file mode 100644 index 0000000000..410a9585c9 --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-22.mdx @@ -0,0 +1,23 @@ +### v0.114.9 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.9 +``` + +### v0.114.10 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.10 +``` + +### v0.114.11 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.11 +``` + +### v0.114.12 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.12 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-23.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-23.mdx new file mode 100644 index 0000000000..920be2f2d4 --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-23.mdx @@ -0,0 +1,5 @@ +### v0.114.13 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.13 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-24.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-24.mdx new file mode 100644 index 0000000000..9cf18c881a --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-24.mdx @@ -0,0 +1,17 @@ +### v0.114.14 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.14 +``` + +### v0.114.15 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.15 +``` + +### v0.114.16 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.16 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-27.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-27.mdx new file mode 100644 index 0000000000..7d8ff2ce2d --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-27.mdx @@ -0,0 +1,17 @@ +### v0.114.17 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.17 +``` + +### v0.114.18 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.18 +``` + +### v0.114.19 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.19 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-04-28.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-04-28.mdx new file mode 100644 index 0000000000..ca6fc2b57d --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-04-28.mdx @@ -0,0 +1,11 @@ +### v0.114.20 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.20 +``` + +### v0.114.21 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.21 +``` diff --git a/fern/products/docs/pages/self-hosted/changelog/overview.mdx b/fern/products/docs/pages/self-hosted/changelog/overview.mdx new file mode 100644 index 0000000000..bf6fe631bd --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/overview.mdx @@ -0,0 +1,8 @@ +Release history for the Fern self-hosted Docker image. Each entry shows the `FROM` line for that release. + +To upgrade: + +- On `:latest` — rebuild and redeploy your image to pick up the new base. +- Pinning a version — copy the `FROM` line from the release below into your Dockerfile, then rebuild and redeploy. + +See the [self-hosted setup guide](/learn/docs/self-hosted/set-up) for the full flow. diff --git a/fern/products/docs/pages/self-hosted/self-hosted-set-up.mdx b/fern/products/docs/pages/self-hosted/self-hosted-set-up.mdx index 57d98841b7..8471f09964 100644 --- a/fern/products/docs/pages/self-hosted/self-hosted-set-up.mdx +++ b/fern/products/docs/pages/self-hosted/self-hosted-set-up.mdx @@ -79,6 +79,10 @@ RUN fern-generate `fern-generate` is a command available inside the Docker image that processes your documentation at build time, enabling faster container startup, air-gapped deployment, and a smaller attack surface. It's not a command you run on your host machine. You can alternatively [defer generation to runtime](#runtime-generation). + +See [recent releases](/learn/docs/self-hosted/releases) to pin to a specific version instead of `:latest`. + + diff --git a/fern/products/docs/pages/self-hosted/self-hosted.mdx b/fern/products/docs/pages/self-hosted/self-hosted.mdx index a88c008f27..6f7518955f 100644 --- a/fern/products/docs/pages/self-hosted/self-hosted.mdx +++ b/fern/products/docs/pages/self-hosted/self-hosted.mdx @@ -78,7 +78,7 @@ Fern provides your documentation site as a ready-to-run Docker container that yo 1. **Upload your fern folder** - Add your documentation source files to the container 1. **Run the container** - Start your local server using standard Docker commands 1. **Deploy** - Set up your server environment and publish the documentation -1. **Receive updated Docker images** - Fern releases new versions of the Docker image that your team can evaluate and deploy when ready. +1. **Receive updated Docker images** - Fern [releases new versions of the Docker image](/learn/docs/self-hosted/releases) that your team can evaluate and deploy when ready. ### Architecture diagram