diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml
deleted file mode 100644
index 1bbad60..0000000
--- a/.github/workflows/update-changelog.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Update Self-Hosted Changelog
-
-on:
- # Run daily at 06:00 UTC
- schedule:
- - cron: "0 6 * * *"
- # Allow manual runs
- workflow_dispatch:
- # Allow the monorepo to trigger this via repository_dispatch
- # e.g.: gh api repos/tembo-io/docs/dispatches -f event_type=release-published
- repository_dispatch:
- types: [release-published]
-
-jobs:
- update-changelog:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- pull-requests: write
-
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-node@v4
- with:
- node-version: "22"
-
- - name: Regenerate changelog
- env:
- GITHUB_TOKEN: ${{ secrets.MONOREPO_READ_TOKEN }}
- run: node scripts/update-changelog.mjs
-
- - name: Commit and open PR if changed
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "github-actions[bot]@users.noreply.github.com"
- git add features/self-hosted/changelog.mdx
- if git diff --cached --quiet; then
- echo "No changes to commit."
- else
- BRANCH="chore/changelog-update-$(date +%Y%m%d%H%M%S)"
- git checkout -b "$BRANCH"
- git commit -m "chore(changelog): update self-hosted release notes"
- git push origin "$BRANCH"
- gh pr create \
- --title "chore(changelog): update self-hosted release notes" \
- --body "Automated changelog update from the self-hosted release pipeline." \
- --base main \
- --head "$BRANCH"
- fi
diff --git a/docs.json b/docs.json
index ecf43ec..5d6e0e7 100644
--- a/docs.json
+++ b/docs.json
@@ -76,8 +76,7 @@
"features/self-hosted/integrations/github",
"features/self-hosted/integrations/slack"
]
- },
- "features/self-hosted/changelog"
+ }
]
},
{
@@ -126,8 +125,7 @@
"group": "Other",
"pages": [
"resources/pwa",
- "resources/pricing",
- "resources/changelog"
+ "resources/pricing"
]
}
]
diff --git a/features/self-hosted/changelog.mdx b/features/self-hosted/changelog.mdx
deleted file mode 100644
index 33f7862..0000000
--- a/features/self-hosted/changelog.mdx
+++ /dev/null
@@ -1,442 +0,0 @@
----
-title: 'Changelog'
-description: 'Release notes for Tembo Self-Hosted.'
----
-
-{/* Auto-generated by scripts/update-changelog.mjs — last updated 2026-06-24 */}
-
-## v0.2.774
-
-June 22, 2026
-
-- fixing pulling literally every repo instead of just the ones loaded in (#8848)
-- feat(admin): support selected golden snapshot sizes (#8849)
-- fix(web): preload computer preview iframe (#8850)
-- refactor(admin): align golden size picker dropdown (#8851)
-- fix(ci): use created launch template version (#8853)
-- fix(admin): ensure golden size label is defined (#8855)
-- Remove solveIssue/feedbackLoop cli commands (#8797)
-- Issue.kind -> Message.type rework (#8812)
-- fix(api): harden golden skill prebake (#8854)
-- feat(api): add guest server port forwarding to VM metadata (#8845)
-- feat(admin): add vm server health check (#8863)
-- Redesign auth pages (#8864)
-- fix(api): expand tilde paths in shell commands via $HOME (#8867)
-- chore: update pnpm deps hash (#8866)
-- Rename 'AI provider' to 'LLM subscriptions' in settings (#8868)
-- feat(desktop): add notification preference (#8869)
-- feat(sandbox): add kasmvnc bottom app dock (#8860)
-- chore: agent fallbacks (#8874)
-- Github issues: handle agent macros (#8876)
-- feat(nix): add bigquery mcp toolbox (#8862)
-- chore: centralize entitlements backend (#8835)
-- chore(ui): migrate cn helper to cnfast (#8881)
-- dock click fix (#8884)
-- chore: update pnpm deps hash (#8885)
-- feat(cli): show org id in vm list (#8888)
-- Allow KasmVNC dock click events (#8889)
-- fix(api): hide scheduled snapshot build rows (#8890)
-- 0.2.774
-
----
-
-## v0.2.773
-
-June 19, 2026
-
-- feat(aws): AWS agent integration with OIDC web identity federation (#7660)
-- chore: centralize entitlements (#8769)
-- agent.run: stop building rule file (#8809)
-- fix(web): move xxl from large to ultra VM sandbox size category
-- chore: change artifact preview header (#8821)
-- fix(api): remove custom plan billing route (#8819)
-- fix(api): correct desktop notification typo (#8824)
-- refactor(api): remove billing report route (#8825)
-- feat(admin): show active system goldens (#8827)
-- feat(web): add artifact url copy action (#8830)
-- docs(workflows): update auto fix ci action guidance (#8831)
-- init guest server && public manager api (#8744)
-- refactor(api): remove unused integration token route (#8828)
-- feat(nix): open port 8743 in firewall for tembo-ts-manager
-- chore: update pnpm deps hash (#8826)
-- fix(web): hide mcp badge on aws card (#8840)
-- fix(web): prevent empty agent page scroll (#8842)
-- test(api): complete logger mock in analytics test to fix flaky CI (#8844)
-- chore(api): remove unused daemon register route (#8834)
-- fix(web): use currentColor for hamster SVG to support dark mode (#8846)
-- fix(web): clean up connection modals (#8841)
-- 0.2.773
-
----
-
-## v0.2.772
-
-June 18, 2026
-
-- fix(api): validate GCP Vertex AI credentials against multiple models (#8804)
-- fix(api): apply oxfmt formatting to models.test.ts (#8808)
-- fix(api): use GA model ID for gemini-3.5-flash on Vertex AI (#8810)
-- 0.2.772
-
----
-
-## v0.2.771
-
-June 18, 2026
-
-- chore(api): remove unused slack test route (#8795)
-- fix(api): add 'google' to RouteProvider to fix typecheck (#8799)
-- fix(api): make Vertex AI routing test deterministic across suite order (#8800)
-- fix(api): use preview Gemini model IDs for Vertex AI and add validation logging (#8801)
-- fix(api): apply oxfmt formatting to ai.ts (#8802)
-- 0.2.771
-
----
-
-## v0.2.770
-
-June 18, 2026
-
-- tembo-cli: warn agent about possible shell expansion issues (#8793)
-- refactor(api): remove agent model test route (#8791)
-- fix(api): allow non-anthropic models to route through GCP Vertex AI (#8798)
-- 0.2.770
-
----
-
-## v0.2.769
-
-June 18, 2026
-
-- fix(admin): source active hosts from host manager (#8750)
-- feat(web): split ultra sandbox size flag (#8751)
-- fix(desktop): pin xmldom below 0.9 (#8753)
-- chore: update pnpm deps hash (#8754)
-- feat(sandbox): add xxl sandbox size (#8752)
-- fix(admin): label system golden sizes (#8757)
-- feat(api): add Fireworks GLM 5.2 model (#8755)
-- chore: fix slash menu when queue section is open (#8762)
-- fix(api): remove unused issue source scan route (#8748)
-- Route desktop notification clicks to sessions (#8758)
-- docs(workflows): update auto fix ci template (#8767)
-- major version update for many deprecated packages (#8766)
-- feat(api): validate ai provider credentials (#8724)
-- fix(shared): ignore openai annotation stream events (#8771)
-- refactor(api): remove code repository settings route (#8764)
-- fix: remove legacy session prompt paths (#8725)
-- feat: tour mode (#8658)
-- feat(mcp): add hamster suggested server (#8772)
-- GLM LiteLLM fix (#8773)
-- Add model provider selection (#8768)
-- feat(api): add dead code cleanup template (#8776)
-- fix(api): support bedrock for openai models (#8777)
-- fix(web): add overscroll containment, sidebar overflow, and chat padding
-- fix: regenerate pnpm lockfile to fix packageExtensionsChecksum mismatch (#8780)
-- chore: remove root iam policy files (#8781)
-- feat(api): add GCP Vertex AI support for Gemini models (#8786)
-- feat(models): add gemini 3.5 flash support (#8790)
-- fix(web): show tembo avatar for workflow prompts (#8789)
-- Slack PR card: deal with diffs with only removals, add test cases (#8785)
-- refactor(api): remove unused artifact fail route (#8774)
-- 0.2.769
-
----
-
-## v0.2.768
-
-June 17, 2026
-
-- fix(web): make gcp icon grayscale (#8716)
-- feat(api): register host manager hosts (#8686)
-- Plan desktop notifications system (#8433)
-- fix(web): limit self-hosted version to settings (#8720)
-- Add GCP Vertex AI BYOK support (#8527)
-- orphaned vm cron tweak
-- fixing medium sandbox on sh (#8727)
-- UI(sandbox-runs): missing `AgentRun` check (#8730)
-- agent_run: fix respond_to_user for GH external PRs responding in new PR (#8732)
-- adding new cron for cleaning stale docker images (#8731)
-- git skill: tell it to look for PR templates (#8735)
-- feat: artifacts tab (#8712)
-- Add connected account cards (#8740)
-- fix(web): update vm logs sidebar icon (#8746)
-- fix(slack): trigger workflows for bot messages (#8733)
-- fix(api): improve commit of the day selection (#8747)
-- 0.2.768
-
----
-
-## v0.2.767
-
-June 16, 2026
-
-- refactor(terminal): extract xterm setup into reusable runtime module (#8693)
-- chore: update pnpm deps hash (#8694)
-- cachix busting for stale narinfos (#8695)
-- chore(root): pin node 22.x and add zenstack package extension (#8696)
-- dry run flag for ci job for sh (#8697)
-- fix(github): auto-skip tembo pr workflow failures (#8688)
-- New logs to help debug `/sandbox/commit` (#8700)
-- Remove composer boundary (#8698)
-- chore(nix): upgrade pnpm from v9 to v10
-- docs: add frontend frp override setup (#8701)
-- `gitlab.mergeRequestOpened`: send `repoUrl` (#8705)
-- updating flake and deps to pnpm-10 (#8699)
-- pnpm audit changes (#8703)
-- fix(web): show draft pr actions in sessions (#8706)
-- `tembo commit` updates (#8704)
-- 0.2.767
-
----
-
-## v0.2.766
-
-June 15, 2026
-
-- feat(workflows): add stale pr notifier template (#8685)
-- chore(nix): rebuild npm deps hash (#8692)
-- 0.2.766
-- revert(root): bump version back to 0.2.765
-- 0.2.766
-
----
-
-## v0.2.765
-
-June 14, 2026
-
-- fix(agents): remove nemotron from opencode and pi (#8682)
-- Merge branch 'main' of https://github.com/tembo/monorepo
-- 0.2.765
-
----
-
-## v0.2.764
-
-June 14, 2026
-
-- chore: add nvidia icon (#8679)
-- chore: rm composer container queries (#8681)
-- feat(slack): support mcp message attachments (#8672)
-- fix: stabilize sidebar tab selection and memoize VM start callback
-- 0.2.764
-
----
-
-## v0.2.763
-
-June 13, 2026
-
-- fix: wrap netrc-file in lib.mkDefault for self-hosted cache config
-- fix(agents): disable fable 5 selections (#8670)
-- fix(analytics): filter payment pr metrics by artifact (#8675)
-- fix(agent-logs): hide response metadata events (#8676)
-- feat(api): add missing fireworks models
-- fix: restrict commit of the day to primary branch (#8677)
-- test(api): type analytics pull request count mock (#8678)
-- fix: defer iframe src until measured and simplify PR action slot logic
-- 0.2.763
-
----
-
-## v0.2.762
-
-June 12, 2026
-
-- fix: show recent runs without overfetching (#8601)
-- chore: add sentry monitoring to composer (#8599)
-- fix sandbox repository listing (#8603)
-- chore: add coming soon badge to agent selector (#8602)
-- Make everything enqueue agent_run (#8510)
-- Add branch filter to PR opened trigger (#8606)
-- fixing cachix token for self hosted (#8607)
-- fix composer vm stop status refresh (#8610)
-- fix: match Bitbucket PR author by all identifiers, not just nickname
-- fix: replace tint2 launcher with panel buttons in kasmvnc config
-- fix: spread overrides before defaults in mock PR payload
-- Fix integration icon svgs (#8641)
-- Fix Mermaid diagram contrast in markdown (#8632)
-- Tembo CLI: helper method to deserialize JSON with better error msgs (#8643)
-- fix vm stop migration timeout handling (#8633)
-- TEM-7497: Disable split diff option when panel is narrow (#8648)
-- getOrgLevelUrl: fix top-level `owner` (#8651)
-- agent_run: default semantic commits instructions (#8650)
-- fix: resolve git integrations from organization instead of issue (#8652)
-- add slack dm utilities for tembo users (#8646)
-- fix admin golden invalidation label (#8655)
-- Add Tembo logo icon (#8656)
-- `agent_run`: `Co-authored-by` + deny `git commit` (#8644)
-- fix: simplify Slack DM types with direct type annotations
-- `tembo commit`: allow verifying commits for issues with 0 repos linked (#8663)
-- 0.2.761
-- Merge branch 'main' of https://github.com/tembo/monorepo
-- 0.2.762
-
----
-
-## v0.2.760
-
-June 11, 2026
-
-- fix: restore sidebar active tab and open tabs from local storage on session reopen (#8572)
-- chore: fix review approved state (#8391)
-- Linear: fallback `createdBy` (#8565)
-- Update/nixpkgs (#8573)
-- fix: opaque close-button fade on inactive sidebar tabs (#8574)
-- Bugfix/sh logs and version check (#8578)
-- fix: hide model label for agents without selectable models (amp) (#8575)
-- Remove review page max width (#8579)
-- Bugfix/sh logs and version check (#8581)
-- add draft pr support to cli and mcp (#8584)
-- cores update for builder (#8583)
-- fix codex default profile config (#8591)
-- decoupling the upload (#8592)
-- feat: pre-load computer tab for internal users (#8590)
-- Codex: deny the "apps" feature (#8588)
-- Add sandbox repository listing tool (#8596)
-- Merge branch 'main' of https://github.com/tembo/monorepo
-- 0.2.760
-
----
-
-## v0.2.759
-
-June 11, 2026
-
-- feat(jira): security/triage/test-coverage workflow templates (#8487)
-- Slack: fix :hourglass: -> checkmark conversion (#8521)
-- fix tembo dev shell defaults (#8540)
-- feat: change agent in slash menu (#8509)
-- Remove session reset and retry action (#8544)
-- include issue pr urls in agent prompt (#8545)
-- chore: fix z index in session page (#8548)
-- Update command-menu-actions.tsx
-- feat: add system golden build progress tracking to admin dashboard
-- fix: format multiline span element in admin dashboard
-- fix: add boot timeout and error handling for QEMU VM startup (#8547)
-- agent_run Jira (#8533)
-- chore: update slash menu styles (#8549)
-- Bitbucket final nits (#8550)
-- feat: select reasoning in slash menu (#8551)
-- Update agent browser skill (#8552)
-- fix slash menu dark overlay token (#8553)
-- Keep Clerk enabled in sandbox dev shell (#8557)
-- feat: select sandbox size in slash menu (#8556)
-- Centralize agent run response retry prompt (#8561)
-- feat: repo selector in slash menu (#8558)
-- feat: add branches to slash menu (#8562)
-- add snapshot deactivate action (#8560)
-- feat: add attachments to slash menu (#8563)
-- fix: add close button to right sidebar on mobile (#8564)
-- Use success icon for cancelled tasks (#8567)
-- fix: allow restarting the terminal after the session ends (#8569)
-- fix: load .env earlier in config init, add prod DB guard, and fix right sidebar icon
-- Revert "fix: load .env earlier in config init, add prod DB guard, and fix right sidebar icon"
-- 0.2.759
-
----
-
-## v0.2.758
-
-June 10, 2026
-
-- Enqueue `agent_run` for automations (#8481)
-- Slack: make sections always expanded (#8508)
-- Fix API test isolation failures (#8512)
-- Remove session chat top padding (#8516)
-- add kasmvnc recording cli command (#8455)
-- Add reasoning levels for Claude Fable 5 (#8518)
-- Show review sidebar tab behind feature flag (#8520)
-- feat: skip code repository processing for inactive orgs (#8519)
-- Update stop session modal copy (#8526)
-- 0.2.758
-
----
-
-## v0.2.757
-
-June 9, 2026
-
-- Feature/sh gh instance (#8488)
-- Feature/sh gh instance (#8490)
-- Feature/sh gh instance (#8493)
-- Use packaged .NET SDK 10.0.300 in sandbox tools (#8496)
-- Feature/sh gh instance (#8499)
-- rename logs tab to vm logs (#8500)
-- using all unstable to prevent bad packages (#8501)
-- Bugfix/gh runner (#8502)
-- Skip postClone when resuming from snapshots (#8467)
-- fix(api): ensure file handle is closed in uploadObject finally block (#8466)
-- `agent_run`: make sure a response is sent if required (#8462)
-- chore: move mcps to slash menu (#8489)
-- Add Claude Fable 5 pricing override (#8503)
-- 0.2.757
-
----
-
-## v0.2.756
-
-June 9, 2026
-
-- Suppress setup complete log for running VMs (#8451)
-- fix review comments sidebar height (#8458)
-- feat(integrations): snyk service-account install (#8368)
-- agent_run: Slack tag user setting (#8457)
-- ci: test sandbox cli nix build (#8460)
-- Move sandbox logs into header menu (#8459)
-- Potential fix for Slack's placeholder problem (#8463)
-- Rename sandbox logs UI label (#8464)
-- Add Windows desktop release build (#8465)
-- add system golden holder invalidation (#8468)
-- chore: index repo skill metadata (#8447)
-- new runner for the build step of self hosted (#8473)
-- `agent_run`: git instructions skill (#8461)
-- feat: slash skills (#8410)
-- Feature/sh gh instance (#8474)
-- fix(db): index SandboxEvent by sandboxSessionId, createdAt (#8475)
-- Review/session navigation polish + desktop back-nav fix (#8469)
-- chore: pretty skills and better ux (#8479)
-- fix api unit test mock leakage (#8483)
-- add claude fable 5 model support (#8484)
-- feat: add repo skills to slash menu (#8482)
-- Feature/sh gh instance (#8485)
-- Fix Slack attachment response tests (#8486)
-- 0.2.756
-
----
-
-## v0.2.755
-
-June 8, 2026
-
-- fix(qmp): apply consistent timeout to migrate and waitForMigration (#8431)
-- Disable gnutls checks in stage2 image (#8432)
-- feat(assets): add direct file upload with signed URLs and Slack attachments (#8422)
-- support rebuilding all system goldens (#8435)
-- refactor(admin): use named capture groups in month parsing regex
-- fix sandbox logs icon sizing (#8442)
-- fix: decouple sandbox cli startup from server route imports (#8440)
-- fix(admin): narrow array access with explicit variable for type safety
-- style: inline destructured params in API client functions
-- fix(agent): use double assertion for CliSandboxApiClient cast
-- Sync clerk membership role updates (#8446)
-- fix api lint type definition (#8448)
-- fix(snapshots): continue to build step when scheduling and update button labels (#8445)
-- test(snapshots): clean up repeated optional chaining in schedule test
-- Add drag-close threshold to right sidebar (#8441)
-- agent_run: Make sure streaming stops after `send_response` is called (#8443)
-- add diff options submenu arrow (#8454)
-- `create-pull-request`: `Message.createdBy ?? Issue.createdBy`
-- fix user prompt angle bracket rendering (#8452)
-- fix: report upload failures to sentry (#8453)
-- Move custom MCP card to custom category (#8456)
-- 0.2.755
-
----
-
-## v0.2.754
-
-June 7, 2026
-
-- fix(agent): defer setup log emission until sandbox is actually initializing (#8427)
-- 0.2.754
diff --git a/resources/changelog.mdx b/resources/changelog.mdx
deleted file mode 100644
index da56aec..0000000
--- a/resources/changelog.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: "Changelog"
-url: "https://tembo.io/changelog"
----
diff --git a/scripts/update-changelog.mjs b/scripts/update-changelog.mjs
deleted file mode 100644
index 4c905e1..0000000
--- a/scripts/update-changelog.mjs
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/env node
-/**
- * Fetches tags from tembo-io/monorepo and regenerates
- * features/self-hosted/changelog.mdx.
- *
- * For each tag it shows the commits between that tag and the previous one.
- *
- * Requires a GitHub token with read access to the repo:
- * GITHUB_TOKEN= node scripts/update-changelog.mjs
- */
-
-import { writeFileSync, readFileSync, existsSync } from "fs";
-import { join, dirname } from "path";
-import { fileURLToPath } from "url";
-
-// Load .env if present (for local use)
-const envPath = join(dirname(fileURLToPath(import.meta.url)), "../.env");
-if (existsSync(envPath)) {
- for (const line of readFileSync(envPath, "utf8").split("\n")) {
- const match = line.match(/^\s*([\w]+)\s*=\s*(.*)$/);
- if (match) process.env[match[1]] ??= match[2].replace(/^["']|["']$/g, "");
- }
-}
-
-const OWNER = "tembo";
-const REPO = "monorepo";
-const OUTPUT_PATH = join(
- dirname(fileURLToPath(import.meta.url)),
- "../features/self-hosted/changelog.mdx"
-);
-const MAX_TAGS = 20;
-
-const token = process.env.GITHUB_TOKEN;
-const headers = {
- Accept: "application/vnd.github+json",
- "X-GitHub-Api-Version": "2022-11-28",
- ...(token ? { Authorization: `Bearer ${token}` } : {}),
-};
-
-async function ghFetch(path) {
- const res = await fetch(`https://api.github.com${path}`, { headers });
- if (!res.ok) {
- throw new Error(`GitHub API error ${res.status} for ${path}: ${await res.text()}`);
- }
- return res.json();
-}
-
-async function fetchRecentTags() {
- // GitHub returns tags newest-first, so page 1 gives us the most recent
- return ghFetch(`/repos/${OWNER}/${REPO}/tags?per_page=${MAX_TAGS}&page=1`);
-}
-
-// Fetch the commit date for a given SHA
-async function fetchCommitDate(sha) {
- const data = await ghFetch(`/repos/${OWNER}/${REPO}/commits/${sha}`);
- return data.commit?.committer?.date ?? data.commit?.author?.date ?? null;
-}
-
-// Get commits between two tags using the compare endpoint
-async function fetchCommitsBetween(base, head) {
- const data = await ghFetch(
- `/repos/${OWNER}/${REPO}/compare/${base}...${head}`
- );
- return data.commits ?? [];
-}
-
-function formatDate(iso) {
- return new Date(iso).toLocaleDateString("en-US", {
- year: "numeric",
- month: "long",
- day: "numeric",
- });
-}
-
-function escapeForMdx(text) {
- return text.replace(/\{/g, "{").replace(/\}/g, "}");
-}
-
-function formatCommit(commit) {
- const message = commit.commit.message.split("\n")[0]; // first line only
- return `- ${escapeForMdx(message)}`;
-}
-
-// --- main ---
-
-// Fetch one extra tag to use as base for the oldest tag's compare
-const [tags, extraTags] = await Promise.all([
- fetchRecentTags(),
- ghFetch(`/repos/${OWNER}/${REPO}/tags?per_page=1&page=${MAX_TAGS + 1}`),
-]);
-const olderBase = extraTags[0] ?? null;
-
-if (tags.length === 0) {
- writeFileSync(
- OUTPUT_PATH,
- `---\ntitle: 'Changelog'\ndescription: 'Release notes for Tembo Self-Hosted.'\n---\n\n_No tags found._\n`,
- "utf8"
- );
- process.exit(0);
-}
-
-// Fetch commit dates so we can sort tags chronologically
-console.log(`Fetching commit dates for ${tags.length} tags...`);
-const tagsWithDates = await Promise.all(
- tags.map(async (tag) => {
- const date = await fetchCommitDate(tag.commit.sha);
- return { ...tag, date };
- })
-);
-
-// Sort newest first
-tagsWithDates.sort((a, b) => new Date(b.date) - new Date(a.date));
-
-// Build sections: for each tag, compare against the next older tag
-console.log("Fetching commit ranges between tags...");
-const sections = await Promise.all(
- tagsWithDates.map(async (tag, i) => {
- // next in sorted order = older; fall back to the extra tag fetched outside the 20
- const prevTag = tagsWithDates[i + 1] ?? (i === tagsWithDates.length - 1 ? olderBase : null);
- const date = tag.date ? formatDate(tag.date) : "Unknown date";
-
- let commitLines;
- if (prevTag) {
- const commits = await fetchCommitsBetween(prevTag.name, tag.name);
- commitLines =
- commits.length > 0
- ? commits.map(formatCommit).join("\n")
- : "_No commits found in this range._";
- } else {
- commitLines = "_Initial release._";
- }
-
- return `## ${tag.name}\n\n${date}\n\n${commitLines}`;
- })
-);
-
-const updatedAt = new Date().toISOString().split("T")[0];
-const mdx = `---
-title: 'Changelog'
-description: 'Release notes for Tembo Self-Hosted.'
----
-
-{/* Auto-generated by scripts/update-changelog.mjs — last updated ${updatedAt} */}
-
-${sections.join("\n\n---\n\n")}
-`;
-
-writeFileSync(OUTPUT_PATH, mdx, "utf8");
-console.log(`Wrote ${tagsWithDates.length} tags to ${OUTPUT_PATH}`);