diff --git a/.dockerignore b/.dockerignore index 6b7ebf648..2886a059a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,6 @@ .devcontainer .github .vscode -!scripts/init.sh -target \ No newline at end of file +target/ +.dockerignore +Dockerfile diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 19bda7463..72e3f1b12 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,49 +1,42 @@ name: Publish Docker Image on: - push: - branches: - - main - tags: - - '*' - pull_request: - branches: - - main - workflow_dispatch: + release: + types: [published] permissions: - contents: read - packages: write - actions: read - security-events: write + contents: read + packages: write + actions: read + security-events: write jobs: publish: runs-on: SubtensorCI - + steps: - name: Checkout code uses: actions/checkout@v4 - + - name: Set up QEMU uses: docker/setup-qemu-action@v2 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - + - name: Login to GHCR uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - + - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v4 with: images: ghcr.io/${{ github.repository }} - + - name: Build and push Docker image uses: docker/build-push-action@v4 with: @@ -52,4 +45,4 @@ jobs: tags: | ${{ steps.meta.outputs.tags }} ghcr.io/${{ github.repository }}:latest - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + labels: ${{ steps.meta.outputs.labels }} diff --git a/Cargo.toml b/Cargo.toml index e3c2814ff..f9a7968b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -167,5 +167,12 @@ codegen-units = 1 [features] default = [] -try-runtime = ["node-subtensor/try-runtime", "node-subtensor-runtime/try-runtime"] -runtime-benchmarks = ["node-subtensor/runtime-benchmarks", "node-subtensor-runtime/runtime-benchmarks"] +try-runtime = [ + "node-subtensor/try-runtime", + "node-subtensor-runtime/try-runtime", +] +runtime-benchmarks = [ + "node-subtensor/runtime-benchmarks", + "node-subtensor-runtime/runtime-benchmarks", +] +metadata-hash = ["node-subtensor-runtime/metadata-hash"] diff --git a/Dockerfile b/Dockerfile index 2fc6cbcc6..2dd2e2370 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,65 +1,44 @@ - ARG BASE_IMAGE=ubuntu:20.04 -FROM $BASE_IMAGE as builder +FROM $BASE_IMAGE AS builder SHELL ["/bin/bash", "-c"] -# This is being set so that no interactive components are allowed when updating. +# Set noninteractive mode for apt-get ARG DEBIAN_FRONTEND=noninteractive LABEL ai.opentensor.image.authors="operations@opentensor.ai" \ ai.opentensor.image.vendor="Opentensor Foundation" \ ai.opentensor.image.title="opentensor/subtensor" \ ai.opentensor.image.description="Opentensor Subtensor Blockchain" \ - ai.opentensor.image.revision="${VCS_REF}" \ - ai.opentensor.image.created="${BUILD_DATE}" \ ai.opentensor.image.documentation="https://docs.bittensor.com" -# show backtraces -ENV RUST_BACKTRACE 1 - -# Necessary libraries for Rust execution +# Set up Rust environment +ENV RUST_BACKTRACE=1 RUN apt-get update && \ apt-get install -y curl build-essential protobuf-compiler clang git && \ rm -rf /var/lib/apt/lists/* -# Install cargo and Rust RUN set -o pipefail && curl https://sh.rustup.rs -sSf | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" +RUN rustup update stable +RUN rustup target add wasm32-unknown-unknown --toolchain stable -RUN mkdir -p /subtensor && \ - mkdir /subtensor/scripts - -# Scripts -COPY ./scripts/init.sh /subtensor/scripts/ - -# Capture dependencies -COPY Cargo.lock Cargo.toml /subtensor/ +# Copy entire repository +COPY . /build +WORKDIR /build -# Specs -COPY ./snapshot.json /subtensor/snapshot.json -COPY ./raw_spec_testfinney.json /subtensor/raw_spec_testfinney.json -COPY ./raw_spec_finney.json /subtensor/raw_spec_finney.json +# Build the project +RUN cargo build -p node-subtensor --profile production --features="runtime-benchmarks metadata-hash" --locked -# Copy our sources -COPY ./node /subtensor/node -COPY ./pallets /subtensor/pallets -COPY ./runtime /subtensor/runtime -COPY ./support /subtensor/support +# Verify the binary was produced +RUN test -e /build/target/production/node-subtensor -# Copy our toolchain -COPY rust-toolchain.toml /subtensor/ -RUN /subtensor/scripts/init.sh - -# Cargo build -WORKDIR /subtensor -RUN cargo build --profile production --features runtime-benchmarks --locked EXPOSE 30333 9933 9944 - FROM $BASE_IMAGE AS subtensor -COPY --from=builder /subtensor/snapshot.json / -COPY --from=builder /subtensor/raw_spec_testfinney.json / -COPY --from=builder /subtensor/raw_spec_finney.json / -COPY --from=builder /subtensor/target/production/node-subtensor /usr/local/bin +# Copy all chainspec files +COPY --from=builder /build/*.json / + +# Copy final binary +COPY --from=builder /build/target/production/node-subtensor /usr/local/bin diff --git a/node/Cargo.toml b/node/Cargo.toml index 0e1a418a3..3c5c91b92 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -92,7 +92,7 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "sc-service/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "pallet-commitments/runtime-benchmarks" + "pallet-commitments/runtime-benchmarks", ] pow-faucet = [] @@ -103,5 +103,7 @@ try-runtime = [ "frame-system/try-runtime", "pallet-transaction-payment/try-runtime", "sp-runtime/try-runtime", - "pallet-commitments/try-runtime" + "pallet-commitments/try-runtime", ] + +metadata-hash = ["node-subtensor-runtime/metadata-hash"]