Dashboard › cli › Distillation
af057b2b-bc9d-4023-b35e-520625f7a188["lore_tm_v1_T9bSQEs_gfFA0MZmxhGGCY51LbycY3QlqJKfkJUXLbE","lore_tm_v1_sCS_Vh60D3pdZtCKgBBX7wWlx4GIQF2R7PnEBtJgYt0","lore_tm_v1_2jxv7a6u4b3KbkZXzHZy93og0LHp82sJF80w9qp0Ap8","lore_tm_v1_J_mwtKXh5n7NWI_RIxgvWA3Zxmj1asULVwMY9mo9q3Y","lore_tm_v1_-hlc5jKcictxH1W3fOUD9zq7Cx_x57DggdJRXCE3U2s","lore_tm_v1_0UwU_uUpuOrgBjTHLXF_aWl2nkZhaDhcqDy0MMW5q80","lore_tm_v1_oKIfCsVpvnpnKlN5q_iBBf1xAwO-FYPm1Q-LHCak2pk"]
--offline is supported only for curl-installed binaries, otherwise validateMethod() throws UpgradeError("unsupported_operation", "Offline upgrade is only supported for curl-installed binaries.").resolveTargetWithFallback() in packages/cli/src/commands/cli/upgrade.ts uses explicit offline mode only for curl installs. When switching channels without an explicit version, offline mode is rejected because the cached version belongs to the previous channel; the error instructs the user to rerun sentry cli upgrade with network access.resolveTargetWithFallback() reads the cached target before calling persistChannelFn(), because setReleaseChannel() clears the version-check cache when the channel changes. Explicit offline resolution returns offline: "explicit"; automatic network-error fallback returns offline: "network-fallback"."curl" and the caught error is UpgradeError with reason "network_error". Version lookup or validation failures such as version_not_found do not trigger fallback, and failure to find a cached target rethrows the original network error.resolveTargetVersion() always fetches the latest version before selecting versionArg or latest as the target. It returns "checked" for --check, returns "up-to-date" when CLI_VERSION === target unless forced or changing channels, and validates an explicitly pinned version with versionExists().versionExists("curl", target), regardless of the current installation method.buildCheckResult() emits action: "checked" and, when the target differs from CLI_VERSION, adds a warning to run either sentry cli upgrade <target> for a pinned version or bare sentry cli upgrade for channel/latest updates.executeStandardUpgrade() uses the rolling NIGHTLY_TAG only for the latest nightly when no explicit version was requested; a pinned nightly uses its own release tag.executeStandardUpgrade() runs setup from the temporary binary with install: true, pins SENTRY_INSTALL_DIR through the resolved install directory, sets ensureAuthScopes: !json, honors noAgentSkills, and releases the download lock in finally. Package-manager upgrades instead resolve the new CLI path after installation and run setup with install: false.migrateToStandaloneForNightly() downloads via executeUpgrade("curl", ...), installs to determineInstallDir(homedir(), process.env), runs setup with method: "curl" and channel: "nightly", releases the lock in finally, and returns warnings about the old installation potentially shadowing the new binary.persistChannel() stores the release-channel preference when the channel changed or the positional argument is exactly a channel selector ("nightly" or "stable"). Persistence is deferred until after offline target resolution to avoid clearing the needed cached version.startChangelogFetch() starts fetchChangelog({channel, fromVersion, toVersion}) in parallel with binary download, returns undefined when offline or already on the target, and never throws because fetch errors are swallowed so they cannot block an upgrade.sentry cli upgrade nightly as βSwitch to nightly channel and update,β sentry cli upgrade stable as switching back to stable and updating, --check as checking without installation, --force as forcing a redownload, --method npm as overriding installation detection, --offline as using cached patches without network, and --no-agent-skills as skipping agent-skill reinstallation.action: "upgraded" or "downgraded", the old and target versions, channel, original detected method, force/offline state, migration warnings, and changelog.packages/cli/src/lib/version-check.ts never throws; errors are caught and reported to Sentry.packages/cli/src/lib/version-check.ts never throws; errors are caught and reported rather than escaping to the CLI caller.getsentry/cli#1244, titled βtoolkit merge: bridge CLI release + dual-source upgrade compatibility,β is an open subtask of master issue getsentry/cli#1248 and a hard prerequisite for importing CLI history into getsentry/sentry-mcp.getsentry/cli before any CLI history is imported into getsentry/sentry-mcp; it must remain usable before the Toolkit rename, discover Toolkit releases afterward, and preserve upgrades for older binaries through legacy endpoints.getsentry/toolkit / ghcr.io/getsentry/toolkit; 2. getsentry/cli / ghcr.io/getsentry/cli.check: script that fails if their source lists or ordering diverge.getsentry/cli, every migrated stable CLI release and nightly must be dual-published to Toolkit and legacy CLI endpoints throughout the compatibility window.src/lib/binary.ts, ghcr.ts, upgrade.ts, and delta-upgrade.ts through UPGRADE_SOURCES; the generated install script must mirror the same ordered fallback.sha256-<binary> / from-version patch chains and cleanup/keep-count parity across both GHCR packages.getsentry/cli using the release systemβs computed version rather than manually pinning one; 2. verify a pre-bridge binary upgrades through getsentry/cli; 3. verify the bridge binary receives a 404 from the not-yet-existing getsentry/toolkit source and falls back to getsentry/cli; 4. verify identical install-script behavior; 5. record the released bridge version before beginning getsentry/cli#1239.getsentry/cli; 3. verify bridge and Toolkit-built binaries upgrade through getsentry/toolkit; 4. simulate a Toolkit 404 and verify both new binaries fall back to getsentry/cli; 5. compare release assets, SHA-256 values, GHCR manifests, and delta-chain metadata across both repositories and require exact matches; 6. run the same matrix for the install script and one nightly.getsentry/cli must remain writable during that period and may be archived only after telemetry and release evidence show the legacy endpoint is no longer required.