trip-planner/.woodpecker.yml

101 lines
3.2 KiB
YAML
Raw Normal View History

2025-11-16 15:53:52 +01:00
---
# Woodpecker CI Pipeline for Trip Planner
# Builds and pushes production Docker image to Codeberg Container Registry
when:
- event: push
branch: main
variables:
- &image_repo 'codeberg.org/lvl0/trip-planner'
steps:
# Extract version from commit message if merging from release branch
- name: extract-version
image: alpine:latest
commands:
- |
# Install git and grep with PCRE support
apk add --no-cache git grep
# Get the commit message to check if it's a merge from release branch
COMMIT_MSG=$(git log -1 --pretty=%B)
# Try to extract version from merge commit message (e.g., "Merge branch 'release/v0.1.0'")
VERSION=$(echo "$COMMIT_MSG" | grep -oP "release/v?\K[0-9]+\.[0-9]+\.[0-9]+" || echo "")
if [ -z "$VERSION" ]; then
# No version found, use commit SHA as version
VERSION="dev-$(git rev-parse --short HEAD)"
echo "No release version detected, using: $VERSION"
echo "$VERSION" > /woodpecker/version.txt
else
echo "Detected release version: $VERSION"
echo "$VERSION" > /woodpecker/version.txt
# Export for use in build step
echo "export VERSION_TAG=$VERSION" >> /tmp/version_env.sh
fi
# Build and push with latest tag (always)
- name: build-and-push-latest
image: woodpeckerci/plugin-docker-buildx
settings:
repo: *image_repo
registry: codeberg.org
username:
from_secret: container_registry_username
password:
from_secret: container_registry_token
dockerfile: Dockerfile.prod
context: .
platforms: linux/amd64
build_args:
- BUILDKIT_INLINE_CACHE=1
auto_tag: false
tags:
- latest
depends_on:
- extract-version
# Check if this is a release build
- name: check-release
image: alpine:latest
commands:
- |
VERSION=$(cat /woodpecker/version.txt)
if echo "$VERSION" | grep -qv "^dev-"; then
echo "Release version detected: $VERSION"
echo "true" > /woodpecker/is_release.txt
else
echo "Development build ($VERSION), will skip version tag"
echo "false" > /woodpecker/is_release.txt
fi
depends_on:
- build-and-push-latest
# Notify build status
- name: notify-success
image: alpine:latest
commands:
- |
VERSION=$(cat /woodpecker/version.txt 2>/dev/null || echo "unknown")
IS_RELEASE=$(cat /woodpecker/is_release.txt 2>/dev/null || echo "false")
echo "✅ Successfully built and pushed trip-planner:latest"
echo "Version: $VERSION"
if [ "$IS_RELEASE" = "true" ]; then
echo " This is a release build. To tag with version $VERSION:"
echo " docker pull codeberg.org/lvl0/trip-planner:latest"
echo " docker tag codeberg.org/lvl0/trip-planner:latest codeberg.org/lvl0/trip-planner:$VERSION"
echo " docker push codeberg.org/lvl0/trip-planner:$VERSION"
fi
echo "Image: codeberg.org/lvl0/trip-planner:latest"
when:
status: success
- name: notify-failure
image: alpine:latest
commands:
- echo "❌ Build failed! Check the logs above for details."
when:
status: failure