Skip to content

Commit 0744561

Browse files
Merge branch 'main' into sb/new-era-ctm-on-zksync-os
2 parents f0c2aba + 43dffec commit 0744561

181 files changed

Lines changed: 15926 additions & 854 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/release-please/config.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@
2727
"path": "Cargo.toml"
2828
}
2929
]
30+
},
31+
"airbender_prover_server": {
32+
"component": "airbender_prover_server",
33+
"extra-files": [
34+
{
35+
"type": "generic",
36+
"path": "Cargo.toml"
37+
}
38+
]
3039
}
3140
}
3241
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
2-
"core": "29.19.0",
2+
"core": "31.2.0",
33
"prover": "25.3.0",
4-
"zkstack_cli": "0.2.1"
4+
"zkstack_cli": "0.2.1",
5+
"airbender_prover_server": "0.1.1"
56
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: Build Airbender Prover Server images
2+
on:
3+
workflow_call:
4+
secrets:
5+
DOCKERHUB_USER:
6+
description: "DOCKERHUB_USER"
7+
required: true
8+
DOCKERHUB_TOKEN:
9+
description: "DOCKERHUB_TOKEN"
10+
required: true
11+
inputs:
12+
image_tag_suffix:
13+
description: "Optional suffix to override tag name generation"
14+
type: string
15+
required: false
16+
action:
17+
description: "Action with docker image (build | push)"
18+
type: string
19+
default: "push"
20+
required: false
21+
22+
# The Airbender prover server is a self-contained Cargo workspace that pulls
23+
# `eravm-prover-host` and the guest verifier crates as git dependencies, so its
24+
# Docker build context is the workspace directory (NOT the repo root) and it uses
25+
# its own CUDA base image rather than `matterlabs/zksync-build-base`. That is why
26+
# it has a dedicated template instead of riding on `build-prover-template.yml`.
27+
jobs:
28+
build-images:
29+
name: Build and Push Docker Images
30+
runs-on: [matterlabs-ci-runner-high-performance]
31+
permissions:
32+
packages: write
33+
contents: read
34+
strategy:
35+
fail-fast: false
36+
matrix:
37+
include:
38+
# GPU image: FRI prover (CUDA) + SNARK wrapper. Published under the
39+
# verifier repo's canonical image name, matching what eravm-airbender-verifier
40+
# itself pushed (`us-docker.pkg.dev/.../eravm-airbender-verifier`).
41+
- image: eravm-airbender-verifier
42+
dockerfile: docker/airbender-prover-server/Dockerfile
43+
# CPU image: snark-only pipeline, no CUDA — same name with a `-cpu` suffix.
44+
- image: eravm-airbender-verifier-cpu
45+
dockerfile: docker/airbender-prover-server/Dockerfile.cpu
46+
steps:
47+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
48+
with:
49+
submodules: "recursive"
50+
51+
- name: Set up Docker Buildx
52+
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
53+
54+
- name: Set env vars
55+
shell: bash
56+
run: |
57+
# Support for custom tag suffix; fall back to a short-sha + timestamp.
58+
if [ -n "${{ inputs.image_tag_suffix }}" ]; then
59+
echo IMAGE_TAG_SUFFIX="${{ inputs.image_tag_suffix }}" >> $GITHUB_ENV
60+
else
61+
echo IMAGE_TAG_SUFFIX="$(git rev-parse --short HEAD)-$(date +%s)" >> $GITHUB_ENV
62+
fi
63+
64+
- name: login to Docker registries
65+
if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
66+
shell: bash
67+
run: |
68+
docker login -u ${{ secrets.DOCKERHUB_USER }} -p ${{ secrets.DOCKERHUB_TOKEN }}
69+
gcloud auth configure-docker us-docker.pkg.dev -q
70+
71+
- name: Login to GitHub Container Registry
72+
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
73+
if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
74+
with:
75+
registry: ghcr.io
76+
username: ${{ github.actor }}
77+
password: ${{ secrets.GITHUB_TOKEN }}
78+
79+
- name: Build and push
80+
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
81+
with:
82+
# Self-contained workspace dir — see the comment above the jobs block.
83+
context: airbender_prover_server
84+
file: ${{ matrix.dockerfile }}
85+
load: true
86+
tags: |
87+
us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
88+
matterlabs/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
89+
ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
90+
us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.image }}:latest
91+
matterlabs/${{ matrix.image }}:latest
92+
ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:latest
93+
94+
- name: Push docker image
95+
if: ${{ inputs.action == 'push' }}
96+
run: |
97+
docker push us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
98+
docker push matterlabs/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
99+
docker push ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:${{ env.IMAGE_TAG_SUFFIX }}
100+
docker push us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.image }}:latest
101+
docker push matterlabs/${{ matrix.image }}:latest
102+
docker push ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:latest

