diff --git a/publish-docker.sh b/publish-docker.sh new file mode 100755 index 0000000..4723cce --- /dev/null +++ b/publish-docker.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -euo pipefail + +# Publish Docker image to GitHub Container Registry +# Usage: ./publish-docker.sh [tag] [username] + +GITHUB_USERNAME="${2:-anosatsuk124}" +TAG="${1:-latest}" +LOCAL_IMAGE="voice-rss-summary:${TAG}" +GHCR_IMAGE_1="ghcr.io/${GITHUB_USERNAME}/voice-rss-summary:${TAG}" +GHCR_IMAGE_2="ghcr.io/${GITHUB_USERNAME}/voicersssummary:${TAG}" + +echo "Publishing Docker image to GitHub Container Registry" +echo "Local image: ${LOCAL_IMAGE}" +echo "GHCR images: ${GHCR_IMAGE_1}, ${GHCR_IMAGE_2}" + +# Check if local image exists +if ! docker image inspect "${LOCAL_IMAGE}" >/dev/null 2>&1; then + echo "Error: Local Docker image '${LOCAL_IMAGE}' not found" + echo "Build it first with: ./build-docker-image.sh ${TAG}" + exit 1 +fi + +# Check if user is logged in to GHCR +if ! docker system info | grep -q "ghcr.io"; then + echo "Checking GHCR authentication..." + if ! echo "test" | docker login ghcr.io --username "${GITHUB_USERNAME}" --password-stdin >/dev/null 2>&1; then + echo "Please authenticate with GitHub Container Registry first:" + echo "1. Create a personal access token with 'write:packages' scope at:" + echo " https://github.com/settings/tokens" + echo "2. Login with: echo \$GITHUB_TOKEN | docker login ghcr.io -u ${GITHUB_USERNAME} --password-stdin" + echo " or: docker login ghcr.io -u ${GITHUB_USERNAME}" + exit 1 + fi +fi + +# Tag images for GHCR +echo "Tagging images for GHCR..." +docker tag "${LOCAL_IMAGE}" "${GHCR_IMAGE_1}" +docker tag "${LOCAL_IMAGE}" "${GHCR_IMAGE_2}" + +# Push to GHCR +echo "Pushing ${GHCR_IMAGE_1}..." +if docker push "${GHCR_IMAGE_1}"; then + echo "✅ Successfully pushed ${GHCR_IMAGE_1}" +else + echo "❌ Failed to push ${GHCR_IMAGE_1}" + exit 1 +fi + +echo "Pushing ${GHCR_IMAGE_2}..." +if docker push "${GHCR_IMAGE_2}"; then + echo "✅ Successfully pushed ${GHCR_IMAGE_2}" +else + echo "❌ Failed to push ${GHCR_IMAGE_2}" + exit 1 +fi + +echo "" +echo "🎉 Successfully published Docker images to GitHub Container Registry!" +echo "" +echo "Images available at:" +echo " - ${GHCR_IMAGE_1}" +echo " - ${GHCR_IMAGE_2}" +echo "" +echo "To run from GHCR:" +echo " docker run -p 3000:3000 -p 3001:3001 ${GHCR_IMAGE_1}" +echo "" +echo "To update run-docker.sh to use GHCR:" +echo " ./run-docker.sh container-name ${TAG} --from-ghcr" \ No newline at end of file diff --git a/run-docker.sh b/run-docker.sh index 69b2efe..c329438 100755 --- a/run-docker.sh +++ b/run-docker.sh @@ -2,21 +2,46 @@ set -euo pipefail # Run Docker container for Voice RSS Summary project -# Usage: ./run-docker.sh [container-name] [image-tag] +# Usage: ./run-docker.sh [container-name] [image-tag] [--from-ghcr] +GITHUB_USERNAME="anosatsuk124" IMAGE_NAME="voice-rss-summary" CONTAINER_NAME="${1:-voice-rss-summary}" IMAGE_TAG="${2:-latest}" -FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" +FROM_GHCR=false + +# Check for --from-ghcr flag +for arg in "$@"; do + if [[ "$arg" == "--from-ghcr" ]]; then + FROM_GHCR=true + break + fi +done + +if [[ "$FROM_GHCR" == "true" ]]; then + FULL_IMAGE="ghcr.io/${GITHUB_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" +else + FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" +fi echo "Starting Docker container: ${CONTAINER_NAME}" echo "Using image: ${FULL_IMAGE}" -# Check if image exists +# Check if image exists or pull from GHCR if ! docker image inspect "${FULL_IMAGE}" >/dev/null 2>&1; then - echo "Error: Docker image '${FULL_IMAGE}' not found" - echo "Build it first with: ./build-docker-image.sh" - exit 1 + if [[ "$FROM_GHCR" == "true" ]]; then + echo "Pulling image from GitHub Container Registry..." + if ! docker pull "${FULL_IMAGE}"; then + echo "Error: Failed to pull Docker image '${FULL_IMAGE}' from GHCR" + echo "Make sure the image exists and you have access to it" + exit 1 + fi + else + echo "Error: Docker image '${FULL_IMAGE}' not found" + echo "Build it first with: ./build-docker-image.sh" + echo "Or use --from-ghcr flag to pull from GitHub Container Registry" + exit 1 + fi fi # Stop and remove existing container if it exists @@ -57,10 +82,13 @@ exec docker run \ --health-retries=3 \ "${FULL_IMAGE}" -echo "\nContainer started successfully!" +echo "" +echo "Container started successfully!" echo "Container name: ${CONTAINER_NAME}" +echo "Image: ${FULL_IMAGE}" echo "Web UI: http://localhost:3000" echo "Admin panel: http://localhost:3001" -echo "\nTo view logs: docker logs -f ${CONTAINER_NAME}" +echo "" +echo "To view logs: docker logs -f ${CONTAINER_NAME}" echo "To stop: docker stop ${CONTAINER_NAME}" echo "To remove: docker rm ${CONTAINER_NAME}"