-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathDockerfile.builder
More file actions
92 lines (79 loc) · 2.88 KB
/
Copy pathDockerfile.builder
File metadata and controls
92 lines (79 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Stage 2: Build project code
# Uses pre-built dependencies from Stage 1
ARG DEPS_IMAGE=qlean-mini-dependencies:latest
FROM ${DEPS_IMAGE} AS dependencies
FROM ubuntu:24.04 AS builder
ARG DEBIAN_FRONTEND=noninteractive
ARG GIT_COMMIT=unknown
ARG GIT_BRANCH=unknown
ARG BUILD_DATE=unknown
ARG VERSION=unknown
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
ENV GIT_COMMIT=${GIT_COMMIT}
ENV GIT_BRANCH=${GIT_BRANCH}
ENV PROJECT=/qlean-mini
ENV VENV=${PROJECT}/.venv
ENV BUILD=${PROJECT}/.build
ENV PATH=${VENV}/bin:/root/.cargo/bin:${PATH}
ENV CARGO_HOME=/root/.cargo
ENV RUSTUP_HOME=/root/.rustup
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
cmake \
ninja-build \
git \
curl \
ca-certificates \
pkg-config \
python3 \
python3-venv \
libstdc++6 \
zip \
unzip && \
rm -rf /var/lib/apt/lists/*
WORKDIR ${PROJECT}
# Copy dependencies from dependencies image
COPY --from=dependencies ${VENV} ${VENV}
COPY --from=dependencies ${PROJECT}/.vcpkg ${PROJECT}/.vcpkg
COPY --from=dependencies ${BUILD}/vcpkg_installed ${BUILD}/vcpkg_installed
COPY --from=dependencies /root/.cargo /root/.cargo
COPY --from=dependencies /root/.rustup /root/.rustup
# Copy project source code
COPY . ${PROJECT}
# Create minimal .git structure for build version generation
# (actual .git is excluded by .dockerignore for smaller image)
RUN mkdir -p ${PROJECT}/.git && \
echo "${GIT_COMMIT}" > ${PROJECT}/.git/HEAD
# Build project
RUN set -eux; \
export PATH="${HOME}/.cargo/bin:${PATH}"; \
source ${HOME}/.cargo/env 2>/dev/null || true; \
echo "=== Checking vcpkg_installed ==="; \
ls -la ${BUILD}/vcpkg_installed/ || echo "No vcpkg_installed found!"; \
VCPKG_ROOT=${PROJECT}/.vcpkg cmake -G Ninja --preset=default \
-DPython3_EXECUTABLE="${VENV}/bin/python3" \
-DTESTING=OFF \
-DVCPKG_INSTALLED_DIR=${BUILD}/vcpkg_installed \
-DVCPKG_MANIFEST_MODE=OFF \
-B ${BUILD} \
${PROJECT}; \
cmake --build ${BUILD} --parallel; \
mkdir -p /opt/artifacts/out/bin; \
cp -r -v ${BUILD}/out/bin/qlean /opt/artifacts/out/bin/qlean; \
strip /opt/artifacts/out/bin/qlean; \
echo "=== Artifacts ==="; \
ls -lh /opt/artifacts/out/bin/qlean
# OCI Image Spec annotations
# https://github.com/opencontainers/image-spec/blob/main/annotations.md
LABEL org.opencontainers.image.title="qlean-mini-builder"
LABEL org.opencontainers.image.description="Qlean-mini: builder image with compiled artifacts"
LABEL org.opencontainers.image.source="https://github.com/qdrvm/qlean-mini"
LABEL org.opencontainers.image.vendor="QDRVM"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.version=$VERSION
LABEL org.opencontainers.image.created=$BUILD_DATE
LABEL org.opencontainers.image.revision=$GIT_COMMIT
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
CMD ["/bin/bash"]