@detergent-software/atk 6.0.0 → 6.1.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/commands/drift.d.ts +16 -0
- package/build/commands/drift.d.ts.map +1 -0
- package/build/commands/drift.js +80 -0
- package/build/commands/drift.js.map +1 -0
- package/build/commands/index.d.ts.map +1 -1
- package/build/commands/index.js +2 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/publish.d.ts +2 -1
- package/build/commands/publish.d.ts.map +1 -1
- package/build/commands/publish.js +71 -5
- package/build/commands/publish.js.map +1 -1
- package/build/commands/release-notes.d.ts +15 -0
- package/build/commands/release-notes.d.ts.map +1 -0
- package/build/commands/release-notes.js +68 -0
- package/build/commands/release-notes.js.map +1 -0
- package/build/components/UpdateBanner.d.ts.map +1 -1
- package/build/components/UpdateBanner.js +1 -1
- package/build/components/UpdateBanner.js.map +1 -1
- package/build/hooks/usePublishState.d.ts +1 -0
- package/build/hooks/usePublishState.d.ts.map +1 -1
- package/build/hooks/usePublishState.js +5 -4
- package/build/hooks/usePublishState.js.map +1 -1
- package/build/lib/drift.d.ts +55 -0
- package/build/lib/drift.d.ts.map +1 -0
- package/build/lib/drift.js +162 -0
- package/build/lib/drift.js.map +1 -0
- package/build/lib/github.d.ts +5 -0
- package/build/lib/github.d.ts.map +1 -1
- package/build/lib/github.js +5 -0
- package/build/lib/github.js.map +1 -1
- package/build/lib/release-notes.d.ts +90 -0
- package/build/lib/release-notes.d.ts.map +1 -0
- package/build/lib/release-notes.js +102 -0
- package/build/lib/release-notes.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { eq as semverEq, gt as semverGt, prerelease as semverPrerelease, rcompare as semverRcompare, valid as semverValid, } from 'semver';
|
|
2
|
+
import { getGitHubToken } from './auth.js';
|
|
3
|
+
import { fetchWithRetry } from './fetch-retry.js';
|
|
4
|
+
import { buildGitHubHeaders, DEFAULT_CLI_REPO, httpErrorMessage } from './github.js';
|
|
5
|
+
import { CLI_VERSION, isPreRelease } from './version.js';
|
|
6
|
+
/** Default number of releases shown in list mode before `--all` is needed. */
|
|
7
|
+
export const DEFAULT_RELEASE_LIMIT = 15;
|
|
8
|
+
const RELEASES_URL = `https://api.github.com/repos/${DEFAULT_CLI_REPO}/releases?per_page=100`;
|
|
9
|
+
/**
|
|
10
|
+
* Fetch GitHub Releases for the CLI repo and return release notes for browsing.
|
|
11
|
+
*
|
|
12
|
+
* Without a `version`, returns the release history (newest-first), channel-filtered
|
|
13
|
+
* and capped at a limit, with each entry flagged for whether it is the installed
|
|
14
|
+
* version or newer than it. With a `version`, returns that single release's notes
|
|
15
|
+
* (pre-releases included, regardless of channel).
|
|
16
|
+
*
|
|
17
|
+
* Channel selection mirrors the update banner: pre-release builds include `-dev.N`
|
|
18
|
+
* pre-releases by default, stable builds show stable releases only — overridable
|
|
19
|
+
* via `includePrerelease`.
|
|
20
|
+
*
|
|
21
|
+
* Unlike the silent update banner, auth and network failures propagate so the
|
|
22
|
+
* command can surface them via `ErrorView`.
|
|
23
|
+
*/
|
|
24
|
+
export async function getReleaseNotes(options = {}, progress) {
|
|
25
|
+
progress?.('Authenticating...');
|
|
26
|
+
const token = await getGitHubToken();
|
|
27
|
+
progress?.('Fetching releases...');
|
|
28
|
+
const response = await fetchWithRetry(RELEASES_URL, { headers: buildGitHubHeaders(token) });
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(httpErrorMessage(response.status, 'CLI releases'));
|
|
31
|
+
}
|
|
32
|
+
const raw = (await response.json());
|
|
33
|
+
// A specific version lookup ignores the channel filter so you can always read
|
|
34
|
+
// the notes for any published version (including pre-releases).
|
|
35
|
+
if (options.version) {
|
|
36
|
+
const requested = normalizeTag(options.version) ?? options.version;
|
|
37
|
+
const release = selectReleaseNotes(raw, CLI_VERSION, true).find((r) => semverEq(r.version, requested));
|
|
38
|
+
return release
|
|
39
|
+
? { currentVersion: CLI_VERSION, outcome: 'single', release }
|
|
40
|
+
: { currentVersion: CLI_VERSION, outcome: 'not-found', requestedVersion: requested };
|
|
41
|
+
}
|
|
42
|
+
const includePrerelease = options.includePrerelease ?? isPreRelease();
|
|
43
|
+
const all = selectReleaseNotes(raw, CLI_VERSION, includePrerelease);
|
|
44
|
+
if (all.length === 0) {
|
|
45
|
+
return { currentVersion: CLI_VERSION, outcome: 'empty' };
|
|
46
|
+
}
|
|
47
|
+
const limit = options.all ? all.length : (options.limit ?? DEFAULT_RELEASE_LIMIT);
|
|
48
|
+
return {
|
|
49
|
+
currentVersion: CLI_VERSION,
|
|
50
|
+
latestVersion: all[0].version,
|
|
51
|
+
outcome: 'list',
|
|
52
|
+
releases: all.slice(0, limit),
|
|
53
|
+
total: all.length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Pure selection logic: from raw GitHub releases, return valid releases ordered
|
|
58
|
+
* newest-first, optionally including pre-releases, with each entry flagged for
|
|
59
|
+
* whether it is the installed version or newer than it. Exported separately so
|
|
60
|
+
* channel filtering, version comparison, and flagging are unit-testable without
|
|
61
|
+
* any network access.
|
|
62
|
+
*
|
|
63
|
+
* - Tags are normalized by stripping a leading `v`; entries that aren't valid
|
|
64
|
+
* semver are skipped.
|
|
65
|
+
* - A release's channel is `dev` when GitHub's `prerelease` flag is set OR the
|
|
66
|
+
* version carries a semver pre-release component; otherwise `latest`.
|
|
67
|
+
* - When `includePrerelease` is false, `dev` releases are dropped.
|
|
68
|
+
*/
|
|
69
|
+
export function selectReleaseNotes(raw, currentVersion, includePrerelease) {
|
|
70
|
+
const notes = [];
|
|
71
|
+
for (const entry of raw) {
|
|
72
|
+
const version = normalizeTag(entry.tag_name);
|
|
73
|
+
if (!version || !semverValid(version)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const prerelease = entry.prerelease === true;
|
|
77
|
+
const channel = prerelease || semverPrerelease(version) !== null ? 'dev' : 'latest';
|
|
78
|
+
if (!includePrerelease && channel === 'dev') {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
notes.push({
|
|
82
|
+
body: entry.body ?? '',
|
|
83
|
+
channel,
|
|
84
|
+
installed: semverValid(currentVersion) ? semverEq(version, currentVersion) : false,
|
|
85
|
+
newer: semverValid(currentVersion) ? semverGt(version, currentVersion) : false,
|
|
86
|
+
prerelease,
|
|
87
|
+
publishedAt: entry.published_at ?? null,
|
|
88
|
+
version,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
notes.sort((a, b) => semverRcompare(a.version, b.version));
|
|
92
|
+
return notes;
|
|
93
|
+
}
|
|
94
|
+
/** Strip a single leading `v` from a release tag, returning undefined when empty. */
|
|
95
|
+
function normalizeTag(tagName) {
|
|
96
|
+
if (!tagName)
|
|
97
|
+
return undefined;
|
|
98
|
+
const trimmed = tagName.trim();
|
|
99
|
+
const stripped = trimmed.startsWith('v') ? trimmed.slice(1) : trimmed;
|
|
100
|
+
return stripped.length > 0 ? stripped : undefined;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=release-notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"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"}
|