Skip to content

Commit 45d7fdd

Browse files
committed
build: adjust docker build scope
1 parent ff2a831 commit 45d7fdd

File tree

2 files changed

+125
-51
lines changed

2 files changed

+125
-51
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.idea
33
.vscode
44
.nyc_output
5+
.github
56
*.log
67
Dockerfile
78
**/*.spec.ts

Dockerfile

Lines changed: 124 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# syntax = docker/dockerfile:1
1+
# syntax = docker/dockerfile:1.7-labs
22

33
# Docker image for rs-drive-abci
44
#
@@ -181,7 +181,6 @@ RUN <<EOS
181181
echo "export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" >> /root/env
182182
# AWS_SECRET_ACCESS_KEY is a secret so we load it using ONBUILD ARG later on
183183
echo "export SCCACHE_BUCKET='${SCCACHE_BUCKET}'" >> /root/env
184-
# echo "export SCCACHE_S3_USE_SSL=true" >> /root/env
185184
echo "export SCCACHE_S3_KEY_PREFIX='${SCCACHE_S3_KEY_PREFIX}/${TARGETARCH}/linux-musl'" >> /root/env
186185
elif [ -n "${SCCACHE_MEMCACHED}" ]; then
187186
# memcached
@@ -285,14 +284,46 @@ RUN source $HOME/.cargo/env; \
285284
FROM deps AS build-planner
286285
287286
WORKDIR /platform
288-
COPY . .
289287
290-
RUN source $HOME/.cargo/env && \
288+
COPY --parents \
289+
Cargo.lock \
290+
Cargo.toml \
291+
rust-toolchain.toml \
292+
.cargo \
293+
packages/dapi-grpc \
294+
packages/rs-dapi-grpc-macros \
295+
packages/rs-dpp \
296+
packages/rs-drive \
297+
packages/rs-platform-value \
298+
packages/rs-platform-serialization \
299+
packages/rs-platform-serialization-derive \
300+
packages/rs-platform-version \
301+
packages/rs-platform-versioning \
302+
packages/rs-platform-value-convertible \
303+
packages/rs-drive-abci \
304+
packages/dashpay-contract \
305+
packages/withdrawals-contract \
306+
packages/masternode-reward-shares-contract \
307+
packages/feature-flags-contract \
308+
packages/dpns-contract \
309+
packages/data-contracts \
310+
packages/strategy-tests \
311+
packages/simple-signer \
312+
packages/rs-json-schema-compatibility-validator \
313+
# TODO: We don't need those. Maybe dynamically remove them from workspace or move outside of monorepo?
314+
packages/rs-drive-proof-verifier \
315+
packages/wasm-dpp \
316+
packages/rs-dapi-client \
317+
packages/rs-sdk \
318+
packages/check-features \
319+
/platform/
320+
321+
RUN if [[ "${CARGO_BUILD_PROFILE}" == "release" ]] ; then \
322+
export RELEASE="--release" ; \
323+
fi && \
324+
source $HOME/.cargo/env && \
291325
source /root/env && \
292-
cargo chef prepare --recipe-path recipe.json
293-
294-
# Workaround: as we cache dapi-grpc, its build.rs is not rerun, so we need to touch it
295-
RUN touch /platform/packages/dapi-grpc/build.rs
326+
cargo chef prepare $RELEASE --recipe-path recipe.json
296327

297328
#
298329
# STAGE: BUILD RS-DRIVE-ABCI
@@ -304,13 +335,12 @@ SHELL ["/bin/bash", "-o", "pipefail","-e", "-x", "-c"]
304335

305336
WORKDIR /platform
306337

307-
COPY --from=build-planner /platform/recipe.json recipe.json
338+
COPY --from=build-planner /platform/recipe.json /platform/.cargo /platform/
308339

309340
# Build dependencies - this is the caching Docker layer!
310341
RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOME}/registry/index \
311342
--mount=type=cache,sharing=shared,id=cargo_registry_cache,target=${CARGO_HOME}/registry/cache \
312343
--mount=type=cache,sharing=shared,id=cargo_git,target=${CARGO_HOME}/git/db \
313-
#--mount=type=cache,sharing=shared,id=target_${TARGETARCH},target=/platform/target \
314344
set -ex; \
315345
if [[ "${CARGO_BUILD_PROFILE}" == "release" ]] ; then \
316346
mv .cargo/config-release.toml .cargo/config.toml; \
@@ -327,7 +357,41 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
327357
--locked && \
328358
if [[ -x /usr/bin/sccache ]]; then sccache --show-stats; fi
329359

330-
COPY . .
360+
COPY --parents \
361+
Cargo.lock \
362+
Cargo.toml \
363+
rust-toolchain.toml \
364+
.cargo \
365+
packages/dapi-grpc \
366+
packages/rs-dapi-grpc-macros \
367+
packages/rs-dpp \
368+
packages/rs-drive \
369+
packages/rs-platform-value \
370+
packages/rs-platform-serialization \
371+
packages/rs-platform-serialization-derive \
372+
packages/rs-platform-version \
373+
packages/rs-platform-versioning \
374+
packages/rs-platform-value-convertible \
375+
packages/rs-drive-abci \
376+
packages/dashpay-contract \
377+
packages/withdrawals-contract \
378+
packages/masternode-reward-shares-contract \
379+
packages/feature-flags-contract \
380+
packages/dpns-contract \
381+
packages/data-contracts \
382+
packages/strategy-tests \
383+
packages/simple-signer \
384+
packages/rs-json-schema-compatibility-validator \
385+
# TODO: We don't need those. Maybe dynamically remove them from workspace or move outside of monorepo?
386+
packages/rs-drive-proof-verifier \
387+
packages/wasm-dpp \
388+
packages/rs-dapi-client \
389+
packages/rs-sdk \
390+
packages/check-features \
391+
/platform/
392+
393+
# Workaround: as we cache dapi-grpc, its build.rs is not rerun, so we need to touch it
394+
#RUN touch /platform/packages/dapi-grpc/build.rs
331395

332396
RUN mkdir /artifacts
333397

@@ -350,9 +414,9 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
350414
--package drive-abci \
351415
${FEATURES_FLAG} \
352416
--locked && \
353-
cp /platform/target/${OUT_DIRECTORY}/drive-abci /artifacts/ && \
354-
# Remove target directory to save space
355-
rm -rf target && \
417+
cp target/${OUT_DIRECTORY}/drive-abci /artifacts/ && \
418+
# Remove /platform to reduce layer size
419+
rm -rf /platform && \
356420
if [[ -x /usr/bin/sccache ]]; then sccache --show-stats; fi
357421

358422
#
@@ -378,7 +442,42 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
378442
--locked && \
379443
if [[ -x /usr/bin/sccache ]]; then sccache --show-stats; fi
380444

381-
COPY . .
445+
446+
# Rust deps
447+
COPY --parents \
448+
Cargo.lock \
449+
Cargo.toml \
450+
rust-toolchain.toml \
451+
.cargo \
452+
packages/rs-dpp \
453+
packages/rs-platform-value \
454+
packages/rs-platform-serialization \
455+
packages/rs-platform-serialization-derive \
456+
packages/rs-platform-version \
457+
packages/rs-platform-versioning \
458+
packages/rs-platform-value-convertible \
459+
packages/rs-json-schema-compatibility-validator \
460+
# Common
461+
packages/wasm-dpp \
462+
packages/dashpay-contract \
463+
packages/withdrawals-contract \
464+
packages/masternode-reward-shares-contract \
465+
packages/feature-flags-contract \
466+
packages/dpns-contract \
467+
packages/data-contracts \
468+
packages/dapi-grpc \
469+
# JS deps
470+
.yarn \
471+
.pnp* \
472+
.yarnrc.yml \
473+
yarn.lock \
474+
package.json \
475+
packages/js-grpc-common \
476+
packages/js-dapi-client \
477+
packages/wallet-lib \
478+
packages/js-dash-sdk \
479+
packages/dash-spv \
480+
/platform/
382481

383482
RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOME}/registry/index \
384483
--mount=type=cache,sharing=shared,id=cargo_registry_cache,target=${CARGO_HOME}/registry/cache \
@@ -391,8 +490,8 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
391490
cp -R /platform/.yarn/unplugged /tmp/ && \
392491
export SKIP_GRPC_PROTO_BUILD=1 && \
393492
yarn build && \
394-
# Remove target directory to save space
395-
rm -rf target && \
493+
# Remove target directory and rust packages to save space
494+
rm -rf target packages/rs-* && \
396495
if [[ -x /usr/bin/sccache ]]; then sccache --show-stats; fi
397496

398497
#
@@ -413,7 +512,7 @@ RUN mkdir -p /var/log/dash \
413512
${REJECTIONS_PATH}
414513

415514
COPY --from=build-drive-abci /artifacts/drive-abci /usr/bin/drive-abci
416-
COPY --from=build-drive-abci /platform/packages/rs-drive-abci/.env.mainnet /var/lib/dash/rs-drive-abci/.env
515+
COPY packages/rs-drive-abci/.env.mainnet /var/lib/dash/rs-drive-abci/.env
417516

418517
# Create a volume
419518
VOLUME /var/lib/dash/rs-drive-abci/db
@@ -450,6 +549,9 @@ EXPOSE 29090
450549
#
451550
FROM build-js AS build-dashmate-helper
452551

552+
# Copy dashmate package
553+
COPY packages/dashmate packages/dashmate
554+
453555
# Install Test Suite specific dependencies using previous
454556
# node_modules directory to reuse built binaries
455557
RUN yarn workspaces focus --production dashmate
@@ -494,6 +596,8 @@ ENTRYPOINT ["/platform/packages/dashmate/docker/entrypoint.sh"]
494596
#
495597
FROM build-js AS build-test-suite
496598

599+
COPY packages/platform-test-suite packages/platform-test-suite
600+
497601
# Install Test Suite specific dependencies using previous
498602
# node_modules directory to reuse built binaries
499603
RUN yarn workspaces focus --production @dashevo/platform-test-suite
@@ -511,38 +615,6 @@ LABEL description="Dash Platform test suite"
511615
WORKDIR /platform
512616

513617
COPY --from=build-test-suite /platform /platform
514-
515-
516-
# Copy yarn and Cargo files
517-
COPY --from=build-test-suite /platform/.yarn /platform/.yarn
518-
COPY --from=build-test-suite /platform/package.json /platform/yarn.lock \
519-
/platform/.yarnrc.yml /platform/.pnp.* /platform/Cargo.lock /platform/rust-toolchain.toml ./
520-
# Use Cargo.toml.template instead of Cargo.toml from project root to avoid copying unnecessary Rust packages
521-
COPY --from=build-test-suite /platform/packages/platform-test-suite/Cargo.toml.template ./Cargo.toml
522-
523-
# Copy only necessary packages from monorepo
524-
COPY --from=build-test-suite /platform/packages/platform-test-suite packages/platform-test-suite
525-
COPY --from=build-test-suite /platform/packages/dashpay-contract packages/dashpay-contract
526-
COPY --from=build-test-suite /platform/packages/wallet-lib packages/wallet-lib
527-
COPY --from=build-test-suite /platform/packages/js-dash-sdk packages/js-dash-sdk
528-
COPY --from=build-test-suite /platform/packages/js-dapi-client packages/js-dapi-client
529-
COPY --from=build-test-suite /platform/packages/js-grpc-common packages/js-grpc-common
530-
COPY --from=build-test-suite /platform/packages/dapi-grpc packages/dapi-grpc
531-
COPY --from=build-test-suite /platform/packages/dash-spv packages/dash-spv
532-
COPY --from=build-test-suite /platform/packages/withdrawals-contract packages/withdrawals-contract
533-
COPY --from=build-test-suite /platform/packages/rs-platform-value packages/rs-platform-value
534-
COPY --from=build-test-suite /platform/packages/masternode-reward-shares-contract packages/masternode-reward-shares-contract
535-
COPY --from=build-test-suite /platform/packages/feature-flags-contract packages/feature-flags-contract
536-
COPY --from=build-test-suite /platform/packages/dpns-contract packages/dpns-contract
537-
COPY --from=build-test-suite /platform/packages/data-contracts packages/data-contracts
538-
COPY --from=build-test-suite /platform/packages/rs-platform-serialization packages/rs-platform-serialization
539-
COPY --from=build-test-suite /platform/packages/rs-platform-serialization-derive packages/rs-platform-serialization-derive
540-
COPY --from=build-test-suite /platform/packages/rs-platform-version packages/rs-platform-version
541-
COPY --from=build-test-suite /platform/packages/rs-platform-versioning packages/rs-platform-versioning
542-
COPY --from=build-test-suite /platform/packages/rs-platform-value-convertible packages/rs-platform-value-convertible
543-
COPY --from=build-test-suite /platform/packages/rs-dpp packages/rs-dpp
544-
COPY --from=build-test-suite /platform/packages/wasm-dpp packages/wasm-dpp
545-
546618
COPY --from=build-test-suite /platform/packages/platform-test-suite/.env.example /platform/packages/platform-test-suite/.env
547619

548620
EXPOSE 2500 2501 2510
@@ -554,6 +626,8 @@ ENTRYPOINT ["/platform/packages/platform-test-suite/bin/test.sh"]
554626
#
555627
FROM build-js AS build-dapi
556628

629+
COPY packages/dapi packages/dapi
630+
557631
# Install Test Suite specific dependencies using previous
558632
# node_modules directory to reuse built binaries
559633
RUN yarn workspaces focus --production @dashevo/dapi
@@ -579,7 +653,6 @@ COPY --from=build-dapi /platform/packages/dapi /platform/packages/dapi
579653
COPY --from=build-dapi /platform/packages/dapi-grpc /platform/packages/dapi-grpc
580654
COPY --from=build-dapi /platform/packages/js-grpc-common /platform/packages/js-grpc-common
581655
COPY --from=build-dapi /platform/packages/wasm-dpp /platform/packages/wasm-dpp
582-
COPY --from=build-dapi /platform/packages/js-dapi-client /platform/packages/js-dapi-client
583656

584657
RUN cp /platform/packages/dapi/.env.example /platform/packages/dapi/.env
585658

0 commit comments

Comments
 (0)