@@ -117,3 +117,120 @@ jobs:
117117 -H "Content-type: application/json" \
118118 --data "$data"
119119 fi
120+
121+ proving-benchmark :
122+ runs-on : ubuntu-latest
123+ steps :
124+ - name : Checkout
125+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
126+ # Note cron jobs will be on 'next' by default.
127+
128+ - name : Determine nightly tag
129+ id : nightly-tag
130+ run : |
131+ if [[ -n "${{ inputs.nightly_tag }}" ]]; then
132+ nightly_tag="${{ inputs.nightly_tag }}"
133+ else
134+ current_version=$(jq -r '."."' .release-please-manifest.json)
135+ nightly_tag="${current_version}-nightly.$(date -u +%Y%m%d)"
136+ fi
137+ echo "nightly_tag=$nightly_tag" >> $GITHUB_OUTPUT
138+ echo "Using nightly tag: $nightly_tag"
139+
140+ - name : Check if Docker image exists
141+ run : |
142+ DOCKER_IMAGE="aztecprotocol/aztec:${{ steps.nightly-tag.outputs.nightly_tag }}"
143+ echo "Checking if Docker image exists: $DOCKER_IMAGE"
144+ if docker manifest inspect "$DOCKER_IMAGE" > /dev/null 2>&1; then
145+ echo "Docker image exists: $DOCKER_IMAGE"
146+ else
147+ echo "Docker image does not exist: $DOCKER_IMAGE"
148+ exit 1
149+ fi
150+
151+ - name : Run proving benchmarks
152+ timeout-minutes : 150
153+ env :
154+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
155+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
156+ GITHUB_TOKEN : ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
157+ BUILD_INSTANCE_SSH_KEY : ${{ secrets.BUILD_INSTANCE_SSH_KEY }}
158+ GCP_SA_KEY : ${{ secrets.GCP_SA_KEY }}
159+ GCP_PROJECT_ID : ${{ secrets.GCP_PROJECT_ID }}
160+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
161+ RUN_ID : ${{ github.run_id }}
162+ AWS_SHUTDOWN_TIME : 150
163+ NO_SPOT : 1
164+ run : |
165+ ./.github/ci3.sh network-proving-bench prove-n-tps-fake prove-n-tps-fake "aztecprotocol/aztec:${{ steps.nightly-tag.outputs.nightly_tag }}"
166+
167+ - name : Cleanup network resources
168+ if : always()
169+ env :
170+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
171+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
172+ GITHUB_TOKEN : ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
173+ BUILD_INSTANCE_SSH_KEY : ${{ secrets.BUILD_INSTANCE_SSH_KEY }}
174+ GCP_SA_KEY : ${{ secrets.GCP_SA_KEY }}
175+ GCP_PROJECT_ID : ${{ secrets.GCP_PROJECT_ID }}
176+ NO_SPOT : 1
177+ run : ./.github/ci3.sh network-teardown prove-n-tps-fake prove-n-tps-fake
178+
179+ - name : Download benchmarks
180+ if : always()
181+ env :
182+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
183+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
184+ run : |
185+ if ./ci.sh gh-spartan-proving-bench; then
186+ echo "ENABLE_DEPLOY_BENCH=1" >> $GITHUB_ENV
187+ fi
188+
189+ - name : Upload benchmarks
190+ if : always() && env.ENABLE_DEPLOY_BENCH == '1'
191+ uses : benchmark-action/github-action-benchmark@4de1bed97a47495fc4c5404952da0499e31f5c29
192+ with :
193+ name : Spartan
194+ benchmark-data-dir-path : " bench/next"
195+ tool : " customSmallerIsBetter"
196+ output-file-path : ./bench-out/bench.json
197+ github-token : ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
198+ auto-push : true
199+ ref : ${{ github.event.workflow_run.head_sha || github.sha }}
200+ alert-threshold : " 120%"
201+ comment-on-alert : false
202+ fail-on-alert : false
203+ max-items-in-chart : 100
204+
205+ - name : Notify Slack on failure
206+ if : failure() && github.event_name != 'workflow_dispatch'
207+ env :
208+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
209+ run : |
210+ if [ -n "${SLACK_BOT_TOKEN}" ]; then
211+ read -r -d '' data <<EOF || true
212+ {
213+ "channel": "#alerts-next-scenario",
214+ "text": "Nightly Proving Benchmarks FAILED (nightly tag ${{ steps.nightly-tag.outputs.nightly_tag }}): <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run>"
215+ }
216+ EOF
217+ curl -X POST https://slack.com/api/chat.postMessage \
218+ -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
219+ -H "Content-type: application/json" \
220+ --data "$data"
221+ fi
222+
223+ status :
224+ runs-on : ubuntu-latest
225+ needs : [benchmark, proving-benchmark]
226+ if : always()
227+ steps :
228+ - name : Check benchmark results
229+ run : |
230+ if [[ "${{ needs.benchmark.result }}" != "success" || "${{ needs.proving-benchmark.result }}" != "success" ]]; then
231+ echo "One or more benchmark jobs failed"
232+ echo "benchmark: ${{ needs.benchmark.result }}"
233+ echo "proving-benchmark: ${{ needs.proving-benchmark.result }}"
234+ exit 1
235+ fi
236+ echo "All benchmark jobs succeeded"
0 commit comments