Change summary
script/onboarding | 176 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 176 insertions(+)
Detailed changes
@@ -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