Commit 707791b4 authored by smartcontracts's avatar smartcontracts Committed by GitHub

ci: selectively build contracts (#11824)

Updates the contracts-bedrock-tests job to only build the specific
tests that are being tested as part of the test split for that
job. Also merges the other contracts-bedrock-build with
build-devnet-allocs since this is a bottleneck now. Overall impact
is that CI time is now 7-10 minutes.
parent de869226
...@@ -189,10 +189,22 @@ jobs: ...@@ -189,10 +189,22 @@ jobs:
parameters: parameters:
build_command: build_command:
type: string type: string
default: just prebuild && forge build --deny-warnings default: |
just prebuild
forge build --deny-warnings
steps: steps:
- checkout - checkout
- install-contracts-dependencies - install-contracts-dependencies
- restore_cache:
name: Restore Go modules cache
keys:
- gomod-contracts-build-{{ checksum "go.sum" }}
- gomod-contracts-build-
- restore_cache:
name: Restore Go build cache
keys:
- golang-build-cache-contracts-build-{{ checksum "go.sum" }}
- golang-build-cache-contracts-build-
- run: - run:
name: Print forge version name: Print forge version
command: forge --version command: forge --version
...@@ -206,35 +218,6 @@ jobs: ...@@ -206,35 +218,6 @@ jobs:
environment: environment:
FOUNDRY_PROFILE: ci FOUNDRY_PROFILE: ci
working_directory: packages/contracts-bedrock working_directory: packages/contracts-bedrock
- persist_to_workspace:
root: "."
paths:
- ".git"
- "packages/contracts-bedrock/lib"
- "packages/contracts-bedrock/cache"
- "packages/contracts-bedrock/artifacts"
- "packages/contracts-bedrock/forge-artifacts"
- notify-failures-on-develop
build-devnet-allocs:
docker:
- image: <<pipeline.parameters.ci_builder_image>>
resource_class: xlarge
steps:
- checkout
- attach_workspace: { at: "." }
- install-contracts-dependencies
# - run: # temporarily disabled, to update ci-builder.
# name: "Check L1 geth version"
# command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false)
- restore_cache:
name: Restore Go modules cache
key: gomod-allocs-{{ checksum "go.sum" }}
- restore_cache:
name: Restore Go build cache
keys:
- golang-build-cache-allocs-{{ checksum "go.sum" }}
- golang-build-cache-allocs-
- run: - run:
name: Generate L2OO allocs name: Generate L2OO allocs
command: DEVNET_L2OO="true" make devnet-allocs command: DEVNET_L2OO="true" make devnet-allocs
...@@ -258,17 +241,20 @@ jobs: ...@@ -258,17 +241,20 @@ jobs:
command: make devnet-allocs command: make devnet-allocs
- save_cache: - save_cache:
name: Save Go modules cache name: Save Go modules cache
key: gomod-allocs-{{ checksum "go.sum" }} key: gomod-contracts-build-{{ checksum "go.sum" }}
paths: paths:
- "/go/pkg/mod" - "/go/pkg/mod"
- save_cache: - save_cache:
name: Save Go build cache name: Save Go build cache
key: golang-build-cache-allocs-{{ checksum "go.sum" }} key: golang-build-cache-contracts-build-{{ checksum "go.sum" }}
paths: paths:
- "/root/.cache/go-build" - "/root/.cache/go-build"
- persist_to_workspace: - persist_to_workspace:
root: "." root: "."
paths: paths:
- "packages/contracts-bedrock/cache"
- "packages/contracts-bedrock/artifacts"
- "packages/contracts-bedrock/forge-artifacts"
- ".devnet/allocs-l1.json" - ".devnet/allocs-l1.json"
- ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-delta.json"
- ".devnet/allocs-l2-ecotone.json" - ".devnet/allocs-l2-ecotone.json"
...@@ -565,7 +551,16 @@ jobs: ...@@ -565,7 +551,16 @@ jobs:
docker: docker:
- image: <<pipeline.parameters.ci_builder_image>> - image: <<pipeline.parameters.ci_builder_image>>
resource_class: xlarge resource_class: xlarge
parallelism: 4 parameters:
test_parallelism:
description: Number of test jobs to run in parallel
type: integer
default: 4
test_filter:
description: List of test files to run
type: string
default: find ./test -name "*.t.sol"
parallelism: <<parameters.test_parallelism>>
steps: steps:
- checkout - checkout
- attach_workspace: { at: "." } - attach_workspace: { at: "." }
...@@ -588,6 +583,10 @@ jobs: ...@@ -588,6 +583,10 @@ jobs:
name: print forge version name: print forge version
command: forge --version command: forge --version
working_directory: packages/contracts-bedrock working_directory: packages/contracts-bedrock
- run:
name: Pull artifacts
command: bash scripts/ops/pull-artifacts.sh
working_directory: packages/contracts-bedrock
- run: - run:
name: build go-ffi name: build go-ffi
command: just build-go-ffi command: just build-go-ffi
...@@ -596,7 +595,7 @@ jobs: ...@@ -596,7 +595,7 @@ jobs:
name: run tests name: run tests
command: | command: |
# Find all test files # Find all test files
TEST_FILES=$(find ./test -name "*.t.sol") TEST_FILES=$(<<parameters.test_filter>>)
# Split the tests by timings # Split the tests by timings
TEST_FILES=$(echo "$TEST_FILES" | circleci tests split --split-by=timings) TEST_FILES=$(echo "$TEST_FILES" | circleci tests split --split-by=timings)
# Strip the leading "./test/" from each file path # Strip the leading "./test/" from each file path
...@@ -621,6 +620,7 @@ jobs: ...@@ -621,6 +620,7 @@ jobs:
key: golang-build-cache-contracts-bedrock-tests-{{ checksum "go.sum" }} key: golang-build-cache-contracts-bedrock-tests-{{ checksum "go.sum" }}
paths: paths:
- "/root/.cache/go-build" - "/root/.cache/go-build"
- notify-failures-on-develop
contracts-bedrock-checks: contracts-bedrock-checks:
docker: docker:
...@@ -1566,25 +1566,26 @@ workflows: ...@@ -1566,25 +1566,26 @@ workflows:
equal: [ scheduled_pipeline, << pipeline.trigger_source >> ] equal: [ scheduled_pipeline, << pipeline.trigger_source >> ]
jobs: jobs:
- go-mod-download - go-mod-download
- contracts-bedrock-build
- contracts-bedrock-build: - contracts-bedrock-build:
name: contracts-bedrock-build-skip-tests name: contracts-bedrock-build
build_command: forge build --skip test build_command: |
forge build --skip test --skip scripts
forge build ./scripts/deploy/Deploy.s.sol
- contracts-bedrock-tests: - contracts-bedrock-tests:
requires: test_filter: find . -name "*.t.sol" -not -name "PreimageOracle.t.sol"
- contracts-bedrock-build test_parallelism: 4
- go-mod-download - contracts-bedrock-tests:
# PreimageOracle test is slow, run it separately to unblock CI
name: contracts-bedrock-tests-preimage-oracle
test_filter: find . -name "PreimageOracle.t.sol"
test_parallelism: 1
- contracts-bedrock-coverage - contracts-bedrock-coverage
- contracts-bedrock-checks: - contracts-bedrock-checks:
requires: requires:
- contracts-bedrock-build-skip-tests - contracts-bedrock-build
- contracts-bedrock-validate-spacers: - contracts-bedrock-validate-spacers:
requires: requires:
- contracts-bedrock-build-skip-tests - contracts-bedrock-build
- build-devnet-allocs:
requires:
- contracts-bedrock-build-skip-tests
- go-mod-download
- semgrep-scan - semgrep-scan
- go-lint: - go-lint:
requires: requires:
...@@ -1614,13 +1615,13 @@ workflows: ...@@ -1614,13 +1615,13 @@ workflows:
package_name: cannon package_name: cannon
on_changes: cannon,packages/contracts-bedrock/src/cannon on_changes: cannon,packages/contracts-bedrock/src/cannon
uses_artifacts: true uses_artifacts: true
requires: ["go-mod-download", "build-devnet-allocs"] requires: ["go-mod-download", "contracts-bedrock-build"]
- fuzz-golang: - fuzz-golang:
name: op-e2e-fuzz name: op-e2e-fuzz
package_name: op-e2e package_name: op-e2e
on_changes: op-e2e,packages/contracts-bedrock/src on_changes: op-e2e,packages/contracts-bedrock/src
uses_artifacts: true uses_artifacts: true
requires: ["go-mod-download", "build-devnet-allocs"] requires: ["go-mod-download", "contracts-bedrock-build"]
- go-test: - go-test:
name: op-batcher-tests name: op-batcher-tests
module: op-batcher module: op-batcher
...@@ -1671,7 +1672,7 @@ workflows: ...@@ -1671,7 +1672,7 @@ workflows:
parallelism: 4 parallelism: 4
requires: requires:
- go-mod-download - go-mod-download
- build-devnet-allocs - contracts-bedrock-build
- go-e2e-test: - go-e2e-test:
name: op-e2e-action-tests<< matrix.variant >> name: op-e2e-action-tests<< matrix.variant >>
matrix: matrix:
...@@ -1682,14 +1683,14 @@ workflows: ...@@ -1682,14 +1683,14 @@ workflows:
parallelism: 1 parallelism: 1
requires: requires:
- go-mod-download - go-mod-download
- build-devnet-allocs - contracts-bedrock-build
- go-e2e-test: - go-e2e-test:
name: op-e2e-fault-proof-tests name: op-e2e-fault-proof-tests
module: op-e2e module: op-e2e
target: test-fault-proofs target: test-fault-proofs
parallelism: 4 parallelism: 4
requires: requires:
- build-devnet-allocs - contracts-bedrock-build
- cannon-prestate - cannon-prestate
- op-program-compat: - op-program-compat:
requires: requires:
...@@ -1770,7 +1771,7 @@ workflows: ...@@ -1770,7 +1771,7 @@ workflows:
parameters: parameters:
variant: ["default", "altda", "altda-generic"] variant: ["default", "altda", "altda-generic"]
requires: requires:
- build-devnet-allocs - contracts-bedrock-build
- op-batcher-docker-build - op-batcher-docker-build
- op-proposer-docker-build - op-proposer-docker-build
- op-node-docker-build - op-node-docker-build
...@@ -1781,7 +1782,7 @@ workflows: ...@@ -1781,7 +1782,7 @@ workflows:
- check-generated-mocks-op-service - check-generated-mocks-op-service
- cannon-go-lint-and-test: - cannon-go-lint-and-test:
requires: requires:
- build-devnet-allocs - contracts-bedrock-build
- cannon-build-test-vectors - cannon-build-test-vectors
- shellcheck/check: - shellcheck/check:
name: shell-check name: shell-check
...@@ -2049,13 +2050,7 @@ workflows: ...@@ -2049,13 +2050,7 @@ workflows:
- cannon-prestate: - cannon-prestate:
requires: requires:
- go-mod-download - go-mod-download
- contracts-bedrock-build: - contracts-bedrock-build
requires:
- go-mod-download
- build-devnet-allocs:
name: build-devnet-allocs
requires:
- contracts-bedrock-build
- go-e2e-test: - go-e2e-test:
name: op-e2e-cannon-tests name: op-e2e-cannon-tests
module: op-e2e module: op-e2e
...@@ -2064,7 +2059,7 @@ workflows: ...@@ -2064,7 +2059,7 @@ workflows:
notify: true notify: true
mentions: "@proofs-squad" mentions: "@proofs-squad"
requires: requires:
- build-devnet-allocs - contracts-bedrock-build
- cannon-prestate - cannon-prestate
context: context:
- slack - slack
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment