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