asdf
Squash the current repository state back into one baseline commit while preserving the README reframing and repository contents. Constraint: User explicitly requested a single squashed commit with subject "asdf" Confidence: high Scope-risk: broad Reversibility: clean Directive: This commit intentionally rewrites published history; coordinate before future force-pushes Tested: git status clean; local history rewritten to one commit; force-pushed main to origin and instructkr Not-tested: Fresh clone verification after push
This commit is contained in:
commit
d2542c9a62
11
src/commands/release-notes/index.ts
Normal file
11
src/commands/release-notes/index.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { Command } from '../../commands.js'
|
||||
|
||||
const releaseNotes: Command = {
|
||||
description: 'View release notes',
|
||||
name: 'release-notes',
|
||||
type: 'local',
|
||||
supportsNonInteractive: true,
|
||||
load: () => import('./release-notes.js'),
|
||||
}
|
||||
|
||||
export default releaseNotes
|
||||
50
src/commands/release-notes/release-notes.ts
Normal file
50
src/commands/release-notes/release-notes.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import type { LocalCommandResult } from '../../types/command.js'
|
||||
import {
|
||||
CHANGELOG_URL,
|
||||
fetchAndStoreChangelog,
|
||||
getAllReleaseNotes,
|
||||
getStoredChangelog,
|
||||
} from '../../utils/releaseNotes.js'
|
||||
|
||||
function formatReleaseNotes(notes: Array<[string, string[]]>): string {
|
||||
return notes
|
||||
.map(([version, notes]) => {
|
||||
const header = `Version ${version}:`
|
||||
const bulletPoints = notes.map(note => `· ${note}`).join('\n')
|
||||
return `${header}\n${bulletPoints}`
|
||||
})
|
||||
.join('\n\n')
|
||||
}
|
||||
|
||||
export async function call(): Promise<LocalCommandResult> {
|
||||
// Try to fetch the latest changelog with a 500ms timeout
|
||||
let freshNotes: Array<[string, string[]]> = []
|
||||
|
||||
try {
|
||||
const timeoutPromise = new Promise<void>((_, reject) => {
|
||||
setTimeout(rej => rej(new Error('Timeout')), 500, reject)
|
||||
})
|
||||
|
||||
await Promise.race([fetchAndStoreChangelog(), timeoutPromise])
|
||||
freshNotes = getAllReleaseNotes(await getStoredChangelog())
|
||||
} catch {
|
||||
// Either fetch failed or timed out - just use cached notes
|
||||
}
|
||||
|
||||
// If we have fresh notes from the quick fetch, use those
|
||||
if (freshNotes.length > 0) {
|
||||
return { type: 'text', value: formatReleaseNotes(freshNotes) }
|
||||
}
|
||||
|
||||
// Otherwise check cached notes
|
||||
const cachedNotes = getAllReleaseNotes(await getStoredChangelog())
|
||||
if (cachedNotes.length > 0) {
|
||||
return { type: 'text', value: formatReleaseNotes(cachedNotes) }
|
||||
}
|
||||
|
||||
// Nothing available, show link
|
||||
return {
|
||||
type: 'text',
|
||||
value: `See the full changelog at: ${CHANGELOG_URL}`,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user