Dashboard › cli › Distillation
60cd433b-5472-4d2d-af0d-1e71b355028f["lore_tm_v1_KYfUGbORJQ79-djiOQcm8PdHQPZ9m0TjdQrxu7tUlRk","lore_tm_v1_7rwtnRvqUNULbKEL6T79fxj_3931EbEEnrb4mvrBcDk","lore_tm_v1_xcLx47NyW2HVi3z8NTumU_h1t58tmw0Hawczu4ZuYic","lore_tm_v1_n-3layI_ZF5t_rlHGIx4nbN1WZO62iMAX__3PM-mXlE","lore_tm_v1_IGO4RJ5RYP4q55tlFFAa7CsCXNmgiLmTqaGfG-ZMCmo","lore_tm_v1_R_OW4FXOz1qjpydrvTyrEOEu3hyNLoj_0AlswmVE-1U","lore_tm_v1_VmqvWPH0pfzPZSWMsycgf2rG-icBArIY9ZOd1yH9k_k","lore_tm_v1_dSzdfljOhsdjhew0ZX3wf9MgMFLSCCpJUOTsmk9sh_U","lore_tm_v1_6z1k1ZTCs2fxUnoTpQdlTlzUk3O_IGu6XMLhsLs3x6M","lore_tm_v1_no0Syh3chowyE4JGFcKeAdg4rTf5e-tR4KDc_8V2Umo","lore_tm_v1_ekCRE7_CbB1C356jUzPWavpgSbvVHM8Gq3XXZd5_ZBc","lore_tm_v1_qfjdZCYulw_pnD6vATIcvXUAFVm8WPCNDG0VqoEEHWI","lore_tm_v1_ucCLETgtvuJ_PIZTwT33Slv4L5H6mBEmOPDmOLt-fcg","lore_tm_v1_OqDDAck4CSDRFmq9kmCzz4le5ahMMTNpitbqTDOMyDA","lore_tm_v1_xGO5cB-o5JZXc0fVEUc4cFSu03akYw_hrV2BQuSlLV8","lore_tm_v1_dZ7mEpXwLlaDHgZIshd8mzYToqEb-1uSeGJPRo8TabU","lore_tm_v1_GUhQuBy5R9iCh0HQE3TKnHM8Q1lDN-W6JwQdnmugxAw","lore_tm_v1_5GplHpu4frrwNuSbPwDc4yyNN9fG0rp1r5NajkKe14Q","lore_tm_v1_ZaJ-SowIhq4rU1GW1jSQjDmbCSsguKs-RxBu6LW8wOU","lore_tm_v1_YclIkUTf8FDRZT7SkKDDSm7xGX0ncTy5JOaGL2XEx_I","lore_tm_v1_bd3YYqxmB-naq-eqBc-EUQiJqFb0lCcIqAHIYGoCO64"]
Date: Sep 9, 2026
packages/cli/test/helpers.ts lines 65–124. FetchMockFn supports either (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> or () => Promise<Response>; mockFetch(fn: FetchMockFn): typeof fetch casts through unknown. useTestConfigDir() creates an isolated config directory, saves/restores SENTRY_CONFIG_DIR, closes the database, and resets auth-token, auth-row, stored-credentials, and identity-fingerprint caches before each test.packages/cli/src/lib/release-notes.ts and packages/cli/test/lib/release-notes.test.ts were modified to add source-aware changelog behavior and tests.v4.1.10: 2 test files passed, 38 tests passed, duration 2.35s. Vitest warned that test.poolOptions was removed in Vitest 4 and its former options are now top-level.packages/cli/install, packages/cli/src/lib/binary.ts, packages/cli/src/lib/delta-upgrade.ts, packages/cli/src/lib/ghcr.ts, packages/cli/src/lib/release-notes.ts, packages/cli/src/lib/upgrade.ts, packages/cli/test/lib/binary.test.ts, packages/cli/test/lib/delta-upgrade.test.ts, packages/cli/test/lib/ghcr.test.ts, packages/cli/test/lib/install-script.test.ts, packages/cli/test/lib/release-notes.test.ts, and packages/cli/test/lib/upgrade.test.ts.packages/cli/src/lib/upgrade.ts defines ResolvedUpgradeVersion with exact fields readonly version: string and readonly source: UpgradeSource, documenting that the selected source must serve every later lookup and download in the operation.fetchLatestFromGitHubWithSource(signal?) in packages/cli/src/lib/upgrade.ts uses resolveUpgradeSource({ getProbeUrl: getGitHubLatestReleaseUrl, signal }), filters non-draft/non-prerelease release-list responses by source.tagPrefix, removes the prefix, semantically sorts versions descending with compareVersions, and returns { version, source }. The backward-compatible fetchLatestFromGitHub(signal?) wrapper returns only .version.fetchLatestNightlyVersionWithSource(signal?) in packages/cli/src/lib/upgrade.ts selects a source with resolveUpgradeSource({ getProbeUrl: getGitHubRepositoryUrl, signal }), obtains an anonymous token for that source, fetches its nightly manifest, and returns { version: getNightlyVersion(manifest), source }. The backward-compatible fetchLatestNightlyVersion(signal?) wrapper returns only .version.packages/cli/src/lib/delta-upgrade.ts defines stableSource(source) using getGitHubReleasesUrl(source) and nightlySource(source) using repo: source.ghcrRepo; both retain getPlatformBinaryName(), sentry-cli/${CLI_VERSION}, customFetch, and instrumentation.fetchRecentReleases(signal?, source = PRIMARY_UPGRADE_SOURCE) now requests ${getGitHubReleasesUrl(source)}?per_page=12; it returns [] for non-OK responses, non-array JSON, or fetch failures.prefetchNightlyPatches(targetVersion, signal?, source = PRIMARY_UPGRADE_SOURCE) calls prefetch(nightlySource(source), ...), while prefetchStablePatches(targetVersion, signal?, source = PRIMARY_UPGRADE_SOURCE) calls prefetch(stableSource(source), ...).packages/cli/src/lib/version-check.ts and packages/cli/test/lib/version-check.test.ts were modified to carry source selection through background update checks and delta prefetching.v4.1.10; the same removed-test.poolOptions deprecation warning remained.buildChangelogSummary() in src/lib/release-notes.ts:431 had 5 parameters where lint/nursery/useMaxParams permits 4; fetchStableChangelog() at line 614 had the same 5-parameter violation; test/lib/release-notes.test.ts needed multiline formatting for a JSON fixture; test/lib/version-check.test.ts had unsorted imports; its import * as deltaUpgrade violated lint/performance/noNamespaceImport; and a long legacy-release URL condition required formatter wrapping.buildChangelogSummaryForSource(releases, fromVersion, toVersion, options), where options contains maxItems?: number and source?: UpgradeSource. It strips and validates source.tagPrefix before version comparison. Public buildChangelogSummary(releases, fromVersion, toVersion, maxItems?) remains backward compatible and delegates without an explicit source.fetchStableChangelog() was refactored to accept a single options object typed as FetchChangelogOptions & { source: UpgradeSource }, eliminating the 5-parameter lint violation. It fetches releases with fetchReleasesForChangelog(source) and builds the summary with buildChangelogSummaryForSource(..., { maxItems, source }).fetchReleasesForChangelog(source = PRIMARY_UPGRADE_SOURCE) now requests ${getGitHubReleasesUrl(source)}?per_page=${CHANGELOG_MAX_RELEASES} instead of the fixed GITHUB_RELEASES_URL; CHANGELOG_MAX_RELEASES remains 30.packages/cli/src/lib/release-notes.ts and packages/cli/test/lib/version-check.test.ts; the check completed successfully after formatting, import organization, and replacement of the namespace import with named imports.getsentry/cli, simulate Toolkit 404 responses followed by successful legacy responses, spy on delta prefetch calls, and verify that discovery and prefetch remain affine to the selected source rather than contacting a different repository later.