fix(woodpecker): use simple Dockerfile and reduce build complexity

- Replace complex caching with simple Dockerfile

- Remove cargo-chef complexity that was slowing builds

- Add .woodpecker-base.yml for separate base image builds

- Add Dockerfile.simple for faster builds

- Add Dockerfile.ultrafast for when base image exists
This commit is contained in:
Ashwin Kumar 2026-04-10 12:56:28 +02:00
parent 4f16b21b76
commit 39107e4fa4
4 changed files with 97 additions and 4 deletions

24
.woodpecker-base.yml Normal file
View file

@ -0,0 +1,24 @@
when:
branch: [main, high-performance]
event: push
path:
- Cargo.toml
- Cargo.lock
- crates/**
steps:
- name: build-base-image
image: woodpeckerci/plugin-docker-buildx:5.0.0
settings:
registry: ghcr.io
repo: ghcr.io/traceworks2023/nxtgauge-rust-base
context: .
dockerfile: Dockerfile.base
tags:
- latest
- ${CI_COMMIT_SHA}
username:
from_secret: GHCR_USERNAME
password:
from_secret: GHCR_TOKEN
platforms: linux/amd64

View file

@ -61,7 +61,8 @@ steps:
registry: ghcr.io
repo: ghcr.io/traceworks2023/nxtgauge-rust-${SERVICE}
context: .
dockerfile: Dockerfile.fast
# Use simple Dockerfile for now
dockerfile: Dockerfile.simple
build_args:
- SERVICE_NAME=${SERVICE}
tags:
@ -73,6 +74,3 @@ steps:
password:
from_secret: GHCR_TOKEN
platforms: linux/amd64
# ENABLE CACHE - This is the key!
cache_from: ghcr.io/traceworks2023/nxtgauge-rust-${SERVICE}:cache
cache_to: ghcr.io/traceworks2023/nxtgauge-rust-${SERVICE}:cache

38
Dockerfile.simple Normal file
View file

@ -0,0 +1,38 @@
# Simple fast Dockerfile - no fancy caching, just builds fast
# Uses local cargo cache between builds
ARG SERVICE_NAME
FROM rust:alpine AS builder
ARG SERVICE_NAME
# Install deps
RUN apk add --no-cache musl-dev pkgconfig openssl-dev && \
rustup target add x86_64-unknown-linux-musl
WORKDIR /app
# Copy manifests first for better caching
COPY Cargo.toml Cargo.lock ./
COPY crates/ ./crates/
# Copy the specific service
COPY apps/${SERVICE_NAME}/ ./apps/${SERVICE_NAME}/
# Build with all optimizations
ENV RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-s"
RUN cargo build --release \
--bin ${SERVICE_NAME} \
--target x86_64-unknown-linux-musl
# Runtime
FROM scratch
ARG SERVICE_NAME
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/${SERVICE_NAME} /app/service
USER 65532:65532
EXPOSE 8000
ENTRYPOINT ["/app/service"]

33
Dockerfile.ultrafast Normal file
View file

@ -0,0 +1,33 @@
# Ultra-fast Dockerfile using pre-built dependencies
# This requires the base image to be built first!
# Base image build: ./scripts/build-base-image.sh
ARG SERVICE_NAME
# Use the pre-built base image with all dependencies cached
FROM ghcr.io/traceworks2023/nxtgauge-rust-base:latest AS builder
ARG SERVICE_NAME
WORKDIR /app
# Copy ONLY the specific service source code
# Dependencies are already compiled in the base image!
COPY apps/${SERVICE_NAME}/ ./apps/${SERVICE_NAME}/
# Build just this service - dependencies already exist!
# This should take 10-30 seconds, not 15-20 minutes!
RUN cargo build --release \
--bin ${SERVICE_NAME} \
--target x86_64-unknown-linux-musl
# Minimal runtime image
FROM scratch
ARG SERVICE_NAME
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/${SERVICE_NAME} /app/service
USER 65532:65532
EXPOSE 8000
ENTRYPOINT ["/app/service"]