Conversation
…staller out of the image
jelias2
force-pushed
the
op-conductor-ops/toolbox-packaging
branch
from
July 30, 2026 14:08
4c2477f to
bb4be8e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Packages
op-conductor-opsas a single-file PyInstaller executable per platform, published as GitHub release assets on anop-conductor-ops/v*tag push, so it can be installed viaop-toolbox(catalog entry lands separately ininfrastructure-services).Today the tool requires a Poetry checkout and Python 3.12. After this, operators get one self-contained binary with no host Python.
What's here
op-conductor-ops/entrypoint.py— freezable entry script (cli.pyuses relative imports, so it can't be frozen directly)pyinstallerdev dependency +just build-binary VERSION PLATFORMrecipe, so the CI build is reproducible locally.github/workflows/release-op-conductor-ops.yaml— builds darwin-arm64, darwin-amd64, linux-amd64, linux-arm64 natively (PyInstaller can't cross-compile); on a tag, assembles a checksums file and creates the releaseop-conductor-ops/Dockerfile—poetry install --only mainso the new build dep does not ship in the published imagedocs/superpowers/Version is derived entirely from the tag (
op-conductor-ops/v0.2.0→ assets namedop-conductor-ops-0.2.0-<platform>). Asset and checksum naming mirrorsnetchefso op-toolbox's existing pattern substitution works with no Go changes.Verification
The workflow runs on PRs touching
op-conductor-ops/**precisely so all four platform builds are exercised before any tag is pushed —workflow_dispatchonly works once the file is onmain. Please confirm the four build legs pass here before this merges; the runner labelsmacos-15-intelandubuntu-22.04-armare the main unknown. Locally, the darwin-arm64 binary is 15MB and runs--helpat exit 0.Notes for reviewers
.github/workflows/is owned by @ethereum-optimism/cloud-security, hence the review request. Actions are SHA-pinned, jobs are least-privilege, checkout usespersist-credentials: false, Poetry is pinned to 2.3.4 (the version that generated the lock).--notes-start-tag(auto notes will otherwise diff against an unrelatedproxyd/v*tag), and a--versionflag on the CLI (op-toolbox renames the asset to bareop-conductor-ops, so the build isn't identifiable at runtime).pyinstallercarries apython = ">=3.12,<3.14"marker because no release spans the project's full^3.12range. The workflow'ssetup-python 3.12pin is therefore load-bearing — on 3.14 Poetry silently skips it.Follow-ups, both gated on this merging: tag
op-conductor-ops/v0.2.0to cut the first release, then add theop-toolboxcatalog entry with the released checksums.