Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- Add conditional check for .web directory and package.json - Fallback to npm install if package-lock.json doesn't exist - Skip npm build gracefully if directory doesn't exist - Fixes npm ci error when reflex export doesn't create lock file
204 lines
6.8 KiB
YAML
204 lines
6.8 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
|
|
|
|
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
|