Skip to content

Migrate op-deployer Docker build to GitHub Actions #19208

@falcorocks

Description

@falcorocks

Migrate op-deployer Docker build to GitHub Actions

Summary

op-deployer is the last remaining Docker image still built on CircleCI. All other images were migrated to GitHub Actions in #18821. The op-deployer image was excluded because its build depends on pre-compiled Solidity contract artifacts passed via CircleCI workspace attachment, rather than being built atomically inside Docker.

A prior attempt to make the Docker build self-contained was made in #19088 but was reverted in #19106 due to performance issues on CircleCI runners.

Goal

Complete the migration of op-deployer to GitHub Actions and clean up the now-unnecessary CircleCI docker build infrastructure.

Current State

  • The op-deployer Docker build relies on a contracts-bedrock-build CircleCI job that compiles Solidity contracts and copies artifacts into op-deployer/pkg/deployer/artifacts/forge-artifacts via workspace attachment.
  • The docker-build CircleCI job then uses those pre-built artifacts via attach_workspace to build the image.
  • The Dockerfile op-deployer-builder stage and op-deployer-target stage assume the artifacts are already present in the build context.
  • All other images are built in GitHub Actions via branches.yaml and tags.yaml using docker-bake.hcl.

Tasks

1. Recover and adapt the atomic Docker build for op-deployer

Recover the work from #19088 that made op-deployer build its contract artifacts inside the Docker build itself (i.e., no external workspace attachment needed). The revert in #19106 was due to CircleCI runner constraints, which are no longer relevant since the build will run on GitHub Actions runners.

2. Verify feature parity

Ensure the atomically-built op-deployer image is functionally equivalent to the existing CircleCI-built image:

  • Embedded contract artifacts must match.
  • The forge binary must be present and at the correct version.
  • The op-deployer binary must behave identically.
  • Run the existing op-deployer test script against the new image.

3. Add op-deployer to GitHub Actions build matrix

Add op-deployer to the image matrix in branches.yaml and tags.yaml. The docker-bake.hcl target already exists.

4. Remove op-deployer from CircleCI docker builds

Remove the op-deployer entry from the CircleCI docker-build matrix in the main workflow, as well as any release/scheduled workflow entries that build the op-deployer Docker image.

5. Clean up deprecated CircleCI docker build infrastructure

Once op-deployer is removed, the docker-build job in CircleCI has no remaining consumers. Clean up:

  • The docker-build job definition and its associated steps.
  • Any workflow references to docker-build.
  • Any CircleCI-only docker build utilities or scripts that are no longer referenced.

Preserve the contracts-bedrock-build job

Acceptance Criteria

  • op-deployer Docker image builds successfully in GitHub Actions without any external artifact preparation step.
  • The new image passes all existing tests and matches the behavior of the CircleCI-built image.
  • op-deployer appears in the GitHub Actions build matrix for both branch and tag workflows.
  • CircleCI no longer builds any Docker images.
  • No orphaned CircleCI job definitions related to docker-build remain.
  • Builds continue to use the reusable factory docker workflow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions