#!/bin/bash set -Eeuo pipefail SECONDS=0 ######################################## # Error Handling ######################################## trap 'echo "ERROR: Script failed at line ${LINENO}. Command: ${BASH_COMMAND}" >&2' ERR ######################################## # Project Identity # NOTE: Fill these in per-project. Do not # hardcode values here that other projects # also use, to avoid collisions. ######################################## PRJ_NAME="17sep01-frontend-f" IMAGE_PROJECT_NAME="${PRJ_NAME}" ######################################## # Gitea Source Repository ######################################## GITEA_USER="risadmin_prod" GITEA_PASS="adminprod1234" GITEA_URL="http://157.66.191.31:3000" GITEA_URL="${GITEA_URL#http://}" GITEA_ORG="risadmin_prod" GITEA_EMAIL="ganeshk@dekatc.com" REPO_NAME="17sep01" GIT_BRANCH=main ######################################## # Module Paths (per project, inside -b / -f dirs) ######################################## JAR_NAME=app-1.0.0.jar BACKEND_SUBPATH="" # e.g. authsec_springboot/backend FRONTEND_SUBPATH="" # e.g. authsec_flutter_new/frontend/flutter_new APK_NAME=app-release.apk ######################################## # Docker Registry ######################################## DOCKER_USER=risadmin_prod DOCKER_PASS=adminprod1234 DOCKER_URL=157.66.191.31:3000 DOCKER_TAG=1.0 ######################################## # Build Path ######################################## PATH_DIR="/data/66158_1789629213511/sureops" ######################################## # Image Names ######################################## IMAGE_NAME="${DOCKER_URL}/${DOCKER_USER}/${IMAGE_PROJECT_NAME}:${DOCKER_TAG}" LATEST_IMAGE="${DOCKER_URL}/${DOCKER_USER}/${IMAGE_PROJECT_NAME}:latest" ######################################## # Display Configuration ######################################## echo "==========================================" echo " SINGLE CONTAINER BUILD (Flutter + SpringBoot + MySQL)" echo "==========================================" echo "Project Name : ${PRJ_NAME}" echo "Container Name : ${IMAGE_PROJECT_NAME}" echo "Repository : ${GITEA_ORG}/${REPO_NAME}" echo "Branch : ${GIT_BRANCH}" echo "Docker Image : ${IMAGE_NAME}" echo "Latest Image : ${LATEST_IMAGE}" echo "Build Path : ${PATH_DIR}" echo "==========================================" ######################################## # Validate Configuration ######################################## echo "Validating configuration..." REQUIRED_VARIABLES=( "PRJ_NAME" "GITEA_USER" "GITEA_PASS" "GITEA_URL" "GITEA_ORG" "REPO_NAME" "GIT_BRANCH" "JAR_NAME" "BACKEND_SUBPATH" "FRONTEND_SUBPATH" "DOCKER_USER" "DOCKER_PASS" "DOCKER_URL" "DOCKER_TAG" "PATH_DIR" ) for VARIABLE in "${REQUIRED_VARIABLES[@]}"; do VALUE="${!VARIABLE:-}" if [[ -z "${VALUE}" ]]; then echo "ERROR: Required variable '${VARIABLE}' is empty." exit 1 fi if [[ "${VALUE}" == "<"*">" ]]; then echo "ERROR: Variable '${VARIABLE}' still contains placeholder value: ${VALUE}" exit 1 fi done echo "Configuration validation successful." ######################################## # Check Docker ######################################## if ! command -v docker >/dev/null 2>&1; then echo "ERROR: Docker is not installed or not available in PATH." exit 1 fi if ! docker info >/dev/null 2>&1; then echo "ERROR: Docker daemon is not running or current user has no permission." exit 1 fi ######################################## # Change Directory ######################################## if [[ ! -d "${PATH_DIR}" ]]; then echo "ERROR: Directory not found: ${PATH_DIR}" exit 1 fi cd "${PATH_DIR}" ######################################## # Build Docker Image ######################################## echo "==========================================" echo " BUILDING DOCKER IMAGE" echo "==========================================" docker build \ --no-cache \ --build-arg "GITEA_USER=${GITEA_USER}" \ --build-arg "GITEA_PASS=${GITEA_PASS}" \ --build-arg "GITEA_URL=${GITEA_URL}" \ --build-arg "GITEA_ORG=${GITEA_ORG}" \ --build-arg "REPO_NAME=${REPO_NAME}" \ --build-arg "GIT_BRANCH=${GIT_BRANCH}" \ --build-arg "JAR_NAME=${JAR_NAME}" \ --build-arg "BACKEND_SUBPATH=${BACKEND_SUBPATH}" \ --build-arg "FRONTEND_SUBPATH=${FRONTEND_SUBPATH}" \ --build-arg "APK_NAME=${APK_NAME}" \ -t "${IMAGE_NAME}" \ . echo "Docker build successful." ######################################## # Verify Image ######################################## if ! docker image inspect "${IMAGE_NAME}" >/dev/null 2>&1; then echo "ERROR: Docker image was not created: ${IMAGE_NAME}" exit 1 fi docker images "${IMAGE_NAME}" ######################################## # Docker Registry Login + Push ######################################## if ! echo "${DOCKER_PASS}" | docker login \ --username "${DOCKER_USER}" \ --password-stdin \ "${DOCKER_URL}"; then echo "ERROR: Docker registry login failed." exit 1 fi docker tag "${IMAGE_NAME}" "${LATEST_IMAGE}" docker push "${IMAGE_NAME}" docker push "${LATEST_IMAGE}" docker logout "${DOCKER_URL}" || true ######################################## # Deployment Note # # DO NOT RUN CONTAINER HERE. # Deployment service will perform: # docker pull / docker stop / docker rm / docker run ######################################## echo "==========================================" echo " BUILD AND PUSH COMPLETED" echo "==========================================" echo "Project Name : ${PRJ_NAME}" echo "Image : ${IMAGE_NAME}" echo "Latest Image : ${LATEST_IMAGE}" DURATION="${SECONDS}" echo "Total time taken: $((DURATION / 60)) min $((DURATION % 60)) sec" exit 0