From c62f53258155f72562d0dcf0df8d30b5c45993b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Mon, 9 Feb 2026 16:25:47 -0300 Subject: [PATCH 1/2] docs: add RELEASE.md document --- RELEASE.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..e720f6d --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,81 @@ +# Releasing ethlambda + +This document describes how we publish and distribute ethlambda. We currently +release via Docker images, published by manually triggering the +["Publish Docker Image" workflow](.github/workflows/docker_publish.yaml). +We don't use GitHub Releases yet. + +## Docker images + +Images are published to GitHub Container Registry (GHCR) under +`ghcr.io/lambdaclass/ethlambda`. Each publish builds for both `amd64` and +`arm64`, then creates a multi-arch manifest so `docker pull` automatically +fetches the right image for your machine. + +## Docker image tags + +Every publish automatically creates a `sha-<7chars>` tag (e.g. `sha-12f8377`) +from the commit hash. This makes it easy to trace a running image back to the +exact commit it was built from. + +On top of that, the workflow accepts a comma-separated list of custom tags as a +parameter (e.g. `latest,devnet2`). We use the following tagging convention: + +- `latest` - the latest image built from the `main` branch +- `devnet2` - the latest image built with `devnet2` support +- `devnet1` - *(deprecated)* `devnet1` support + +Future devnets will introduce new tags, with previous ones left without updates. + +### Pulling an image + +```bash +docker pull ghcr.io/lambdaclass/ethlambda:latest # latest from main +docker pull ghcr.io/lambdaclass/ethlambda:devnet2 # devnet2-compatible +docker pull ghcr.io/lambdaclass/ethlambda:sha-12f8377 # pinned to a specific commit +``` + +## Publishing a Docker image + +Make sure CI is passing on the branch you want to publish before triggering the +workflow. + +To publish a Docker image, follow these steps: + +1. Go to the **Actions** tab in GitHub and select the **"Publish Docker Image"** workflow. +2. Click **"Run workflow"**, select the branch (prefer `main`), and enter the tags (e.g. `latest,devnet2`). + +The workflow will then: + +1. Build `amd64` and `arm64` images in parallel. +2. Push arch-specific images (e.g. `latest-amd64`, `latest-arm64`). +3. Create a multi-arch manifest for each tag. +4. Create an additional `sha-<7chars>` manifest for commit traceability. + +## Building locally + +You can build a Docker image locally for testing before publishing. The Makefile +provides a shortcut: + +```bash +make docker-build # Builds with tag "local" +make docker-build DOCKER_TAG=my-test # Custom tag +``` + +The Dockerfile accepts build arguments for customizing the build: + +| Argument | Default | Description | +|----------|---------|-------------| +| `BUILD_PROFILE` | `release` | Cargo build profile | +| `FEATURES` | `""` | Extra Cargo features (e.g. `skip-signature-verification`) | +| `RUSTFLAGS` | `""` | Extra Rust compiler flags | + +Example with custom args: + +```bash +docker build --build-arg FEATURES=skip-signature-verification -t ethlambda:test . +``` + +`GIT_COMMIT` and `GIT_BRANCH` are also available but set automatically by CI. +When building locally, `vergen-git2` extracts them from the local Git repo at +build time. From 1b21b67f8852eb3599f368fdc7308754c7ed92a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:49:38 -0300 Subject: [PATCH 2/2] chore: update Dockerfile image description label --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d2344af..8a0bd5e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,7 +44,7 @@ FROM ubuntu AS runtime WORKDIR /app LABEL org.opencontainers.image.source=https://github.com/lambdaclass/ethlambda -LABEL org.opencontainers.image.description="Minimalist, fast and modular implementation of the Lean Ethereum client written in Rust." +LABEL org.opencontainers.image.description="A minimalist and fast Lean Consensus client written in Rust by LambdaClass" LABEL org.opencontainers.image.licenses="MIT" ARG GIT_COMMIT=unknown