diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 494411fb..84381523 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -44,8 +44,6 @@ ARG TARGETARCH ARG TARGETVARIANT ARG TARGETPLATFORM -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - # Build time options to avoid dpkg warnings and help with reproducible builds. ENV DEBIAN_FRONTEND=noninteractive \ LANG=C.UTF-8 \ @@ -70,7 +68,7 @@ RUN echo "export CARGO_TARGET=${CARGO_BUILD_TARGET}" >> /env-cargo && \ # Output the current contents of the file cat /env-cargo -RUN source /env-cargo && \ +RUN . /env-cargo && \ rustup target add "${CARGO_TARGET}" # Copies over *only* your manifests and build files @@ -79,15 +77,16 @@ COPY ./macros ./macros ARG CARGO_PROFILE=release -# Configure the DB ARG as late as possible to not invalidate the cached layers above +# Configure the DB and FEATURES ARGs as late as possible to not invalidate the cached layers above +ARG DB=sqlite,mysql,postgresql # Enable MiMalloc to improve performance on Alpine builds -ARG DB=sqlite,mysql,postgresql,enable_mimalloc +ARG FEATURES=s3,enable_mimalloc # Builds your dependencies and removes the # dummy project, except the target folder # This folder contains the compiled dependencies -RUN source /env-cargo && \ - cargo build --features ${DB} --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ +RUN . /env-cargo && \ + cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ find . -not -path "./target*" -delete # Copies the complete project @@ -97,13 +96,13 @@ COPY . . ARG VW_VERSION # Builds again, this time it will be the actual source files being build -RUN source /env-cargo && \ +RUN . /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp # Also do this for build.rs to ensure the version is rechecked touch build.rs src/main.rs && \ # Create a symlink to the binary target folder to easy copy the binary in the final stage - cargo build --features ${DB} --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ - if [[ "${CARGO_PROFILE}" == "dev" ]] ; then \ + cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ + if test "${CARGO_PROFILE}" = "dev"; then \ ln -vfsr "/app/target/${CARGO_TARGET}/debug" /app/target/final ; \ else \ ln -vfsr "/app/target/${CARGO_TARGET}/${CARGO_PROFILE}" /app/target/final ; \ diff --git a/docker/Dockerfile.debian b/docker/Dockerfile.debian index 5de9fdb5..70943c65 100644 --- a/docker/Dockerfile.debian +++ b/docker/Dockerfile.debian @@ -42,8 +42,6 @@ ARG TARGETARCH ARG TARGETVARIANT ARG TARGETPLATFORM -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - # Build time options to avoid dpkg warnings and help with reproducible builds. ENV DEBIAN_FRONTEND=noninteractive \ LANG=C.UTF-8 \ @@ -80,7 +78,7 @@ RUN mkdir -pv "${CARGO_HOME}" && \ RUN USER=root cargo new --bin /app WORKDIR /app -RUN source /env-cargo && \ +RUN . /env-cargo && \ rustup target add "${CARGO_TARGET}" # Copies over *only* your manifests and build files @@ -89,16 +87,17 @@ COPY ./macros ./macros ARG CARGO_PROFILE=release -# Configure the DB ARG as late as possible to not invalidate the cached layers above +# Configure the DB and FEATURES ARGs as late as possible to not invalidate the cached layers above ARG DB=sqlite,mysql,postgresql +ARG FEATURES=s3 # Builds your dependencies and removes the # dummy project, except the target folder # This folder contains the compiled dependencies -RUN source /env-cargo && \ +RUN . /env-cargo && \ # Workaround for xx related build issues # https://github.com/tonistiigi/xx/pull/108#issuecomment-3700635977 - PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features ${DB} --profile "${CARGO_PROFILE}" && \ + PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" && \ find . -not -path "./target*" -delete # Copies the complete project @@ -108,15 +107,15 @@ COPY . . ARG VW_VERSION # Builds again, this time it will be the actual source files being build -RUN source /env-cargo && \ +RUN . /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp # Also do this for build.rs to ensure the version is rechecked touch build.rs src/main.rs && \ # Create a symlink to the binary target folder to easy copy the binary in the final stage # Workaround for xx related build issues # https://github.com/tonistiigi/xx/pull/108#issuecomment-3700635977 - PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features ${DB} --profile "${CARGO_PROFILE}" && \ - if [[ "${CARGO_PROFILE}" == "dev" ]] ; then \ + PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" && \ + if test "${CARGO_PROFILE}" = "dev"; then \ ln -vfsr "/app/target/${CARGO_TARGET}/debug" /app/target/final ; \ else \ ln -vfsr "/app/target/${CARGO_TARGET}/${CARGO_PROFILE}" /app/target/final ; \ diff --git a/docker/Dockerfile.j2 b/docker/Dockerfile.j2 index 5e33d512..8b1c84be 100644 --- a/docker/Dockerfile.j2 +++ b/docker/Dockerfile.j2 @@ -30,7 +30,7 @@ {% macro xx_cargo_config() -%} # Workaround for xx related build issues # https://github.com/tonistiigi/xx/pull/108#issuecomment-3700635977 - PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features ${DB} --profile "${CARGO_PROFILE}" + PKG_CONFIG="$(command -v "$(xx-info)-pkg-config")" xx-cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" {%- endmacro %} FROM --platform=linux/amd64 docker.io/vaultwarden/web-vault@{{ vault_image_digest }} AS vault @@ -58,8 +58,6 @@ ARG TARGETARCH ARG TARGETVARIANT ARG TARGETPLATFORM -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - # Build time options to avoid dpkg warnings and help with reproducible builds. ENV DEBIAN_FRONTEND=noninteractive \ LANG=C.UTF-8 \ @@ -111,7 +109,7 @@ RUN echo "export CARGO_TARGET=${CARGO_BUILD_TARGET}" >> /env-cargo && \ cat /env-cargo {% endif %} -RUN source /env-cargo && \ +RUN . /env-cargo && \ rustup target add "${CARGO_TARGET}" # Copies over *only* your manifests and build files @@ -120,22 +118,23 @@ COPY ./macros ./macros ARG CARGO_PROFILE=release -# Configure the DB ARG as late as possible to not invalidate the cached layers above -{% if base == "debian" %} +# Configure the DB and FEATURES ARGs as late as possible to not invalidate the cached layers above ARG DB=sqlite,mysql,postgresql +{% if base == "debian" %} +ARG FEATURES=s3 {% elif base == "alpine" %} # Enable MiMalloc to improve performance on Alpine builds -ARG DB=sqlite,mysql,postgresql,enable_mimalloc +ARG FEATURES=s3,enable_mimalloc {% endif %} # Builds your dependencies and removes the # dummy project, except the target folder # This folder contains the compiled dependencies -RUN source /env-cargo && \ +RUN . /env-cargo && \ {% if base == "debian" %} {{ xx_cargo_config() }} && \ {% elif base == "alpine" %} - cargo build --features ${DB} --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ + cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ {% endif %} find . -not -path "./target*" -delete @@ -146,7 +145,7 @@ COPY . . ARG VW_VERSION # Builds again, this time it will be the actual source files being build -RUN source /env-cargo && \ +RUN . /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp # Also do this for build.rs to ensure the version is rechecked touch build.rs src/main.rs && \ @@ -154,9 +153,9 @@ RUN source /env-cargo && \ {% if base == "debian" %} {{ xx_cargo_config() }} && \ {% elif base == "alpine" %} - cargo build --features ${DB} --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ + cargo build --features "${DB}" --features "${FEATURES}" --profile "${CARGO_PROFILE}" --target="${CARGO_TARGET}" && \ {% endif %} - if [[ "${CARGO_PROFILE}" == "dev" ]] ; then \ + if test "${CARGO_PROFILE}" = "dev"; then \ ln -vfsr "/app/target/${CARGO_TARGET}/debug" /app/target/final ; \ else \ ln -vfsr "/app/target/${CARGO_TARGET}/${CARGO_PROFILE}" /app/target/final ; \