diff --git a/scripts/build-and-push.sh b/scripts/build-and-push.sh new file mode 100755 index 0000000..18ce444 --- /dev/null +++ b/scripts/build-and-push.sh @@ -0,0 +1,118 @@ +#!/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 ""