diff --git a/.github/actions/install-deps/action.yml b/.github/actions/install-deps/action.yml index bc1f843..96c434d 100644 --- a/.github/actions/install-deps/action.yml +++ b/.github/actions/install-deps/action.yml @@ -23,9 +23,9 @@ runs: distribution: 'temurin' java-version: '25' - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 - if: contains(inputs.repository, 'lodestar') || contains(inputs.repository, 'ethereumjs') + if: contains(inputs.repository, 'lodestar') with: - node-version: 20 + node-version: 24 check-latest: true - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 if: contains(inputs.repository, 'prysm') diff --git a/.github/workflows/build-push-ethereumjs.yml b/.github/workflows/build-push-ethereumjs.yml deleted file mode 100644 index 7e2414f..0000000 --- a/.github/workflows/build-push-ethereumjs.yml +++ /dev/null @@ -1,121 +0,0 @@ -name: Build ethereumjs docker image -run-name: "${{ inputs.repository }}@${{ inputs.ref }}${{ inputs.correlation_id && format(' [{0}]', inputs.correlation_id) || '' }}" - -on: - workflow_dispatch: - inputs: - repository: - description: The source ethereumjs repository to build from - default: ethereumjs/ethereumjs-monorepo - type: string - required: true - ref: - description: The branch, tag or SHA to checkout and build from - default: master - type: string - required: true - docker_tag: - description: Override target docker tag (defaults to the above source ref if left blank) - type: string - required: false - correlation_id: - description: Optional correlation ID passed through to the run name (used by integrations) - type: string - required: false - -jobs: - prepare: - runs-on: ubuntu-latest - outputs: - platforms: ${{ steps.setup.outputs.platforms }} - target_tag: ${{ steps.tag.outputs.docker_tag }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Prepare Matrix - id: setup - uses: ./.github/actions/prepare - with: - client: 'ethereumjs' - repository: ${{ inputs.repository }} - ref: ${{ inputs.ref }} - - name: Generate target tag - id: tag - uses: ./.github/actions/docker-tag - with: - input: ${{ inputs.docker_tag || inputs.ref }} - repository: ${{ inputs.repository }} - upstream_repository: ethereumjs/ethereumjs-monorepo - docker_tag: ${{ inputs.docker_tag }} - deploy: - needs: - - prepare - runs-on: ${{ matrix.runner }} - continue-on-error: true - strategy: - matrix: - include: ${{fromJson(needs.prepare.outputs.platforms)}} - outputs: - git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: ./.github/actions/install-deps - with: - repository: ${{ inputs.repository }} - - uses: ./.github/actions/deploy - id: deploy - with: - source_repository: ${{ inputs.repository }} - source_ref: ${{ inputs.ref }} - target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} - target_repository: ethpandaops/ethereumjs - target_dockerfile: ./ethereumjs/Dockerfile - platform: ${{ matrix.platform }} - - DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" - DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" - MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" - GOPROXY: "${{ vars.GOPROXY }}" - HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" - HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" - harbor_registry: ${{ vars.HARBOR_REGISTRY }} - - # This step captures the git commit hash from the deploy action for job output - - name: Set job output - id: set_output - run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT - shell: bash - manifest: - needs: - - prepare - - deploy - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: ./.github/actions/manifest - with: - source_repository: ${{ inputs.repository }} - source_ref: ${{ inputs.ref }} - target_tag: ${{ needs.prepare.outputs.target_tag }} - target_repository: ethpandaops/ethereumjs - platforms: ${{ needs.prepare.outputs.platforms }} - harbor_registry: ${{ vars.HARBOR_REGISTRY }} - HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" - HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" - git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} - - DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" - DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" - notify: - name: Discord Notification - runs-on: ubuntu-latest - needs: - - prepare - - deploy - - manifest - if: failure() - steps: - - name: Notify - uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 - with: - github-token: ${{ secrets.github_token }} - discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} diff --git a/.github/workflows/build-push-goomy-blob.yml b/.github/workflows/build-push-goomy-blob.yml deleted file mode 100644 index 766ddc9..0000000 --- a/.github/workflows/build-push-goomy-blob.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Build goomy-blob docker image -run-name: "${{ inputs.repository }}@${{ inputs.ref }}${{ inputs.correlation_id && format(' [{0}]', inputs.correlation_id) || '' }}" - -on: - workflow_dispatch: - inputs: - repository: - description: The source goomy-blob repository to build from - default: ethpandaops/goomy-blob - type: string - required: true - ref: - description: The branch, tag or SHA to checkout and build from - default: master - type: string - required: true - docker_tag: - description: Override target docker tag (defaults to the above source ref if left blank) - type: string - required: false - correlation_id: - description: Optional correlation ID passed through to the run name (used by integrations) - type: string - required: false - -jobs: - prepare: - runs-on: ubuntu-latest - outputs: - platforms: ${{ steps.setup.outputs.platforms }} - target_tag: ${{ steps.tag.outputs.docker_tag }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Prepare Matrix - id: setup - uses: ./.github/actions/prepare - with: - client: 'goomy-blob' - repository: ${{ inputs.repository }} - ref: ${{ inputs.ref }} - - name: Generate target tag - id: tag - uses: ./.github/actions/docker-tag - with: - input: ${{ inputs.docker_tag || inputs.ref }} - repository: ${{ inputs.repository }} - upstream_repository: ethpandaops/goomy-blob - docker_tag: ${{ inputs.docker_tag }} - deploy: - needs: - - prepare - runs-on: ${{ matrix.runner }} - continue-on-error: true - strategy: - matrix: - include: ${{fromJson(needs.prepare.outputs.platforms)}} - outputs: - git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: ./.github/actions/install-deps - with: - repository: ${{ inputs.repository }} - - uses: ./.github/actions/deploy - id: deploy - with: - source_repository: ${{ inputs.repository }} - source_ref: ${{ inputs.ref }} - target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} - target_repository: ethpandaops/goomy-blob - platform: ${{ matrix.platform }} - - DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" - DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" - MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" - GOPROXY: "${{ vars.GOPROXY }}" - HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" - HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" - harbor_registry: ${{ vars.HARBOR_REGISTRY }} - - # This step captures the git commit hash from the deploy action for job output - - name: Set job output - id: set_output - run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT - shell: bash - manifest: - needs: - - prepare - - deploy - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: ./.github/actions/manifest - with: - source_repository: ${{ inputs.repository }} - source_ref: ${{ inputs.ref }} - target_tag: ${{ needs.prepare.outputs.target_tag }} - target_repository: ethpandaops/goomy-blob - platforms: ${{ needs.prepare.outputs.platforms }} - harbor_registry: ${{ vars.HARBOR_REGISTRY }} - HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" - HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" - git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} - DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" - DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" - notify: - name: Discord Notification - runs-on: ubuntu-latest - needs: - - prepare - - deploy - - manifest - if: failure() - steps: - - name: Notify - uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 - with: - github-token: ${{ secrets.github_token }} - discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} diff --git a/README.md b/README.md index 6907574..88cd679 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Run the *Build **client*** workflow; - [Build Dummy-EL](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-dummy-el.yml) [[source](https://github.com/ethpandaops/dummy-el)] - [Build Eleel](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-eleel.yml) [[source](https://github.com/sigp/eleel)] - [Build Erigon](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-erigon.yml) [[source](https://github.com/ledgerwatch/erigon)] -- [Build EthereumJS](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-ethereumjs.yml) [[source](https://github.com/ethereumjs/ethereumjs-monorepo)] - [Build Ethrex](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-ethrex.yml) [[source](https://github.com/lambdaclass/ethrex)] - [Build Geth](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-geth.yml) [[source](https://github.com/ethereum/go-ethereum)] - [Build Lighthouse](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-lighthouse.yml) [[source](https://github.com/sigp/lighthouse)] @@ -32,7 +31,6 @@ Run the *Build **tooling*** workflow; - [Build consesnus-monitor](https://github.com/ethpandaops/eth-client-docker-image-builder/blob/master/.github/workflows/build-push-consensus-monitor.yml) [[source](https://github.com/ralexstokes/ethereum_consensus_monitor)] - [Build execution-monitor](https://github.com/ethpandaops/eth-client-docker-image-builder/blob/master/.github/workflows/build-push-execution-monitor.yml) [[source](https://github.com/ethereum/nodemonitor)] - [Build beacon-metrics-gazer](https://github.com/ethpandaops/eth-client-docker-image-builder/blob/master/.github/workflows/build-push-beacon-metrics-gazer.yml) [[source](https://github.com/dapplion/beacon-metrics-gazer)] -- [Build goomy-blob](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-goomy-blob.yaml) [[source](https://github.com/ethpandaops/goomy-blob)] - [Build ethereum-genesis-generator](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-genesis-generator.yml) [[source](https://github.com/ethpandaops/ethereum-genesis-generator)] - [Build mev-rs](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-mev-rs.yml) [[source](https://github.com/ralexstokes/mev-rs)] - [Build reth-rbuilder](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-reth-rbuilder.yml) [[source](https://github.com/flashbots/rbuilder)] diff --git a/branches.yaml b/branches.yaml index d365d05..a70911b 100644 --- a/branches.yaml +++ b/branches.yaml @@ -6,236 +6,217 @@ # Tag override: use ":" to build from but publish as . # Example: "prototype/focil:focil" builds the prototype/focil branch and tags it "focil". # Without an override, slashes in branch names are replaced with hyphens for the tag. - -besu: - branches: - - main - - performance - - bal-devnet-3 - - bal-devnet-7 - - focil - - glamsterdam-devnet-4 - -caplin: - branches: - - main - -erigon: - branches: - - main - - performance - - bal-devnet-3 - - bal-devnet-7 - - glamsterdam-devnet-4 - -ethereumjs: - branches: - - master - - stable - -geth: - branches: - - master - - performance - - bal-devnet-3 - - bal-devnet-7 - - glamsterdam-devnet-4 - - alt_repos: - MariusVanDerWijden/go-ethereum: - - bad-block-generator - - eip-7904 - - has-blobs - MarcoPolo/go-ethereum: - - getBlobsV3 - -reth: - branches: - - main - - bal-devnet-3 - - bal-devnet-7 - - glamsterdam-devnet-4 - alt_repos: - PelleKrab/reth: - - focil_impl - -lighthouse: - branches: - - stable - - unstable - - epbs-devnet-1 - - glamsterdam-devnet-4 - - focil - alt_repos: - eth-act/lighthouse: - - optional-proofs - dknopik/lighthouse: - - partial-columns - -vibehouse: - branches: - - main - -lodestar: - branches: - - stable - - unstable - - focil - - epbs-devnet-1 - - optional-proofs - - glamsterdam-devnet-4 - -nethermind: - branches: - - master - - performance - - bal-devnet-3 - - bal-devnet-7 - - eip-7904 - - glamsterdam-devnet-4 - -nimbus: - branches: - - unstable - - stable - - optional-proofs - - glamsterdam-devnet-4 - -nimbus-eth1: - branches: - - master +# +# Each top-level key is a group (el, cl, mev, zk, tooling, other, lean). +# A group's `common_branches:` list is merged into every client in that group +# (set `skip_common: true` on a client to opt out). + +# ============================================================ +# Execution Layer (EL) +# ============================================================ +el: + common_branches: - bal-devnet-3 - bal-devnet-7 - glamsterdam-devnet-4 - -prysm: - branches: - - develop - - master - - rebased-partial-columns - - prysm/partial-cells-current - - optional-proofs + clients: + besu: + branches: + - main + - performance + - focil + erigon: + branches: + - main + - performance + ethrex: + branches: + - main + - bal-devnet-4 + - focil + geth: + branches: + - master + - performance + alt_repos: + MariusVanDerWijden/go-ethereum: + - bad-block-generator + - eip-7904 + - has-blobs + MarcoPolo/go-ethereum: + - getBlobsV3 + nethermind: + branches: + - master + - performance + - eip-7904 + nimbus-eth1: + branches: + - master + reth: + branches: + - main + alt_repos: + PelleKrab/reth: + - focil_impl + +# ============================================================ +# Consensus Layer (CL) +# ============================================================ +cl: + common_branches: - glamsterdam-devnet-4 - alt_repos: - MarcoPolo/prysm: - - partial-columns - developeruche/prysm: - - poc/optional-proofs - bharath-123/prysm: - - buildoor-apis - -teku: - branches: - - master - - optional-proofs - - glamsterdam-devnet-4 - - prototype/focil:focil - -eleel: - branches: - - main - -dummy-el: - branches: - - master - -flashbots-builder: - branches: - - main - -tx-fuzz: - branches: - - master - -goomy-blob: - branches: - - master - -grandine: - branches: - - develop - - master - - glamsterdam-devnet-4 - -consensoor: - branches: - - main - -mev-rs: - branches: - - main - -reth-rbuilder: - branches: - - develop - -rustic-builder: - branches: - - main - -mev-boost: - branches: - - develop - -mev-boost-relay: - branches: - - main - -ethrex: - branches: - - main - - bal-devnet-3 - - bal-devnet-4 - - bal-devnet-7 - - glamsterdam-devnet-4 - - focil - -eth-das-guardian: - branches: - - main - -# Commented out in config.yaml -# goevmlab: -# branches: ["master"] - -syncoor: - branches: - - master - -zeam: - branches: - - main - -ream: - branches: - - master - -meth: - custom_configs: - - name: "bad-iszero" - source_patch: "meth/bad-iszero.patch" - ref: "master" - tag: "master-bad-iszero" - -nevermind: - custom_configs: - - name: "bad-iszero" - source_patch: "nevermind/bad-iszero.patch" - ref: "master" - tag: "master-bad-iszero" - -ere-server-zisk: - branches: - - master - -zkboost: - branches: - - master - -fuzztools: - branches: - - main - -slashoor: - branches: - - master + clients: + caplin: + skip_common: true + branches: + - main + consensoor: + skip_common: true + branches: + - main + grandine: + branches: + - develop + - master + lighthouse: + branches: + - stable + - unstable + - epbs-devnet-1 + - focil + alt_repos: + eth-act/lighthouse: + - optional-proofs + dknopik/lighthouse: + - partial-columns + lodestar: + branches: + - stable + - unstable + - focil + - epbs-devnet-1 + - optional-proofs + nimbus: + branches: + - unstable + - stable + - optional-proofs + prysm: + branches: + - develop + - master + - rebased-partial-columns + - prysm/partial-cells-current + - optional-proofs + alt_repos: + MarcoPolo/prysm: + - partial-columns + developeruche/prysm: + - poc/optional-proofs + bharath-123/prysm: + - buildoor-apis + teku: + branches: + - master + - optional-proofs + - prototype/focil:focil + +# ============================================================ +# MEV +# ============================================================ +mev: + clients: + flashbots-builder: + branches: + - main + mev-boost: + branches: + - develop + mev-boost-relay: + branches: + - main + mev-rs: + branches: + - main + reth-rbuilder: + branches: + - develop + rustic-builder: + branches: + - main + +# ============================================================ +# ZK +# ============================================================ +zk: + clients: + dummy-el: + branches: + - master + zkboost: + branches: + - master + +# ============================================================ +# Tooling +# ============================================================ +tooling: + clients: + eleel: + branches: + - main + ere-server-zisk: + branches: + - master + eth-das-guardian: + branches: + - main + fuzztools: + branches: + - main + # Commented out in config.yaml + # goevmlab: + # branches: ["master"] + slashoor: + branches: + - master + syncoor: + branches: + - master + tx-fuzz: + branches: + - master + +# ============================================================ +# Other +# ============================================================ +other: + clients: + meth: + custom_configs: + - name: "bad-iszero" + source_patch: "meth/bad-iszero.patch" + ref: "master" + tag: "master-bad-iszero" + nevermind: + custom_configs: + - name: "bad-iszero" + source_patch: "nevermind/bad-iszero.patch" + ref: "master" + tag: "master-bad-iszero" + vibehouse: + branches: + - main + +# ============================================================ +# Lean +# ============================================================ +lean: + clients: + ream: + branches: + - master + zeam: + branches: + - main diff --git a/ethereumjs/Dockerfile b/ethereumjs/Dockerfile deleted file mode 100644 index 1186d42..0000000 --- a/ethereumjs/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM node:18-alpine AS build -RUN apk update && apk add --no-cache bash git g++ make python3 && rm -rf /var/cache/apk/* -WORKDIR /usr/app - -COPY package.json . -COPY package-lock.json . -RUN npm i --ignore-scripts - -COPY . . -RUN npm i - -FROM node:18-alpine -WORKDIR /usr/app -COPY --from=build /usr/app . - -# Sanity check -RUN node /usr/app/packages/client/dist/esm/bin/cli.js --help - - -# NodeJS applications have a default memory limit of 2.5GB. -# This limit is bit tight, it is recommended to raise the limit -# since memory may spike during certain network conditions. -ENV NODE_OPTIONS=--max_old_space_size=6144 - -ENTRYPOINT ["node", "/usr/app/packages/client/dist/esm/bin/cli.js"] diff --git a/generate_config.py b/generate_config.py index 5ab36d1..ade991a 100755 --- a/generate_config.py +++ b/generate_config.py @@ -9,7 +9,6 @@ 'besu': 'besu-eth/besu', 'caplin': 'erigontech/erigon', 'erigon': 'erigontech/erigon', - 'ethereumjs': 'ethereumjs/ethereumjs-monorepo', 'ethrex': 'lambdaclass/ethrex', 'geth': 'ethereum/go-ethereum', 'lighthouse': 'sigp/lighthouse', @@ -28,7 +27,6 @@ 'grandine': 'grandinetech/grandine', 'flashbots-builder': 'flashbots/builder', 'tx-fuzz': 'MariusVanDerWijden/tx-fuzz', - 'goomy-blob': 'ethpandaops/goomy-blob', 'ethereum-genesis-generator': 'ethpandaops/ethereum-genesis-generator', 'mev-rs': 'ralexstokes/mev-rs', 'reth-rbuilder': 'flashbots/rbuilder', @@ -76,10 +74,40 @@ 'teku' ] +def flatten_groups(raw_config): + """Flatten the grouped branches.yaml structure into a flat client dict. + + Top-level keys are groups (el, cl, mev, zk, tooling, other, lean). Each group + may declare `common_branches:` which are merged into every client's branches + under its `clients:` map. A client can set `skip_common: true` to opt out. + """ + flat = {} + for group_name, group_data in raw_config.items(): + if not isinstance(group_data, dict): + continue + common_branches = group_data.get('common_branches', []) or [] + clients = group_data.get('clients', {}) or {} + for client_name, client_config in clients.items(): + merged = dict(client_config) if client_config else {} + skip_common = merged.pop('skip_common', False) + if common_branches and not skip_common: + existing = list(merged.get('branches', []) or []) + for cb in common_branches: + if cb not in existing: + existing.append(cb) + merged['branches'] = existing + flat[client_name] = merged + return flat + + def generate_config(): # Read the simplified branches configuration with open('branches.yaml', 'r') as f: - branches_config = yaml.safe_load(f) + raw_config = yaml.safe_load(f) + + # Flatten grouped structure (el/cl/mev/...) into a per-client dict, + # merging each group's `common_branches:` into its clients. + branches_config = flatten_groups(raw_config) # Expand combined client definitions expanded_config = {} diff --git a/platforms.yaml b/platforms.yaml index 4d919af..a77eb63 100644 --- a/platforms.yaml +++ b/platforms.yaml @@ -12,9 +12,6 @@ caplin: erigon: - linux/amd64 - linux/arm64 -ethereumjs: - - linux/amd64 - - linux/arm64 geth: - linux/amd64 - linux/arm64 @@ -66,9 +63,6 @@ execution-monitor: beacon-metrics-gazer: - linux/amd64 - linux/arm64 -goomy-blob: - - linux/amd64 - - linux/arm64 ethereum-genesis-generator: - linux/amd64 - linux/arm64