when: branch: [main, high-performance] event: push matrix: SERVICE: - gateway - users - companies - job_seekers - customers - payments - employees - photographers - makeup_artists - tutors - developers - video_editors - graphic_designers - social_media_managers - fitness_trainers - catering_services - ugc_content_creators - cron # NO REGISTRY NEEDED - Build directly on Woodpecker agent steps: - name: detect-changes image: alpine/git commands: - apk add --no-cache bash - | #!/bin/bash set -e CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD || echo "") SERVICE_PATH=$(echo "${SERVICE}" | tr '_' '-') SHARED_CHANGED=false if echo "$CHANGED_FILES" | grep -q "^crates/"; then SHARED_CHANGED=true echo "⚠️ Shared crates changed" fi SERVICE_CHANGED=false if echo "$CHANGED_FILES" | grep -q "^apps/${SERVICE_PATH}/"; then SERVICE_CHANGED=true echo "✅ Service ${SERVICE} changed" fi if [ "$SHARED_CHANGED" = "true" ] || [ "$SERVICE_CHANGED" = "true" ]; then echo "🚀 Building ${SERVICE}" exit 0 else echo "⏭️ Skipping ${SERVICE}" exit 78 fi # Build directly with Rust - no Docker, no registry! - name: build-binary image: rust:alpine volumes: # Persistent cache between builds - /var/cache/cargo:/usr/local/cargo/registry - /var/cache/rust-target:/tmp/target commands: - apk add --no-cache musl-dev pkgconfig openssl-dev - rustup target add x86_64-unknown-linux-musl - | #!/bin/bash set -e echo "🔨 Building ${SERVICE} binary..." # Use cached target directory for incremental builds export CARGO_TARGET_DIR=/tmp/target export RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-s" # Build only this service cargo build --release \ --bin ${SERVICE} \ --target x86_64-unknown-linux-musl # Copy binary to artifacts cp /tmp/target/x86_64-unknown-linux-musl/release/${SERVICE} ./${SERVICE} echo "✅ Binary built: ${SERVICE}" ls -lh ./${SERVICE} # Build minimal Docker image from binary - name: build-docker image: woodpeckerci/plugin-docker-buildx:5.0.0 settings: # Use local daemon only - NO REGISTRY PUSH! dry_run: false dockerfile: Dockerfile.from-binary build_args: - SERVICE_NAME=${SERVICE} # Tag locally only tags: - nxtgauge-rust-${SERVICE}:latest platforms: linux/amd64