Skip to content

fix(ci): setup subaction, cache submodules in GA, fix concurrency #2375

fix(ci): setup subaction, cache submodules in GA, fix concurrency

fix(ci): setup subaction, cache submodules in GA, fix concurrency #2375

Workflow file for this run

name: Earthly CI
on:
push:
branches: [master]
pull_request: {}
workflow_dispatch: {}
jobs:
# there's a lot of x86 tasks - let's split out the build step
build-x86:
runs-on: ubuntu-latest
outputs:
e2e_list: ${{ steps.e2e_list.outputs.list }}
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
# cancel if reran on same PR if exists, otherwise if on same commit
concurrency:
group: build-${{ github.ref_name == 'master' && github.run_id || github.ref_name }}-x86
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# we check out submodules in ci-setup-action
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup
uses: ./.github/ci-setup-action
with:
dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}
github_actor: ${{ github.actor }}
- name: Build
working-directory: ./yarn-project
run: |
# push to registry
earthly-cloud build x86 --push +build-end-to-end
# We base our e2e list used in e2e-x86 off the targets in ./yarn-project/end-to-end
# (Note ARM uses just 2 tests as a smoketest)
- id: e2e_list
working-directory: ./yarn-project/end-to-end
run: |
echo "list=$(earthly ls | grep -v '+base' | sed 's/+//' | jq -R . | jq -cs .)" >> $GITHUB_OUTPUT
# all the end-to-end integration tests for aztec
e2e-arm:
runs-on: ubuntu-latest
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
strategy:
fail-fast: false
matrix:
test:
- e2e-card-game
- e2e-crowdfunding-and-claim
# cancel if reran on same PR if exists, otherwise if on same commit
concurrency:
group: ${{ matrix.test }}-${{ github.ref_name == 'master' && github.run_id|| github.ref_name }}-arm
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# we check out submodules in ci-setup-action
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup
uses: ./.github/ci-setup-action
with:
dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}
github_actor: ${{ github.actor }}
- name: Build
working-directory: ./yarn-project/end-to-end/
# We don't do much on arm, just run it on their builder
run:
# Flags:
# - e2e_mode=build to get images from a local build, not a dockerhub registry strategy
earthly-cloud build arm --no-output +${{ matrix.test }} --e2e_mode=build
# all the end-to-end integration tests for aztec
e2e-x86:
needs: build-x86
runs-on: ubuntu-latest
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
strategy:
fail-fast: false
matrix:
test: ${{ fromJson( needs.build-x86.outputs.e2e_list )}}
# cancel if reran on same PR if exists, otherwise if on same commit
concurrency:
group: ${{ matrix.test }}-${{ github.ref_name == 'master' && github.run_id || github.ref_name }}-x86
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# we check out submodules in ci-setup-action
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup
uses: ./.github/ci-setup-action
with:
dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}
github_actor: ${{ github.actor }}
- name: Pull E2E Images
working-directory: ./barretenberg/cpp/
run: |
docker pull aztecprotocol/aztec-cache:$(git rev-parse HEAD)
docker pull aztecprotocol/end-to-end-cache:$(git rev-parse HEAD)
docker tag aztecprotocol/aztec-cache:$(git rev-parse HEAD) aztecprotocol/aztec:latest
docker tag aztecprotocol/end-to-end-cache:$(git rev-parse HEAD) aztecprotocol/end-to-end:latest
- name: Test
working-directory: ./yarn-project/end-to-end/
run: |
# we blank earthly token just to be sure this is a pure local run
EARTHLY_TOKEN="" earthly -P --no-output +${{ matrix.test }} --e2e_mode=cache
# barretenberg (prover) native tests
bb-native-tests:
runs-on: ubuntu-latest
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
strategy:
fail-fast: false
matrix:
environment: [x86]
# pending fix for intermittent test
# environment: [x86, arm]
# cancel if reran on same PR if exists, otherwise if on same commit
concurrency:
group: bb-native-tests-${{ github.ref_name == 'master' && github.run_id || github.ref_name }}-${{ matrix.environment }}
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# we check out submodules in ci-setup-action
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup
uses: ./.github/ci-setup-action
with:
dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}
github_actor: ${{ github.actor }}
- name: Test
working-directory: ./barretenberg/cpp/
run: |
earthly-cloud test ${{ matrix.environment }} --no-output +test
# All benchmarks, purposefully ran sequential on a machine
# they should use parallelism within the benchmark, but only one thing should run at a time
# for accurate results
# We don't depend on 'build' as we use a different runner and will build components on the fist step that uses them.
bench:
runs-on: ubuntu-latest
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
# cancel if reran on same PR if exists, otherwise if on same commit
concurrency:
# We use a looser concurrency limit here, but we place a lock
# in the actual step action so that only one bench takes place
group: bench-${{ github.ref_name == 'master' && github.run_id || github.ref_name }}-x86
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# we check out submodules in ci-setup-action
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup
uses: ./.github/ci-setup-action
with:
dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}
github_actor: ${{ github.actor }}
- name: Build and Push Binaries
working-directory: ./barretenberg/cpp/
run: earthly-cloud build x86 --push +bench-base
# Only allow one person to use this runner
# The reason is that as detailed in https://github.com/ben-z/gh-action-mutex
# things do not become 'pending' in github actions, and instead just cancel one another
- name: Set up mutex
uses: ben-z/gh-action-mutex@v1.0.0-alpha.9
with:
branch: gh-action-mutex-bench
# Use bench_mode=cache to read the pushed build above
- name: Client IVC Bench
working-directory: ./barretenberg/cpp/
run: earthly-cloud bench x86 --no-output +bench-client-ivc --bench_mode=cache
- name: Ultrahonk Bench
working-directory: ./barretenberg/cpp/
run: earthly-cloud bench x86 --no-output +bench-ultra-honk --bench_mode=cache