My-Weekly-ToDo-List/deploy.sh
mARTin b46c7b7ccb chore: Portainer-compatible docker-compose, improved .dockerignore
- Use image reference instead of build context for Portainer stacks
- Inline all environment variables (no env_file dependency)
- Add .next, logs, Inspiration to .dockerignore
- Explicit .env.local and .env.production in .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 23:52:49 +01:00

65 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -e
# Deploy script for My Weekly To-Do List
# Usage: ./deploy.sh [version]
# Example: ./deploy.sh 1.1.0
#
# Builds the Docker image locally, then restarts the Portainer stack.
# The Portainer stack references "my-weekly-todo:latest".
APP_NAME="my-weekly-todo"
IMAGE_NAME="my-weekly-todo"
PORTAINER_STACK="my-weekly-todo"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}=== $APP_NAME Deploy ===${NC}"
# Ensure we're on main branch
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" != "main" ]; then
echo -e "${RED}Error: Must deploy from main branch (currently on '$BRANCH')${NC}"
echo "Run: git checkout main && git merge dev"
exit 1
fi
# Check for uncommitted changes
if [ -n "$(git status --porcelain)" ]; then
echo -e "${RED}Error: Uncommitted changes detected. Commit or stash first.${NC}"
git status --short
exit 1
fi
# Optional: bump version
VERSION=$1
if [ -n "$VERSION" ]; then
echo -e "${YELLOW}Bumping version to $VERSION...${NC}"
npm version "$VERSION" --no-git-tag-version
git add package.json package-lock.json
git commit -m "chore: bump version to v$VERSION"
git tag -a "v$VERSION" -m "Release v$VERSION"
echo -e "${GREEN}Tagged v$VERSION${NC}"
fi
CURRENT_VERSION=$(node -p "require('./package.json').version")
# Build Docker image
echo -e "${YELLOW}Building production image ${IMAGE_NAME}:${CURRENT_VERSION}...${NC}"
docker build -t "${IMAGE_NAME}:${CURRENT_VERSION}" -t "${IMAGE_NAME}:latest" .
# Restart the Portainer stack (pull new image)
echo -e "${YELLOW}Restarting Portainer stack...${NC}"
echo -e "${YELLOW}Go to Portainer > Stacks > ${PORTAINER_STACK} > click 'Update the stack' > 'Re-pull image and redeploy'${NC}"
echo ""
echo -e "Or restart via CLI:${NC}"
echo -e " docker compose -f docker-compose.yml up -d"
echo ""
echo -e "${GREEN}=== Image ${IMAGE_NAME}:${CURRENT_VERSION} ready ===${NC}"
echo -e "${GREEN}=== Also tagged as ${IMAGE_NAME}:latest ===${NC}"