|
|
@@ -12,12 +12,11 @@
|
|
|
# ./docker-publish-daily-beta.sh --skip-release # Build+push without GitHub release
|
|
|
#
|
|
|
# Reads APP_VERSION from backend/app/core/config.py (must be a beta version like 0.2.2b1).
|
|
|
-# Appends a daily date suffix to create a unique tag (e.g., 0.2.2b3-daily.20260311),
|
|
|
-# avoiding collisions with release tags. Builds and pushes a multi-arch Docker image.
|
|
|
-# Optionally creates/updates a GitHub prerelease.
|
|
|
+# Builds and pushes a multi-arch Docker image tagged as 'daily'. Each push overwrites the
|
|
|
+# previous 'daily' image. A GitHub prerelease is created with a date-stamped tag for history.
|
|
|
#
|
|
|
-# Beta versions are never tagged as 'latest'. Users update by pulling the daily tag
|
|
|
-# (e.g., docker pull ghcr.io/maziggy/bambuddy:0.2.2b3-daily.20260311) or using Watchtower.
|
|
|
+# Users can stay up to date by pulling the 'daily' tag or using Watchtower:
|
|
|
+# docker pull ghcr.io/maziggy/bambuddy:daily
|
|
|
#
|
|
|
# Prerequisites:
|
|
|
# 1. Log in to ghcr.io:
|
|
|
@@ -109,12 +108,13 @@ if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+b[0-9]+$ ]]; then
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
-# Append date suffix to differentiate daily builds from releases
|
|
|
+# Date-stamped tag for GitHub releases only (not used as Docker tag)
|
|
|
DAILY_DATE=$(date +%Y%m%d)
|
|
|
DAILY_TAG="${VERSION}-daily.${DAILY_DATE}"
|
|
|
|
|
|
echo -e "${GREEN} APP_VERSION: ${VERSION}${NC}"
|
|
|
-echo -e "${GREEN} Daily tag: ${DAILY_TAG}${NC}"
|
|
|
+echo -e "${GREEN} Docker tag: daily${NC}"
|
|
|
+echo -e "${GREEN} Release tag: v${DAILY_TAG}${NC}"
|
|
|
|
|
|
# ============================================================
|
|
|
# Step 2: Build & push Docker images
|
|
|
@@ -126,8 +126,8 @@ CPU_COUNT=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
|
|
|
|
|
|
echo -e "${GREEN}================================================${NC}"
|
|
|
echo -e "${GREEN} Daily beta build${NC}"
|
|
|
-echo -e "${GREEN} Version: ${VERSION}${NC}"
|
|
|
-echo -e "${GREEN} Tag: ${DAILY_TAG}${NC}"
|
|
|
+echo -e "${GREEN} Version: ${VERSION}${NC}"
|
|
|
+echo -e "${GREEN} Docker tag: daily${NC}"
|
|
|
echo -e "${GREEN} Platforms: ${PLATFORMS}${NC}"
|
|
|
echo -e "${GREEN} CPU cores: ${CPU_COUNT}${NC}"
|
|
|
if [ "$PARALLEL" = true ]; then
|
|
|
@@ -187,16 +187,16 @@ if ! docker buildx inspect --bootstrap | grep -q "linux/arm64"; then
|
|
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
|
|
fi
|
|
|
|
|
|
-# Beta versions never get 'latest' tag
|
|
|
-echo -e "${YELLOW}Beta version — skipping 'latest' tag${NC}"
|
|
|
+# Beta versions get 'daily' tag (never 'latest')
|
|
|
+echo -e "${YELLOW}Beta version — tagging as 'daily' (not 'latest')${NC}"
|
|
|
|
|
|
# Build tags for all target registries
|
|
|
TAGS=""
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
- TAGS="$TAGS -t ${GHCR_IMAGE}:${DAILY_TAG}"
|
|
|
+ TAGS="$TAGS -t ${GHCR_IMAGE}:daily"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
- TAGS="$TAGS -t ${DOCKERHUB_IMAGE}:${DAILY_TAG}"
|
|
|
+ TAGS="$TAGS -t ${DOCKERHUB_IMAGE}:daily"
|
|
|
fi
|
|
|
|
|
|
# Common build args (no cache to ensure clean builds)
|
|
|
@@ -210,12 +210,12 @@ if [ "$PARALLEL" = true ]; then
|
|
|
ARCH_TAGS_AMD64=""
|
|
|
ARCH_TAGS_ARM64=""
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
- ARCH_TAGS_AMD64="$ARCH_TAGS_AMD64 -t ${GHCR_IMAGE}:${DAILY_TAG}-amd64"
|
|
|
- ARCH_TAGS_ARM64="$ARCH_TAGS_ARM64 -t ${GHCR_IMAGE}:${DAILY_TAG}-arm64"
|
|
|
+ ARCH_TAGS_AMD64="$ARCH_TAGS_AMD64 -t ${GHCR_IMAGE}:daily-amd64"
|
|
|
+ ARCH_TAGS_ARM64="$ARCH_TAGS_ARM64 -t ${GHCR_IMAGE}:daily-arm64"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
- ARCH_TAGS_AMD64="$ARCH_TAGS_AMD64 -t ${DOCKERHUB_IMAGE}:${DAILY_TAG}-amd64"
|
|
|
- ARCH_TAGS_ARM64="$ARCH_TAGS_ARM64 -t ${DOCKERHUB_IMAGE}:${DAILY_TAG}-arm64"
|
|
|
+ ARCH_TAGS_AMD64="$ARCH_TAGS_AMD64 -t ${DOCKERHUB_IMAGE}:daily-amd64"
|
|
|
+ ARCH_TAGS_ARM64="$ARCH_TAGS_ARM64 -t ${DOCKERHUB_IMAGE}:daily-arm64"
|
|
|
fi
|
|
|
|
|
|
# Build amd64 in background
|
|
|
@@ -255,16 +255,16 @@ if [ "$PARALLEL" = true ]; then
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
echo -e "${BLUE} Creating GHCR manifest...${NC}"
|
|
|
docker buildx imagetools create \
|
|
|
- -t "${GHCR_IMAGE}:${DAILY_TAG}" \
|
|
|
- "${GHCR_IMAGE}:${DAILY_TAG}-amd64" \
|
|
|
- "${GHCR_IMAGE}:${DAILY_TAG}-arm64"
|
|
|
+ -t "${GHCR_IMAGE}:daily" \
|
|
|
+ "${GHCR_IMAGE}:daily-amd64" \
|
|
|
+ "${GHCR_IMAGE}:daily-arm64"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
echo -e "${BLUE} Creating Docker Hub manifest...${NC}"
|
|
|
docker buildx imagetools create \
|
|
|
- -t "${DOCKERHUB_IMAGE}:${DAILY_TAG}" \
|
|
|
- "${DOCKERHUB_IMAGE}:${DAILY_TAG}-amd64" \
|
|
|
- "${DOCKERHUB_IMAGE}:${DAILY_TAG}-arm64"
|
|
|
+ -t "${DOCKERHUB_IMAGE}:daily" \
|
|
|
+ "${DOCKERHUB_IMAGE}:daily-amd64" \
|
|
|
+ "${DOCKERHUB_IMAGE}:daily-arm64"
|
|
|
fi
|
|
|
else
|
|
|
# Sequential build (default): Build both platforms in one command
|
|
|
@@ -296,15 +296,15 @@ else
|
|
|
# Build pull commands for the release body
|
|
|
PULL_COMMANDS=""
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
- PULL_COMMANDS="docker pull ghcr.io/maziggy/bambuddy:${DAILY_TAG}"
|
|
|
+ PULL_COMMANDS="docker pull ghcr.io/maziggy/bambuddy:daily"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
if [ -n "$PULL_COMMANDS" ]; then
|
|
|
PULL_COMMANDS="${PULL_COMMANDS}
|
|
|
# or
|
|
|
-docker pull maziggy/bambuddy:${DAILY_TAG}"
|
|
|
+docker pull maziggy/bambuddy:daily"
|
|
|
else
|
|
|
- PULL_COMMANDS="docker pull maziggy/bambuddy:${DAILY_TAG}"
|
|
|
+ PULL_COMMANDS="docker pull maziggy/bambuddy:daily"
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
@@ -354,11 +354,11 @@ echo -e "${BLUE}[4/4] Verifying...${NC}"
|
|
|
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
echo -e "${BLUE}GHCR manifest:${NC}"
|
|
|
- docker buildx imagetools inspect "${GHCR_IMAGE}:${DAILY_TAG}"
|
|
|
+ docker buildx imagetools inspect "${GHCR_IMAGE}:daily"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
echo -e "${BLUE}Docker Hub manifest:${NC}"
|
|
|
- docker buildx imagetools inspect "${DOCKERHUB_IMAGE}:${DAILY_TAG}"
|
|
|
+ docker buildx imagetools inspect "${DOCKERHUB_IMAGE}:daily"
|
|
|
fi
|
|
|
|
|
|
if [ "$SKIP_RELEASE" != true ]; then
|
|
|
@@ -376,10 +376,10 @@ echo -e "${GREEN} Daily beta build complete!${NC}"
|
|
|
echo -e "${GREEN} Version: ${VERSION}${NC}"
|
|
|
echo -e "${GREEN}================================================${NC}"
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
- echo " GHCR: ${GHCR_IMAGE}:${DAILY_TAG}"
|
|
|
+ echo " GHCR: ${GHCR_IMAGE}:daily"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
- echo " Docker Hub: ${DOCKERHUB_IMAGE}:${DAILY_TAG}"
|
|
|
+ echo " Docker Hub: ${DOCKERHUB_IMAGE}:daily"
|
|
|
fi
|
|
|
if [ "$SKIP_RELEASE" != true ]; then
|
|
|
echo " Release: https://github.com/${IMAGE_NAME}/releases/tag/v${DAILY_TAG}"
|
|
|
@@ -391,9 +391,9 @@ echo " - linux/arm64 (Raspberry Pi 4/5, Apple Silicon)"
|
|
|
echo ""
|
|
|
echo -e "${GREEN}Users can now run:${NC}"
|
|
|
if [ "$PUSH_GHCR" = true ]; then
|
|
|
- echo " docker pull ${GHCR_IMAGE}:${DAILY_TAG}"
|
|
|
+ echo " docker pull ${GHCR_IMAGE}:daily"
|
|
|
fi
|
|
|
if [ "$PUSH_DOCKERHUB" = true ]; then
|
|
|
- echo " docker pull ${DOCKERHUB_IMAGE}:${DAILY_TAG}"
|
|
|
- echo " docker pull ${IMAGE_NAME}:${DAILY_TAG} # shorthand"
|
|
|
+ echo " docker pull ${DOCKERHUB_IMAGE}:daily"
|
|
|
+ echo " docker pull ${IMAGE_NAME}:daily # shorthand"
|
|
|
fi
|