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
|
*.ipr
|
||||||
*.iws
|
*.iws
|
||||||
|
|
||||||
|
# Environment (credentials)
|
||||||
|
.env
|
||||||
|
|
||||||
# Test/upload artifacts
|
# Test/upload artifacts
|
||||||
*.zip
|
*.zip
|
||||||
*.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