751402be44
daemon.state.json.lock is left behind when the daemon crashes or is killed (e.g. pod restart). On next startup happy daemon start sees the lock and exits with "Failed to start daemon" without further detail. Remove the lock file unconditionally at startup — if no daemon is running, the lock is stale by definition. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
79 lines
2.7 KiB
Bash
79 lines
2.7 KiB
Bash
#!/bin/bash
|
|
# Initialize repository and start Happy Coder
|
|
set -e
|
|
|
|
echo "=== Repository Initialization ==="
|
|
|
|
# Check if GITHUB_REPO is set
|
|
if [ -z "$GITHUB_REPO" ]; then
|
|
echo "GITHUB_REPO not set, skipping repository clone"
|
|
WORKSPACE_DIR="/workspace/default"
|
|
mkdir -p "$WORKSPACE_DIR"
|
|
else
|
|
# Parse repo name from URL
|
|
REPO_NAME=$(basename "$GITHUB_REPO" .git)
|
|
WORKSPACE_DIR="/workspace/$REPO_NAME"
|
|
|
|
echo "Repository: $GITHUB_REPO"
|
|
echo "Target directory: $WORKSPACE_DIR"
|
|
|
|
# Check if repo already exists
|
|
if [ -d "$WORKSPACE_DIR/.git" ]; then
|
|
echo "Repository already exists, pulling latest changes..."
|
|
cd "$WORKSPACE_DIR"
|
|
|
|
# Configure git to use token if provided
|
|
if [ -n "$GITHUB_TOKEN" ]; then
|
|
git config credential.helper store
|
|
echo "https://oauth2:${GITHUB_TOKEN}@github.com" > /home/.git-credentials
|
|
chmod 600 /home/.git-credentials
|
|
fi
|
|
|
|
git pull || echo "Pull failed, continuing anyway..."
|
|
else
|
|
echo "Cloning repository..."
|
|
mkdir -p "$(dirname "$WORKSPACE_DIR")"
|
|
|
|
# Clone with token if provided
|
|
if [ -n "$GITHUB_TOKEN" ]; then
|
|
# Replace https://github.com/ with https://oauth2:token@github.com/
|
|
CLONE_URL=$(echo "$GITHUB_REPO" | sed "s|https://github.com/|https://oauth2:${GITHUB_TOKEN}@github.com/|")
|
|
git clone "$CLONE_URL" "$WORKSPACE_DIR"
|
|
|
|
# Configure credentials for future use
|
|
git config --global credential.helper store
|
|
echo "https://oauth2:${GITHUB_TOKEN}@github.com" > /home/.git-credentials
|
|
chmod 600 /home/.git-credentials
|
|
else
|
|
git clone "$GITHUB_REPO" "$WORKSPACE_DIR"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Set ownership using numeric IDs (username may not exist yet in baseimage-gui)
|
|
RUN_UID="${USER_ID:-1000}"
|
|
RUN_GID="${GROUP_ID:-1000}"
|
|
chown -R "$RUN_UID:$RUN_GID" "$WORKSPACE_DIR"
|
|
|
|
# Ensure home directory exists on the PVC (may be absent on a fresh volume)
|
|
mkdir -p "$HOME"
|
|
chown "$RUN_UID:$RUN_GID" "$HOME"
|
|
|
|
# Start Happy Coder daemon. startapp.sh already runs as the app user (UID 1000),
|
|
# so no sudo needed — Happy/Claude Code will find credentials in the correct home dir.
|
|
echo "Starting Happy Coder..."
|
|
|
|
# Remove stale lock file left by a previously crashed daemon — without this,
|
|
# happy daemon start refuses to start and exits with "Failed to start daemon".
|
|
rm -f "${HAPPY_HOME_DIR:-$HOME/.happy}/daemon.state.json.lock"
|
|
|
|
cd "$WORKSPACE_DIR"
|
|
happy daemon start || echo "Happy Coder daemon failed to start, continuing anyway..."
|
|
|
|
echo "Happy Coder daemon started"
|
|
|
|
# Export workspace directory for startapp.sh
|
|
echo "$WORKSPACE_DIR" > /tmp/workspace-dir
|
|
|
|
echo "=== Initialization Complete ==="
|