84 lines
2.6 KiB
Docker
84 lines
2.6 KiB
Docker
# syntax = docker/dockerfile:1.11-labs
|
|
|
|
FROM input AS build-deb
|
|
ARG sys_target
|
|
ARG rust_target
|
|
ARG rust_toolchain
|
|
ARG RUSTUP_HOME
|
|
ARG CARGO_HOME
|
|
ARG CARGO_TARGET
|
|
ARG CARGO_TARGET_DIR
|
|
ARG cargo_target_profile
|
|
ARG cargo_target_artifact
|
|
ARG cargo_target_share
|
|
ARG cargo_profile
|
|
ARG cargo_features
|
|
ARG cargo_spec_features
|
|
ARG pkg_dir
|
|
ARG deb_args=""
|
|
|
|
WORKDIR /
|
|
COPY --link --from=input . .
|
|
|
|
WORKDIR /usr/src/tuwunel
|
|
ENV targ_dir="${CARGO_TARGET_DIR}/${cargo_target_profile}"
|
|
ENV targ_targ_dir="${CARGO_TARGET_DIR}/${rust_target}/${cargo_target_profile}"
|
|
RUN \
|
|
--mount=type=cache,dst=${RUSTUP_HOME}/downloads,sharing=shared \
|
|
--mount=type=cache,dst=${CARGO_HOME}/registry,sharing=shared \
|
|
--mount=type=cache,dst=${CARGO_HOME}/git,sharing=shared \
|
|
--mount=type=cache,dst=${targ_dir}/deps,id=${cargo_target_share}/deps,sharing=locked \
|
|
--mount=type=cache,dst=${targ_dir}/build,id=${cargo_target_share}/build,sharing=locked \
|
|
--mount=type=cache,dst=${targ_dir}/examples,id=${cargo_target_share}/examples,sharing=locked \
|
|
--mount=type=cache,dst=${targ_dir}/incremental,id=${cargo_target_share}/incremental,sharing=locked \
|
|
--mount=type=cache,dst=${targ_dir}/.fingerprint,id=${cargo_target_share}/fingerprint,sharing=locked \
|
|
--mount=type=cache,dst=${targ_targ_dir}/deps,id=${cargo_target_share}/deps,sharing=locked \
|
|
--mount=type=cache,dst=${targ_targ_dir}/build,id=${cargo_target_share}/build,sharing=locked \
|
|
--mount=type=cache,dst=${targ_targ_dir}/examples,id=${cargo_target_share}/examples,sharing=locked \
|
|
--mount=type=cache,dst=${targ_targ_dir}/incremental,id=${cargo_target_share}/incremental,sharing=locked \
|
|
--mount=type=cache,dst=${targ_targ_dir}/.fingerprint,id=${cargo_target_share}/fingerprint,sharing=locked \
|
|
<<EOF
|
|
set -eux
|
|
mkdir -p "${pkg_dir}"
|
|
rustup run ${rust_toolchain} \
|
|
cargo deb \
|
|
--verbose \
|
|
--locked \
|
|
--no-build \
|
|
"${cargo_spec_features}" \
|
|
--features "${cargo_features}" \
|
|
--profile "${cargo_profile}" \
|
|
--target "${CARGO_TARGET}" \
|
|
--manifest-path Cargo.toml \
|
|
--multiarch same \
|
|
--compress-type gz \
|
|
--output "${pkg_dir}" \
|
|
${deb_args}
|
|
|
|
mv ${pkg_dir}/* "${pkg_dir}/tuwunel.deb"
|
|
dpkg --info "${pkg_dir}/tuwunel.deb"
|
|
dpkg --contents "${pkg_dir}/tuwunel.deb"
|
|
EOF
|
|
|
|
|
|
FROM scratch AS deb
|
|
ARG pkg_dir
|
|
|
|
COPY --from=input ${pkg_dir}/tuwunel.deb .
|
|
|
|
|
|
FROM input AS deb-install
|
|
ARG pkg_dir
|
|
|
|
WORKDIR /
|
|
COPY --link --from=input . .
|
|
|
|
WORKDIR ${pkg_dir}
|
|
COPY --from=deb . .
|
|
RUN <<EOF
|
|
set -eux
|
|
dpkg --info tuwunel.deb
|
|
dpkg --contents tuwunel.deb
|
|
dpkg --install tuwunel.deb
|
|
EOF
|