From 18a551f07672a217a4012e7feb1da368db1cf97f Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 17 Apr 2026 10:14:10 -0400 Subject: [PATCH] feat(release): smoke-test release mode before tagging Adds a verify_release_tests step to bin/dev/release.sh that runs the same nextest invocation the CI release workflow uses -- workspace, --release, --profile ci -- with SEGMENT_WRITE_KEY baked in so telemetry-active code paths are actually exercised. Runs before the version bump/tag, so regressions that only show up under --release plus a compiled-in write key (e.g. telemetry recreating ~/.fabro, sender tests that assume no key) fail locally in ~5 min instead of ~60 min on a tagged release run. `--skip-tests` for when you've already run it yourself. Co-Authored-By: Claude Opus 4.7 (1M context) --- bin/dev/release.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/bin/dev/release.sh b/bin/dev/release.sh index 569a65d2e..3ffa0abf8 100755 --- a/bin/dev/release.sh +++ b/bin/dev/release.sh @@ -60,6 +60,7 @@ compute_release_version() { parse_args() { DRY_RUN=0 + SKIP_TESTS=0 PRERELEASE_LABEL="" while [[ $# -gt 0 ]]; do @@ -67,11 +68,21 @@ parse_args() { --dry-run) DRY_RUN=1 ;; + --skip-tests) + SKIP_TESTS=1 + ;; --help|-h) cat <<'EOF' -Usage: bin/dev/release.sh [alpha|beta|rc] [--dry-run] +Usage: bin/dev/release.sh [alpha|beta|rc] [--dry-run] [--skip-tests] Create the next stable release from main, or compute a prerelease tag. + +Before tagging, runs the same release-mode test smoke the CI release +workflow does for the native target, with SEGMENT_WRITE_KEY baked in so +telemetry-active code paths are exercised. This catches regressions +like "uninstall recreates ~/.fabro via telemetry" or "sender tests +assume no write key" before we burn a 60-minute CI cycle. Skip only if +you've already run `cargo nextest run --workspace --release` yourself. EOF exit 0 ;; @@ -101,10 +112,26 @@ verify_spa_assets() { fi } +verify_release_tests() { + if [[ "$SKIP_TESTS" == "1" ]]; then + echo "--skip-tests set, skipping release-mode test smoke" + return 0 + fi + + echo "Running release-mode test smoke (SEGMENT_WRITE_KEY baked in)..." + SEGMENT_WRITE_KEY="fake-for-local-smoke" \ + cargo nextest run \ + --workspace \ + --release \ + --profile ci \ + --status-level slow +} + main() { parse_args "$@" verify_spa_assets + verify_release_tests local repo_root cargo_toml current_version base_version new_version tag repo_root="$(git rev-parse --show-toplevel)"