Add deploy.sh script for manual builds + .env.example + .gitignore for .env
Build & Deploy / build-and-deploy (push) Failing after 2m28s
Build & Deploy / build-and-deploy (push) Failing after 2m28s
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
# Dostalgia — Environment Variables
|
||||
# Copy this to .env and fill in your values.
|
||||
# Source it before running deploy.sh: source .env && ./deploy.sh
|
||||
|
||||
# IGDB (Twitch) credentials — required for game artwork & metadata
|
||||
TWITCH_CLIENT_ID=your_client_id_here
|
||||
TWITCH_CLIENT_SECRET=your_client_secret_here
|
||||
|
||||
# Optional overrides (defaults are fine for most setups)
|
||||
# IMAGE_NAME=dostalgia
|
||||
# CONTAINER_NAME=dostalgia
|
||||
# HOST_PORT=8765
|
||||
# DATA_DIR=/opt/data/workspace/dostalgia/data
|
||||
@@ -27,6 +27,9 @@ data/saves/*
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
# Environment (credentials)
|
||||
.env
|
||||
|
||||
# Test/upload artifacts
|
||||
*.zip
|
||||
*.ZIP
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env bash
|
||||
# ────────────────────────────────────────────────────────────
|
||||
# dostalgia — Build & Deploy Script
|
||||
# ────────────────────────────────────────────────────────────
|
||||
# Usage:
|
||||
# ./deploy.sh # build & deploy (behind current tag)
|
||||
# ./deploy.sh --tag v1.2.3 # build & deploy with specific tag
|
||||
# ./deploy.sh --no-pull # skip git pull
|
||||
# ./deploy.sh --help # show this message
|
||||
#
|
||||
# This script does the same thing the Gitea Actions workflow does,
|
||||
# but can be run manually from the Unraid host (or any machine with
|
||||
# Docker access and the repo cloned).
|
||||
# ────────────────────────────────────────────────────────────
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# ─── Config ─────────────────────────────────────────────────
|
||||
IMAGE_NAME="${IMAGE_NAME:-dostalgia}"
|
||||
CONTAINER_NAME="${CONTAINER_NAME:-dostalgia}"
|
||||
HOST_PORT="${HOST_PORT:-8765}"
|
||||
DATA_DIR="${DATA_DIR:-/opt/data/workspace/dostalgia/data}"
|
||||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
# IGDB credentials (set these in your environment or .env file)
|
||||
TWITCH_CLIENT_ID="${TWITCH_CLIENT_ID:-}"
|
||||
TWITCH_CLIENT_SECRET="${TWITCH_CLIENT_SECRET:-}"
|
||||
|
||||
# ─── Help ───────────────────────────────────────────────────
|
||||
if [[ "${1:-}" == "--help" ]]; then
|
||||
sed -n '2,14p' "$0"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ─── Parse args ─────────────────────────────────────────────
|
||||
DO_PULL=true
|
||||
TAG=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--no-pull) DO_PULL=false; shift ;;
|
||||
--tag) TAG="$2"; shift 2 ;;
|
||||
*) echo "Unknown: $1"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# ─── Pull latest code ───────────────────────────────────────
|
||||
if $DO_PULL; then
|
||||
echo "⟳ Pulling latest code from Gitea..."
|
||||
cd "$REPO_DIR"
|
||||
git fetch origin
|
||||
git checkout main
|
||||
git pull origin main
|
||||
fi
|
||||
|
||||
if [[ -z "$TAG" ]]; then
|
||||
TAG="$(git rev-parse --short HEAD)"
|
||||
fi
|
||||
|
||||
echo "Building: $IMAGE_NAME:$TAG"
|
||||
|
||||
# ─── Build the frontend and backend ─────────────────────────
|
||||
echo "🔨 Building Docker image..."
|
||||
docker build -t "$IMAGE_NAME:$TAG" "$REPO_DIR"
|
||||
docker tag "$IMAGE_NAME:$TAG" "$IMAGE_NAME:latest"
|
||||
|
||||
# ─── Stop old container ─────────────────────────────────────
|
||||
echo "🛑 Stopping old container..."
|
||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
||||
|
||||
# ─── Start new container ────────────────────────────────────
|
||||
echo "🚀 Starting new container..."
|
||||
DOCKER_ARGS=(
|
||||
-d
|
||||
--name "$CONTAINER_NAME"
|
||||
--restart unless-stopped
|
||||
-p "$HOST_PORT:8765"
|
||||
-v "$DATA_DIR:/data"
|
||||
)
|
||||
|
||||
if [[ -n "$TWITCH_CLIENT_ID" && -n "$TWITCH_CLIENT_SECRET" ]]; then
|
||||
DOCKER_ARGS+=(-e "TWITCH_CLIENT_ID=$TWITCH_CLIENT_ID")
|
||||
DOCKER_ARGS+=(-e "TWITCH_CLIENT_SECRET=$TWITCH_CLIENT_SECRET")
|
||||
echo " IGDB credentials: configured"
|
||||
else
|
||||
echo " IGDB credentials: not set (auto-scrape disabled)"
|
||||
echo " Set TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRET env vars to enable"
|
||||
fi
|
||||
|
||||
docker run "${DOCKER_ARGS[@]}" "$IMAGE_NAME:latest"
|
||||
|
||||
# ─── Health check ───────────────────────────────────────────
|
||||
echo "⏳ Waiting for container to be healthy..."
|
||||
sleep 3
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf "http://localhost:$HOST_PORT/api/health" >/dev/null 2>&1; then
|
||||
echo "✅ Dostalgia is running at http://localhost:$HOST_PORT"
|
||||
exit 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "❌ Health check failed — check logs: docker logs $CONTAINER_NAME"
|
||||
exit 1
|
||||
Reference in New Issue
Block a user