Files
peikarband/.woodpecker.yml
Ehsan.Asadi ed1d18ce94
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
fixe ci
2025-12-31 07:44:32 +03:30

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