Skip to content

Commit 4814166

Browse files
authored
chore(fuzzing_avm): fuzzing avm build workflow (#19264)
For some reason worflow disappeared from https://github.com/AztecProtocol/aztec-packages/pull/19133/files
2 parents d42045c + 25f1913 commit 4814166

File tree

4 files changed

+84
-110
lines changed

4 files changed

+84
-110
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Build Fuzzing AVM Container
2+
3+
on:
4+
push:
5+
branches:
6+
- next
7+
workflow_dispatch:
8+
inputs:
9+
commit:
10+
description: "Git commit SHA to build (leave empty for latest)"
11+
required: false
12+
default: ""
13+
jobs:
14+
build:
15+
runs-on: ubuntu-latest
16+
permissions:
17+
packages: write
18+
19+
steps:
20+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
21+
22+
- name: Free up disk space on runner
23+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
24+
with:
25+
large-packages: false
26+
27+
- name: Log in to GitHub Container Registry
28+
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772
29+
with:
30+
registry: ghcr.io
31+
username: ${{ github.actor }}
32+
password: ${{ secrets.GITHUB_TOKEN }}
33+
34+
- name: Build and push
35+
uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25
36+
with:
37+
context: container-builds/avm-fuzzing-container/src/
38+
push: true
39+
tags: |
40+
ghcr.io/aztecprotocol/avm-fuzzing-container:latest
41+
ghcr.io/aztecprotocol/avm-fuzzing-container:${{ github.sha }}
42+
build-args: |
43+
COMMIT=${{ github.event_name == 'workflow_dispatch' && github.event.inputs.commit || github.sha }}

container-builds/avm-fuzzing-container/run.sh

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set -euo pipefail
44
IFS=$'\n\t'
55

66
timeout='2592000' # 1 month
7-
cpus='4'
7+
cpus='1'
88
mem="8G"
99
jobs_="$cpus"
1010
workers='1'
@@ -77,12 +77,9 @@ image_name=avm-tx-fuzzer
7777

7878
# Get the directory where this script is located
7979
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
80-
# Get aztec-packages root (two levels up from container-builds/avm-fuzzing-container)
81-
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
8280

8381
echo "Building container image: $image_name"
84-
echo "Build context: $REPO_ROOT"
85-
docker build -t "$image_name":latest -f "$SCRIPT_DIR/src/Dockerfile" "$REPO_ROOT"
82+
docker build -t "$image_name":latest "$SCRIPT_DIR/src"
8683

8784
mkdir -p crash-reports output corpus artifacts
8885

Lines changed: 38 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,45 @@
1-
# Multi-stage Dockerfile for AVM TX Fuzzer
1+
# AVM TX Fuzzer Container
22
# Builds a container that can run the AVM transaction fuzzer
33
#
4-
# Build from aztec-packages root:
5-
# docker build -t avm-tx-fuzzer -f container-builds/avm-fuzzing-container/src/Dockerfile .
4+
# Build latest from 'next' branch:
5+
# docker build -t avm-tx-fuzzer container-builds/avm-fuzzing-container/src/
6+
#
7+
# Build specific commit:
8+
# docker build -t avm-tx-fuzzer --build-arg COMMIT=<sha> container-builds/avm-fuzzing-container/src/
69

7-
# =============================================================================
8-
# Stage 1: Build C++ fuzzer binary
9-
# =============================================================================
10-
FROM ubuntu:noble AS builder
10+
FROM aztecprotocol/build:3.0-amd64 AS builder
1111

12-
# Install build dependencies and LLVM script requirements
13-
RUN apt-get update && apt-get install -y \
14-
build-essential \
15-
cmake \
16-
ninja-build \
17-
git \
18-
curl \
19-
wget \
20-
libdw-dev \
21-
binutils-dev \
22-
libelf-dev \
23-
libdwarf-dev \
24-
lsb-release \
25-
software-properties-common \
26-
gnupg && \
27-
apt-get -y autoremove && \
28-
apt-get clean && \
29-
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
12+
ARG COMMIT=""
3013

31-
# Install clang-20 via LLVM script
32-
RUN wget https://apt.llvm.org/llvm.sh && \
33-
chmod +x llvm.sh && \
34-
./llvm.sh 20 && \
35-
rm llvm.sh
14+
# Install ldid (not included in build image, only in basebox)
15+
RUN curl -sL https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_linux_x86_64 -o /usr/local/bin/ldid \
16+
&& chmod +x /usr/local/bin/ldid
3617

37-
RUN useradd -m fuzzer -G sudo
38-
WORKDIR /home/fuzzer
18+
WORKDIR /root
3919

40-
# Copy only the necessary directories from build context
41-
# barretenberg/cpp - the C++ source code
42-
COPY barretenberg/cpp ./aztec-packages/barretenberg/cpp/
20+
# Clone the repository
21+
RUN git clone https://github.com/AztecProtocol/aztec-packages.git --depth 1 --branch next && \
22+
cd aztec-packages && \
23+
if [ -n "$COMMIT" ]; then \
24+
git fetch origin $COMMIT --depth 1; \
25+
git checkout $COMMIT || exit 1; \
26+
fi
4327

44-
# Build the tx fuzzer only
45-
WORKDIR /home/fuzzer/aztec-packages/barretenberg/cpp
28+
WORKDIR /root/aztec-packages
4629

47-
# Remove any local build directories that may have been copied
48-
RUN rm -rf build-* srs_db
30+
# Run bootstrap up to yarn-project (release-image needs docker which isn't available)
31+
RUN BOOTSTRAP_TO=yarn-project ./bootstrap.sh
4932

33+
# Build the tx fuzzer
34+
WORKDIR /root/aztec-packages/barretenberg/cpp
5035
RUN cmake --preset fuzzing-avm
5136
RUN cmake --build build-fuzzing-avm --target avm_fuzzer_tx_fuzzer
5237

5338
# =============================================================================
54-
# Stage 2: Build Node.js simulator
55-
# =============================================================================
56-
FROM ubuntu:noble AS simulator-builder
57-
58-
# Install Node.js 22 and build dependencies for native modules
59-
RUN apt-get update && \
60-
apt-get install -y curl git build-essential python3 parallel && \
61-
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
62-
apt-get install -y nodejs && \
63-
apt-get -y autoremove && \
64-
apt-get clean && \
65-
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
66-
67-
# Enable corepack for yarn
68-
RUN corepack enable
69-
70-
WORKDIR /home/fuzzer/aztec-packages
71-
72-
# Copy yarn-project from build context (includes .yarnrc.yml and yarn.lock)
73-
COPY yarn-project ./yarn-project/
74-
75-
# Copy barretenberg/ts (required as yarn workspace dependency via portal)
76-
COPY barretenberg/ts ./barretenberg/ts/
77-
78-
# Copy noir packages (required as yarn workspace dependencies via portal/file)
79-
COPY noir/packages/acvm_js ./noir/packages/acvm_js/
80-
COPY noir/packages/types ./noir/packages/types/
81-
COPY noir/packages/noirc_abi ./noir/packages/noirc_abi/
82-
COPY noir/packages/noir_codegen ./noir/packages/noir_codegen/
83-
COPY noir/packages/noir_js ./noir/packages/noir_js/
84-
85-
WORKDIR /home/fuzzer/aztec-packages/yarn-project
86-
87-
# Install dependencies (but skip building - we'll use pre-built files from build context)
88-
RUN yarn install
89-
90-
# =============================================================================
91-
# Stage 3: Runtime image
39+
# Runtime image
9240
# =============================================================================
9341
FROM ubuntu:noble AS runtime
9442

95-
# Install runtime dependencies
9643
RUN apt-get update && apt-get install -y \
9744
libstdc++6 \
9845
libgcc-s1 \
@@ -104,47 +51,35 @@ RUN apt-get update && apt-get install -y \
10451
curl && \
10552
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
10653
apt-get install -y nodejs && \
54+
corepack enable && \
10755
apt-get -y autoremove && \
10856
apt-get clean && \
10957
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
11058

11159
RUN useradd -m fuzzer -G sudo
11260
WORKDIR /home/fuzzer
11361

114-
# Create directory structure that matches run_fuzzer.sh expectations
115-
# run_fuzzer.sh calculates paths relative to itself:
116-
# SCRIPT_DIR = /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer
117-
# BARRETENBERG_ROOT = SCRIPT_DIR/../../../.. = /home/fuzzer/aztec-packages/barretenberg
118-
# CPP_DIR = BARRETENBERG_ROOT/cpp
119-
# BUILD_DIR = CPP_DIR/build-fuzzing-avm
120-
# PROJECT_ROOT = BARRETENBERG_ROOT/.. = /home/fuzzer/aztec-packages
121-
# AVM_SIMULATOR_BIN = PROJECT_ROOT/yarn-project/simulator/dest/public/fuzzing/avm_simulator_bin.js
122-
123-
# Copy fuzzer binary to the expected location
124-
COPY --from=builder /home/fuzzer/aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/avm_fuzzer_tx_fuzzer \
62+
# Copy fuzzer binary
63+
COPY --from=builder /root/aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/avm_fuzzer_tx_fuzzer \
12564
./aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/
12665

127-
# Copy run_fuzzer.sh to its expected location
128-
COPY --from=builder /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh \
66+
# Copy run_fuzzer.sh
67+
COPY --from=builder /root/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh \
12968
./aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/
13069

131-
# Copy corpus
132-
COPY --from=builder /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/ \
133-
./aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/
134-
135-
# Copy entire yarn-project with built packages (includes all dest directories)
136-
COPY --from=simulator-builder /home/fuzzer/aztec-packages/yarn-project \
70+
# Copy yarn-project (fully built)
71+
COPY --from=builder /root/aztec-packages/yarn-project \
13772
./aztec-packages/yarn-project/
13873

139-
# Copy barretenberg/ts (needed for @aztec/bb.js symlink)
140-
COPY --from=simulator-builder /home/fuzzer/aztec-packages/barretenberg/ts \
74+
# Copy barretenberg/ts (for @aztec/bb.js)
75+
COPY --from=builder /root/aztec-packages/barretenberg/ts \
14176
./aztec-packages/barretenberg/ts/
14277

143-
# Copy noir packages (needed for portal symlinks)
144-
COPY --from=simulator-builder /home/fuzzer/aztec-packages/noir/packages \
78+
# Copy noir packages (for portal symlinks)
79+
COPY --from=builder /root/aztec-packages/noir/packages \
14580
./aztec-packages/noir/packages/
14681

147-
# Create directories for corpus, sync_corpus, and crashes
82+
# Create directories for corpus, crashes, etc.
14883
RUN mkdir -p aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/tx \
14984
aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/sync_corpus/tx \
15085
corpus output crash-reports artifacts
@@ -153,10 +88,9 @@ RUN mkdir -p aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/
15388
RUN chmod +x aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh
15489

15590
# Copy entrypoint script
156-
COPY container-builds/avm-fuzzing-container/src/entrypoint.sh .
91+
COPY entrypoint.sh .
15792
RUN chmod +x entrypoint.sh
15893

159-
# Set working directory
16094
WORKDIR /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer
16195

16296
ENTRYPOINT ["/home/fuzzer/entrypoint.sh"]

container-builds/avm-fuzzing-container/src/entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ ln -sf "$CORPUS" "$FUZZER_CORPUS" 2>/dev/null || true
8585

8686
# Build fuzzer arguments
8787
FUZZER_ARGS=(
88-
-timeout=5
88+
-timeout=1200
8989
-workers="$workers"
9090
-jobs="$jobs_"
9191
-entropic=1

0 commit comments

Comments
 (0)