|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# Frontend build script |
| 5 | +# Environment variables passed from workflow: |
| 6 | +# - COMMIT_TAG: Short commit SHA (e.g., abc123) |
| 7 | +# - ENV_TAG: Environment tag (prod/dev) |
| 8 | +# - MOVING_TAG: Moving tag (latest/dev) |
| 9 | +# - OWNER_NAME: GitHub owner/org name |
| 10 | +# - REPO_NAME: Repository name |
| 11 | +# - GITHUB_PAT: GitHub Personal Access Token |
| 12 | +# - DOCKER_USER: Docker Hub username |
| 13 | +# - DOCKER_PASS: Docker Hub password |
| 14 | +# - NEXT_PUBLIC_* variables for build args |
| 15 | + |
| 16 | +# Navigate to app directory |
| 17 | +cd ../app |
| 18 | + |
| 19 | +# Build Docker image with frontend-specific build arguments |
| 20 | +BUILD_ARGS=( |
| 21 | + "--build-arg" "NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL}" |
| 22 | + "--build-arg" "NEXT_PUBLIC_API_VERSION=${NEXT_PUBLIC_API_VERSION}" |
| 23 | + "--build-arg" "NEXT_PUBLIC_API_TIMEOUT=${NEXT_PUBLIC_API_TIMEOUT}" |
| 24 | + "--build-arg" "NEXT_PUBLIC_API_RETRY_ATTEMPTS=${NEXT_PUBLIC_API_RETRY_ATTEMPTS}" |
| 25 | + "--build-arg" "NEXT_PUBLIC_API_DEBUG=${NEXT_PUBLIC_API_DEBUG}" |
| 26 | + "--build-arg" "NEXT_PUBLIC_RECAPTCHA_SITE_KEY=${NEXT_PUBLIC_RECAPTCHA_SITE_KEY}" |
| 27 | + "--build-arg" "NEXT_PUBLIC_SKIP_VERIFICATION_STEPS=${NEXT_PUBLIC_SKIP_VERIFICATION_STEPS}" |
| 28 | + "--build-arg" "NEXT_PUBLIC_AUTH_SUCCESS_REDIRECT=${NEXT_PUBLIC_AUTH_SUCCESS_REDIRECT}" |
| 29 | +) |
| 30 | + |
| 31 | +echo "Building frontend with args: ${BUILD_ARGS[@]}" |
| 32 | + |
| 33 | +docker build "${BUILD_ARGS[@]}" -t ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} . > /dev/null 2>&1 |
| 34 | + |
| 35 | +# Tag with moving tag |
| 36 | +docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1 |
| 37 | + |
| 38 | +# Tag for Docker Hub |
| 39 | +docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 |
| 40 | +docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1 |
| 41 | + |
| 42 | +# Test the container (10 second timeout) |
| 43 | +docker run -d --name test_container ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 || exit 1 |
| 44 | +sleep 10 |
| 45 | +docker stop test_container > /dev/null 2>&1 || true |
| 46 | +docker rm test_container > /dev/null 2>&1 || true |
| 47 | + |
| 48 | +# Login to GitHub Container Registry |
| 49 | +echo "${GITHUB_PAT}" | docker login ghcr.io -u "${OWNER_NAME}" --password-stdin > /dev/null 2>&1 |
| 50 | + |
| 51 | +# Push to GHCR |
| 52 | +docker push ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 |
| 53 | +docker push ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1 |
| 54 | + |
| 55 | +# Login to Docker Hub |
| 56 | +echo "${DOCKER_PASS}" | docker login -u "${DOCKER_USER}" --password-stdin > /dev/null 2>&1 |
| 57 | + |
| 58 | +# Push to Docker Hub |
| 59 | +docker push ${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 |
| 60 | +docker push ${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1 |
0 commit comments