diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4ddcee5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +Node/target \ No newline at end of file diff --git a/.github/workflows/avs_docker_build.yml b/.github/workflows/avs_docker_build.yml new file mode 100644 index 0000000..c264aab --- /dev/null +++ b/.github/workflows/avs_docker_build.yml @@ -0,0 +1,69 @@ +name: "[Nethermind] Taiko Preconf AVS - Docker build and push" + +on: + workflow_dispatch: + push: + branches: [master] + tags: + - "taiko-preconf-avs-v*" + paths: + - "Node/**" + - "p2pNode/p2pNetwork/**" + +env: + DOCKER_REGISTRY: docker.io + DOCKER_USERNAME: nethswitchboard + DOCKER_REPOSITORY_DEV: taiko-preconf-avs-dev + +jobs: + build: + name: Build and push docker image + runs-on: ubuntu-latest + if: github.repository == 'NethermindEth/Taiko-Preconf-AVS' + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - uses: docker/login-action@v3 + with: + registry: ${{ env.DOCKER_REGISTRY }} + username: ${{ env.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_USERNAME }}/${{ env.DOCKER_REPOSITORY_DEV }} + tags: | + type=raw,value=latest + type=ref,event=branch + type=ref,event=pr + type=ref,event=tag + type=sha + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + platforms: linux/amd64,linux/arm64 + context: . + file: Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Summary + run: | + echo "## Docker build completed :green_circle:" >> $GITHUB_STEP_SUMMARY + echo "### Tags" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.meta.outputs.tags }}" | while IFS= read -r TAG; do + echo "- $TAG" >> $GITHUB_STEP_SUMMARY + done + echo "### Notes" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/avs_protocol_docker_build.yml b/.github/workflows/avs_protocol_docker_build.yml new file mode 100644 index 0000000..f39ca31 --- /dev/null +++ b/.github/workflows/avs_protocol_docker_build.yml @@ -0,0 +1,68 @@ +name: "[Nethermind] Taiko Preconf AVS Protocol- Docker build and push" + +on: + workflow_dispatch: + push: + branches: [master] + tags: + - "taiko-preconf-avs-protocol-v*" + paths: + - "SmartContracts/**" + +env: + DOCKER_REGISTRY: docker.io + DOCKER_USERNAME: nethswitchboard + DOCKER_REPOSITORY_DEV: taiko-preconf-avs-protocol-dev + +jobs: + build: + name: Build and push docker image + runs-on: ubuntu-latest + if: github.repository == 'NethermindEth/Taiko-Preconf-AVS' + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - uses: docker/login-action@v3 + with: + registry: ${{ env.DOCKER_REGISTRY }} + username: ${{ env.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DOCKER_REGISTRY }}${{ env.DOCKER_USERNAME }}/${{ env.DOCKER_REPOSITORY_DEV }} + tags: | + type=raw,value=latest + type=ref,event=branch + type=ref,event=pr + type=ref,event=tag + type=sha + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + platforms: linux/amd64,linux/arm64 + context: ./SmartContracts + file: ./SmartContracts/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Summary + run: | + echo "## Docker build completed :green_circle:" >> $GITHUB_STEP_SUMMARY + echo "### Tags" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.meta.outputs.tags }}" | while IFS= read -r TAG; do + echo "- $TAG" >> $GITHUB_STEP_SUMMARY + done + echo "### Notes" >> $GITHUB_STEP_SUMMARY diff --git a/Dockerfile b/Dockerfile index cddbc32..02d7a2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,17 @@ FROM docker.io/library/rust:1.83 AS builder -# Set the working directory inside the container -WORKDIR /usr/src/taiko_preconf_avs_node +WORKDIR /app/taiko_preconf_avs_node -# Copy the project files -COPY ../Node/src /usr/src/taiko_preconf_avs_node/src -COPY ../Node/Cargo.toml /usr/src/taiko_preconf_avs_node/Cargo.toml -COPY ../Node/Cargo.lock /usr/src/taiko_preconf_avs_node/Cargo.lock +COPY ../Node /app/taiko_preconf_avs_node +COPY ../p2pNode/p2pNetwork /app/p2pNode/p2pNetwork -# Copy the dependency directory -COPY ../p2pNode/p2pNetwork /usr/src/p2pNode/p2pNetwork - -# Build the project in release mode RUN cargo build -p taiko_preconf_avs_node --release -# Use ubuntu as the base image -FROM ubuntu:latest - -# Install ca-certificates -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \ - && rm -rf /var/lib/apt/lists/* +FROM alpine:latest -# Copy the build artifact from the builder stage -COPY --from=builder /usr/src/taiko_preconf_avs_node/target/release/taiko_preconf_avs_node /usr/local/bin/taiko_preconf_avs_node +# TODO:Install ca-certificates, fix for alpine +RUN apk add --no-cache ca-certificates -# Expose the port that the server will run on -# EXPOSE 9000 +COPY --from=builder /app/taiko_preconf_avs_node/target/release/taiko_preconf_avs_node /usr/local/bin/taiko_preconf_avs_node -# Run the binary ENTRYPOINT ["taiko_preconf_avs_node"] diff --git a/SmartContracts/Dockerfile b/SmartContracts/Dockerfile new file mode 100644 index 0000000..ed429ad --- /dev/null +++ b/SmartContracts/Dockerfile @@ -0,0 +1,21 @@ +FROM node:22 + +WORKDIR /app + +COPY . . + +RUN apt-get update && apt-get install -y jq + +RUN git init && \ + curl -L https://foundry.paradigm.xyz | bash && \ + npm install -g pnpm && \ + . ~/.bashrc && \ + foundryup && \ + forge install && \ + pnpm install + +ENV PATH="/root/.foundry/bin:$PATH" + +ENTRYPOINT ["sh", "-c"] + +CMD ["echo Please verify the environment variables and command."] \ No newline at end of file diff --git a/avs-deploy b/avs-deploy deleted file mode 100644 index 06c333d..0000000 --- a/avs-deploy +++ /dev/null @@ -1,27 +0,0 @@ -# Use an official Node.js runtime as a parent image -FROM node:18 - -# Set the working directory in the container -WORKDIR /usr/src/app - -# Copy the current directory contents into the container at /usr/src/app -COPY . . - -# Install Foundry (forge) -RUN curl -L https://foundry.paradigm.xyz | bash && \ - /root/.foundry/bin/foundryup - -# Change the working directory to packages/protocol -WORKDIR /usr/src/app/SmartContracts/ - -# Add Foundry to PATH -ENV PATH="/root/.foundry/bin:${PATH}" - -# Forge Install -RUN forge install - -# Make the script files executable -RUN chmod +x scripts/deployment/*.sh - -# Default command to run if no arguments are provided -CMD ["sh", "-c", "scripts/deployment/deploy_avs.sh"] \ No newline at end of file