From 980e859905ad62f533d1cb9843d697015638208c Mon Sep 17 00:00:00 2001
From: Minhyuk Kim <kimminhyuk1004@gmail.com>
Date: Wed, 25 Sep 2024 10:12:19 -0600
Subject: [PATCH] Fix .circleci/config to not use pnpm

---
 .circleci/config.yml | 115 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 94 insertions(+), 21 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2b8d6a10..57180322 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -9,23 +9,108 @@ parameters:
 workflows:
   main:
     jobs:
-      - pnpm-monorepo
+      - contracts-bedrock-build
       - go-mod-download-monorepo
       - go-mod-download-asterisc
       - op-program-riscv:
-          requires: ["go-mod-download-monorepo"]
+          requires:
+            - go-mod-download-monorepo
       - asterisc-prestate:
-          requires: ["go-mod-download-asterisc", "op-program-riscv", "pnpm-monorepo"]
+          requires:
+            - go-mod-download-asterisc
+            - op-program-riscv
+            - contracts-bedrock-build
       - devnet-allocs-including-asterisc:
-          requires: ["asterisc-prestate"]
+          requires:
+            - asterisc-prestate
       - op-e2e-asterisc-tests:
-          requires: ["devnet-allocs-including-asterisc"]
+          requires:
+            - devnet-allocs-including-asterisc
       - prestate-reproducibility:
           matrix:
             parameters:
               version: ["1.0.0", "1.1.0", "1.2.0"]
 
+commands:
+  checkout-with-monorepo:
+    steps:
+      - checkout
+      - run:
+          name: Fetch submodules for asterisc
+          # This will also fetch monorepo's submodule.
+          # Therefore we do not have to call `make submodules` at monorepo root
+          command: git submodule update --init --recursive
+  install-contracts-dependencies:
+    description: "Install the dependencies for the smart contracts"
+    steps:
+      - run:
+          command: just install
+          working_directory: packages/contracts-bedrock
+
 jobs:
+  contracts-bedrock-build:
+    docker:
+      - image: <<pipeline.parameters.ci_builder_image>>
+    resource_class: xlarge
+    parameters:
+      skip_pattern:
+        description: Glob pattern of tests to skip
+        type: string
+        default: ""
+    steps:
+      - checkout-with-monorepo
+      - run:
+          name: Check L1 geth version
+          command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false)
+          working_directory: rvsol/lib/optimism
+      - 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:
+          name: Print forge version
+          command: forge --version
+      - run:
+          name: Pull artifacts
+          command: bash scripts/ops/pull-artifacts.sh
+          working_directory: rvsol/lib/optimism/packages/contracts-bedrock
+      - run:
+          name: Build contracts
+          command: forge build --deny-warnings --skip <<parameters.skip_pattern>>
+          environment:
+            FOUNDRY_PROFILE: ci
+          working_directory: rvsol/lib/optimism/packages/contracts-bedrock
+      - run:
+          name: Generate default allocs
+          command: make devnet-allocs
+          working_directory: rvsol/lib/optimism
+      - save_cache:
+          name: Save Go modules cache
+          key: gomod-contracts-build-{{ checksum "go.sum" }}
+          paths:
+            - "/go/pkg/mod"
+      - save_cache:
+          name: Save Go build cache
+          key: golang-build-cache-contracts-build-{{ checksum "go.sum" }}
+          paths:
+            - "/root/.cache/go-build"
+      - persist_to_workspace:
+          root: "."
+          paths:
+            - "packages/contracts-bedrock/cache"
+            - "packages/contracts-bedrock/artifacts"
+            - "packages/contracts-bedrock/forge-artifacts"
+            - "packages/contracts-bedrock/deploy-config/devnetL1.json"
+            - "packages/contracts-bedrock/deployments/devnetL1"
+            - ".devnet"
+
   pnpm-monorepo:
     docker:
       - image: <<pipeline.parameters.ci_builder_image>>
@@ -104,10 +189,7 @@ jobs:
     docker:
       - image: <<pipeline.parameters.ci_builder_image>>
     steps:
-      - checkout
-      - run:
-          name: Fetch submodules for asterisc
-          command: git submodule update --init --recursive
+      - checkout-with-monorepo
       - restore_cache:
           key: gomod>-{{ checksum "rvsol/lib/optimism/go.sum" }}
           name: Restore Go modules cache for monorepo
@@ -169,10 +251,7 @@ jobs:
         description: The key of restore_cache and save_cache.
         type: string
     steps:
-      - checkout
-      - run:
-          name: Fetch submodules for asterisc
-          command: git submodule update --init --recursive
+      - checkout-with-monorepo
       - restore_cache:
           key: gomod-{{ checksum "rvsol/lib/optimism/go.sum" }}
           name: Restore Go modules cache
@@ -230,12 +309,9 @@ jobs:
     docker:
       - image: <<pipeline.parameters.ci_builder_image>>
     steps:
-      - checkout
+      - checkout-with-monorepo
       - attach_workspace:
           at: /tmp/workspace
-      - run:
-          name: Fetch submodules for asterisc
-          command: git submodule update --init --recursive
       - run:
           name: Forge build
           # We first build here to avoid `failed to read artifact source file` foundry error while running forge script
@@ -320,12 +396,9 @@ jobs:
     resource_class: xlarge
     parallelism: 4
     steps:
-      - checkout
+      - checkout-with-monorepo
       - attach_workspace:
           at: /tmp/workspace
-      - run:
-          name: Fetch submodules for asterisc
-          command: git submodule update --init --recursive
       - restore_cache:
           name: Restore Go modules cache for monorepo
           # this go mod cache will be populated from go-mod-download-monorepo step