#!/bin/bash set -e # Manual build and push script for Poimen Memory # Use when CI/CD is unavailable REGISTRY="forgejo.riotpiao.com" REGISTRY_USER="rock" IMAGE="${REGISTRY}/rock/poimen-memory" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${YELLOW}════════════════════════════════════════════════════════${NC}" echo -e "${YELLOW}Poimen Memory - Manual Build & Push${NC}" echo -e "${YELLOW}════════════════════════════════════════════════════════${NC}" echo "" # Check dependencies echo -e "${YELLOW}Checking dependencies...${NC}" which docker > /dev/null || { echo -e "${RED}❌ docker not found${NC}"; exit 1; } which git > /dev/null || { echo -e "${RED}❌ git not found${NC}"; exit 1; } echo -e "${GREEN}✅ Dependencies OK${NC}" echo "" # Get commit info SHORT_SHA=$(git rev-parse --short HEAD) COMMIT_MSG=$(git log -1 --pretty=%B | head -1) TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") echo -e "${YELLOW}Commit Info:${NC}" echo " SHA: ${SHORT_SHA}" echo " Message: ${COMMIT_MSG}" echo " Timestamp: ${TIMESTAMP}" echo "" # Check registry credentials if [ -z "$REGISTRY_TOKEN" ]; then echo -e "${YELLOW}Registry token not set. Will attempt login...${NC}" read -sp "Enter registry password for ${REGISTRY_USER}: " REGISTRY_TOKEN echo "" fi # Test docker echo -e "${YELLOW}Testing docker...${NC}" docker ps > /dev/null 2>&1 || { echo -e "${RED}❌ docker not accessible${NC}"; exit 1; } echo -e "${GREEN}✅ docker OK${NC}" echo "" # Login echo -e "${YELLOW}Logging in to ${REGISTRY}...${NC}" echo "${REGISTRY_TOKEN}" | docker login -u "${REGISTRY_USER}" --password-stdin "${REGISTRY}" echo -e "${GREEN}✅ Logged in${NC}" echo "" # Build echo -e "${YELLOW}Building image...${NC}" echo " Tags:" echo " - ${IMAGE}:${SHORT_SHA}" echo " - ${IMAGE}:latest" echo "" docker build \ --tag "${IMAGE}:${SHORT_SHA}" \ --tag "${IMAGE}:latest" \ --build-arg="BUILD_DATE=${TIMESTAMP}" \ --build-arg="VCS_REF=${SHORT_SHA}" \ --progress=plain \ . BUILD_STATUS=$? if [ $BUILD_STATUS -eq 0 ]; then echo -e "${GREEN}✅ Build successful${NC}" else echo -e "${RED}❌ Build failed (exit code: ${BUILD_STATUS})${NC}" exit $BUILD_STATUS fi echo "" # Push echo -e "${YELLOW}Pushing image...${NC}" docker push "${IMAGE}:${SHORT_SHA}" PUSH1_STATUS=$? docker push "${IMAGE}:latest" PUSH2_STATUS=$? if [ $PUSH1_STATUS -eq 0 ] && [ $PUSH2_STATUS -eq 0 ]; then echo -e "${GREEN}✅ Push successful${NC}" else echo -e "${RED}❌ Push failed${NC}" exit 1 fi echo "" # Cleanup echo -e "${YELLOW}Cleaning up...${NC}" docker logout "${REGISTRY}" echo -e "${GREEN}✅ Logged out${NC}" echo "" # Summary echo -e "${GREEN}════════════════════════════════════════════════════════${NC}" echo -e "${GREEN}✅ Build & Push Complete!${NC}" echo -e "${GREEN}════════════════════════════════════════════════════════${NC}" echo "" echo "Image: ${IMAGE}" echo "Tags:" echo " - ${SHORT_SHA}" echo " - latest" echo "" echo "Pull with:" echo " docker pull ${IMAGE}:${SHORT_SHA}" echo " docker pull ${IMAGE}:latest" echo ""