Bernt Christian Egeland před 7 měsíci
rodič
revize
eebdf8b57a

+ 15 - 0
.devcontainer/Dockerfile

@@ -5,7 +5,20 @@ RUN apt-get update && apt-get install -y \
     curl \
     && rm -rf /var/lib/apt/lists/*
 
+# Set up non-root user
+ARG USERNAME=node
+ARG USER_UID=1000
+ARG USER_GID=$USER_UID
+
+# Create the user if it doesn't exist
+RUN if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then \
+        groupmod --gid $USER_GID $USERNAME \
+        && usermod --uid $USER_UID --gid $USER_GID $USERNAME; \
+    fi
+
+# Set up workspace
 WORKDIR /workspace
+RUN chown $USERNAME:$USERNAME /workspace
 
 COPY package*.json ./
 RUN npm install
@@ -13,3 +26,5 @@ RUN npm install
 COPY . .
 
 EXPOSE 3000
+
+USER $USERNAME

+ 30 - 5
.devcontainer/devcontainer.json

@@ -8,18 +8,43 @@
     5432,
     8080
   ],
-  "postCreateCommand": "npm install && npx prisma generate && npx prisma db push",
+  "features": {
+    "ghcr.io/devcontainers/features/node:1": {
+      "version": "20"
+    },
+    "ghcr.io/devcontainers/features/git:1": {},
+    "ghcr.io/devcontainers/features/github-cli:1": {}
+  },
+  "mounts": [
+    "source=${localEnv:HOME}/.ssh,target=/tmp/host-ssh,type=bind,readonly"
+  ],
+  "postCreateCommand": "git config --global --add safe.directory /workspace && bash .devcontainer/setup-ssh.sh",
+  "remoteEnv": {
+    "SSH_AUTH_SOCK": "/tmp/ssh-agent-vscode.sock"
+  },
   "customizations": {
     "vscode": {
       "extensions": [
-        "dbaeumer.vscode-eslint",
         "bradlc.vscode-tailwindcss",
+        "biomejs.biome",
+        "ms-vscode.vscode-typescript-next",
         "Prisma.prisma",
-        "esbenp.prettier-vscode"
+        "ms-vscode.vscode-json",
+        "formulahendry.auto-rename-tag",
+        "christian-kohler.path-intellisense",
+        "GitHub.copilot",
+        "GitHub.copilot-chat",
+        "GitHub.copilot-labs",
+        "bruceyuhb.hsl-preview"
       ],
       "settings": {
-        "editor.formatOnSave": true
+        "editor.formatOnSave": true,
+        "editor.codeActionsOnSave": {
+          "quickfix.biome": "explicit",
+          "source.organizeImports.biome": "explicit"
+        }
       }
     }
-  }
+  },
+  "remoteUser": "node"
 }

+ 66 - 0
.devcontainer/setup-ssh.sh

@@ -0,0 +1,66 @@
+#!/bin/bash
+
+# === SSH Setup for DevContainer ===
+# Solves: VS Code Git extension + terminal SSH with passphrase
+
+# Fixed socket path that VS Code can find via remoteEnv
+SSH_SOCK="/tmp/ssh-agent-vscode.sock"
+
+# --- Copy SSH keys from host ---
+if [ -d "/tmp/host-ssh" ]; then
+    sudo cp -r /tmp/host-ssh /tmp/ssh-copy
+    sudo chown -R node:node /tmp/ssh-copy
+    mkdir -p ~/.ssh
+    cp /tmp/ssh-copy/* ~/.ssh/ 2>/dev/null
+    chmod 700 ~/.ssh
+    chmod 600 ~/.ssh/id_* 2>/dev/null
+    chmod 644 ~/.ssh/*.pub ~/.ssh/known_hosts ~/.ssh/config 2>/dev/null
+    rm -rf /tmp/ssh-copy
+    echo "✓ SSH keys copied"
+fi
+
+# --- Start ssh-agent with fixed socket ---
+# Remove old socket if it exists but the agent is dead
+if [ -S "$SSH_SOCK" ]; then
+    if ! SSH_AUTH_SOCK="$SSH_SOCK" ssh-add -l &>/dev/null; then
+        rm -f "$SSH_SOCK"
+    fi
+fi
+
+# Start new agent if necessary
+if [ ! -S "$SSH_SOCK" ]; then
+    eval $(ssh-agent -a "$SSH_SOCK") > /dev/null
+    echo "✓ SSH agent started on $SSH_SOCK"
+else
+    export SSH_AUTH_SOCK="$SSH_SOCK"
+    echo "✓ SSH agent already running"
+fi
+
+# --- Add to .bashrc for terminals ---
+if ! grep -q "SSH_AGENT_VSCODE" ~/.bashrc 2>/dev/null; then
+    cat >> ~/.bashrc << 'BASHRC'
+
+# SSH_AGENT_VSCODE
+export SSH_AUTH_SOCK="/tmp/ssh-agent-vscode.sock"
+
+# Add key if agent is running but no keys loaded
+if [ -S "$SSH_AUTH_SOCK" ]; then
+    if ! ssh-add -l &>/dev/null; then
+        echo "Run 'ssh-add' to load SSH key"
+    fi
+fi
+BASHRC
+    echo "✓ .bashrc updated"
+fi
+
+echo ""
+echo "==========================================="
+echo "SSH SETUP COMPLETE"
+echo "==========================================="
+echo ""
+echo "IMPORTANT: Open a terminal and run:"
+echo "  ssh-add ~/.ssh/id_ed25519"
+echo ""
+echo "You will be asked for your passphrase ONCE."
+echo "After that, both terminal AND VS Code Git will work."
+echo "==========================================="