Spaces:
Sleeping
Sleeping
| set -e | |
| echo "Starting VS Code with Hugging Face persistence..." | |
| # Check if HF_TOKEN and HF_DATASET are set | |
| if [ -z "$HF_TOKEN" ] || [ -z "$HF_DATASET" ]; then | |
| echo "Warning: HF_TOKEN or HF_DATASET not set. Running without persistence." | |
| exec code-server --bind-addr 0.0.0.0:7860 --auth password /home/coder/workspace | |
| exit 0 | |
| fi | |
| # Login to Hugging Face | |
| echo "Logging in to Hugging Face..." | |
| huggingface-cli login --token "$HF_TOKEN" --add-to-git-credential | |
| # Directories to persist | |
| CONFIG_DIR="/home/coder/.config/code-server" | |
| LOCAL_DIR="/home/coder/.local/share/code-server" | |
| WORKSPACE_DIR="/home/coder/workspace" | |
| BACKUP_DIR="/tmp/hf_backup" | |
| # Create backup directory | |
| mkdir -p "$BACKUP_DIR" | |
| # Function to download from HF dataset | |
| download_from_hf() { | |
| echo "Downloading persisted data from Hugging Face dataset: $HF_DATASET" | |
| # Try to download the backup archive | |
| if huggingface-cli download "$HF_DATASET" backup.tar.gz --repo-type dataset --local-dir "$BACKUP_DIR" 2>/dev/null; then | |
| echo "Found existing backup, restoring..." | |
| # Extract the backup | |
| cd /home/coder | |
| tar -xzf "$BACKUP_DIR/backup.tar.gz" 2>/dev/null || echo "No previous backup found or extraction failed" | |
| echo "Restoration complete!" | |
| else | |
| echo "No existing backup found. Starting fresh." | |
| fi | |
| } | |
| # Function to upload to HF dataset | |
| upload_to_hf() { | |
| echo "Saving data to Hugging Face dataset..." | |
| # Create backup archive | |
| cd /home/coder | |
| tar -czf "$BACKUP_DIR/backup.tar.gz" \ | |
| --exclude='*.log' \ | |
| --exclude='*.sock' \ | |
| --exclude='CachedData' \ | |
| --exclude='Cache' \ | |
| --exclude='GPUCache' \ | |
| .config/code-server \ | |
| .local/share/code-server \ | |
| workspace 2>/dev/null || true | |
| # Upload to HF dataset | |
| huggingface-cli upload "$HF_DATASET" "$BACKUP_DIR/backup.tar.gz" backup.tar.gz --repo-type dataset --create || \ | |
| echo "Upload failed, continuing anyway..." | |
| } | |
| # Setup trap to save on exit | |
| trap 'upload_to_hf' EXIT SIGTERM SIGINT | |
| # Download existing data | |
| download_from_hf | |
| # Start background sync every 5 minutes | |
| ( | |
| while true; do | |
| sleep 300 | |
| upload_to_hf | |
| done | |
| ) & | |
| SYNC_PID=$! | |
| echo "Starting code-server..." | |
| # Start code-server | |
| code-server --bind-addr 0.0.0.0:7860 --auth password /home/coder/workspace & | |
| CODE_SERVER_PID=$! | |
| # Wait for code-server to exit | |
| wait $CODE_SERVER_PID | |
| # Kill background sync | |
| kill $SYNC_PID 2>/dev/null || true | |
| # Final upload | |
| upload_to_hf | |
| echo "Shutdown complete." | |