diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000..f64e6c0580 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,59 @@ +# Use the official VS Code base image for dev containers +FROM mcr.microsoft.com/devcontainers/base:ubuntu + +# Install dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + libssl-dev \ + pkg-config \ + clang \ + cmake \ + llvm \ + curl \ + gnupg \ + lsb-release \ + software-properties-common \ + unzip + +# Switch to clang +RUN rm /usr/bin/cc && ln -s /usr/bin/clang /usr/bin/cc + +# Install protoc - protobuf compiler +# The one shipped with Alpine does not work +ARG TARGETARCH +ARG PROTOC_VERSION=25.2 +RUN if [[ "$TARGETARCH" == "arm64" ]] ; then export PROTOC_ARCH=aarch_64; else export PROTOC_ARCH=x86_64; fi; \ + curl -Ls https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${PROTOC_ARCH}.zip \ + -o /tmp/protoc.zip && \ + unzip -qd /opt/protoc /tmp/protoc.zip && \ + rm /tmp/protoc.zip && \ + ln -s /opt/protoc/bin/protoc /usr/bin/ + +# Install protoc v25.2+ +RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v25.2/protoc-25.2-linux-x86_64.zip \ + && unzip protoc-25.2-linux-x86_64.zip -d /usr/local \ + && rm protoc-25.2-linux-x86_64.zip + +# Switch to vscode user +USER vscode + +ENV CARGO_HOME=/home/vscode/.cargo +ENV PATH=$CARGO_HOME/bin:$PATH + +# TODO: It doesn't sharing PATH between stages, so we need "source $HOME/.cargo/env" everywhere +COPY rust-toolchain.toml . +RUN TOOLCHAIN_VERSION="$(grep channel rust-toolchain.toml | awk '{print $3}' | tr -d '"')" && \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- \ + --profile minimal \ + -y \ + --default-toolchain "${TOOLCHAIN_VERSION}" \ + --target wasm32-unknown-unknown + +# Install wasm-bindgen-cli in the same profile as other components, to sacrifice some performance & disk space to gain +# better build caching +RUN if [[ -z "${SCCACHE_MEMCACHED}" ]] ; then unset SCCACHE_MEMCACHED ; fi ; \ + RUSTFLAGS="-C target-feature=-crt-static" \ + # Meanwhile if you want to update wasm-bindgen you also need to update version in: + # - packages/wasm-dpp/Cargo.toml + # - packages/wasm-dpp/scripts/build-wasm.sh + cargo install wasm-bindgen-cli@0.2.86 --locked diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..2d0d18ee90 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,74 @@ +{ + "name": "Dash Platform Dev Container", + "build": { + "dockerfile": "Dockerfile", + "context": ".." + }, + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "arcanis.vscode-zipfs", + "chrmarti.regex", + "davidanson.vscode-markdownlint", + "arcanis.vscode-zipfs", + "ms-vscode.cmake-tools", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "vadimcn.vscode-lldb", + "rust-lang.rust-analyzer", + "tamasfe.even-better-toml", + "zhangyue.rust-mod-generator", + "ms-azuretools.vscode-docker" + ] + } + }, + "remoteUser": "vscode", + "mounts": [ + { + "source": "devcontainer-platform-cargo-registry-index-${devcontainerId}", + "target": "/home/vscode/.cargo/registry", + "type": "volume" + }, + { + "source": "devcontainer-platform-cargo-registry-cache-${devcontainerId}", + "target": "/home/vscode/.cargo/registry/cache", + "type": "volume" + }, + { + "source": "devcontainer-platform-cargo-git-db-${devcontainerId}", + "target": "/home/vscode/.cargo/git/db", + "type": "volume" + }, + { + "source": "devcontainer-platform-target-${devcontainerId}", + "target": "${containerWorkspaceFolder}/target", + "type": "volume" + } + ], + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": "true", + "username": "vscode", + "userUid": "1000", + "userGid": "1000", + "upgradePackages": "true" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "latest", + "ppa": "false" + }, + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/devcontainers/features/node:1": { + "version": 20, + "installYarnUsingApt": false, + }, + "ghcr.io/eitsupi/devcontainer-features/jq-likes:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/schlich/devcontainer-features/starship:0": {}, + }, + "postCreateCommand": { + "git-safe": "git config --global --add safe.directory ${containerWorkspaceFolder}", + "cargo-permissions": "sudo chown -R vscode:vscode /home/vscode/.cargo ${containerWorkspaceFolder}/target" + } +}