This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch codespaces
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 53986502c880a55aa89208a7d3dd02d2b16b0886
Author: Maxime Beauchemin <[email protected]>
AuthorDate: Mon Jul 28 15:07:32 2025 -0700

    feat: Add GitHub Codespaces support with docker-compose-light
    
    ## Summary
    
    Adds full GitHub Codespaces development environment configuration 
leveraging the new `docker-compose-light.yml` for efficient cloud development.
    
    ## Key Features
    
    - **Lightweight Setup**: Uses `docker-compose-light.yml` which removes 
Redis/nginx for faster startup and lower resource usage
    - **Multi-Instance Support**: Each Codespace gets isolated database 
volumes, perfect for testing multiple branches
    - **Auto-Configuration**: Includes VS Code extensions, Python/TypeScript 
settings, and auto-start script
    - **Developer Friendly**: Comprehensive README with SSH, VS Code, and 
browser connection instructions
    
    ## Implementation Details
    
    ### Files Added
    - `.devcontainer/devcontainer.json` - Main configuration with:
      - Docker-in-Docker support for compose
      - Optimized VS Code extensions for Superset development
      - Smart port forwarding (9001 for frontend, 8088 for API)
      - 4-core/8GB recommended resources
    
    - `.devcontainer/start-superset.sh` - Auto-start script that:
      - Uses unique project names per Codespace
      - Handles Docker daemon startup
      - Shows clear status and credentials
    
    - `.devcontainer/README.md` - Developer guide covering:
      - Multiple connection methods (SSH, VS Code, browser)
      - Port forwarding instructions
      - Cost optimization tips
      - Integration with `claude --yes` workflows
    
    ## Benefits
    
    1. **Isolated Development**: No risk to local machine when using `claude 
--yes`
    2. **Resource Efficiency**: Laptop stays cool, Codespaces handles the load
    3. **Parallel Testing**: Spin up multiple instances for different features
    4. **Quick Pause/Resume**: Auto-stops when idle, resumes in ~30 seconds
    
    ## Testing
    
    Push to fork and create a Codespace to test. The environment auto-starts 
