Skip to content

Commit

Permalink
feat: migrate boxes to GA and Earthly (#6076)
Browse files Browse the repository at this point in the history
This PR migrates the boxes build & test jobs from CircleCI to Earthly and Github actions.
  • Loading branch information
alexghr committed May 1, 2024
1 parent 4395855 commit 4a49f9d
Show file tree
Hide file tree
Showing 12 changed files with 234 additions and 73 deletions.
52 changes: 0 additions & 52 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -431,42 +431,6 @@ jobs:
command: build aztec
aztec_manifest_key: aztec

boxes:
docker:
- image: aztecprotocol/alpine-build-image
resource_class: small
steps:
- *checkout
- *setup_env
- run:
name: "Build"
command: cond_spot_run_build boxes 4
aztec_manifest_key: boxes

boxes-vanilla:
docker:
- image: aztecprotocol/alpine-build-image
resource_class: small
steps:
- *checkout
- *setup_env
- run:
name: "Test"
command: cond_spot_run_compose boxes 4 ./docker-compose.yml BOX=vanilla
aztec_manifest_key: boxes

boxes-react:
docker:
- image: aztecprotocol/alpine-build-image
resource_class: small
steps:
- *checkout
- *setup_env
- run:
name: "Test"
command: cond_spot_run_compose boxes 4 ./docker-compose.yml BOX=react
aztec_manifest_key: boxes

end-to-end:
machine:
image: default
Expand Down Expand Up @@ -694,20 +658,6 @@ workflows:
# Artifacts
- aztec-package: *defaults_yarn_project

# Boxes.
- boxes:
requires:
- aztec-package
<<: *defaults
- boxes-vanilla:
requires:
- boxes
<<: *defaults
- boxes-react:
requires:
- boxes
<<: *defaults

# End to end tests.
- e2e-join:
requires:
Expand All @@ -727,8 +677,6 @@ workflows:
- barretenberg-acir-tests-bb
- barretenberg-acir-tests-bb-sol
- barretenberg-docs
- boxes-vanilla
- boxes-react
- noir-packages-tests
- prover-client-test
- e2e-join
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,52 @@ jobs:
timeout-minutes: 15
run: earthly-ci --no-output +bench-ultra-honk --bench_mode=cache

boxes:
needs: build
runs-on: ${{ inputs.username || github.actor }}-x86
steps:
- {
uses: actions/checkout@v4,
with: { ref: "${{ github.event.pull_request.head.sha }}" },
}
- uses: ./.github/ci-setup-action
with:
dockerhub_password: "${{ secrets.DOCKERHUB_PASSWORD }}"
# must be globally unique for build x runner
concurrency_key: boxes-${{ inputs.username || github.actor }}-x86-${{ matrix.test }}
- name: Build
working-directory: ./boxes
timeout-minutes: 10
run: earthly-ci +export-boxes

boxes-test:
needs: boxes
runs-on: ${{ inputs.username || github.actor }}-x86
strategy:
fail-fast: false
matrix:
box: [vanilla, react]
browser: [chromium, webkit, firefox]
steps:
- {
uses: actions/checkout@v4,
with: { ref: "${{ github.event.pull_request.head.sha }}" },
}
- uses: ./.github/ci-setup-action
with:
dockerhub_password: "${{ secrets.DOCKERHUB_PASSWORD }}"
# must be globally unique for build x runner
concurrency_key: boxes-${{ inputs.username || github.actor }}-x86-${{ matrix.test }}
- name: Box test
working-directory: ./boxes
timeout-minutes: 10
run: earthly-ci -P --no-output +test --box=${{ matrix.box }} --browser=${{ matrix.browser }} --mode=cache

merge-check:
runs-on: ubuntu-latest
needs:
- e2e
- boxes-test
- bb-native-tests
- bb-bench
- yarn-project-formatting
Expand Down
46 changes: 46 additions & 0 deletions boxes/.earthlyignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Must include the .gitignore for all child projects as this is used by Earthly

# Note due to how we use Eartlhy each .gitignore MUST accompany any earthfile that might actually copy these artifacts

**/Earthfile
**/Readme.md
**/README.md
**/Dockerfile*
\*\*/docker-compose*.yml

# root .gitignore contents

dest
node_modules
.cache
scripts/.earthly
.pnp.cjs
.pnp.loader.mjs
build/
.idea
cmake-build-debug
.terraform\*
.bootstrapped
.tsbuildinfo

.graphite\*
.DS_Store

\*_/_.dockerignore

# .gitignore contents:

.yarn/\*
!.yarn/releases

node_modules
dist
artifacts
boxes/_/src/contracts/target
boxes/_/src/contracts/log

/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
codegenCache.json
128 changes: 120 additions & 8 deletions boxes/Earthfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,130 @@
VERSION 0.8
# Produces a container that can be run to test a specific box. See docker-compose.yml.

build:
# We need yarn. Start fresh container.
deps:
LOCALLY
LET packages = $(git ls-files "**/package*.json" package*.json)
LET tsconfigs = $(git ls-files "**/tsconfig*.json" tsconfig*.json)
FROM node:18.19.0
RUN apt update && apt install netcat-openbsd
COPY ../yarn-project+build/build /usr/src

# copy the aztec yarn workspace, needed to resolve portal dependencies
COPY ../yarn-project+build-dev/usr/src /usr/src

WORKDIR /usr/src/boxes

COPY --dir .yarn .yarnrc.yml yarn.lock .
FOR file IN $packages
COPY $file $file
END
RUN yarn install --immutable
RUN yarn install-browsers
FOR file IN $tsconfigs
COPY $file $file
END

build:
FROM +deps

COPY ../noir/+nargo/nargo /usr/src/noir/noir-repo/target/release/nargo
COPY ../noir-projects/+build/aztec-nr /usr/src/noir-projects/aztec-nr
COPY ../noir-projects/+build/noir-protocol-circuits/crates/types /usr/src/noir-projects/noir-protocol-circuits/crates/types

WORKDIR /usr/src/boxes
COPY . .

ENV AZTEC_NARGO=/usr/src/noir/noir-repo/target/release/nargo
ENV AZTEC_BUILDER=/usr/src/yarn-project/builder/aztec-builder-dest
RUN yarn && yarn build
RUN npx -y playwright@1.42 install --with-deps
COPY . .
RUN yarn build

boxes:
FROM +build
ENTRYPOINT ["/bin/sh", "-c"]

BOX_TEST_LOCAL:
FUNCTION
ARG box
ARG browser
ARG compose_file=./docker-compose.yml
ARG debug="aztec:*"
LOCALLY
ENV BOX=$box
ENV BROWSER=$browser
ENV DEBUG=$debug
ENV CI=1
WITH DOCKER \
--load aztecprotocol/aztec:latest=../yarn-project/+aztec \
--load aztecprotocol/boxes:latest=+boxes
RUN docker compose -f $compose_file up --exit-code-from=boxes --force-recreate
END

# run locally and take from cache, used for our mainly x86 jobs
BOX_TEST_FROM_CACHE:
FUNCTION
ARG box
ARG browser
ARG compose_file=./docker-compose.yml
ARG debug="aztec:*"
ARG aztec_docker_tag
LOCALLY
ENV BOX=$box
ENV BROWSER=$browser
ENV DEBUG=$debug
ENV AZTEC_DOCKER_TAG=$aztec_docker_tag
ENV CI=1
# need a different project name for each to run in parallel
LET project_name=$box_$browser
IF docker compose > /dev/null 2>&1
LET CMD="docker compose"
ELSE
LET CMD="docker-compose"
END
# In CI we do not use WITH DOCKER as we have had issues with earthly copying big images
RUN $CMD -p $project_name -f $compose_file up --exit-code-from=boxes --force-recreate

BOX_TEST_FROM_BUILD:
FUNCTION
ARG box
ARG browser
ARG compose_file=./docker-compose.yml
ARG debug="aztec:*"
FROM earthly/dind:alpine-3.19-docker-25.0.2-r0
ENV BOX=$box
ENV BROWSER=$browser
ENV DEBUG=$debug
ENV CI=1
COPY $compose_file $compose_file
# For ARM, we do use WITH DOCKER as we don't have many e2e tests, but note BOX_TEST_FROM_CACHE
WITH DOCKER \
--load aztecprotocol/aztec:latest=../yarn-project/+aztec \
--load aztecprotocol/boxes:latest=+boxes
# Run our docker compose, ending whenever sandbox ends, filtering out noisy eth_getLogs
RUN docker compose -f $compose_file up --exit-code-from=boxes --force-recreate
END

BOX_TEST:
FUNCTION
ARG box
ARG browser
ARG compose_file=./docker-compose.yml
ARG mode=local
ARG debug="aztec:*"
LOCALLY
IF [ $mode = local ]
DO +BOX_TEST_LOCAL --box=$box --browser=$browser --compose_file=$compose_file --debug=$debug
ELSE IF [ $mode = cache ]
DO +BOX_TEST_FROM_CACHE --box=$box --browser=$browser --aztec_docker_tag=$(git rev-parse HEAD) --compose_file=$compose_file --debug=$debug
ELSE
DO +BOX_TEST_FROM_BUILD --box=$box --browser=$browser --compose_file=$compose_file --debug=$debug
END

test:
ARG box=vanilla
ARG browser=chromium
ARG mode=local
DO +BOX_TEST --box=$box --browser=$browser --mode=$mode

# for use with mode=cache
export-boxes:
BUILD +boxes
ARG EARTHLY_GIT_HASH
FROM +boxes
SAVE IMAGE aztecprotocol/boxes:$EARTHLY_GIT_HASH
2 changes: 1 addition & 1 deletion boxes/boxes/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"type": "module",
"main": "./dist/index.js",
"scripts": {
"compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile",
"compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile --silence-warnings",
"codegen": "${AZTEC_BUILDER:-aztec-builder} codegen src/contracts/target -o artifacts",
"clean": "rm -rf ./dist .tsbuildinfo ./artifacts ./src/contracts/target",
"prep": "yarn clean && yarn compile && yarn codegen",
Expand Down
9 changes: 4 additions & 5 deletions boxes/boxes/react/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ export default defineConfig({
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

// {
// name: 'webkit',
// use: { ...devices['Desktop Safari'] },
// },
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
webServer: {
command: 'yarn serve',
Expand Down
2 changes: 1 addition & 1 deletion boxes/boxes/vanilla/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"version": "0.1.0",
"type": "module",
"scripts": {
"compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile",
"compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile --silence-warnings",
"codegen": "${AZTEC_BUILDER:-aztec-builder} codegen src/contracts/target -o artifacts",
"clean": "rm -rf ./dest .tsbuildinfo ./artifacts ./src/contracts/target",
"prep": "yarn clean && yarn compile && yarn codegen && tsc -b",
Expand Down
1 change: 0 additions & 1 deletion boxes/boxes/vanilla/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export default defineConfig({
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
Expand Down
14 changes: 10 additions & 4 deletions boxes/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ services:
command: "'anvil --silent -p 8545 --host 0.0.0.0 --chain-id 31337'"

aztec:
image: aztecprotocol/aztec
image: aztecprotocol/aztec:${AZTEC_DOCKER_TAG:-latest}
environment:
ETHEREUM_HOST: http://ethereum:8545
CHAIN_ID: 31337
Expand All @@ -15,13 +15,14 @@ services:
WS_BLOCK_CHECK_INTERVAL_MS: 50
PXE_BLOCK_POLLING_INTERVAL_MS: 50
ARCHIVER_VIEM_POLLING_INTERVAL_MS: 500
depends_on:
- ethereum

boxes:
image: aztecprotocol/boxes
image: aztecprotocol/boxes:${AZTEC_DOCKER_TAG:-latest}
entrypoint: >
sh -c '
while ! nc -z aztec 8080; do sleep 1; done;
yarn workspace @aztec/$BOX test
yarn workspace @aztec/$BOX test --project=$BROWSER
'
environment:
DEBUG: "aztec:*"
Expand All @@ -30,3 +31,8 @@ services:
CHAIN_ID: 31337
PXE_URL: http://aztec:8080
BOX: ${BOX:-vanilla}
CI: ${CI:-}
BROWSER: ${BROWSER:-chromium}
depends_on:
aztec:
condition: service_healthy
Loading

0 comments on commit 4a49f9d

Please sign in to comment.