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; \
285284FROM deps AS build-planner 
286285
287286WORKDIR /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
305336WORKDIR  /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!
310341RUN  --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
332396RUN  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
383482RUN  --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
415514COPY  --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
419518VOLUME  /var/lib/dash/rs-drive-abci/db
@@ -450,6 +549,9 @@ EXPOSE 29090
450549# 
451550FROM  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
455557RUN  yarn workspaces focus --production dashmate
@@ -494,6 +596,8 @@ ENTRYPOINT ["/platform/packages/dashmate/docker/entrypoint.sh"]
494596# 
495597FROM  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
499603RUN  yarn workspaces focus --production @dashevo/platform-test-suite
@@ -511,38 +615,6 @@ LABEL description="Dash Platform test suite"
511615WORKDIR  /platform
512616
513617COPY  --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- 
546618COPY  --from=build-test-suite /platform/packages/platform-test-suite/.env.example /platform/packages/platform-test-suite/.env
547619
548620EXPOSE  2500 2501 2510
@@ -554,6 +626,8 @@ ENTRYPOINT ["/platform/packages/platform-test-suite/bin/test.sh"]
554626# 
555627FROM  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
559633RUN  yarn workspaces focus --production @dashevo/dapi
@@ -579,7 +653,6 @@ COPY --from=build-dapi /platform/packages/dapi /platform/packages/dapi
579653COPY  --from=build-dapi /platform/packages/dapi-grpc /platform/packages/dapi-grpc
580654COPY  --from=build-dapi /platform/packages/js-grpc-common /platform/packages/js-grpc-common
581655COPY  --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
584657RUN  cp /platform/packages/dapi/.env.example /platform/packages/dapi/.env
585658
0 commit comments