Add onboarding reset restore script (#36202)

Joseph T. Lyons created

Release Notes:

- N/A

Change summary

script/onboarding | 176 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 176 insertions(+)

Detailed changes

script/onboarding 🔗

@@ -0,0 +1,176 @@
+#!/usr/bin/env bash
+
+set -e
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m'
+
+CHANNEL="$1"
+COMMAND="$2"
+
+if [[ "$CHANNEL" != "stable" && "$CHANNEL" != "preview" && "$CHANNEL" != "nightly" && "$CHANNEL" != "dev" ]]; then
+    echo -e "${RED}Error: Invalid channel '$CHANNEL'. Must be one of: stable, preview, nightly, dev${NC}"
+    exit 1
+fi
+
+if [[ "$OSTYPE" == "darwin"* ]]; then
+    DB_BASE_DIR="$HOME/Library/Application Support/Zed/db"
+    DB_DIR="$DB_BASE_DIR/0-$CHANNEL"
+    DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup"
+    case "$CHANNEL" in
+        stable) APP_NAME="Zed" ;;
+        preview) APP_NAME="Zed Preview" ;;
+        nightly) APP_NAME="Zed Nightly" ;;
+        dev) APP_NAME="Zed Dev" ;;
+    esac
+elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
+    DB_BASE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/zed/db"
+    DB_DIR="$DB_BASE_DIR/0-$CHANNEL"
+    DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup"
+    case "$CHANNEL" in
+        stable) APP_NAME="zed" ;;
+        preview) APP_NAME="zed-preview" ;;
+        nightly) APP_NAME="zed-nightly" ;;
+        dev) APP_NAME="zed-dev" ;;
+    esac
+elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "win32" ]]; then
+    LOCALAPPDATA_PATH="${LOCALAPPDATA:-$USERPROFILE/AppData/Local}"
+    DB_BASE_DIR="$LOCALAPPDATA_PATH/Zed/db"
+    DB_DIR="$DB_BASE_DIR/0-$CHANNEL"
+    DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup"
+
+    case "$CHANNEL" in
+        stable) APP_NAME="Zed" ;;
+        preview) APP_NAME="Zed Preview" ;;
+        nightly) APP_NAME="Zed Nightly" ;;
+        dev) APP_NAME="Zed Dev" ;;
+    esac
+else
+    echo -e "${RED}Error: Unsupported OS type: $OSTYPE${NC}"
+    exit 1
+fi
+
+reset_onboarding() {
+    echo -e "${BLUE}=== Resetting $APP_NAME to First-Time User State ===${NC}"
+    echo ""
+
+    if [ ! -d "$DB_DIR" ]; then
+        echo -e "${YELLOW}No database directory found at: $DB_DIR${NC}"
+        echo "Zed will create a fresh database on next launch and show onboarding."
+        exit 0
+    fi
+
+    if [ -d "$DB_BACKUP_DIR" ]; then
+        echo -e "${RED}ERROR: Backup already exists at: $DB_BACKUP_DIR${NC}"
+        echo ""
+        echo "This suggests you've already run 'onboarding reset'."
+        echo "To avoid losing your original database, this script won't overwrite the backup."
+        echo ""
+        echo "Options:"
+        echo "  1. Run './script/onboarding $CHANNEL restore' to restore your original database"
+        echo "  2. Manually remove the backup if you're sure: rm -rf $DB_BACKUP_DIR"
+        exit 1
+    fi
+
+    echo -e "${YELLOW}Moving $DB_DIR to $DB_BACKUP_DIR${NC}"
+    mv "$DB_DIR" "$DB_BACKUP_DIR"
+
+    echo -e "${GREEN}✓ Backed up: $DB_BACKUP_DIR${NC}"
+    echo ""
+    echo -e "${GREEN}Success! Zed has been reset to first-time user state.${NC}"
+    echo ""
+    echo "Next steps:"
+    echo "  1. Start Zed - you should see the onboarding flow"
+    echo "  2. When done testing, run: ./script/onboarding $CHANNEL restore"
+    echo ""
+    echo -e "${YELLOW}Note: All your workspace data is safely preserved in the backup.${NC}"
+}
+
+restore_onboarding() {
+    echo -e "${BLUE}=== Restoring Original $APP_NAME Database ===${NC}"
+    echo ""
+
+    if [ ! -d "$DB_BACKUP_DIR" ]; then
+        echo -e "${RED}ERROR: No backup found at: $DB_BACKUP_DIR${NC}"
+        echo ""
+        echo "Run './script/onboarding $CHANNEL reset' first to create a backup."
+        exit 1
+    fi
+
+    if [ -d "$DB_DIR" ]; then
+        echo -e "${YELLOW}Removing current database directory: $DB_DIR${NC}"
+        rm -rf "$DB_DIR"
+    fi
+
+    echo -e "${YELLOW}Restoring $DB_BACKUP_DIR to $DB_DIR${NC}"
+    mv "$DB_BACKUP_DIR" "$DB_DIR"
+
+    echo -e "${GREEN}✓ Restored: $DB_DIR${NC}"
+    echo ""
+    echo -e "${GREEN}Success! Your original database has been restored.${NC}"
+}
+
+show_status() {
+    echo -e "${BLUE}=== Zed Onboarding Test Status ===${NC}"
+    echo ""
+
+    if [ -d "$DB_BACKUP_DIR" ]; then
+        echo -e "${YELLOW}Status: TESTING MODE${NC}"
+        echo "  • Original database: $DB_BACKUP_DIR"
+        echo "  • Zed is using: $DB_DIR"
+        echo "  • Run './script/onboarding $CHANNEL restore' to return to normal"
+    elif [ -d "$DB_DIR" ]; then
+        echo -e "${GREEN}Status: NORMAL${NC}"
+        echo "  • Zed is using: $DB_DIR"
+        echo "  • Run './script/onboarding $CHANNEL reset' to test onboarding"
+    else
+        echo -e "${BLUE}Status: NO DATABASE${NC}"
+        echo "  • No Zed database directory exists yet"
+        echo "  • Zed will show onboarding on next launch"
+    fi
+}
+
+case "${COMMAND:-}" in
+    reset)
+        reset_onboarding
+        ;;
+    restore)
+        restore_onboarding
+        ;;
+    status)
+        show_status
+        ;;
+    *)
+        echo -e "${BLUE}Zed Onboarding Test Script${NC}"
+        echo ""
+        echo "Usage: $(basename $0) [channel] <command>"
+        echo ""
+        echo "Commands:"
+        echo "  reset    - Back up current database and reset to show onboarding"
+        echo "  restore  - Restore the original database after testing"
+        echo "  status   - Show current testing status"
+        echo ""
+        echo "Channels:"
+        echo "  stable, preview, nightly, dev"
+        echo ""
+        echo "Working with channel: $CHANNEL"
+        echo "Database directory: $DB_DIR"
+        echo ""
+        echo "Examples:"
+        echo "  ./script/onboarding nightly reset     # Reset nightly"
+        echo "  ./script/onboarding stable reset      # Reset stable"
+        echo "  ./script/onboarding preview restore   # Restore preview"
+        echo ""
+        echo "Workflow:"
+        echo "  1. Close Zed"
+        echo "  2. ./script/onboarding nightly reset"
+        echo "  3. Open Zed"
+        echo "  4. Test onboarding"
+        echo "  5. Close Zed"
+        echo "  6. ./script/onboarding nightly restore"
+        exit 1
+        ;;
+esac