* fix(docs): update versioning strategy and tag policies for Docker images * fix(docs): clarify versioning strategy in environment configuration fix(docker): update docker-push script to remove local latest tag handling * fix(docs): clarify VERSION variable usage in Docker push script
87 lines
3.1 KiB
Bash
Executable File
87 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Docker Hub Push Script for ClassroomIO
|
|
# Builds and pushes the API, Dashboard, and Jobs worker images to Docker Hub.
|
|
# Uses buildx for native multi-arch (linux/amd64 + linux/arm64).
|
|
|
|
set -e # Exit on error
|
|
|
|
# Configuration
|
|
DOCKERHUB_USERNAME="${DOCKERHUB_USERNAME:-classroomio}" # Change this to your Docker Hub username
|
|
VERSION="${VERSION:?set VERSION to the tag to publish, e.g. VERSION=1.4.2 — this script never pushes :latest (CI owns latest from main)}"
|
|
PUBLIC_IS_SELFHOSTED="${PUBLIC_IS_SELFHOSTED:-true}"
|
|
PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
|
|
|
|
# This manual/local helper pushes ONLY the explicit ${VERSION} tag. `latest` is published
|
|
# exclusively by CI from `main` (see .github/workflows/docker-publish.yml) — to move `latest`,
|
|
# merge to main or re-run that workflow, never this script.
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}================================${NC}"
|
|
echo -e "${BLUE}ClassroomIO Docker Hub Publisher${NC}"
|
|
echo -e "${BLUE}================================${NC}"
|
|
echo ""
|
|
echo "Platforms: ${PLATFORMS}"
|
|
echo ""
|
|
|
|
# Ensure a buildx builder exists (multi-arch requires buildx + QEMU).
|
|
if ! docker buildx inspect cio-builder >/dev/null 2>&1; then
|
|
echo -e "${GREEN}Creating buildx builder 'cio-builder'...${NC}"
|
|
docker buildx create --name cio-builder --use >/dev/null
|
|
else
|
|
docker buildx use cio-builder
|
|
fi
|
|
|
|
# Build and push API (multi-arch images must be pushed in one buildx step).
|
|
echo -e "${GREEN}Building + pushing API image...${NC}"
|
|
docker buildx build \
|
|
--platform "${PLATFORMS}" \
|
|
-f docker/Dockerfile.api \
|
|
-t ${DOCKERHUB_USERNAME}/api:${VERSION} \
|
|
--push \
|
|
.
|
|
echo -e "${GREEN}✓ API image published successfully!${NC}"
|
|
echo ""
|
|
|
|
# Build and push Dashboard
|
|
echo -e "${GREEN}Building + pushing Dashboard image...${NC}"
|
|
echo "Dashboard build arg PUBLIC_IS_SELFHOSTED=${PUBLIC_IS_SELFHOSTED}"
|
|
docker buildx build \
|
|
--platform "${PLATFORMS}" \
|
|
-f docker/Dockerfile.dashboard \
|
|
--build-arg PUBLIC_IS_SELFHOSTED=${PUBLIC_IS_SELFHOSTED} \
|
|
-t ${DOCKERHUB_USERNAME}/dashboard:${VERSION} \
|
|
--push \
|
|
.
|
|
echo -e "${GREEN}✓ Dashboard image published successfully!${NC}"
|
|
echo ""
|
|
|
|
# Build and push Jobs worker (required for video/transcription/AI-generation/email).
|
|
echo -e "${GREEN}Building + pushing Jobs worker image...${NC}"
|
|
docker buildx build \
|
|
--platform "${PLATFORMS}" \
|
|
-f docker/Dockerfile.jobs \
|
|
-t ${DOCKERHUB_USERNAME}/jobs:${VERSION} \
|
|
--push \
|
|
.
|
|
echo -e "${GREEN}✓ Jobs image published successfully!${NC}"
|
|
|
|
# Summary
|
|
echo -e "${BLUE}================================${NC}"
|
|
echo -e "${GREEN}All images published successfully!${NC}"
|
|
echo -e "${BLUE}================================${NC}"
|
|
echo ""
|
|
echo "API Image: ${DOCKERHUB_USERNAME}/api:${VERSION}"
|
|
echo "Dashboard Image: ${DOCKERHUB_USERNAME}/dashboard:${VERSION}"
|
|
echo "Jobs Image: ${DOCKERHUB_USERNAME}/jobs:${VERSION}"
|
|
echo ""
|
|
echo "To pull these images:"
|
|
echo " docker pull ${DOCKERHUB_USERNAME}/api:${VERSION}"
|
|
echo " docker pull ${DOCKERHUB_USERNAME}/dashboard:${VERSION}"
|
|
echo " docker pull ${DOCKERHUB_USERNAME}/jobs:${VERSION}"
|