Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jc/add docker build workflow #191

Merged
merged 4 commits into from
Jan 3, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/avs_docker_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: "[Nethermind] Taiko Preconf AVS - Docker build and push"

on:
workflow_dispatch:
push:
branches: [master]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need a separate workflow for building images for PRs or can we use this one?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can manually trigger the actions to build the images.

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_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
68 changes: 68 additions & 0 deletions .github/workflows/avs_protocol_docker_build.yml
Original file line number Diff line number Diff line change
@@ -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_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
23 changes: 5 additions & 18 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
FROM docker.io/library/rust:1.80 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 link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, do not copy whole Node directory, as we build locally, the huge target directory is created inside and we don't want it to be copied into the docker image.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Dockerfile builds the node for you. You don't necessarily need to build locally. I have also add dockerignore file to ignore target dir.

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

# 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
FROM alpine:latest

# 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"]
21 changes: 21 additions & 0 deletions SmartContracts/Dockerfile
Original file line number Diff line number Diff line change
@@ -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."]
27 changes: 0 additions & 27 deletions avs-deploy

This file was deleted.

Loading