207 lines
7.2 KiB
YAML
207 lines
7.2 KiB
YAML
# Woodpecker CI/CD Pipeline - Peikarband Landing
|
|
# Smart pipeline with base image management
|
|
|
|
|
|
variables:
|
|
- &base_image 'hub.peikarband.ir/peikarband/landing:base'
|
|
- &app_image 'hub.peikarband.ir/peikarband/landing'
|
|
|
|
when:
|
|
- event: [push, pull_request, tag, manual]
|
|
|
|
steps:
|
|
# ============================================
|
|
# Ensure Base Image Exists
|
|
# ============================================
|
|
|
|
ensure-base-image:
|
|
image: woodpeckerci/plugin-docker-buildx
|
|
settings:
|
|
registry: hub.peikarband.ir
|
|
repo: *app_image
|
|
# username:
|
|
# from_secret: HARBOR_USERNAME
|
|
# password:
|
|
# from_secret: HARBOR_PASSWORD
|
|
username: admin
|
|
password: 5459ed7590d37656410fae38bdf59eb7ee33b68cd4c
|
|
dockerfile: docker/Dockerfile.base
|
|
context: .
|
|
platforms: linux/amd64
|
|
|
|
tags:
|
|
- base
|
|
|
|
build_args:
|
|
- PYTHON_VERSION=3.11
|
|
- NODE_VERSION=20
|
|
- BUILD_DATE=${CI_PIPELINE_CREATED}
|
|
- VERSION=${CI_COMMIT_SHA:0:8}
|
|
|
|
labels:
|
|
- org.opencontainers.image.created=${CI_PIPELINE_CREATED}
|
|
- org.opencontainers.image.source=${CI_REPO_LINK}
|
|
- org.opencontainers.image.title=Peikarband Base
|
|
- org.opencontainers.image.description=Base image with Python, Node.js, bun, and build tools
|
|
|
|
cache: inline
|
|
provenance: true
|
|
sbom: true
|
|
push: true
|
|
|
|
when:
|
|
event: [push, tag, manual]
|
|
branch: [main, develop]
|
|
# Only rebuild base if its definition changed
|
|
path:
|
|
include:
|
|
- docker/Dockerfile.base
|
|
- .woodpecker.yml
|
|
|
|
# ============================================
|
|
# Build Application Image
|
|
# ============================================
|
|
|
|
build-and-push-app:
|
|
image: woodpeckerci/plugin-docker-buildx
|
|
settings:
|
|
debug: true
|
|
log-level: debug
|
|
registry: hub.peikarband.ir
|
|
repo: *app_image
|
|
username:
|
|
from_secret: HARBOR_USERNAME
|
|
password:
|
|
from_secret: HARBOR_PASSWORD
|
|
|
|
dockerfile: docker/Dockerfile
|
|
context: .
|
|
platforms: linux/amd64
|
|
|
|
build_args:
|
|
- BASE_IMAGE=*base_image
|
|
- VERSION=${CI_COMMIT_SHA:0:8}
|
|
- BUILD_DATE=${CI_PIPELINE_CREATED}
|
|
|
|
tags:
|
|
- latest
|
|
- ${CI_COMMIT_SHA:0:8}
|
|
- ${CI_COMMIT_BRANCH}
|
|
|
|
labels:
|
|
- org.opencontainers.image.created=${CI_PIPELINE_CREATED}
|
|
- org.opencontainers.image.source=${CI_REPO_LINK}
|
|
- org.opencontainers.image.url=${CI_REPO_LINK}
|
|
- org.opencontainers.image.revision=${CI_COMMIT_SHA}
|
|
- org.opencontainers.image.version=${CI_COMMIT_SHA:0:8}
|
|
- org.opencontainers.image.title=Peikarband Landing
|
|
- org.opencontainers.image.description=Peikarband hosting platform landing page
|
|
|
|
# cache: inline
|
|
# provenance: true
|
|
# sbom: true
|
|
push: true
|
|
# Cache configuration - using inline cache instead of registry cache
|
|
# cache_from: type=registry,ref=hub.peikarband.ir/peikarband/landing:cache
|
|
# cache_to: type=registry,ref=hub.peikarband.ir/peikarband/landing:cache,mode=max
|
|
|
|
when:
|
|
event: [push, tag]
|
|
branch: [main, develop,]
|
|
|
|
# # ============================================
|
|
# # Verify Images
|
|
# # ============================================
|
|
|
|
# verify-images:
|
|
# image: alpine:latest
|
|
# commands:
|
|
# - apk add --no-cache curl
|
|
# - |
|
|
# echo "════════════════════════════════════════"
|
|
# echo " 🔍 Verifying Images in Registry"
|
|
# echo "════════════════════════════════════════"
|
|
# echo ""
|
|
|
|
# # Check base image
|
|
# echo "Checking base image..."
|
|
# if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
|
|
# "https://hub.peikarband.ir/v2/peikarband/landing/manifests/base" > /dev/null 2>&1; then
|
|
# echo "✅ Base image: hub.peikarband.ir/peikarband/landing:base"
|
|
# else
|
|
# echo "⚠️ Base image not found (this is OK if first build)"
|
|
# fi
|
|
|
|
# echo ""
|
|
|
|
# # Check app image
|
|
# echo "Checking app image..."
|
|
# TAG="${CI_COMMIT_SHA:0:8}"
|
|
# if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
|
|
# "https://hub.peikarband.ir/v2/peikarband/landing/manifests/$TAG" > /dev/null 2>&1; then
|
|
# echo "✅ App image: hub.peikarband.ir/peikarband/landing:$TAG"
|
|
# echo ""
|
|
# echo "Available tags:"
|
|
# echo " • latest"
|
|
# echo " • ${CI_COMMIT_SHA:0:8}"
|
|
# echo " • ${CI_COMMIT_BRANCH}"
|
|
# echo ""
|
|
# echo "════════════════════════════════════════"
|
|
# else
|
|
# echo "❌ Failed to verify app image"
|
|
# exit 1
|
|
# fi
|
|
|
|
# environment:
|
|
# HARBOR_USERNAME:
|
|
# from_secret: HARBOR_USERNAME
|
|
# HARBOR_PASSWORD:
|
|
# from_secret: HARBOR_PASSWORD
|
|
|
|
# when:
|
|
# event: [push, tag]
|
|
# branch: [main, develop]
|
|
|
|
# ============================================
|
|
# Notifications
|
|
# ============================================
|
|
|
|
# notify-success:
|
|
# image: alpine:latest
|
|
# commands:
|
|
# - echo "════════════════════════════════════════"
|
|
# - echo " 🎉 Pipeline Completed Successfully!"
|
|
# - echo "════════════════════════════════════════"
|
|
# - echo ""
|
|
# - echo "Branch:" "${CI_COMMIT_BRANCH}"
|
|
# - echo "Commit:" "${CI_COMMIT_SHA:0:8}"
|
|
# - echo ""
|
|
# - echo "Images:"
|
|
# - echo " • Base:" "hub.peikarband.ir/peikarband/landing:base"
|
|
# - echo " • App:" "hub.peikarband.ir/peikarband/landing:${CI_COMMIT_SHA:0:8}"
|
|
# - echo ""
|
|
# - echo "Deploy with:"
|
|
# - echo " kubectl set image deployment/peikarband-landing \\"
|
|
# - echo " peikarband-landing=hub.peikarband.ir/peikarband/landing:${CI_COMMIT_SHA:0:8}"
|
|
# - echo ""
|
|
# - echo "════════════════════════════════════════"
|
|
# when:
|
|
# event: [push, tag]
|
|
# status: success
|
|
|
|
# notify-failure:
|
|
# image: alpine:latest
|
|
# commands:
|
|
# - echo "════════════════════════════════════════"
|
|
# - echo " ❌ Pipeline Failed!"
|
|
# - echo "════════════════════════════════════════"
|
|
# - echo ""
|
|
# - echo "Branch:" "${CI_COMMIT_BRANCH}"
|
|
# - echo "Commit:" "${CI_COMMIT_SHA:0:8}"
|
|
# - echo ""
|
|
# - echo "Please check the logs above"
|
|
# - echo "════════════════════════════════════════"
|
|
# when:
|
|
# event: [push, tag]
|
|
# status: failure
|