2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
2a350f5629 Implement branch-specific docker tags in build script and CI workflow
Co-authored-by: alexmickelson <43245625+alexmickelson@users.noreply.github.com>
2025-09-29 18:01:33 +00:00
copilot-swe-agent[bot]
c29c7c0853 Initial plan 2025-09-29 17:44:13 +00:00
2 changed files with 101 additions and 24 deletions

View File

@@ -2,7 +2,7 @@ name: Deploy to Docker Hub
on: on:
push: push:
branches: [ main ] branches: [ main, development, staging ]
jobs: jobs:
deploy: deploy:
@@ -21,7 +21,11 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract branch name
shell: bash
run: echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
- name: Build and push Docker image - name: Build and push Docker image
run: | run: |
chmod +x ./build.sh chmod +x ./build.sh
./build.sh -t -p ./build.sh -t -p -b "$BRANCH_NAME"

View File

@@ -3,11 +3,12 @@
MAJOR_VERSION="3" MAJOR_VERSION="3"
MINOR_VERSION="0" MINOR_VERSION="0"
VERSION="$MAJOR_VERSION.$MINOR_VERSION" VERSION="$MAJOR_VERSION.$MINOR_VERSION"
BRANCH=""
TAG_FLAG=false TAG_FLAG=false
PUSH_FLAG=false PUSH_FLAG=false
while getopts ":tp" opt; do while getopts ":tpb:" opt; do
case ${opt} in case ${opt} in
t) t)
TAG_FLAG=true TAG_FLAG=true
@@ -15,9 +16,12 @@ while getopts ":tp" opt; do
p) p)
PUSH_FLAG=true PUSH_FLAG=true
;; ;;
b)
BRANCH="$OPTARG"
;;
\?) \?)
echo "Invalid option: -$OPTARG" >&2 echo "Invalid option: -$OPTARG" >&2
echo "Usage: $0 [-t] [-p]" echo "Usage: $0 [-t] [-p] [-b branch]"
exit 1 exit 1
;; ;;
esac esac
@@ -29,17 +33,54 @@ docker build -t canvas_management:$VERSION .
if [ "$TAG_FLAG" = true ]; then if [ "$TAG_FLAG" = true ]; then
echo "Tagging images..." echo "Tagging images..."
if [ -n "$BRANCH" ]; then
# Branch-specific tags
echo "alexmickelson/canvas_management:$VERSION-$BRANCH"
echo "alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
echo "alexmickelson/canvas_management:latest-$BRANCH"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION-$BRANCH"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION-$BRANCH"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest-$BRANCH
# Only create non-branch tags if branch is "main"
if [ "$BRANCH" = "main" ]; then
echo "alexmickelson/canvas_management:$VERSION" echo "alexmickelson/canvas_management:$VERSION"
echo "alexmickelson/canvas_management:$MAJOR_VERSION" echo "alexmickelson/canvas_management:$MAJOR_VERSION"
echo "alexmickelson/canvas_management:latest" echo "alexmickelson/canvas_management:latest"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION" docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION" docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION"
docker image tag canvas_management:latest alexmickelson/canvas_management:latest docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest
fi
else
# No branch specified - create standard tags (for local development)
echo "alexmickelson/canvas_management:$VERSION"
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
echo "alexmickelson/canvas_management:latest"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION"
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest
fi
fi fi
if [ "$PUSH_FLAG" = true ]; then if [ "$PUSH_FLAG" = true ]; then
echo "Pushing images..." echo "Pushing images..."
if [ -n "$BRANCH" ]; then
# Push branch-specific tags
echo "alexmickelson/canvas_management:$VERSION-$BRANCH"
echo "alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
echo "alexmickelson/canvas_management:latest-$BRANCH"
docker push alexmickelson/canvas_management:"$VERSION-$BRANCH"
docker push alexmickelson/canvas_management:"$MAJOR_VERSION-$BRANCH"
docker push alexmickelson/canvas_management:latest-$BRANCH
# Only push non-branch tags if branch is "main"
if [ "$BRANCH" = "main" ]; then
echo "alexmickelson/canvas_management:$VERSION" echo "alexmickelson/canvas_management:$VERSION"
echo "alexmickelson/canvas_management:$MAJOR_VERSION" echo "alexmickelson/canvas_management:$MAJOR_VERSION"
echo "alexmickelson/canvas_management:latest" echo "alexmickelson/canvas_management:latest"
@@ -47,6 +88,17 @@ if [ "$PUSH_FLAG" = true ]; then
docker push alexmickelson/canvas_management:"$VERSION" docker push alexmickelson/canvas_management:"$VERSION"
docker push alexmickelson/canvas_management:"$MAJOR_VERSION" docker push alexmickelson/canvas_management:"$MAJOR_VERSION"
docker push alexmickelson/canvas_management:latest docker push alexmickelson/canvas_management:latest
fi
else
# No branch specified - push standard tags (for local development)
echo "alexmickelson/canvas_management:$VERSION"
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
echo "alexmickelson/canvas_management:latest"
docker push alexmickelson/canvas_management:"$VERSION"
docker push alexmickelson/canvas_management:"$MAJOR_VERSION"
docker push alexmickelson/canvas_management:latest
fi
fi fi
if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then
@@ -54,12 +106,33 @@ if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then
echo "Build complete." echo "Build complete."
echo "To tag, run with -t flag." echo "To tag, run with -t flag."
echo "To push, run with -p flag." echo "To push, run with -p flag."
echo "To build for a specific branch, use -b branch_name flag."
echo "Or manually run:" echo "Or manually run:"
echo "" echo ""
if [ -n "$BRANCH" ]; then
echo "# Branch-specific tags:"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION-$BRANCH"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest-$BRANCH"
echo "docker push alexmickelson/canvas_management:$VERSION-$BRANCH"
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
echo "docker push alexmickelson/canvas_management:latest-$BRANCH"
if [ "$BRANCH" = "main" ]; then
echo ""
echo "# Main branch also gets standard tags:"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION" echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION" echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION"
echo "docker image tag canvas_management:latest alexmickelson/canvas_management:latest" echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest"
echo "docker push alexmickelson/canvas_management:$VERSION" echo "docker push alexmickelson/canvas_management:$VERSION"
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION" echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION"
echo "docker push alexmickelson/canvas_management:latest" echo "docker push alexmickelson/canvas_management:latest"
fi
else
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION"
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest"
echo "docker push alexmickelson/canvas_management:$VERSION"
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION"
echo "docker push alexmickelson/canvas_management:latest"
fi
fi fi