Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
28 changes: 27 additions & 1 deletion .github/workflows/gossipsub-interop-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4

- name: Checkout eth-p2p-z
uses: actions/checkout@v4
with:
repository: zen-eth/eth-p2p-z
ref: feat/gossipsub
path: ../eth-p2p-z

- name: Set up Go
uses: actions/setup-go@v5
with:
Expand All @@ -32,6 +39,19 @@ jobs:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh -s -- -y
echo "$HOME/.nimble/bin" >> $GITHUB_PATH

- name: Set up Zig 0.15.2
run: |
curl -fL https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \
| sudo tar -xJ -C /usr/local
sudo ln -sf /usr/local/zig-x86_64-linux-0.15.2/zig /usr/local/bin/zig
zig version

- name: Cache Zig global packages
uses: actions/cache@v4
with:
path: ~/.cache/zig
key: zig-0.15.2

- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
Expand All @@ -52,7 +72,8 @@ jobs:
netbase \
python3 \
python3-networkx \
xz-utils
xz-utils \
zlib1g-dev

# Build and install Shadow v3.3.0 from source
git clone --depth 1 --branch v3.3.0 https://github.com/shadow/shadow.git shadow-simulator
Expand All @@ -67,6 +88,11 @@ jobs:
run: make test
continue-on-error: true

- name: Run gossipsub interop tests (Zig)
working-directory: gossipsub-interop
run: make test-zig
continue-on-error: true

- name: Upload Shadow output
if: always()
uses: actions/upload-artifact@v4
Expand Down
36 changes: 36 additions & 0 deletions gossipsub-interop/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Shadow network simulator + Zig build environment
# Runs on linux/amd64 (Shadow requirement).
#
# Uses the pre-built shadowsim/shadow-ci image so we skip the ~1h Shadow
# Rust compilation that was previously needed under QEMU on Apple Silicon.
#
# Build:
# docker build --platform linux/amd64 -t gossipsub-shadow .
#
# Run (from gossipsub-interop directory):
# docker run --rm --platform linux/amd64 \
# -v $(pwd):/work \
# -v /path/to/eth-p2p-z:/eth-p2p-z \
# -v $HOME/.cache/zig:/root/.cache/zig \
# gossipsub-shadow \
# bash /work/run-shadow.sh --node_count 4 --composition all-zig --scenario subnet-blob-msg

FROM --platform=linux/amd64 shadowsim/shadow-ci:ubuntu-22.04-gcc-release

# ── Extra system libraries needed by the Zig/C build ─────────────────────
# zlib1g-dev: required by lsquic (zlib.h)
RUN apt-get update && apt-get install -y \
zlib1g-dev \
git \
&& rm -rf /var/lib/apt/lists/*

# ── Zig 0.15.2 ────────────────────────────────────────────────────────────
RUN curl -fL https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \
| tar -xJ -C /usr/local \
&& ln -s /usr/local/zig-x86_64-linux-0.15.2/zig /usr/local/bin/zig

# ── uv (Python package manager for experiment scripts) ────────────────────
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:${PATH}"

WORKDIR /work
12 changes: 11 additions & 1 deletion gossipsub-interop/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ binaries: nim-libp2p/gossipsub-bin
cd go-libp2p && go build -linkshared -o gossipsub-bin
cd rust-libp2p && cargo build
cd jvm-libp2p && ./gradlew installDist
zig build --build-file $(CURDIR)/../../eth-p2p-z/build.zig --prefix $(CURDIR)/zig-libp2p/zig-out -Doptimize=ReleaseFast -Dlibxev-backend=epoll
cp $(CURDIR)/zig-libp2p/zig-out/bin/gossipsub-bin $(CURDIR)/zig-libp2p/gossipsub-bin

# Clean all generated shadow simulation files
clean:
Expand Down Expand Up @@ -119,5 +121,13 @@ test-rust-only:
@uv run run.py --node_count 2 --composition rust --scenario "partial-messages-fanout" && uv run checks/partial_messages.py latest/


test-zig:
# Testing all-zig subnet-blob-msg
@echo "Testing all-zig subnet-blob-msg"
@uv run run.py --node_count 4 --composition zig --scenario "subnet-blob-msg" && uv run checks/subnet_blob_msg.py latest/

.PHONY: binaries all clean test test-rust-only test-go test-subnet-blob test-partial-messages
test-zig-go:
@echo "Testing zig+go subnet-blob-msg"
@uv run run.py --node_count 16 --composition zig go --scenario "subnet-blob-msg" && uv run checks/subnet_blob_msg.py latest/

.PHONY: binaries all clean test test-rust-only test-go test-subnet-blob test-partial-messages test-zig test-zig-go
1 change: 1 addition & 0 deletions gossipsub-interop/experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,7 @@ def scenario(
"rust": "rust-libp2p/target/debug/rust-libp2p-gossip",
"nim": "nim-libp2p/gossipsub-bin",
"jvm": "jvm-libp2p/build/install/jvm-libp2p-gossip/bin/jvm-libp2p-gossip",
"zig": "zig-libp2p/gossipsub-bin",
}


Expand Down
4 changes: 1 addition & 3 deletions gossipsub-interop/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ def main():

timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
composition_label = "-".join(args.composition)
args.output_dir = f"{args.scenario}-{args.node_count}-{composition_label}-{
args.seed
}-{timestamp}-{git_describe}.data"
args.output_dir = f"{args.scenario}-{args.node_count}-{composition_label}-{args.seed}-{timestamp}-{git_describe}.data"

if not os.path.isabs(args.output_dir):
args.output_dir = os.path.join(shadow_outputs_dir, args.output_dir)
Expand Down
4 changes: 4 additions & 0 deletions gossipsub-interop/zig-libp2p/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
gossipsub-interop/zig-libp2p/.zig-cache/
zig-pkg/
.zig-cache/
zig-out/