chore(changelog): retire CHANGELOG.md as a dependency
The update dialog (server and desktop) now reads changelog/index.json and renders title, intro and groups; the release workflow builds the GitHub Release body and name from changelog/<version>.md; oc-dev, the issue-intake agent, AGENTS.md and the changelog skill no longer point at the file. CHANGELOG.md stays as a legacy copy for installs up to 1.22.1, which fetch it for update notes. The generator refreshes it while it exists and never recreates it, so deleting it after 2026-09-19 retires it for good. Generated outputs hold released versions only, so editing unreleased.md never makes them stale: agents write that file and nothing else, and oc-dev create-release does the generation. Claude-Session: https://claude.ai/code/session_01VqV56Hez25hTxXH4ipJfzH
This commit is contained in:
@@ -4,6 +4,7 @@ import fs from 'fs';
|
||||
import os from 'os';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { fetchUpdateNotes } from './changelog/update-notes.js';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
@@ -11,7 +12,6 @@ const __dirname = path.dirname(__filename);
|
||||
const PACKAGE_NAME = '@openchamber/web';
|
||||
const PACKAGE_PATH_SEGMENTS = PACKAGE_NAME.split('/');
|
||||
const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}`;
|
||||
const CHANGELOG_URL = 'https://raw.githubusercontent.com/openchamber/openchamber/main/CHANGELOG.md';
|
||||
const GITHUB_RELEASES_URL = 'https://github.com/openchamber/openchamber/releases';
|
||||
const GITHUB_RELEASES_API_URL = 'https://api.github.com/repos/openchamber/openchamber/releases';
|
||||
let cachedDetectedPm = null;
|
||||
@@ -737,34 +737,9 @@ function compareVersions(left, right) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch changelog notes between versions
|
||||
*/
|
||||
/** Release notes between the installed and the offered version, or undefined. */
|
||||
async function fetchChangelogNotes(fromVersion, toVersion) {
|
||||
try {
|
||||
const response = await fetch(CHANGELOG_URL, {
|
||||
signal: AbortSignal.timeout(10000),
|
||||
});
|
||||
|
||||
if (!response.ok) return undefined;
|
||||
|
||||
const changelog = await response.text();
|
||||
const sections = changelog.split(/^## /m).slice(1);
|
||||
|
||||
const relevantSections = sections.filter((section) => {
|
||||
const match = section.match(/^\[(\d+\.\d+\.\d+)\]/);
|
||||
if (!match) return false;
|
||||
return compareVersions(match[1], fromVersion) > 0 && compareVersions(match[1], toVersion) <= 0;
|
||||
});
|
||||
|
||||
if (relevantSections.length === 0) return undefined;
|
||||
|
||||
return relevantSections
|
||||
.map((s) => '## ' + s.trim())
|
||||
.join('\n\n');
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
return (await fetchUpdateNotes(fromVersion, toVersion, compareVersions)) ?? undefined;
|
||||
}
|
||||
|
||||
export async function checkForUpdates(options = {}) {
|
||||
|
||||
Reference in New Issue
Block a user