.github/workflows/build-docker-from-tag.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ on:
1717
- core-v**
1818
- prover-v**
1919
- contract_verifier-v**
20+
- airbender_prover_server-v**
2021

2122
concurrency: docker-build
2223

@@ -84,6 +85,18 @@ jobs:
8485
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
8586
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
8687

88+
build-push-airbender-prover-server-images:
89+
name: Build and push image
90+
needs: [setup]
91+
uses: ./.github/workflows/build-airbender-prover-server-template.yml
92+
if: contains(github.ref_name, 'airbender_prover_server')
93+
with:
94+
image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}
95+
action: "push"
96+
secrets:
97+
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
98+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
99+
87100
build-circuit-prover-gpu-gar:
88101
name: Build GAR prover FRI GPU
89102
needs: [setup, build-push-prover-images]
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Workflow template for CI jobs for the Airbender Prover Server
2+
on:
3+
workflow_call:
4+
5+
jobs:
6+
build-and-test:
7+
runs-on: [matterlabs-ci-runner-highmem-long]
8+
env:
9+
RUNNER_COMPOSE_FILE: "docker-compose-runner-nightly.yml"
10+
11+
steps:
12+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
13+
with:
14+
submodules: "recursive"
15+
16+
- name: Setup Environment
17+
uses: ./.github/actions/setup-env
18+
with:
19+
runner-compose-file: ${{ env.RUNNER_COMPOSE_FILE }}
20+
21+
- name: Init
22+
run: |
23+
# The workspace pins its own nightly via `airbender_prover_server/rust-toolchain`;
24+
# `rustup show` inside the workspace installs it on demand.
25+
ci_run run_retried bash -lc "cd airbender_prover_server && rustup show"
26+
27+
- name: Formatting
28+
run: |
29+
ci_run bash -lc "cd airbender_prover_server && cargo fmt --check"
30+
31+
- name: Lints
32+
run: |
33+
# CUDA-free clippy (matches the build/test lane); fail on any warning,
34+
# consistent with the rest of the repo. `--all-targets` also lints the
35+
# (otherwise `#[ignore]`d) integration test.
36+
ci_run bash -lc "cd airbender_prover_server && CARGO_PROFILE_DEV_DEBUG=0 cargo clippy --no-default-features --all-targets --locked -- -D warnings"
37+
38+
- name: Build and unit/integration tests (CUDA-free)
39+
run: |
40+
# `--no-default-features` drops the CUDA `gpu_prover`, so the lane runs
41+
# on a CPU runner; it exercises the crate's unit and integration tests.
42+
# `CARGO_PROFILE_DEV_DEBUG=0` skips DWARF generation for the large
43+
# Airbender circuit dependencies — faster, and it sidesteps a rustc
44+
# stack overflow seen during debug-info codegen on the pinned nightly.
45+
ci_run bash -lc "cd airbender_prover_server && CARGO_PROFILE_DEV_DEBUG=0 cargo test --no-default-features --locked -p eravm-prover-server"

.github/workflows/ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ jobs:
1515
outputs:
1616
core: ${{ steps.changed-files.outputs.core_any_changed }}
1717
prover: ${{ steps.changed-files.outputs.prover_any_changed }}
18+
airbender_prover_server: ${{ steps.changed-files.outputs.airbender_prover_server_any_changed }}
1819
docs: ${{ steps.changed-files.outputs.docs_any_changed }}
1920
all: ${{ steps.changed-files.outputs.all_any_changed }}
2021
steps:
@@ -45,6 +46,14 @@ jobs:
4546
- 'docker-compose-runner-nightly.yml'
4647
- '!**/*.md'
4748
- '!**/*.MD'
49+
airbender_prover_server:
50+
- 'airbender_prover_server/**'
51+
- 'docker/airbender-prover-server/**'
52+
- '.github/workflows/ci-airbender-prover-server-reusable.yml'
53+
- '.github/workflows/build-airbender-prover-server-template.yml'
54+
- '.github/workflows/actions/**'
55+
- '!**/*.md'
56+
- '!**/*.MD'
4857
core:
4958
- 'core/**'
5059
- '!core/CHANGELOG.md'
@@ -106,6 +115,12 @@ jobs:
106115
if: ${{(needs.changed_files.outputs.prover == 'true' || needs.changed_files.outputs.all == 'true') && !contains(github.head_ref, 'release-please--branches') }}
107116
uses: ./.github/workflows/ci-prover-e2e.yml
108117

