Files
poimen-memory/scripts/build-and-push.sh
T

119 lines
3.5 KiB
Bash
Raw Normal View History

#!/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 ""