#!/bin/bash # Push LMS images to GitHub Container Registry (GHCR) # Usage: ./push-ghcr.sh [tag] # Reads GITHUB_USER and GITHUB_TOKEN from .env set -e cd "$(dirname "$0")" # Load .env if [ -f .env ]; then export $(grep -v '^#' .env | grep -E 'GITHUB_USER|GITHUB_TOKEN' | xargs) fi TAG="${1:-latest}" GITHUB_USER="${GITHUB_USER:?GITHUB_USER not set in .env}" GITHUB_TOKEN="${GITHUB_TOKEN:?GITHUB_TOKEN not set in .env}" BACKEND_IMAGE="ghcr.io/${GITHUB_USER}/lms-backend:${TAG}" FRONTEND_IMAGE="ghcr.io/${GITHUB_USER}/lms-frontend:${TAG}" echo "========================================" echo " LMS → GHCR Push" echo " Backend : $BACKEND_IMAGE" echo " Frontend: $FRONTEND_IMAGE" echo "========================================" echo "" # ── 1. Login to GHCR ────────────────────────────────────────────────────────── echo "🔐 Logging in to ghcr.io ..." echo "$GITHUB_TOKEN" | docker login ghcr.io -u "$GITHUB_USER" --password-stdin # ── 2. Build images ─────────────────────────────────────────────────────────── echo "" echo "🔨 Building images..." cd "$(dirname "$0")" docker compose build # ── 3. Tag for GHCR ─────────────────────────────────────────────────────────── echo "" echo "🏷 Tagging images..." docker tag lms-backend:latest "$BACKEND_IMAGE" docker tag lms-frontend:latest "$FRONTEND_IMAGE" # ── 4. Push ─────────────────────────────────────────────────────────────────── echo "" echo "⬆ Pushing to GHCR..." docker push "$BACKEND_IMAGE" docker push "$FRONTEND_IMAGE" echo "" echo "✅ Done! Images pushed:" echo " $BACKEND_IMAGE" echo " $FRONTEND_IMAGE" echo "" echo "📋 Add these to .env on the target machine:" echo " BACKEND_IMAGE=$BACKEND_IMAGE" echo " FRONTEND_IMAGE=$FRONTEND_IMAGE" echo "" echo "🚀 On the target machine:" echo " docker compose pull && docker compose up -d"