118+
ci-for-airbender-prover-server:
119+
name: CI for Airbender Prover Server
120+
needs: changed_files
121+
if: ${{ (needs.changed_files.outputs.airbender_prover_server == 'true' || needs.changed_files.outputs.all == 'true') && !contains(github.head_ref, 'release-please--branches') }}
122+
uses: ./.github/workflows/ci-airbender-prover-server-reusable.yml
123+
109124
ci-for-docs:
110125
needs: changed_files
111126
if: needs.changed_files.outputs.docs == 'true'
@@ -150,6 +165,18 @@ jobs:
150165
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
151166
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
152167

168+
build-airbender-prover-server-images:
169+
name: Build Airbender prover server images
170+
needs: changed_files
171+
if: ${{ (needs.changed_files.outputs.airbender_prover_server == 'true' || needs.changed_files.outputs.all == 'true') && !contains(github.head_ref, 'release-please--branches') }}
172+
uses: ./.github/workflows/build-airbender-prover-server-template.yml
173+
with:
174+
image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}
175+
action: "build"
176+
secrets:
177+
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
178+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
179+
153180
ci-success:
154181
name: Github Status Check
155182
runs-on: ubuntu-latest
@@ -159,10 +186,12 @@ jobs:
159186
ci-for-core-lint,
160187
ci-for-core,
161188
ci-for-prover,
189+
ci-for-airbender-prover-server,
162190
ci-for-docs,
163191
build-core-images,
164192
build-contract-verifier,
165193
build-prover-images,
194+
build-airbender-prover-server-images,
166195
e2e-for-prover,
167196
]
168197
steps:

.github/workflows/release-please.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ jobs:
2828
config: '.github/release-please/config.json' # Path to the configuration file
2929
manifest: '.github/release-please/manifest.json' # Path to the manifest file
3030
update-cargo-lock: true # Update Cargo.lock file in the release PR
31-
publish-to-crates-io: true # Enable publishing to crates.io
31+
publish-to-crates-io: false # Enable publishing to crates.io
3232
upgrade-dependencies: true # Upgrade cross-workspace dependencies
3333
version-suffix: 'non-semver-compat' # Version suffix for the crates.io release
34-
workspace-dirs: 'core prover zkstack_cli' # List of additional workspace directories to update Cargo.lock
34+
workspace-dirs: 'core prover zkstack_cli airbender_prover_server' # List of additional workspace directories to update Cargo.lock
3535
dependencies: 'clang libclang-dev' # Additional Linux dependencies to install
3636

3737
# Trigger workflow to publish zkstack binaries

.github/workflows/release-test-stage.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ jobs:
1515
outputs:
1616
core: ${{ steps.changed-files-yaml.outputs.core_any_changed }}
1717
prover: ${{ steps.changed-files-yaml.outputs.prover_any_changed }}
18+
airbender_prover_server: ${{ steps.changed-files-yaml.outputs.airbender_prover_server_any_changed }}
1819
all: ${{ steps.changed-files-yaml.outputs.all_any_changed }}
1920
steps:
2021
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
@@ -34,9 +35,15 @@ jobs:
3435
- '!core/lib/zksync_core/**'
3536
core:
3637
- core/**
38+
airbender_prover_server:
39+
- airbender_prover_server/**
40+
- docker/airbender-prover-server/**
41+
- .github/workflows/build-airbender-prover-server-template.yml
3742
all:
3843
- '!core/**'
3944
- '!prover/**'
45+
- '!airbender_prover_server/**'
46+
- '!docker/airbender-prover-server/**'
4047
setup:
4148
name: Setup
4249
runs-on: [ubuntu-latest]
@@ -95,6 +102,18 @@ jobs:
95102
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
96103
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
97104

105+
build-push-airbender-prover-server-images:
106+
name: Build and push images
107+
needs: [setup, changed_files]
108+
uses: ./.github/workflows/build-airbender-prover-server-template.yml
109+
if: needs.changed_files.outputs.airbender_prover_server == 'true' || needs.changed_files.outputs.all == 'true'
110+
with:
111+
image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}
112+
action: "push"
113+
secrets:
114+
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
115+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
116+
98117
build-circuit-prover-gpu-gar:
99118
name: Build GAR prover FRI GPU
100119
needs: [setup, build-push-prover-images]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/target

airbender_prover_server/.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/target
2+
3+
# The guest program and verification keys are downloaded at build time by
4+
# `build.rs` from the matching `zksync_airbender_verifier` release — never
5+
# committed. The repo-wide .gitignore already excludes `dist`; we additionally
6+
# exclude the downloaded VKs and the per-file `.tag` cache markers `build.rs`
7+
# writes.
8+
/vks/fri_vk.bin
9+
/vks/snark_vk.json
10+
/vks/*.tag
11+
/guest/dist/app/*.tag

0 commit comments

Comments
 (0)