Superset and forwards port 9001 with HTTPS.
    
    ๐Ÿค– Generated with [Claude Code](https://claude.ai/code)
    
    Co-Authored-By: Claude <[email protected]>
---
 .devcontainer/README.md         | 110 ++++++++++++++++++++++++++++++++++++++++
 .devcontainer/devcontainer.json |  94 ++++++++++++++++++++++++++++++++++
 .devcontainer/start-superset.sh |  41 +++++++++++++++
 3 files changed, 245 insertions(+)

diff --git a/.devcontainer/README.md b/.devcontainer/README.md
new file mode 100644
index 0000000000..79c1efa68a
--- /dev/null
+++ b/.devcontainer/README.md
@@ -0,0 +1,110 @@
+# Superset GitHub Codespaces Development
+
+This configuration uses `docker-compose-light.yml` for lightweight, 
multi-instance development in GitHub Codespaces.
+
+## Quick Start
+
+1. **Create a Codespace** from this repo (click "Code" โ†’ "Codespaces" โ†’ 
"Create codespace")
+2. **Wait for setup** (~3-5 minutes first time)
+3. **Start Superset**:
+   ```bash
+   docker-compose -p ${CODESPACE_NAME} -f docker-compose-light.yml up
+   ```
+4. **Access Superset** at the forwarded port 9001 URL (auto-opens)
+
+## Connecting to Your Codespace
+
+### VS Code Desktop
+1. Install [GitHub Codespaces 
extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces)
+2. Open Command Palette (`Cmd/Ctrl+Shift+P`)
+3. Run "Codespaces: Connect to Codespace"
+4. Select your Codespace
+
+### SSH Access
+```bash
+# Install GitHub CLI if needed
+brew install gh  # macOS
+# or visit: https://cli.github.com/
+
+# Login to GitHub
+gh auth login
+
+# List your Codespaces
+gh cs list
+
+# SSH into a Codespace
+gh cs ssh -c <codespace-name>
+
+# Or use the interactive selector
+gh cs ssh
+```
+
+### Web Browser
+- Go to https://github.com/codespaces
+- Click on your Codespace to open in browser
+
+## Running Multiple Instances
+
+Perfect for testing different branches/features simultaneously:
+
+```bash
+# Instance 1 (in Codespace 1)
+docker-compose -p feature1 -f docker-compose-light.yml up
+
+# Instance 2 (in Codespace 2)
+NODE_PORT=9002 docker-compose -p feature2 -f docker-compose-light.yml up
+```
+
+## Why docker-compose-light.yml?
+
+- **Faster startup**: No Redis, nginx, or unnecessary services
+- **Lower resources**: Important for Codespaces quotas
+- **Isolated databases**: Each instance gets its own `superset_light` database
+- **Simple access**: Single port (9001) with frontend proxy to backend
+
+## Port Forwarding & URLs
+
+When Superset starts, Codespaces automatically forwards port 9001:
+- **Public URL**: `https://<codespace-name>-9001.app.github.dev`
+- **Visibility**: Private by default (requires GitHub auth)
+- **Make public**: Click port in "Ports" tab โ†’ Change visibility
+
+To forward additional ports:
+```bash
+# From outside the Codespace
+gh cs ports forward 5432:5432 -c <codespace-name>  # PostgreSQL
+gh cs ports forward 8088:8088 -c <codespace-name>  # Backend API
+```
+
+## Tips for Claude Code Usage
+
+When using `claude --yes` in Codespaces:
+- All changes are isolated to your Codespace
+- Database/volumes are separate from your local machine
+- Can safely run destructive commands
+- Easy to delete and recreate if needed
+
+## Credentials
+
+Default login (same as docker setup):
+- Username: `admin`
+- Password: `admin`
+
+## Resource Usage
+
+The light compose typically uses:
+- ~2GB RAM (vs ~4GB for full stack)
+- Minimal CPU when idle
+- ~2GB disk for database + dependencies
+
+## Troubleshooting
+
+If services fail to start:
+```bash
+# Check logs
+docker-compose -f docker-compose-light.yml logs
+
+# Restart fresh
+docker-compose -f docker-compose-light.yml down -v
+docker-compose -f docker-compose-light.yml up
+```
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..36cb7076d8
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,94 @@
+{
+  "name": "Apache Superset Development",
+  "dockerComposeFile": [
+    "../docker-compose-light.yml"
+  ],
+  "service": "superset-node-light",
+  "workspaceFolder": "/app",
+
+  // Use the light config for faster startup and lower resource usage
+  "shutdownAction": "stopCompose",
+
+  // Forward ports for development
+  "forwardPorts": [9001, 8088],
+  "portsAttributes": {
+    "9001": {
+      "label": "Superset Frontend",
+      "onAutoForward": "notify"
+    },
+    "8088": {
+      "label": "Superset Backend API",
+      "onAutoForward": "silent"
+    }
+  },
+
+  // VS Code extensions for Superset development
+  "customizations": {
+    "vscode": {
+      "extensions": [
+        "ms-python.python",
+        "ms-python.vscode-pylance",
+        "ms-python.black-formatter",
+        "charliermarsh.ruff",
+        "dbaeumer.vscode-eslint",
+        "esbenp.prettier-vscode",
+        "ms-vscode.vscode-typescript-tslint-plugin",
+        "eamodio.gitlens",
+        "github.copilot",
+        "ms-azuretools.vscode-docker"
+      ],
+      "settings": {
+        "python.defaultInterpreterPath": "/usr/local/bin/python",
+        "python.linting.enabled": true,
+        "python.linting.pylintEnabled": false,
+        "python.formatting.provider": "black",
+        "editor.formatOnSave": true,
+        "editor.codeActionsOnSave": {
+          "source.fixAll.eslint": true
+        },
+        "[python]": {
+          "editor.defaultFormatter": "ms-python.black-formatter"
+        },
+        "[typescript]": {
+          "editor.defaultFormatter": "esbenp.prettier-vscode"
+        },
+        "[typescriptreact]": {
+          "editor.defaultFormatter": "esbenp.prettier-vscode"
+        }
+      }
+    }
+  },
+
+  // Environment variables for development
+  "remoteEnv": {
+    "FLASK_ENV": "development",
+    "SUPERSET_ENV": "development",
+    "CYPRESS_CACHE_FOLDER": "/tmp/cypress_cache",
+    // Enable hot reloading
+    "FLASK_DEBUG": "1",
+    // For multiple instances, use different project names
+    "COMPOSE_PROJECT_NAME": "${localEnv:CODESPACE_NAME}"
+  },
+
+  // Run commands after container is created
+  "postCreateCommand": "chmod +x /app/.devcontainer/start-superset.sh && echo 
'๐Ÿš€ Superset Codespace ready! Run: .devcontainer/start-superset.sh to start'",
+
+  // Auto-start Superset on Codespace resume
+  "postStartCommand": "cd /app && .devcontainer/start-superset.sh",
+
+  // Features to add to the dev container
+  "features": {
+    "ghcr.io/devcontainers/features/docker-in-docker:2": {},
+    "ghcr.io/devcontainers/features/github-cli:1": {},
+    "ghcr.io/devcontainers/features/node:1": {
+      "version": "18"
+    }
+  },
+
+  // Memory and CPU (Codespaces will provision accordingly)
+  "hostRequirements": {
+    "cpus": 4,
+    "memory": "8gb",
+    "storage": "32gb"
+  }
+}
diff --git a/.devcontainer/start-superset.sh b/.devcontainer/start-superset.sh
new file mode 100755
index 0000000000..3fe5735313
--- /dev/null
+++ b/.devcontainer/start-superset.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Startup script for Superset in Codespaces
+
+set -e
+
+echo "๐Ÿš€ Starting Superset in Codespaces..."
+echo "๐Ÿ“ฆ Using project name: ${CODESPACE_NAME}"
+echo "๐ŸŒ Frontend will be available at port 9001"
+
+# Ensure we're in the right directory
+cd /workspaces/superset-2 || cd /app
+
+# Check if docker is running
+if ! docker info > /dev/null 2>&1; then
+    echo "โณ Waiting for Docker to start..."
+    sleep 5
+fi
+
+# Clean up any existing containers from this project
+echo "๐Ÿงน Cleaning up existing containers..."
+docker-compose -p "${CODESPACE_NAME}" -f docker-compose-light.yml down
+
+# Start services
+echo "๐Ÿ—๏ธ  Building and starting services..."
+docker-compose -p "${CODESPACE_NAME}" -f docker-compose-light.yml up -d
+
+# Wait for services to be healthy
+echo "โณ Waiting for services to be ready..."
+sleep 10
+
+# Show status
+echo "โœ… Services started! Status:"
+docker-compose -p "${CODESPACE_NAME}" -f docker-compose-light.yml ps
+
+echo ""
+echo "๐Ÿ“ Default credentials:"
+echo "   Username: admin"
+echo "   Password: admin"
+echo ""
+echo "๐ŸŒ Access Superset at the forwarded port 9001"
+echo "๐Ÿ’ก To view logs: docker-compose -p ${CODESPACE_NAME} -f 
docker-compose-light.yml logs -f"

Reply via email to