scripts: add manual build & push script (for when CI is stuck)
Use this script when Forgejo CI/CD runners are unavailable or stuck: export REGISTRY_TOKEN='<your-token>' ./scripts/build-and-push.sh Features: - Dependency checks (docker, git) - Commit info extraction - Registry login/logout - Multi-tag build - Progress output - Error handling - Cleanup
This commit is contained in:
Executable
+118
@@ -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 ""
|
||||
Reference in New Issue
Block a user