├── .github ├── actions │ ├── deploy │ │ └── action.yml │ ├── docker-tag │ │ └── action.yml │ ├── install-deps │ │ └── action.yml │ ├── manifest │ │ └── action.yml │ └── prepare │ │ └── action.yml ├── dependabot.yml └── workflows │ ├── build-push-armiarma.yml │ ├── build-push-beacon-metrics-gazer.yml │ ├── build-push-besu.yml │ ├── build-push-consensus-monitor.yml │ ├── build-push-eleel.yml │ ├── build-push-erigon.yml │ ├── build-push-eth-das-guardian.yml │ ├── build-push-ethereum-genesis-generator.yml │ ├── build-push-ethereumjs.yml │ ├── build-push-ethrex.yml │ ├── build-push-execution-monitor.yml │ ├── build-push-flashbots-builder.yml │ ├── build-push-geth.yml │ ├── build-push-goevmlab.yml │ ├── build-push-goomy-blob.yml │ ├── build-push-goteth.yml │ ├── build-push-grandine.yml │ ├── build-push-lighthouse.yml │ ├── build-push-lodestar.yml │ ├── build-push-mev-boost-relay.yml │ ├── build-push-mev-boost.yml │ ├── build-push-mev-rs.yml │ ├── build-push-nethermind.yml │ ├── build-push-nimbus-eth1.yml │ ├── build-push-nimbus-eth2.yml │ ├── build-push-prysm.yml │ ├── build-push-reth-rbuilder.yml │ ├── build-push-reth.yml │ ├── build-push-rustic-builder.yml │ ├── build-push-teku.yml │ ├── build-push-tx-fuzz.yml │ ├── deploy.yml │ ├── scheduled.yml │ └── vet.yml ├── .gitignore ├── README.md ├── besu └── build.sh ├── branches.yaml ├── eleel └── Dockerfile ├── ethereumjs └── Dockerfile ├── generate_config.py ├── goevmlab └── Dockerfile ├── grandine ├── Dockerfile ├── Dockerfile.minimal └── build.sh ├── lighthouse ├── Dockerfile └── xatu-sentry.sh ├── lodestar └── build.sh ├── nimbus-eth2 ├── Dockerfile.beacon ├── Dockerfile.beacon-minimal ├── Dockerfile.validator ├── Dockerfile.validator-minimal └── xatu-sentry.sh ├── platforms.yaml ├── prysm ├── Dockerfile.beacon ├── Dockerfile.validator ├── build_beacon.sh ├── build_beacon_minimal.sh ├── build_validator.sh ├── build_validator_minimal.sh └── entrypoint.sh ├── runners.yaml ├── schema.yaml └── teku └── build.sh /.github/actions/deploy/action.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | description: Build and push a docker image to Docker Hub 3 | 4 | inputs: 5 | source_repository: 6 | description: The source repository to build from 7 | type: string 8 | required: true 9 | source_ref: 10 | description: The branch, tag or SHA to checkout and build from 11 | type: string 12 | required: true 13 | build_script: 14 | description: The bash script path in this repository to run instead of the Docker build & push script. You must push the image yourself. 15 | type: string 16 | required: false 17 | build_args: 18 | description: Build arguments to pass to the Docker build 19 | default: "" 20 | type: string 21 | required: false 22 | target_tag: 23 | description: Docker hub tag to push to 24 | type: string 25 | required: true 26 | target_repository: 27 | description: Docker hub repository to push to 28 | type: string 29 | required: true 30 | target_dockerfile: 31 | description: Dockerfile path in this repository to build from. Omit to use source repository Dockerfile 32 | type: string 33 | default: ./source/Dockerfile 34 | required: false 35 | platform: 36 | description: The platform to build for 37 | type: string 38 | required: true 39 | build_method: 40 | description: Build method to use (go or bazel) 41 | type: string 42 | default: bazel 43 | required: false 44 | harbor_registry: 45 | description: Harbor registry to push the images to 46 | type: string 47 | default: '' 48 | # Secrets 49 | DOCKER_USERNAME: 50 | required: true 51 | DOCKER_PASSWORD: 52 | required: true 53 | MACOS_PASSWORD: 54 | required: true 55 | GOPROXY: 56 | required: false 57 | HARBOR_USERNAME: 58 | required: true 59 | HARBOR_PASSWORD: 60 | required: true 61 | 62 | outputs: 63 | git_commit_hash: 64 | description: The git commit hash of the source repository 65 | value: ${{ steps.git_commit_hash.outputs.git_commit_hash }} 66 | git_commit_hash_full: 67 | description: The full git commit hash of the source repository 68 | value: ${{ steps.git_commit_hash_full.outputs.git_commit_hash_full }} 69 | 70 | runs: 71 | using: composite 72 | steps: 73 | - name: Checkout this repo 74 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 75 | - name: Check out source repository 76 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 77 | with: 78 | repository: ${{ inputs.source_repository }} 79 | path: source 80 | ref: ${{ inputs.source_ref }} 81 | fetch-depth: 0 82 | - name: get short git commit hash 83 | id: git_commit_hash 84 | shell: bash 85 | run: | 86 | cd source 87 | echo "git_commit_hash=$(echo $(git log --pretty=format:'%h' -n 1 --abbrev=7))" >> $GITHUB_OUTPUT 88 | - name: get full git commit hash 89 | id: git_commit_hash_full 90 | shell: bash 91 | run: | 92 | cd source 93 | echo "git_commit_hash_full=$(echo $(git log --pretty=format:'%H' -n 1))" >> $GITHUB_OUTPUT 94 | - name: Set up Docker Context for Buildx 95 | shell: bash 96 | id: buildx-context 97 | run: | 98 | docker context use builders || docker context create builders 99 | - name: Set up Docker Buildx 100 | uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 101 | with: 102 | endpoint: builders 103 | - name: Unlock MacOS keychain for Docker Hub login 104 | shell: bash 105 | if: runner.os == 'macOS' 106 | run: | 107 | security -v unlock-keychain -p ${{ inputs.MACOS_PASSWORD }} ~/Library/Keychains/login.keychain-db 108 | - name: Login to Docker Hub 109 | uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 110 | with: 111 | username: ${{ inputs.DOCKER_USERNAME }} 112 | password: ${{ inputs.DOCKER_PASSWORD }} 113 | - name: Login to harbor registry 114 | if: ${{ inputs.harbor_registry != '' }} 115 | uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 116 | with: 117 | registry: ${{ inputs.harbor_registry }} 118 | username: ${{ inputs.HARBOR_USERNAME }} 119 | password: ${{ inputs.HARBOR_PASSWORD }} 120 | ######################## 121 | # Build script case 122 | ####################### 123 | - name: Build script 124 | shell: bash 125 | if: inputs.build_script 126 | env: 127 | source_repository: ${{ inputs.source_repository }} 128 | source_ref: ${{ inputs.source_ref }} 129 | target_tag: ${{ inputs.target_tag }} 130 | target_repository: ${{ inputs.target_repository }} 131 | target_dockerfile: ${{ inputs.target_dockerfile || './source/Dockerfile' }} 132 | source_git_commit_hash: ${{ steps.git_commit_hash.outputs.git_commit_hash }} 133 | source_git_commit_hash_full: ${{ steps.git_commit_hash_full.outputs.git_commit_hash_full }} 134 | GOPROXY: ${{ inputs.GOPROXY }} 135 | build_method: ${{ inputs.build_method }} 136 | run: | 137 | ${{ inputs.build_script }} 138 | - name: Image digest & tags (build script) 139 | shell: bash 140 | if: inputs.build_script 141 | run: | 142 | cat << EOF 143 | digest: $(docker image inspect --format='{{index .RepoDigests 0}}' ${{ inputs.target_repository }}:${{ inputs.target_tag }} | grep -oE "@(.*)" | cut -d'@' -f2-) 144 | tags: 145 | ${{ inputs.target_repository }}:${{ inputs.target_tag }} 146 | ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ steps.git_commit_hash.outputs.git_commit_hash }} 147 | EOF 148 | ######################## 149 | # Non build script case 150 | ####################### 151 | - name: Inject GOPROXY into Dockerfile 152 | if: ${{ inputs.build_script == '' }} 153 | shell: bash 154 | run: | 155 | DOCKERFILE_PATH="${{ inputs.target_dockerfile }}" 156 | if [[ -z "$DOCKERFILE_PATH" ]]; then 157 | # Set to default value explicitly if input is empty 158 | DOCKERFILE_PATH='./source/Dockerfile' 159 | fi 160 | awk '/^FROM/ { print; print "ENV GOPROXY=${{ inputs.GOPROXY }}"; next }1' ${DOCKERFILE_PATH} > Dockerfile.new 161 | mv Dockerfile.new ${DOCKERFILE_PATH} 162 | - name: Docker build & push 163 | if: ${{ inputs.build_script == '' }} 164 | id: docker_build 165 | uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0 166 | with: 167 | context: ./source 168 | file: ${{ inputs.target_dockerfile }} 169 | # two tags; 170 | # - $target_tag 171 | # - $target_tag-commit 172 | tags: | 173 | ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ steps.git_commit_hash.outputs.git_commit_hash }} 174 | ${{ inputs.target_repository }}:${{ inputs.target_tag }} 175 | ${{ inputs.harbor_registry != '' && format('{0}/{1}:{2}-{3}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag, steps.git_commit_hash.outputs.git_commit_hash) || '' }} 176 | ${{ inputs.harbor_registry != '' && format('{0}/{1}:{2}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag) || '' }} 177 | push: true 178 | platforms: ${{ inputs.platform }} 179 | build-args: ${{ inputs.build_args }} 180 | build_method: ${{ inputs.build_method }} 181 | labels: | 182 | ethpandaops.io.repo=${{ inputs.source_repository }} 183 | ethpandaops.io.commitRef=${{ inputs.source_ref }} 184 | - name: Image digest & tags 185 | shell: bash 186 | if: ${{ inputs.build_script == '' }} 187 | run: | 188 | cat << EOF 189 | digest: ${{ steps.docker_build.outputs.digest }} 190 | tags: 191 | ${{ inputs.target_repository }}:${{ inputs.target_tag }} 192 | ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ steps.git_commit_hash.outputs.git_commit_hash }} 193 | EOF 194 | -------------------------------------------------------------------------------- /.github/actions/docker-tag/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Generate docker tag' 2 | description: 'Generate valid docker tag from source ref or user input' 3 | inputs: 4 | input: 5 | description: 'The branch, tag, SHA or custom name to build a tag for' 6 | required: true 7 | outputs: 8 | docker_tag: 9 | description: "The docker tag to use" 10 | value: ${{ steps.docker_tag.outputs.docker_tag }} 11 | runs: 12 | using: "composite" 13 | steps: 14 | - name: Generate valid docker tag 15 | id: docker_tag 16 | shell: bash 17 | run: | 18 | docker_tag="${{ inputs.input }}" 19 | if [ -z "$docker_tag" ]; then 20 | echo "Cannot generate tag for empty input" 21 | exit 1 22 | fi 23 | 24 | # replace all special characters to - (allowed: -_.) 25 | # fix/bug#123 -> fix-bug-123 26 | # pr@123 -> pr-123 27 | # test-1.2 -> test-1.2 28 | docker_tag="$(echo "$docker_tag" | sed 's/[^a-zA-Z0-9._]/-/g')" 29 | 30 | # trim leading dashes 31 | # -fix -> fix 32 | docker_tag="$(echo "$docker_tag" | sed 's/^-*//')" 33 | 34 | 35 | echo "docker_tag=$docker_tag" >> $GITHUB_OUTPUT 36 | echo "Docker Tag: $docker_tag" 37 | -------------------------------------------------------------------------------- /.github/actions/install-deps/action.yml: -------------------------------------------------------------------------------- 1 | name: Install deps 2 | description: Install deps for a source repository 3 | 4 | inputs: 5 | repository: 6 | description: The repository to build from 7 | type: string 8 | required: true 9 | 10 | runs: 11 | using: composite 12 | steps: 13 | - name: Checkout this repo 14 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 15 | - uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 16 | if: contains(inputs.repository, 'teku') 17 | with: 18 | distribution: 'temurin' 19 | java-version: '21' 20 | - uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 21 | if: contains(inputs.repository, 'besu') 22 | with: 23 | distribution: 'temurin' 24 | java-version: '21' 25 | - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 26 | if: contains(inputs.repository, 'lodestar') || contains(inputs.repository, 'ethereumjs') 27 | with: 28 | node-version: 20 29 | check-latest: true 30 | - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 31 | if: contains(inputs.repository, 'prysm') 32 | with: 33 | go-version: '1.23.0' 34 | -------------------------------------------------------------------------------- /.github/actions/manifest/action.yml: -------------------------------------------------------------------------------- 1 | name: Manifest 2 | description: Build and push a docker manifest to Docker Hub 3 | 4 | inputs: 5 | platforms: 6 | # eg [{"platform":"linux/amd64", "runner": "ARM64", "slug": "something-arm64"},{"platform":"linux/arm64", "runner": "ubuntu-latest", "slug": "something-amd64"}] 7 | description: JSON list of platforms to build for 8 | type: string 9 | required: true 10 | source_repository: 11 | description: The source repository to build from 12 | type: string 13 | required: true 14 | source_ref: 15 | description: The branch, tag or SHA to checkout and build from 16 | type: string 17 | required: true 18 | git_commit_hash: 19 | description: The git commit hash that was used in the deploy action 20 | type: string 21 | required: true 22 | target_tag: 23 | description: Docker hub tag to push to 24 | type: string 25 | required: true 26 | target_repository: 27 | description: Docker hub repository to push to 28 | type: string 29 | required: true 30 | harbor_registry: 31 | description: Harbor registry to push the images to 32 | type: string 33 | default: '' 34 | DOCKER_USERNAME: 35 | required: true 36 | DOCKER_PASSWORD: 37 | required: true 38 | HARBOR_USERNAME: 39 | required: true 40 | HARBOR_PASSWORD: 41 | required: true 42 | 43 | runs: 44 | using: composite 45 | steps: 46 | - name: Checkout this repo 47 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 48 | - name: Generate images list 49 | id: generate_images_list 50 | shell: bash 51 | run: | 52 | PLATFORMS='${{ inputs.platforms }}' 53 | 54 | # Iterate over the platforms and build the image list 55 | len=$(echo $PLATFORMS | jq '. | length') 56 | for ((i=0; i<$len; i++)); do 57 | slug=$(echo $PLATFORMS | jq -r --argjson i $i '.[$i].slug') 58 | imagetag="${{ inputs.target_tag }}-$slug" 59 | image="${{ inputs.target_repository }}:$imagetag" 60 | url="https://hub.docker.com/v2/repositories/${{ inputs.target_repository }}/tags?page_size=25&page=1&ordering=&name=$imagetag" 61 | exists=$(curl -s $url | jq '.results | length > 0') 62 | if [ "$exists" == "true" ]; then 63 | IMAGES+="${{ inputs.target_repository }}:${{ inputs.target_tag }}-$slug " 64 | TAGS+="${{ inputs.target_repository }}:${{ inputs.target_tag }}-$slug ${{ inputs.target_repository }}:${{ inputs.target_tag }}-$slug-${{ inputs.git_commit_hash }} " 65 | fi 66 | done 67 | 68 | TAGS+="${{ inputs.target_repository }}:${{ inputs.target_tag }} ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ inputs.git_commit_hash }} " 69 | 70 | IMAGES=${IMAGES::-1} # Remove the trailing space 71 | echo "IMAGES: $IMAGES" 72 | echo "images=$IMAGES" >> $GITHUB_OUTPUT 73 | 74 | TAGS=${TAGS::-1} # Remove the trailing space 75 | echo "TAGS: $TAGS" 76 | echo "tags=$TAGS" >> $GITHUB_OUTPUT 77 | - name: Check if there is atleast one image 78 | if: ${{ steps.generate_images_list.outputs.images == '[]' || steps.generate_images_list.outputs.images == '' }} 79 | shell: bash 80 | run: exit 1 81 | - name: Set up Docker Context for Buildx 82 | shell: bash 83 | id: buildx-context 84 | run: | 85 | docker context create builders 86 | - name: Set up Docker Buildx 87 | uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 88 | with: 89 | endpoint: builders 90 | - name: Login to Docker Hub 91 | uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 92 | with: 93 | username: ${{ inputs.DOCKER_USERNAME }} 94 | password: ${{ inputs.DOCKER_PASSWORD }} 95 | 96 | - name: Create and push manifest images to dockerhub 97 | shell: bash 98 | run: | 99 | docker buildx imagetools create --dry-run -t ${{ inputs.target_repository }}:${{ inputs.target_tag }} -t ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ inputs.git_commit_hash }} ${{ steps.generate_images_list.outputs.images }} 100 | docker buildx imagetools create -t ${{ inputs.target_repository }}:${{ inputs.target_tag }} -t ${{ inputs.target_repository }}:${{ inputs.target_tag }}-${{ inputs.git_commit_hash }} ${{ steps.generate_images_list.outputs.images }} 101 | 102 | - name: Login to harbor registry 103 | if: ${{ inputs.harbor_registry != '' }} 104 | uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 105 | with: 106 | registry: ${{ inputs.harbor_registry }} 107 | username: ${{ inputs.HARBOR_USERNAME }} 108 | password: ${{ inputs.HARBOR_PASSWORD }} 109 | 110 | - name: Prefix Images with Harbor registry 111 | if: ${{ inputs.harbor_registry != '' }} 112 | shell: bash 113 | id: harbor_prefix 114 | run: | 115 | #!/bin/bash 116 | 117 | # Get the original images list (assuming it's passed as an argument or environment variable) 118 | ORIGINAL_IMAGES="${{ steps.generate_images_list.outputs.images }}" 119 | SECOND_REGISTRY="${{ inputs.harbor_registry }}" 120 | 121 | # Initialize the new images list 122 | NEW_IMAGES="" 123 | 124 | # Split the original images by space and add the second registry prefix 125 | for image in $ORIGINAL_IMAGES; do 126 | # Extract the repository and tag parts 127 | 128 | # Add to the new images list with the second registry prefix 129 | NEW_IMAGES+="$SECOND_REGISTRY/$image " 130 | done 131 | 132 | # Remove the trailing space 133 | NEW_IMAGES=${NEW_IMAGES::-1} 134 | 135 | echo "ORIGINAL_IMAGES: $ORIGINAL_IMAGES" 136 | echo "PREFIXED_IMAGES: $NEW_IMAGES" 137 | echo "prefixed_images=$NEW_IMAGES" >> $GITHUB_OUTPUT 138 | 139 | 140 | - name: Create and push manifest images to Harbor 141 | if: ${{ inputs.harbor_registry != '' }} 142 | shell: bash 143 | run: | 144 | # Dry run first 145 | docker buildx imagetools create --dry-run \ 146 | ${{ format('-t {0}/{1}:{2}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag) || '' }} \ 147 | ${{ format('-t {0}/{1}:{2}-{3}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag, inputs.git_commit_hash) || '' }} \ 148 | ${{ steps.harbor_prefix.outputs.prefixed_images }} 149 | 150 | # Actual creation 151 | docker buildx imagetools create \ 152 | ${{ format('-t {0}/{1}:{2}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag) || '' }} \ 153 | ${{ format('-t {0}/{1}:{2}-{3}', inputs.harbor_registry, inputs.target_repository, inputs.target_tag, inputs.git_commit_hash) || '' }} \ 154 | ${{ steps.harbor_prefix.outputs.prefixed_images }} 155 | 156 | -------------------------------------------------------------------------------- /.github/actions/prepare/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Setup' 2 | description: 'Read and parse config files for specified client' 3 | inputs: 4 | client: 5 | description: 'The client' 6 | required: true 7 | outputs: 8 | platforms: 9 | description: "Matrix of platforms and runner to use" 10 | value: ${{ steps.setup_platforms.outputs.platforms }} 11 | runs: 12 | using: "composite" 13 | steps: 14 | - name: Checkout repository 15 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 16 | - uses: mikefarah/yq@6609ed76ecb69f9d8254345292d90ea72f641715 # v4.35.1 17 | - name: Generate platform and runner matrix from config files 18 | id: setup_platforms 19 | shell: bash 20 | run: | 21 | PLATFORMS_JSON="[" 22 | client="${{ inputs.client }}" 23 | 24 | # Extract the platforms for the specified client 25 | platforms=$(yq e ".$client[]" platforms.yaml) 26 | 27 | for platform in $platforms; do 28 | slug=$(echo "$platform" | tr '/' '-') 29 | runner=$(yq e ".\"$platform\"" runners.yaml) 30 | PLATFORMS_JSON+="{\"platform\":\"$platform\", \"runner\":\"$runner\", \"slug\":\"$slug\"}," 31 | done 32 | 33 | PLATFORMS_JSON="${PLATFORMS_JSON%,}]" 34 | echo "platforms=$PLATFORMS_JSON" >> $GITHUB_OUTPUT 35 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: / 5 | schedule: 6 | interval: monthly 7 | groups: 8 | actions: 9 | patterns: 10 | - '*' 11 | -------------------------------------------------------------------------------- /.github/workflows/build-push-armiarma.yml: -------------------------------------------------------------------------------- 1 | name: Build armiarma docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source armiarma repository to build from 8 | default: ethpandaops/armiarma 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'armiarma' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/armiarma 61 | platform: ${{ matrix.platform }} 62 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 63 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 64 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 65 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 66 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 67 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 68 | GOPROXY: "${{ vars.GOPROXY }}" 69 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 70 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 71 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 72 | 73 | # This step captures the git commit hash from the deploy action for job output, which can then be 74 | # used by the manifest job. This is done to handle scenarios where there is a commit to the remote 75 | # repository between the deploy and manifest action. 76 | - name: Set job output 77 | id: set_output 78 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 79 | shell: bash 80 | manifest: 81 | needs: 82 | - prepare 83 | - deploy 84 | runs-on: ubuntu-latest 85 | steps: 86 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 87 | - uses: ./.github/actions/manifest 88 | with: 89 | source_repository: ${{ inputs.repository }} 90 | source_ref: ${{ inputs.ref }} 91 | target_tag: ${{ needs.prepare.outputs.target_tag }} 92 | target_repository: ethpandaops/armiarma 93 | platforms: ${{ needs.prepare.outputs.platforms }} 94 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 95 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 96 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 97 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 98 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 99 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 100 | notify: 101 | name: Discord Notification 102 | runs-on: ubuntu-latest 103 | needs: 104 | - prepare 105 | - deploy 106 | - manifest 107 | if: failure() 108 | steps: 109 | - name: Notify 110 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 111 | with: 112 | github-token: ${{ secrets.github_token }} 113 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 114 | -------------------------------------------------------------------------------- /.github/workflows/build-push-beacon-metrics-gazer.yml: -------------------------------------------------------------------------------- 1 | name: Build beacon-metrics-gazer image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source beacon-metrics-gazer repository to build from 8 | default: dapplion/beacon-metrics-gazer 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'beacon-metrics-gazer' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/beacon-metrics-gazer 61 | platform: ${{ matrix.platform }} 62 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 63 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 64 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 65 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 66 | 67 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 68 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 69 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 70 | GOPROXY: "${{ vars.GOPROXY }}" 71 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 72 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 73 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 74 | 75 | # This step captures the git commit hash from the deploy action for job output 76 | - name: Set job output 77 | id: set_output 78 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 79 | shell: bash 80 | manifest: 81 | needs: 82 | - prepare 83 | - deploy 84 | runs-on: ubuntu-latest 85 | steps: 86 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 87 | - uses: ./.github/actions/manifest 88 | with: 89 | source_repository: ${{ inputs.repository }} 90 | source_ref: ${{ inputs.ref }} 91 | target_tag: ${{ needs.prepare.outputs.target_tag }} 92 | target_repository: ethpandaops/beacon-metrics-gazer 93 | platforms: ${{ needs.prepare.outputs.platforms }} 94 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 95 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 96 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 97 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 98 | 99 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 100 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 101 | notify: 102 | name: Discord Notification 103 | runs-on: ubuntu-latest 104 | needs: 105 | - prepare 106 | - deploy 107 | - manifest 108 | if: failure() 109 | steps: 110 | - name: Notify 111 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 112 | with: 113 | github-token: ${{ secrets.github_token }} 114 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 115 | -------------------------------------------------------------------------------- /.github/workflows/build-push-besu.yml: -------------------------------------------------------------------------------- 1 | name: Build besu docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source besu repository to build from 8 | default: hyperledger/besu 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'besu' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | build_script: ./besu/build.sh 60 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 61 | target_repository: ethpandaops/besu 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 67 | GOPROXY: "${{ vars.GOPROXY }}" 68 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 69 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 70 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 71 | 72 | # This step captures the git commit hash from the deploy action for job output 73 | - name: Set job output 74 | id: set_output 75 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 76 | shell: bash 77 | manifest: 78 | needs: 79 | - prepare 80 | - deploy 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 84 | - uses: ./.github/actions/manifest 85 | with: 86 | source_repository: ${{ inputs.repository }} 87 | source_ref: ${{ inputs.ref }} 88 | target_tag: ${{ needs.prepare.outputs.target_tag }} 89 | target_repository: ethpandaops/besu 90 | platforms: ${{ needs.prepare.outputs.platforms }} 91 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 92 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 93 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 94 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 95 | 96 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 97 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 98 | notify: 99 | name: Discord Notification 100 | runs-on: ubuntu-latest 101 | needs: 102 | - prepare 103 | - deploy 104 | - manifest 105 | if: failure() 106 | steps: 107 | - name: Notify 108 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 109 | with: 110 | github-token: ${{ secrets.github_token }} 111 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 112 | -------------------------------------------------------------------------------- /.github/workflows/build-push-consensus-monitor.yml: -------------------------------------------------------------------------------- 1 | name: Build consensus-monitor docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source consensus-monitor repository to build from 8 | default: ralexstokes/ethereum_consensus_monitor 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'consensus-monitor' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/consensus-monitor 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/consensus-monitor 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-eleel.yml: -------------------------------------------------------------------------------- 1 | name: Build eleel docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source eleel repository to build from 8 | default: sigp/eleel 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'eleel' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/eleel 61 | target_dockerfile: ./eleel/Dockerfile 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 67 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 68 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 69 | 70 | # This step captures the git commit hash from the deploy action for job output 71 | - name: Set job output 72 | id: set_output 73 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 74 | shell: bash 75 | manifest: 76 | needs: 77 | - prepare 78 | - deploy 79 | runs-on: ubuntu-latest 80 | steps: 81 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 82 | - uses: ./.github/actions/manifest 83 | with: 84 | source_repository: ${{ inputs.repository }} 85 | source_ref: ${{ inputs.ref }} 86 | target_tag: ${{ needs.prepare.outputs.target_tag }} 87 | target_repository: ethpandaops/eleel 88 | platforms: ${{ needs.prepare.outputs.platforms }} 89 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 90 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 91 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 92 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 93 | 94 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 95 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 96 | notify: 97 | name: Discord Notification 98 | runs-on: ubuntu-latest 99 | needs: 100 | - prepare 101 | - deploy 102 | - manifest 103 | if: failure() 104 | steps: 105 | - name: Notify 106 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 107 | with: 108 | github-token: ${{ secrets.github_token }} 109 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 110 | 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-erigon.yml: -------------------------------------------------------------------------------- 1 | name: Build erigon docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source erigon repository to build from 8 | default: erigontech/erigon 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'erigon' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/erigon 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/erigon 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-eth-das-guardian.yml: -------------------------------------------------------------------------------- 1 | name: Build eth-das-guardian docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source eth-das-guardian repository to build from 8 | default: probe-lab/eth-das-guardian 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'eth-das-guardian' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/eth-das-guardian 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/eth-das-guardian 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 95 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 96 | notify: 97 | name: Discord Notification 98 | runs-on: ubuntu-latest 99 | needs: 100 | - prepare 101 | - deploy 102 | - manifest 103 | if: failure() 104 | steps: 105 | - name: Notify 106 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 107 | with: 108 | github-token: ${{ secrets.github_token }} 109 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 110 | -------------------------------------------------------------------------------- /.github/workflows/build-push-ethereum-genesis-generator.yml: -------------------------------------------------------------------------------- 1 | name: Build ethereum-genesis-generator docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source ethereum-genesis-generator repository to build from 8 | default: ethpandaops/ethereum-genesis-generator 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'ethereum-genesis-generator' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/ethereum-genesis-generator 61 | platform: ${{ matrix.platform }} 62 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 63 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 64 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 65 | 66 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 67 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 68 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 69 | GOPROXY: "${{ vars.GOPROXY }}" 70 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 71 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 72 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 73 | 74 | # This step captures the git commit hash from the deploy action for job output 75 | - name: Set job output 76 | id: set_output 77 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 78 | shell: bash 79 | manifest: 80 | needs: 81 | - prepare 82 | - deploy 83 | runs-on: ubuntu-latest 84 | steps: 85 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 86 | - uses: ./.github/actions/manifest 87 | with: 88 | source_repository: ${{ inputs.repository }} 89 | source_ref: ${{ inputs.ref }} 90 | target_tag: ${{ needs.prepare.outputs.target_tag }} 91 | target_repository: ethpandaops/ethereum-genesis-generator 92 | platforms: ${{ needs.prepare.outputs.platforms }} 93 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 94 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 95 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 96 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 97 | 98 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 99 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 100 | notify: 101 | name: Discord Notification 102 | runs-on: ubuntu-latest 103 | needs: 104 | - prepare 105 | - deploy 106 | - manifest 107 | if: failure() 108 | steps: 109 | - name: Notify 110 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 111 | with: 112 | github-token: ${{ secrets.github_token }} 113 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 114 | -------------------------------------------------------------------------------- /.github/workflows/build-push-ethereumjs.yml: -------------------------------------------------------------------------------- 1 | name: Build ethereumjs docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source ethereumjs repository to build from 8 | default: ethereumjs/ethereumjs-monorepo 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'ethereumjs' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/ethereumjs 61 | target_dockerfile: ./ethereumjs/Dockerfile 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 67 | GOPROXY: "${{ vars.GOPROXY }}" 68 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 69 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 70 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 71 | 72 | # This step captures the git commit hash from the deploy action for job output 73 | - name: Set job output 74 | id: set_output 75 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 76 | shell: bash 77 | manifest: 78 | needs: 79 | - prepare 80 | - deploy 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 84 | - uses: ./.github/actions/manifest 85 | with: 86 | source_repository: ${{ inputs.repository }} 87 | source_ref: ${{ inputs.ref }} 88 | target_tag: ${{ needs.prepare.outputs.target_tag }} 89 | target_repository: ethpandaops/ethereumjs 90 | platforms: ${{ needs.prepare.outputs.platforms }} 91 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 92 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 93 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 94 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 95 | 96 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 97 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 98 | notify: 99 | name: Discord Notification 100 | runs-on: ubuntu-latest 101 | needs: 102 | - prepare 103 | - deploy 104 | - manifest 105 | if: failure() 106 | steps: 107 | - name: Notify 108 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 109 | with: 110 | github-token: ${{ secrets.github_token }} 111 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 112 | -------------------------------------------------------------------------------- /.github/workflows/build-push-ethrex.yml: -------------------------------------------------------------------------------- 1 | name: Build ethrex docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source ethrex repository to build from 8 | default: lambdaclass/ethrex 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'ethrex' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.deploy.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/ethrex 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | manifest: 71 | needs: 72 | - prepare 73 | - deploy 74 | runs-on: ubuntu-latest 75 | outputs: 76 | docker_images: ${{ steps.manifest.outputs.docker_images }} 77 | steps: 78 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 79 | - uses: ./.github/actions/manifest 80 | id: manifest 81 | with: 82 | source_repository: ${{ inputs.repository }} 83 | source_ref: ${{ inputs.ref }} 84 | target_tag: ${{ needs.prepare.outputs.target_tag }} 85 | target_repository: ethpandaops/ethrex 86 | platforms: ${{ needs.prepare.outputs.platforms }} 87 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 88 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 89 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 90 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 91 | 92 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 93 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 94 | notify: 95 | name: Discord Notification 96 | runs-on: ubuntu-latest 97 | needs: 98 | - prepare 99 | - deploy 100 | - manifest 101 | if: failure() 102 | steps: 103 | - name: Notify 104 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 105 | with: 106 | github-token: ${{ secrets.github_token }} 107 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 108 | -------------------------------------------------------------------------------- /.github/workflows/build-push-execution-monitor.yml: -------------------------------------------------------------------------------- 1 | name: Build execution-monitor docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source execution-monitor repository to build from 8 | default: ethereum/nodemonitor 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'execution-monitor' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/execution-monitor 61 | platform: ${{ matrix.platform }} 62 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 63 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 64 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 65 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 66 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 67 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 68 | GOPROXY: "${{ vars.GOPROXY }}" 69 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 70 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 71 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 72 | # This step captures the git commit hash from the deploy action for job output 73 | - name: Set job output 74 | id: set_output 75 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 76 | shell: bash 77 | manifest: 78 | needs: 79 | - prepare 80 | - deploy 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 84 | - uses: ./.github/actions/manifest 85 | with: 86 | source_repository: ${{ inputs.repository }} 87 | source_ref: ${{ inputs.ref }} 88 | target_tag: ${{ needs.prepare.outputs.target_tag }} 89 | target_repository: ethpandaops/execution-monitor 90 | platforms: ${{ needs.prepare.outputs.platforms }} 91 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 92 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 93 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 94 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-flashbots-builder.yml: -------------------------------------------------------------------------------- 1 | name: Build flashbots builder docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source flashbots repository to build from 8 | default: flashbots/builder 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'flashbots-builder' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/flashbots-builder 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/flashbots-builder 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-geth.yml: -------------------------------------------------------------------------------- 1 | name: Build geth docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source geth repository to build from 8 | default: ethereum/go-ethereum 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'geth' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.deploy.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/geth 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | manifest: 71 | needs: 72 | - prepare 73 | - deploy 74 | runs-on: ubuntu-latest 75 | outputs: 76 | docker_images: ${{ steps.manifest.outputs.docker_images }} 77 | steps: 78 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 79 | - uses: ./.github/actions/manifest 80 | id: manifest 81 | with: 82 | source_repository: ${{ inputs.repository }} 83 | source_ref: ${{ inputs.ref }} 84 | target_tag: ${{ needs.prepare.outputs.target_tag }} 85 | target_repository: ethpandaops/geth 86 | platforms: ${{ needs.prepare.outputs.platforms }} 87 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 88 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 89 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 90 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 91 | 92 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 93 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 94 | notify: 95 | name: Discord Notification 96 | runs-on: ubuntu-latest 97 | needs: 98 | - prepare 99 | - deploy 100 | - manifest 101 | if: failure() 102 | steps: 103 | - name: Notify 104 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 105 | with: 106 | github-token: ${{ secrets.github_token }} 107 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 108 | -------------------------------------------------------------------------------- /.github/workflows/build-push-goevmlab.yml: -------------------------------------------------------------------------------- 1 | name: Build goevmlab docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source goevmlab repository to build from 8 | default: holiman/goevmlab 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'goevmlab' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/goevmlab 61 | target_dockerfile: ./goevmlab/Dockerfile 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 67 | GOPROXY: "${{ vars.GOPROXY }}" 68 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 69 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 70 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 71 | 72 | # This step captures the git commit hash from the deploy action for job output 73 | - name: Set job output 74 | id: set_output 75 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 76 | shell: bash 77 | manifest: 78 | needs: 79 | - prepare 80 | - deploy 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 84 | - uses: ./.github/actions/manifest 85 | with: 86 | source_repository: ${{ inputs.repository }} 87 | source_ref: ${{ inputs.ref }} 88 | target_tag: ${{ needs.prepare.outputs.target_tag }} 89 | target_repository: ethpandaops/goevmlab 90 | platforms: ${{ needs.prepare.outputs.platforms }} 91 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 92 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 93 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 94 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 95 | 96 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 97 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 98 | notify: 99 | name: Discord Notification 100 | runs-on: ubuntu-latest 101 | needs: 102 | - prepare 103 | - deploy 104 | - manifest 105 | if: failure() 106 | steps: 107 | - name: Notify 108 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 109 | with: 110 | github-token: ${{ secrets.github_token }} 111 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 112 | -------------------------------------------------------------------------------- /.github/workflows/build-push-goomy-blob.yml: -------------------------------------------------------------------------------- 1 | name: Build goomy-blob docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source goomy-blob repository to build from 8 | default: ethpandaops/goomy-blob 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'goomy-blob' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/goomy-blob 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/goomy-blob 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 95 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 96 | notify: 97 | name: Discord Notification 98 | runs-on: ubuntu-latest 99 | needs: 100 | - prepare 101 | - deploy 102 | - manifest 103 | if: failure() 104 | steps: 105 | - name: Notify 106 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 107 | with: 108 | github-token: ${{ secrets.github_token }} 109 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 110 | -------------------------------------------------------------------------------- /.github/workflows/build-push-goteth.yml: -------------------------------------------------------------------------------- 1 | name: Build goteth docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source goteth repository to build from 8 | default: migalabs/goteth 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | with: 30 | submodules: true 31 | - name: Prepare Matrix 32 | id: setup 33 | uses: ./.github/actions/prepare 34 | with: 35 | client: 'goteth' 36 | - name: Generate target tag 37 | id: tag 38 | uses: ./.github/actions/docker-tag 39 | with: 40 | input: ${{ inputs.docker_tag || inputs.ref }} 41 | deploy: 42 | needs: 43 | - prepare 44 | runs-on: ${{ matrix.runner }} 45 | continue-on-error: true 46 | strategy: 47 | matrix: 48 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 49 | outputs: 50 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 51 | steps: 52 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 53 | - uses: ./.github/actions/install-deps 54 | with: 55 | repository: ${{ inputs.repository }} 56 | - uses: ./.github/actions/deploy 57 | id: deploy 58 | with: 59 | source_repository: ${{ inputs.repository }} 60 | source_ref: ${{ inputs.ref }} 61 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 62 | target_repository: ethpandaops/goteth 63 | platform: ${{ matrix.platform }} 64 | 65 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 66 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 67 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 68 | GOPROXY: "${{ vars.GOPROXY }}" 69 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 70 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 71 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 72 | 73 | # This step captures the git commit hash from the deploy action for job output 74 | - name: Set job output 75 | id: set_output 76 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 77 | shell: bash 78 | manifest: 79 | needs: 80 | - prepare 81 | - deploy 82 | runs-on: ubuntu-latest 83 | steps: 84 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 85 | - uses: ./.github/actions/manifest 86 | with: 87 | source_repository: ${{ inputs.repository }} 88 | source_ref: ${{ inputs.ref }} 89 | target_tag: ${{ needs.prepare.outputs.target_tag }} 90 | target_repository: ethpandaops/goteth 91 | platforms: ${{ needs.prepare.outputs.platforms }} 92 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 93 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 94 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 95 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 96 | 97 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 98 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 99 | notify: 100 | name: Discord Notification 101 | runs-on: ubuntu-latest 102 | needs: 103 | - prepare 104 | - deploy 105 | - manifest 106 | if: failure() 107 | steps: 108 | - name: Notify 109 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 110 | with: 111 | github-token: ${{ secrets.github_token }} 112 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 113 | -------------------------------------------------------------------------------- /.github/workflows/build-push-grandine.yml: -------------------------------------------------------------------------------- 1 | name: Build grandine docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source grandine repository to build from 8 | default: grandinetech/grandine 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: develop 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | build_args: 21 | description: Additional build arguments to pass to the docker build command 22 | default: "RUST_MIN_STACK=5242880" 23 | type: string 24 | required: false 25 | 26 | jobs: 27 | prepare: 28 | runs-on: ubuntu-latest 29 | outputs: 30 | platforms: ${{ steps.setup.outputs.platforms }} 31 | target_tag: ${{ steps.tag.outputs.docker_tag }} 32 | steps: 33 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 34 | - name: Prepare Matrix 35 | id: setup 36 | uses: ./.github/actions/prepare 37 | with: 38 | client: 'grandine' 39 | - name: Generate target tag 40 | id: tag 41 | uses: ./.github/actions/docker-tag 42 | with: 43 | input: ${{ inputs.docker_tag || inputs.ref }} 44 | deploy: 45 | needs: 46 | - prepare 47 | runs-on: ${{ matrix.runner }} 48 | continue-on-error: true 49 | strategy: 50 | matrix: 51 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 52 | outputs: 53 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 54 | steps: 55 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 56 | - uses: ./.github/actions/install-deps 57 | with: 58 | repository: ${{ inputs.repository }} 59 | - uses: ./.github/actions/deploy 60 | id: deploy 61 | with: 62 | source_repository: ${{ inputs.repository }} 63 | source_ref: ${{ inputs.ref }} 64 | build_script: ./grandine/build.sh 65 | target_dockerfile: ./grandine/Dockerfile 66 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 67 | target_repository: ethpandaops/grandine 68 | platform: ${{ matrix.platform }} 69 | build_args: ${{ inputs.build_args }} 70 | 71 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 72 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 73 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 74 | GOPROXY: "${{ vars.GOPROXY }}" 75 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 76 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 77 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 78 | 79 | # This step captures the git commit hash from the deploy action for job output 80 | - name: Set job output 81 | id: set_output 82 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 83 | shell: bash 84 | deploy-minimal: 85 | needs: 86 | - prepare 87 | runs-on: ${{ matrix.runner }} 88 | continue-on-error: true 89 | strategy: 90 | matrix: 91 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 92 | outputs: 93 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 94 | steps: 95 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 96 | - uses: ./.github/actions/install-deps 97 | with: 98 | repository: ${{ inputs.repository }} 99 | - uses: ./.github/actions/deploy 100 | id: deploy 101 | with: 102 | source_repository: ${{ inputs.repository }} 103 | source_ref: ${{ inputs.ref }} 104 | build_script: ./grandine/build.sh 105 | target_dockerfile: ./grandine/Dockerfile.minimal 106 | target_tag: ${{ needs.prepare.outputs.target_tag }}-minimal-${{ matrix.slug }} 107 | target_repository: ethpandaops/grandine 108 | platform: ${{ matrix.platform }} 109 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 110 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 111 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 112 | 113 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 114 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 115 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 116 | GOPROXY: "${{ vars.GOPROXY }}" 117 | 118 | # This step captures the git commit hash from the deploy action for job output 119 | - name: Set job output 120 | id: set_output 121 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 122 | shell: bash 123 | manifest: 124 | needs: 125 | - prepare 126 | - deploy 127 | runs-on: ubuntu-latest 128 | steps: 129 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 130 | - uses: ./.github/actions/manifest 131 | with: 132 | source_repository: ${{ inputs.repository }} 133 | source_ref: ${{ inputs.ref }} 134 | target_tag: ${{ needs.prepare.outputs.target_tag }} 135 | target_repository: ethpandaops/grandine 136 | platforms: ${{ needs.prepare.outputs.platforms }} 137 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 138 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 139 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 140 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 141 | 142 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 143 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 144 | manifest-minimal: 145 | needs: 146 | - prepare 147 | - deploy-minimal 148 | runs-on: ubuntu-latest 149 | steps: 150 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 151 | - uses: ./.github/actions/manifest 152 | with: 153 | source_repository: ${{ inputs.repository }} 154 | source_ref: ${{ inputs.ref }} 155 | target_tag: ${{ needs.prepare.outputs.target_tag }}-minimal 156 | target_repository: ethpandaops/grandine 157 | platforms: ${{ needs.prepare.outputs.platforms }} 158 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 159 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 160 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 161 | git_commit_hash: ${{ needs.deploy-minimal.outputs.git_commit_hash }} 162 | 163 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 164 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 165 | notify: 166 | name: Discord Notification 167 | runs-on: ubuntu-latest 168 | needs: 169 | - prepare 170 | - deploy 171 | - deploy-minimal 172 | - manifest 173 | - manifest-minimal 174 | if: failure() 175 | steps: 176 | - name: Notify 177 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 178 | with: 179 | github-token: ${{ secrets.github_token }} 180 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 181 | -------------------------------------------------------------------------------- /.github/workflows/build-push-lighthouse.yml: -------------------------------------------------------------------------------- 1 | name: Build lighthouse docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source lighthouse repository to build from 8 | default: sigp/lighthouse 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: stable 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | build_args: 21 | description: Build arguments to pass to the Docker build 22 | default: "" 23 | type: string 24 | required: false 25 | 26 | jobs: 27 | prepare: 28 | runs-on: ubuntu-latest 29 | outputs: 30 | platforms: ${{ steps.setup.outputs.platforms }} 31 | target_tag: ${{ steps.tag.outputs.docker_tag }} 32 | steps: 33 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 34 | - name: Prepare Matrix 35 | id: setup 36 | uses: ./.github/actions/prepare 37 | with: 38 | client: 'lighthouse' 39 | - name: Generate target tag 40 | id: tag 41 | uses: ./.github/actions/docker-tag 42 | with: 43 | input: ${{ inputs.docker_tag || inputs.ref }} 44 | deploy: 45 | needs: 46 | - prepare 47 | runs-on: ${{ matrix.runner }} 48 | continue-on-error: true 49 | strategy: 50 | matrix: 51 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 52 | outputs: 53 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 54 | steps: 55 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 56 | - uses: ./.github/actions/install-deps 57 | with: 58 | repository: ${{ inputs.repository }} 59 | - uses: ./.github/actions/deploy 60 | id: deploy 61 | with: 62 | source_repository: ${{ inputs.repository }} 63 | source_ref: ${{ inputs.ref }} 64 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 65 | target_repository: ethpandaops/lighthouse 66 | target_dockerfile: ./lighthouse/Dockerfile 67 | platform: ${{ matrix.platform }} 68 | build_args: ${{ inputs.build_args }} 69 | 70 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 71 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 72 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 73 | GOPROXY: "${{ vars.GOPROXY }}" 74 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 75 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 76 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 77 | 78 | # This step captures the git commit hash from the deploy action for job output 79 | - name: Set job output 80 | id: set_output 81 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 82 | shell: bash 83 | manifest: 84 | needs: 85 | - prepare 86 | - deploy 87 | runs-on: ubuntu-latest 88 | steps: 89 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 90 | - uses: ./.github/actions/manifest 91 | with: 92 | source_repository: ${{ inputs.repository }} 93 | source_ref: ${{ inputs.ref }} 94 | target_tag: ${{ needs.prepare.outputs.target_tag }} 95 | target_repository: ethpandaops/lighthouse 96 | platforms: ${{ needs.prepare.outputs.platforms }} 97 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 98 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 99 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 100 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 101 | 102 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 103 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 104 | notify: 105 | name: Discord Notification 106 | runs-on: ubuntu-latest 107 | needs: 108 | - prepare 109 | - deploy 110 | - manifest 111 | if: failure() 112 | steps: 113 | - name: Notify 114 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 115 | with: 116 | github-token: ${{ secrets.github_token }} 117 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 118 | -------------------------------------------------------------------------------- /.github/workflows/build-push-lodestar.yml: -------------------------------------------------------------------------------- 1 | name: Build lodestar docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source lodestar repository to build from 8 | default: chainsafe/lodestar 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: unstable 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'lodestar' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | build_script: ./lodestar/build.sh 60 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 61 | target_repository: ethpandaops/lodestar 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 67 | GOPROXY: "${{ vars.GOPROXY }}" 68 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 69 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 70 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 71 | 72 | # This step captures the git commit hash from the deploy action for job output, which can then be 73 | # used by the manifest job. This is done to handle scenarios where there is a commit to the remote 74 | # repository between the deploy and manifest action. 75 | - name: Set job output 76 | id: set_output 77 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 78 | shell: bash 79 | manifest: 80 | needs: 81 | - prepare 82 | - deploy 83 | runs-on: ubuntu-latest 84 | steps: 85 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 86 | - uses: ./.github/actions/manifest 87 | with: 88 | source_repository: ${{ inputs.repository }} 89 | source_ref: ${{ inputs.ref }} 90 | build_script: ./lodestar/build.sh 91 | target_tag: ${{ needs.prepare.outputs.target_tag }} 92 | target_repository: ethpandaops/lodestar 93 | platforms: ${{ needs.prepare.outputs.platforms }} 94 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 95 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 96 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 97 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 98 | 99 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 100 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 101 | notify: 102 | name: Discord Notification 103 | runs-on: ubuntu-latest 104 | needs: 105 | - prepare 106 | - deploy 107 | - manifest 108 | if: failure() 109 | steps: 110 | - name: Notify 111 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 112 | with: 113 | github-token: ${{ secrets.github_token }} 114 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 115 | -------------------------------------------------------------------------------- /.github/workflows/build-push-mev-boost-relay.yml: -------------------------------------------------------------------------------- 1 | name: Build mev-boost-relay docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source mev-boost-relay repository to build from 8 | default: flashbots/mev-boost-relay 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'mev-boost-relay' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/mev-boost-relay 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/mev-boost-relay 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | 98 | notify: 99 | name: Discord Notification 100 | runs-on: ubuntu-latest 101 | needs: 102 | - prepare 103 | - deploy 104 | - manifest 105 | if: failure() 106 | steps: 107 | - name: Notify 108 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 109 | with: 110 | github-token: ${{ secrets.github_token }} 111 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 112 | -------------------------------------------------------------------------------- /.github/workflows/build-push-mev-boost.yml: -------------------------------------------------------------------------------- 1 | name: Build mev-boost docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source mev-boost repository to build from 8 | default: flashbots/mev-boost 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: develop 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'mev-boost' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/mev-boost 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/mev-boost 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-mev-rs.yml: -------------------------------------------------------------------------------- 1 | name: Build mev-rs docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source mev-rs repository to build from 8 | default: ralexstokes/mev-rs 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | build_args: 21 | description: Build arguments to pass to the Docker build 22 | default: "" 23 | type: string 24 | required: false 25 | 26 | jobs: 27 | prepare: 28 | runs-on: ubuntu-latest 29 | outputs: 30 | platforms: ${{ steps.setup.outputs.platforms }} 31 | target_tag: ${{ steps.tag.outputs.docker_tag }} 32 | steps: 33 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 34 | - name: Prepare Matrix 35 | id: setup 36 | uses: ./.github/actions/prepare 37 | with: 38 | client: 'mev-rs' 39 | - name: Generate target tag 40 | id: tag 41 | uses: ./.github/actions/docker-tag 42 | with: 43 | input: ${{ inputs.docker_tag || inputs.ref }} 44 | deploy: 45 | needs: 46 | - prepare 47 | runs-on: ${{ matrix.runner }} 48 | continue-on-error: true 49 | strategy: 50 | matrix: 51 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 52 | outputs: 53 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 54 | steps: 55 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 56 | - uses: ./.github/actions/install-deps 57 | with: 58 | repository: ${{ inputs.repository }} 59 | - uses: ./.github/actions/deploy 60 | id: deploy 61 | with: 62 | source_repository: ${{ inputs.repository }} 63 | source_ref: ${{ inputs.ref }} 64 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 65 | target_repository: ethpandaops/mev-rs 66 | platform: ${{ matrix.platform }} 67 | build_args: ${{ inputs.build_args }} 68 | 69 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 70 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 71 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 72 | GOPROXY: "${{ vars.GOPROXY }}" 73 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 74 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 75 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 76 | 77 | # This step captures the git commit hash from the deploy action for job output 78 | - name: Set job output 79 | id: set_output 80 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 81 | shell: bash 82 | manifest: 83 | needs: 84 | - prepare 85 | - deploy 86 | runs-on: ubuntu-latest 87 | steps: 88 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 89 | - uses: ./.github/actions/manifest 90 | with: 91 | source_repository: ${{ inputs.repository }} 92 | source_ref: ${{ inputs.ref }} 93 | target_tag: ${{ needs.prepare.outputs.target_tag }} 94 | target_repository: ethpandaops/mev-rs 95 | platforms: ${{ needs.prepare.outputs.platforms }} 96 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 97 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 98 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 99 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 100 | 101 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 102 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 103 | notify: 104 | name: Discord Notification 105 | runs-on: ubuntu-latest 106 | needs: 107 | - prepare 108 | - deploy 109 | - manifest 110 | if: failure() 111 | steps: 112 | - name: Notify 113 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 114 | with: 115 | github-token: ${{ secrets.github_token }} 116 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 117 | -------------------------------------------------------------------------------- /.github/workflows/build-push-nethermind.yml: -------------------------------------------------------------------------------- 1 | name: Build nethermind docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source nethermind repository to build from 8 | default: nethermindeth/nethermind 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'nethermind' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/nethermind 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/nethermind 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-nimbus-eth1.yml: -------------------------------------------------------------------------------- 1 | name: Build nimbus-eth1 docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source nimbus repository to build from 8 | default: status-im/nimbus-eth1 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'nimbus-eth1' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/nimbus-eth1 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/nimbus-eth1 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-reth-rbuilder.yml: -------------------------------------------------------------------------------- 1 | name: Build reth-rbuilder docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source reth-rbuilder repository to build from 8 | default: flashbots/rbuilder 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: develop 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | build_args: 21 | description: Build arguments to pass to the Docker build 22 | default: "RBUILDER_BIN=reth-rbuilder" 23 | type: string 24 | required: false 25 | 26 | jobs: 27 | prepare: 28 | runs-on: ubuntu-latest 29 | outputs: 30 | platforms: ${{ steps.setup.outputs.platforms }} 31 | target_tag: ${{ steps.tag.outputs.docker_tag }} 32 | steps: 33 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 34 | - name: Prepare Matrix 35 | id: setup 36 | uses: ./.github/actions/prepare 37 | with: 38 | client: 'reth-rbuilder' 39 | - name: Generate target tag 40 | id: tag 41 | uses: ./.github/actions/docker-tag 42 | with: 43 | input: ${{ inputs.docker_tag || inputs.ref }} 44 | deploy: 45 | needs: 46 | - prepare 47 | runs-on: ${{ matrix.runner }} 48 | continue-on-error: true 49 | strategy: 50 | matrix: 51 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 52 | outputs: 53 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 54 | steps: 55 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 56 | - uses: ./.github/actions/install-deps 57 | with: 58 | repository: ${{ inputs.repository }} 59 | - uses: ./.github/actions/deploy 60 | id: deploy 61 | with: 62 | source_repository: ${{ inputs.repository }} 63 | source_ref: ${{ inputs.ref }} 64 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 65 | target_repository: ethpandaops/reth-rbuilder 66 | platform: ${{ matrix.platform }} 67 | build_args: ${{ inputs.build_args }} 68 | 69 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 70 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 71 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 72 | GOPROXY: "${{ vars.GOPROXY }}" 73 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 74 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 75 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 76 | 77 | # This step captures the git commit hash from the deploy action for job output 78 | - name: Set job output 79 | id: set_output 80 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 81 | shell: bash 82 | manifest: 83 | needs: 84 | - prepare 85 | - deploy 86 | runs-on: ubuntu-latest 87 | steps: 88 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 89 | - uses: ./.github/actions/manifest 90 | with: 91 | source_repository: ${{ inputs.repository }} 92 | source_ref: ${{ inputs.ref }} 93 | target_tag: ${{ needs.prepare.outputs.target_tag }} 94 | target_repository: ethpandaops/reth-rbuilder 95 | platforms: ${{ needs.prepare.outputs.platforms }} 96 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 97 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 98 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 99 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 100 | 101 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 102 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 103 | notify: 104 | name: Discord Notification 105 | runs-on: ubuntu-latest 106 | needs: 107 | - prepare 108 | - deploy 109 | - manifest 110 | if: failure() 111 | steps: 112 | - name: Notify 113 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 114 | with: 115 | github-token: ${{ secrets.github_token }} 116 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 117 | -------------------------------------------------------------------------------- /.github/workflows/build-push-reth.yml: -------------------------------------------------------------------------------- 1 | name: Build reth docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source reth repository to build from 8 | default: paradigmxyz/reth 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'reth' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/reth 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/reth 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-rustic-builder.yml: -------------------------------------------------------------------------------- 1 | name: Build rustic-builder docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source rustic-builder repository to build from 8 | default: pawanjay176/rustic-builder 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: main 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'rustic-builder' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/rustic-builder 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/rustic-builder 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | 95 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 96 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 97 | notify: 98 | name: Discord Notification 99 | runs-on: ubuntu-latest 100 | needs: 101 | - prepare 102 | - deploy 103 | - manifest 104 | if: failure() 105 | steps: 106 | - name: Notify 107 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 108 | with: 109 | github-token: ${{ secrets.github_token }} 110 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 111 | -------------------------------------------------------------------------------- /.github/workflows/build-push-teku.yml: -------------------------------------------------------------------------------- 1 | name: Build teku docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source teku repository to build from 8 | default: consensys/teku 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'teku' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | build_script: ./teku/build.sh 60 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 61 | target_repository: ethpandaops/teku 62 | platform: ${{ matrix.platform }} 63 | 64 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 65 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 66 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 67 | GOPROXY: "${{ vars.GOPROXY }}" 68 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 69 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 70 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 71 | 72 | # This step captures the git commit hash from the deploy action for job output 73 | - name: Set job output 74 | id: set_output 75 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 76 | shell: bash 77 | manifest: 78 | needs: 79 | - prepare 80 | - deploy 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 84 | - uses: ./.github/actions/manifest 85 | with: 86 | source_repository: ${{ inputs.repository }} 87 | source_ref: ${{ inputs.ref }} 88 | target_tag: ${{ needs.prepare.outputs.target_tag }} 89 | target_repository: ethpandaops/teku 90 | platforms: ${{ needs.prepare.outputs.platforms }} 91 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 92 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 93 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 94 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 95 | 96 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 97 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 98 | notify: 99 | name: Discord Notification 100 | runs-on: ubuntu-latest 101 | needs: 102 | - prepare 103 | - deploy 104 | - manifest 105 | if: failure() 106 | steps: 107 | - name: Notify 108 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 109 | with: 110 | github-token: ${{ secrets.github_token }} 111 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 112 | -------------------------------------------------------------------------------- /.github/workflows/build-push-tx-fuzz.yml: -------------------------------------------------------------------------------- 1 | name: Build tx-fuzz docker image 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repository: 7 | description: The source tx-fuzz repository to build from 8 | default: MariusVanDerWijden/tx-fuzz 9 | type: string 10 | required: true 11 | ref: 12 | description: The branch, tag or SHA to checkout and build from 13 | default: master 14 | type: string 15 | required: true 16 | docker_tag: 17 | description: Override target docker tag (defaults to the above source ref if left blank) 18 | type: string 19 | required: false 20 | 21 | jobs: 22 | prepare: 23 | runs-on: ubuntu-latest 24 | outputs: 25 | platforms: ${{ steps.setup.outputs.platforms }} 26 | target_tag: ${{ steps.tag.outputs.docker_tag }} 27 | steps: 28 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | - name: Prepare Matrix 30 | id: setup 31 | uses: ./.github/actions/prepare 32 | with: 33 | client: 'tx-fuzz' 34 | - name: Generate target tag 35 | id: tag 36 | uses: ./.github/actions/docker-tag 37 | with: 38 | input: ${{ inputs.docker_tag || inputs.ref }} 39 | deploy: 40 | needs: 41 | - prepare 42 | runs-on: ${{ matrix.runner }} 43 | continue-on-error: true 44 | strategy: 45 | matrix: 46 | include: ${{fromJson(needs.prepare.outputs.platforms)}} 47 | outputs: 48 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 49 | steps: 50 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 51 | - uses: ./.github/actions/install-deps 52 | with: 53 | repository: ${{ inputs.repository }} 54 | - uses: ./.github/actions/deploy 55 | id: deploy 56 | with: 57 | source_repository: ${{ inputs.repository }} 58 | source_ref: ${{ inputs.ref }} 59 | target_tag: ${{ needs.prepare.outputs.target_tag }}-${{ matrix.slug }} 60 | target_repository: ethpandaops/tx-fuzz 61 | platform: ${{ matrix.platform }} 62 | 63 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 64 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 65 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 66 | GOPROXY: "${{ vars.GOPROXY }}" 67 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 68 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 69 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 70 | 71 | # This step captures the git commit hash from the deploy action for job output 72 | - name: Set job output 73 | id: set_output 74 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 75 | shell: bash 76 | manifest: 77 | needs: 78 | - prepare 79 | - deploy 80 | runs-on: ubuntu-latest 81 | steps: 82 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 83 | - uses: ./.github/actions/manifest 84 | with: 85 | source_repository: ${{ inputs.repository }} 86 | source_ref: ${{ inputs.ref }} 87 | target_tag: ${{ needs.prepare.outputs.target_tag }} 88 | target_repository: ethpandaops/tx-fuzz 89 | platforms: ${{ needs.prepare.outputs.platforms }} 90 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 91 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 92 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 93 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 94 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 95 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 96 | notify: 97 | name: Discord Notification 98 | runs-on: ubuntu-latest 99 | needs: 100 | - prepare 101 | - deploy 102 | - manifest 103 | if: failure() 104 | steps: 105 | - name: Notify 106 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 107 | with: 108 | github-token: ${{ secrets.github_token }} 109 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 110 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_call: 3 | inputs: 4 | source_repository: 5 | description: The source repository to build from 6 | type: string 7 | required: true 8 | source_ref: 9 | description: The branch, tag or SHA to checkout and build from 10 | type: string 11 | required: true 12 | build_script: 13 | description: The bash script path in this repository to run instead of the Docker build & push script. You must push the image yourself. 14 | type: string 15 | required: false 16 | build_args: 17 | description: Extra arguments to pass to the build script 18 | type: string 19 | required: false 20 | target_tag: 21 | description: Docker hub tag to push to 22 | type: string 23 | required: true 24 | target_repository: 25 | description: Docker hub repository to push to 26 | type: string 27 | required: true 28 | target_dockerfile: 29 | description: Dockerfile path in this repository to build from. Omit to use source repository Dockerfile 30 | type: string 31 | default: ./source/Dockerfile 32 | required: false 33 | platforms: 34 | # eg [{"platform":"linux/amd64", "runner": "ARM64", "slug": "something-arm64"},{"platform":"linux/arm64", "runner": "ubuntu-latest", "slug": "something-amd64"}] 35 | description: JSON list of platforms to build for 36 | type: string 37 | required: true 38 | harbor_registry: 39 | description: Harbor registry to push the images to 40 | type: string 41 | default: '' 42 | required: false 43 | HARBOR_USERNAME: 44 | description: Harbor username 45 | type: string 46 | required: false 47 | DOCKER_USERNAME: 48 | description: Docker Hub username 49 | type: string 50 | required: true 51 | GOPROXY: 52 | description: GOPROXY 53 | type: string 54 | required: false 55 | secrets: 56 | DOCKER_PASSWORD: 57 | required: true 58 | HARBOR_PASSWORD: 59 | required: false 60 | MACOS_PASSWORD: 61 | required: true 62 | 63 | jobs: 64 | deploy: 65 | name: Deploy ${{ matrix.config.slug }} ${{ inputs.target_tag }} 66 | continue-on-error: false 67 | strategy: 68 | fail-fast: false 69 | matrix: 70 | config: ${{fromJson(inputs.platforms)}} 71 | runs-on: ${{ matrix.config.runner }} 72 | outputs: 73 | git_commit_hash: ${{ steps.set_output.outputs.git_commit_hash }} 74 | git_commit_hash_full: ${{ steps.set_output.outputs.git_commit_hash_full }} 75 | steps: 76 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 77 | - uses: ./.github/actions/install-deps 78 | with: 79 | repository: ${{ inputs.source_repository }} 80 | - uses: ./.github/actions/deploy 81 | id: deploy 82 | with: 83 | source_repository: ${{ inputs.source_repository }} 84 | source_ref: ${{ inputs.source_ref }} 85 | build_script: ${{ inputs.build_script }} 86 | build_args: ${{ inputs.build_args }} 87 | target_tag: ${{ inputs.target_tag }}-${{ matrix.config.slug }} 88 | target_repository: ${{ inputs.target_repository }} 89 | target_dockerfile: ${{ inputs.target_dockerfile }} 90 | platform: ${{ matrix.config.platform }} 91 | DOCKER_USERNAME: "${{ inputs.DOCKER_USERNAME }}" 92 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 93 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 94 | GOPROXY: "${{ inputs.GOPROXY }}" 95 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 96 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 97 | harbor_registry: ${{ vars.HARBOR_REGISTRY }} 98 | 99 | # This step captures the git commit hash from the deploy action for job output 100 | - name: Set job output 101 | id: set_output 102 | run: echo "git_commit_hash=${{ steps.deploy.outputs.git_commit_hash }}" >> $GITHUB_OUTPUT 103 | shell: bash 104 | mainfest: 105 | name: Manifest 106 | needs: deploy 107 | runs-on: ubuntu-latest 108 | steps: 109 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 110 | - uses: ./.github/actions/manifest 111 | with: 112 | platforms: ${{ inputs.platforms }} 113 | source_repository: ${{ inputs.source_repository }} 114 | source_ref: ${{ inputs.source_ref }} 115 | target_tag: ${{ inputs.target_tag }} 116 | target_repository: ${{ inputs.target_repository }} 117 | harbor_registry: ${{ inputs.harbor_registry }} 118 | HARBOR_USERNAME: "${{ inputs.HARBOR_USERNAME }}" 119 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 120 | DOCKER_USERNAME: "${{ inputs.DOCKER_USERNAME }}" 121 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 122 | git_commit_hash: ${{ needs.deploy.outputs.git_commit_hash }} 123 | -------------------------------------------------------------------------------- /.github/workflows/scheduled.yml: -------------------------------------------------------------------------------- 1 | name: Scheduled 2 | 3 | on: 4 | schedule: 5 | - cron: '45 * * * *' 6 | workflow_dispatch: 7 | 8 | concurrency: 9 | group: "scheduled" 10 | cancel-in-progress: true 11 | 12 | jobs: 13 | check: 14 | runs-on: ubuntu-latest 15 | outputs: 16 | configs: ${{ steps.repo_check.outputs.configs }} 17 | steps: 18 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 19 | - uses: mikefarah/yq@b534aa9ee5d38001fba3cd8fe254a037e4847b37 # v4.45.4 20 | - name: Set up Python 21 | uses: actions/setup-python@v5 22 | with: 23 | python-version: '3.10' 24 | - name: Install dependencies 25 | run: | 26 | python -m pip install --upgrade pip 27 | pip install pyyaml 28 | - name: Generate config.yaml 29 | run: | 30 | python generate_config.py 31 | echo "Generated config.yaml for workflow use" 32 | - name: Login to Docker Hub 33 | uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 34 | with: 35 | username: ${{ vars.DOCKER_USERNAME }} 36 | password: ${{ secrets.DOCKER_PASSWORD }} 37 | - id: repo_check 38 | env: 39 | CONCURRENT_IMAGE_PULL: ${{ vars.CONCURRENT_IMAGE_PULL }} 40 | run: | 41 | # This script reads config.yaml, platforms.yaml and runners.yaml to generate a list of configurations to build and deploy 42 | # It will: 43 | # - check the source respository for the latest commit hash 44 | # - check if the built image exists in our dockerhub registry 45 | # - generate a list of configurations to build and deploy 46 | 47 | CONFIG_FILE="config.yaml" 48 | PLATFORMS_FILE="platforms.yaml" 49 | RUNNERS_FILE="runners.yaml" 50 | 51 | # Create a temporary directory for storing intermediate results 52 | TEMP_DIR=$(mktemp -d) 53 | # Ensure the temporary directory is removed when the script exits 54 | trap "rm -rf $TEMP_DIR" EXIT 55 | 56 | process_commits() { 57 | local LINE=$1 58 | local SOURCE_REPOSITORY=$2 59 | local SOURCE_REF=$3 60 | local TARGET_REPOSITORY=$4 61 | local TARGET_TAG=$5 62 | 63 | local CLIENT="${TARGET_REPOSITORY#*/}" 64 | local RESPONSE=$(curl -s -H "Accept: application/vnd.github+json" \ 65 | -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ 66 | "https://api.github.com/repos/${SOURCE_REPOSITORY}/commits/${SOURCE_REF}?per_page=1") 67 | local COMMIT_HASH=$(echo "$RESPONSE" | jq -r '.sha' | cut -c1-7) 68 | 69 | if [[ -z "$COMMIT_HASH" || "$COMMIT_HASH" == "null" ]]; then 70 | # Log error but don't exit; just skip this configuration 71 | echo "[LINE:$LINE] Error fetching commit hash for ${SOURCE_REPOSITORY}#${SOURCE_REF}, skipping." 72 | return 73 | fi 74 | 75 | local configOutput="${TEMP_DIR}/${LINE}_commits.json" 76 | touch $configOutput 77 | 78 | echo "{\"line\": \"$LINE\", \"commit_hash\": \"$COMMIT_HASH\"}," >> $configOutput 79 | } 80 | 81 | process_image() { 82 | local LINE=$1 83 | local IMAGE=$2 84 | local URL=$3 85 | 86 | local imageOutput="${TEMP_DIR}/${LINE}_image.json" 87 | touch $imageOutput 88 | local exists=$(curl -s $URL | jq '.results | length > 0') 89 | 90 | # check if exists == true 91 | if [ "$exists" == "true" ]; then 92 | exists=true 93 | else 94 | exists=false 95 | fi 96 | 97 | echo "{\"line\": \"$LINE\", \"image\": \"$IMAGE\", \"exists\": $exists}" >> $imageOutput 98 | } 99 | 100 | # Get commit hashes for each configuration in parallel 101 | while IFS=$'\t' read -r LINE SOURCE_REPOSITORY SOURCE_REF TARGET_REPOSITORY TARGET_TAG; do 102 | process_commits "$LINE" "$SOURCE_REPOSITORY" "$SOURCE_REF" "$TARGET_REPOSITORY" "$TARGET_TAG" & 103 | done < <(yq -r 'to_entries | map_values({"value":.value, "index":.key}) | .[] | [.index, .value.source.repository, .value.source.ref, .value.target.repository, .value.target.tag] | @tsv' "$CONFIG_FILE") 104 | 105 | wait 106 | 107 | # Initialize JSON arrays 108 | COMMITS="[" 109 | 110 | # Concatenate results, ensuring files exist before attempting to read 111 | for file in $TEMP_DIR/*_commits.json; do 112 | if [ -f "$file" ]; then 113 | COMMITS+=$(cat "$file") 114 | fi 115 | done 116 | 117 | # Remove trailing commas and close JSON arrays 118 | COMMITS="${COMMITS%,}]" 119 | 120 | echo "Checking if images exist in dockerhub..." 121 | while IFS=$'\t' read -r LINE SOURCE_REPOSITORY SOURCE_REF TARGET_REPOSITORY TARGET_TAG; do 122 | # get the image commit hash from LINE 123 | COMMIT_HASH=$(echo "$COMMITS" | jq -r --arg LINE "$LINE" '.[] | select(.line == $LINE) | .commit_hash') 124 | IMAGE_TAG="${TARGET_TAG}-${COMMIT_HASH}" 125 | IMAGE="${TARGET_REPOSITORY}:${IMAGE_TAG}" 126 | URL="https://hub.docker.com/v2/repositories/${TARGET_REPOSITORY}/tags?page_size=25&page=1&ordering=&name=${IMAGE_TAG}" 127 | process_image $LINE $IMAGE $URL & 128 | done < <(yq -r 'to_entries | map_values({"value":.value, "index":.key}) | .[] | [.index, .value.source.repository, .value.source.ref, .value.target.repository, .value.target.tag] | @tsv' "$CONFIG_FILE") 129 | 130 | wait 131 | 132 | declare -A images 133 | 134 | # Concatenate results, ensuring files exist before attempting to read 135 | for file in $TEMP_DIR/*_image.json; do 136 | if [ -f "$file" ]; then 137 | LINE=$(cat "$file" | jq -r '.line') 138 | IMAGE=$(cat "$file" | jq -r '.image') 139 | EXISTS=$(cat "$file" | jq -r '.exists') 140 | images[$IMAGE]=$EXISTS 141 | fi 142 | done 143 | 144 | CONFIGS="configs=[" 145 | 146 | echo "Generating configuration files..." 147 | while IFS=$'\t' read -r LINE SOURCE_REPOSITORY SOURCE_REF TARGET_REPOSITORY TARGET_TAG; do 148 | # get the image commit hash from LINE 149 | COMMIT_HASH=$(echo "$COMMITS" | jq -r --arg LINE "$LINE" '.[] | select(.line == $LINE) | .commit_hash') 150 | IMAGE_TAG="${TARGET_TAG}-${COMMIT_HASH}" 151 | IMAGE="${TARGET_REPOSITORY}:${IMAGE_TAG}" 152 | CLIENT="${TARGET_REPOSITORY#*/}" 153 | 154 | if [ "${images[$IMAGE]}" == "false" ]; then 155 | # Handle platforms and runners, ensuring output files are created even if empty 156 | platforms=$(yq e ".$CLIENT[]" "$PLATFORMS_FILE") 157 | platformsArr="" 158 | 159 | for platform in $platforms; do 160 | runner=$(yq e ".\"$platform\"" "$RUNNERS_FILE") 161 | slug=$(echo "$platform" | tr '/' '-') 162 | platformsArr+="{\\\"platform\\\": \\\"$platform\\\", \\\"runner\\\": \\\"$runner\\\", \\\"slug\\\": \\\"$slug\\\"}," 163 | done 164 | platformsArr="${platformsArr%,}" 165 | # convert to string 166 | platformsOutput="{\"platforms\": \"[$platformsArr]\"}" 167 | 168 | CONFIGS+=$(echo "$(yq -r -o=json ".[${LINE}]" "$CONFIG_FILE" | jq --argjson plat "$platformsOutput" '. + $plat'),") 169 | fi 170 | done < <(yq -r 'to_entries | map_values({"value":.value, "index":.key}) | .[] | [.index, .value.source.repository, .value.source.ref, .value.target.repository, .value.target.tag] | @tsv' "$CONFIG_FILE") 171 | 172 | # Remove trailing commas and close JSON arrays 173 | CONFIGS="${CONFIGS%,}]" 174 | 175 | echo "CONFIGS: $CONFIGS" 176 | echo $CONFIGS >> $GITHUB_OUTPUT 177 | 178 | deploy: 179 | needs: check 180 | if: ${{ needs.check.outputs.configs != '[]' && needs.check.outputs.configs != '' }} 181 | uses: ./.github/workflows/deploy.yml 182 | strategy: 183 | fail-fast: false 184 | matrix: 185 | config: ${{fromJson(needs.check.outputs.configs)}} 186 | name: ${{ matrix.config.source.repository }}#${{ matrix.config.source.ref }} ${{ matrix.config.target.tag }} 187 | with: 188 | source_repository: ${{ matrix.config.source.repository }} 189 | source_ref: ${{ matrix.config.source.ref }} 190 | build_script: ${{ matrix.config.build_script }} 191 | build_args: "${{ matrix.config.build_args }}" 192 | target_tag: ${{ matrix.config.target.tag }} 193 | target_repository: ${{ matrix.config.target.repository }} 194 | target_dockerfile: ${{ matrix.config.target.dockerfile }} 195 | platforms: ${{ matrix.config.platforms }} 196 | harbor_registry: "${{ vars.HARBOR_REGISTRY }}" 197 | HARBOR_USERNAME: "${{ vars.HARBOR_USERNAME }}" 198 | DOCKER_USERNAME: "${{ vars.DOCKER_USERNAME }}" 199 | GOPROXY: "${{ vars.GOPROXY }}" 200 | secrets: 201 | DOCKER_PASSWORD: "${{ secrets.DOCKER_PASSWORD }}" 202 | HARBOR_PASSWORD: "${{ secrets.HARBOR_PASSWORD }}" 203 | MACOS_PASSWORD: "${{ secrets.MACOS_PASSWORD }}" 204 | 205 | notify: 206 | name: Discord Notification 207 | runs-on: ubuntu-latest 208 | needs: 209 | - check 210 | - deploy 211 | if: cancelled() || failure() 212 | steps: 213 | - name: Notify 214 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 215 | with: 216 | github-token: ${{ secrets.github_token }} 217 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 218 | -------------------------------------------------------------------------------- /.github/workflows/vet.yml: -------------------------------------------------------------------------------- 1 | name: Vet 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | validate: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 14 | - name: Setup Python 15 | uses: actions/setup-python@v5 16 | with: 17 | python-version: '3.x' 18 | - name: Install Python dependencies 19 | run: pip install PyYAML 20 | - name: Generate config.yaml 21 | run: python3 generate_config.py 22 | - name: schema validate 23 | uses: nrkno/yaml-schema-validator-github-action@54e1fe495e281c451e1ece58808b6fd7710c30ed # v5.1.0 24 | with: 25 | schema: schema.yaml 26 | target: config.yaml 27 | duplicates: 28 | runs-on: ubuntu-latest 29 | steps: 30 | - name: Checkout 31 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 32 | - name: Setup Python 33 | uses: actions/setup-python@v5 34 | with: 35 | python-version: '3.x' 36 | - name: Install Python dependencies 37 | run: pip install PyYAML 38 | - name: Generate config.yaml 39 | run: python3 generate_config.py 40 | - uses: mikefarah/yq@b534aa9ee5d38001fba3cd8fe254a037e4847b37 # v4.45.4 41 | - name: duplicate repository tag check 42 | run: | 43 | OUTPUT=$(yq 'group_by(.target.repository + ":" + .target.tag) | map(select(length>1))' config.yaml) 44 | if [ "$OUTPUT" != "[]" ]; then 45 | echo "Duplicate tag found in config.yaml" 46 | echo $OUTPUT 47 | exit 1 48 | fi 49 | notify: 50 | name: Discord Notification 51 | runs-on: ubuntu-latest 52 | needs: 53 | - validate 54 | - duplicates 55 | if: failure() 56 | steps: 57 | - name: Notify 58 | uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1 59 | with: 60 | github-token: ${{ secrets.github_token }} 61 | discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | config.yaml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eth-client-docker-image-builder 2 | 3 | Automates docker builds for ethereum clients. The build process is scheduled every hour to check source repositories for new commits. 4 | 5 | ## Build image on demand 6 | 7 | Run the *Build **client*** workflow; 8 | - [Build Besu](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-besu.yml) [[source](https://github.com/hyperledger/besu)] 9 | - [Build Eleel](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-eleel.yml) [[source](https://github.com/sigp/eleel)] 10 | - [Build Erigon](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-erigon.yml) [[source](https://github.com/ledgerwatch/erigon)] 11 | - [Build EthereumJS](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-ethereumjs.yml) [[source](https://github.com/ethereumjs/ethereumjs-monorepo)] 12 | - [Build Ethrex](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-ethrex.yml) [[source](https://github.com/lambdaclass/ethrex)] 13 | - [Build Geth](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-geth.yml) [[source](https://github.com/ethereum/go-ethereum)] 14 | - [Build Lighthouse](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-lighthouse.yml) [[source](https://github.com/sigp/lighthouse)] 15 | - [Build Lodestar](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-lodestar.yml) [[source](https://github.com/chainsafe/lodestar)] 16 | - [Build Nethermind](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-nethermin.yml) [[source](https://github.com/nethermindeth/nethermind)] 17 | - [Build Nimbus-Eth2](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-nimbus-eth2.yml) [[source](https://github.com/status-im/nimbus-eth2)] 18 | - [Build Nimbus-Eth1](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-nimbus-eth1.yml) [[source](https://github.com/status-im/nimbus-eth1)] 19 | - [Build Prysm](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-prysm.yml) [[source](https://github.com/offchainlabs/prysm)] 20 | - [Build Reth](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-reth.yml) [[source](https://github.com/paradigmxyz/reth)] 21 | - [Build Teku](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-teku.yml) [[source](https://github.com/consensys/teku)] 22 | - [Build Grandine](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-grandine.yml) [[source](https://github.com/grandinetech/grandine)] 23 | 24 | Run the *Build **tooling*** workflow; 25 | - [Build Eth-DAS-Guardian](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-eth-das-guardian.yml) [[source](https://github.com/probe-lab/eth-das-guardian)] 26 | - [Build Flashbots Builder](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-flashbots-builder.yml) [[source](https://github.com/flashbots/builder)] 27 | - [Build tx-fuzz](https://github.com/ethpandaops/eth-client-docker-image-builder/actions/workflows/build-push-tx-fuzz.yaml) [[source](https://github.com/MariusVanDerWijden/tx-fuzz)] 28 | - [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)] 29 | - [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)] 30 | - [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)] 31 | - [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)] 32 | - [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)] 33 | - [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)] 34 | - [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)] 35 | 36 | ## Adding a new image to build on schedule 37 | 38 | Add a new image to [`config.yaml`](./config.yaml) file and it will be built on schedule from [this workflow](https://github.com/ethpandaops/eth-client-docker-image-builder/blob/master/.github/workflows/scheduled.yml). 39 | 40 | ```yaml 41 | - source: 42 | repository: sigp/lighthouse # source repository to build from 43 | ref: stable # source repository branch/tag/commit to build from 44 | build_script: ./teku/build.sh # optional build script to run INSTEAD of the docker build & push (see below) 45 | target: 46 | tag: stable # tag to add to the docker image tag, this must be unique for each docker hub repository 47 | repository: ethpandaops/lighthouse # dockerhub target to deploy the built image 48 | dockerfile: ./lighthouse/Dockerfile # optional docker file to use, defaults to the source repository's Dockerfile 49 | ``` 50 | 51 | ## Output image tags 52 | 53 | Take the following config; 54 | 55 | ```yaml 56 | - source: 57 | repository: sigp/lighthouse 58 | ref: stable 59 | target: 60 | tag: banana 61 | repository: ethpandaops/lighthouse 62 | ``` 63 | 64 | This would produce the following docker image tags; 65 | 66 | ```yaml 67 | # the tag by itself to have the latest build 68 | ethpandaops/lighthouse:banana 69 | # the tag and the source repository's commit hash 70 | ethpandaops/lighthouse:banana-abcd123 71 | ``` 72 | 73 | ## How does the `build_script` work? 74 | 75 | The `build_script` is a bash script that is run INSTEAD of the docker build & push. This is useful for clients that have a custom build process. 76 | 77 | When the `build_script` is set, you **must** build and push the docker image yourself! Docker will already be logged in to the target repository. You **should** try to use the `target_tag` and `target_repository` environment variables to tag your image. 78 | 79 | The following environment variables are available to the `build_script`; 80 | - `source_repository` - source repository to build from 81 | - `source_ref` - source repository branch/tag/commit to build from 82 | - `target_tag` - tag to add to the docker image tag 83 | - `target_repository` - dockerhub target to deploy the built image 84 | - `target_dockerfile` - optional docker file to use, defaults to the source repository's Dockerfile 85 | - `source_git_commit_hash` - the source repository's short commit hash 86 | - `source_git_commit_hash_full` - the source repository's full commit hash 87 | 88 | Example `build_script` file; 89 | ```bash 90 | #!/bin/bash 91 | 92 | # helper to get source directory 93 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 94 | cd ${SCRIPT_DIR}/../source 95 | 96 | # do something here that requires this custom build script 97 | # ... 98 | 99 | # finally build with the tags from the dockerfile 100 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" -f "../${target_dockerfile}" . 101 | 102 | # push the image tags 103 | docker push "${target_repository}:${target_tag}" 104 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 105 | ``` 106 | 107 | ## Additional Configuration Files 108 | Our image building process utilizes two additional configuration files: [`platforms.yaml`](./platforms.yaml) and [`runners.yaml`](./runners.yaml). These files help in determining the platforms for which docker images should be built and specifying the runners to use for those platforms, respectively. 109 | 110 | ### [`platforms.yaml`](./platforms.yaml) 111 | This configuration determines the platforms for which each client will have a Docker image built. 112 | 113 | Sample Content: 114 | ```yaml 115 | besu: 116 | - linux/amd64 117 | lighthouse: 118 | - linux/amd64 119 | - linux/arm64 120 | ``` 121 | In the example above, the client 'besu' and 'lighthouse' are both configured to have Docker images built for the linux/amd64 platform. While 'lighthouse' is also configured to have Docker images built for the linux/arm64 platform. 122 | 123 | ### [`runners.yaml`](./runners.yaml) 124 | This configuration maps platforms to GitHub Action runners. It tells our workflow which runner should be used when building a Docker image for a specific platform. 125 | 126 | Sample Content: 127 | ```yaml 128 | linux/amd64: ubuntu-latest 129 | linux/arm64: self-hosted 130 | ``` 131 | 132 | In this example, the platform linux/amd64 will use the ubuntu-latest runner, while darwin/arm64 will use the self-hosted runner. 133 | 134 | ## Lint locally 135 | 136 | Requirements; 137 | - Python 3.6+ 138 | - [Yamale](https://github.com/23andMe/Yamale) 139 | - [yq](https://github.com/mikefarah/yq) 140 | 141 | ```bash 142 | # make sure yamale is installed 143 | pip install yamale 144 | 145 | # yamale lint 146 | yamale -s schema.yaml config.yaml 147 | 148 | # check unique target tag, should return [] 149 | yq 'group_by(.target.repository + ":" + .target.tag) | map(select(length>1))' config.yaml 150 | ``` 151 | -------------------------------------------------------------------------------- /besu/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | ./gradlew distDocker 6 | 7 | # generate the docker image tag based off besu gradle build 8 | # view the calculateVersion gradle function incase of changes upstream 9 | # https://github.com/hyperledger/besu/blob/main/build.gradle 10 | getImageTag() { 11 | local length=${1:-8} # Default length 12 | local gitFolder="$PWD/.git/" 13 | if [ ! -d "$gitFolder" ]; then 14 | # If not a directory, attempt to follow the .git file indication for worktrees or submodules 15 | gitFolder=$(cat "$gitFolder" | awk '{print $2}')"/" 16 | fi 17 | 18 | local headContent=$(cat "${gitFolder}HEAD") 19 | local isCommit=0 20 | local commitHash="" 21 | local refHeadFile="" 22 | 23 | if [[ $headContent =~ ^ref: ]]; then 24 | # It's a reference to a branch 25 | local ref=$(echo $headContent | cut -d ' ' -f 2) 26 | refHeadFile="${gitFolder}${ref}" 27 | commitHash=$(cat "$refHeadFile" | cut -c1-$length) 28 | else 29 | # It's a direct commit hash in HEAD 30 | isCommit=1 31 | commitHash=$(echo $headContent | cut -c1-$length) 32 | refHeadFile="${gitFolder}HEAD" 33 | fi 34 | 35 | # Use head file modification time as a proxy for the build date 36 | local lastModified=$(date -r "$refHeadFile" "+%y.%-m") # Format date as "yy.M" 37 | 38 | echo "${lastModified}-develop-${commitHash}" 39 | } 40 | 41 | # list all docker images 42 | echo "Listing all docker images from gradle build:" 43 | docker images --format "{{.Repository}}:{{.Tag}}" 44 | 45 | # list of tags to check for after building from gradle 46 | gradle_tags=( 47 | "hyperledger/besu:$(getImageTag)" 48 | "hyperledger/besu:$(getImageTag 7)" # legacy tag 49 | ) 50 | 51 | echo "Listing all calculated image tags:" 52 | for gradle_tag in "${gradle_tags[@]}"; do 53 | echo "${gradle_tag}" 54 | done 55 | 56 | tag="" 57 | for gradle_tag in "${gradle_tags[@]}"; do 58 | if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "${gradle_tag}"; then 59 | tag="${gradle_tag}" 60 | echo "Matched ${gradle_tag} as the correct image tag." 61 | break 62 | fi 63 | done 64 | 65 | if [ -z "$tag" ]; then 66 | echo "Error: Can't find expected image tag after building from Gradle. Might be updates to source repository's build.gradle." 67 | exit 1 68 | fi 69 | 70 | docker tag "${tag}" "${target_repository}:${target_tag}" 71 | docker push "${target_repository}:${target_tag}" 72 | docker tag "${tag}" "${target_repository}:${target_tag}-${source_git_commit_hash}" 73 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 74 | -------------------------------------------------------------------------------- /branches.yaml: -------------------------------------------------------------------------------- 1 | # Simple configuration for Ethereum client branches to build 2 | 3 | # Default upstream repository is assumed for each client 4 | # Branch names are used directly as tags unless in alt_repos 5 | 6 | besu: 7 | branches: 8 | - main 9 | - fusaka-devnet-0 10 | - fusaka-devnet-1 11 | - performance 12 | 13 | erigon: 14 | branches: 15 | - main 16 | - fusaka-devnet-0 17 | - performance 18 | 19 | ethereumjs: 20 | branches: 21 | - master 22 | - stable 23 | - 7702-devnet-4-plus-t8ntool 24 | 25 | geth: 26 | branches: 27 | - master 28 | - multicall 29 | - fusaka-devnet-0 30 | - performance 31 | - fusaka-devnet-1 32 | alt_repos: 33 | gballet/go-ethereum: 34 | - kaustinen-with-shapella 35 | - tpgram 36 | - eip-4762-rewrite 37 | MariusVanDerWijden/go-ethereum: 38 | - bad-block-generator 39 | 40 | reth: 41 | branches: 42 | - main 43 | - performance 44 | - fusaka/devnet1 45 | alt_repos: 46 | paradigmxyz/reth: 47 | - rkrasiuk/peerdas 48 | 49 | lighthouse: 50 | branches: 51 | - stable 52 | - unstable 53 | - fusaka-devnet-1 54 | alt_repos: 55 | macladson/lighthouse: 56 | - verkle-trees-capella 57 | 58 | lodestar: 59 | branches: 60 | - unstable 61 | - peerDAS 62 | - focil 63 | 64 | nethermind: 65 | branches: 66 | - master 67 | - feature/peerdas 68 | - devnet-0 69 | - fusaka 70 | - performance 71 | 72 | nimbus-eth2: 73 | branches: 74 | - unstable 75 | - stable 76 | - column-syncer 77 | 78 | nimbus-validator-client: 79 | # Uses same repo as nimbus-eth2 80 | branches: 81 | - unstable 82 | - stable 83 | 84 | nimbus-eth1: 85 | branches: 86 | - master 87 | - fusaka-devnet-1 88 | 89 | prysm-beacon-chain: 90 | branches: 91 | - develop 92 | - master 93 | - peerDAS 94 | - fusaka-devnet-1 95 | 96 | prysm-validator: 97 | # Uses same repo as prysm-beacon-chain 98 | branches: 99 | - develop 100 | - master 101 | - peerDAS 102 | - fusaka-devnet-1 103 | 104 | teku: 105 | branches: 106 | - master 107 | - das 108 | alt_repos: 109 | zilm13/teku: 110 | - verkle-trees 111 | 112 | eleel: 113 | branches: 114 | - main 115 | 116 | flashbots-builder: 117 | branches: 118 | - main 119 | 120 | tx-fuzz: 121 | branches: 122 | - master 123 | 124 | goomy-blob: 125 | branches: 126 | - master 127 | 128 | ethereum-genesis-generator: 129 | branches: 130 | - master 131 | - verkle 132 | - verkle-gen 133 | - bellatrix-genesis 134 | 135 | armiarma: 136 | branches: 137 | - master 138 | 139 | grandine: 140 | branches: 141 | - develop 142 | - master 143 | - peerdas-fulu 144 | - das 145 | alt_repos: 146 | hangleang/grandine: 147 | - peerdas-devnet-7 148 | - peerdas-fulu 149 | 150 | mev-rs: 151 | branches: 152 | - main 153 | 154 | reth-rbuilder: 155 | branches: 156 | - develop 157 | 158 | rustic-builder: 159 | branches: 160 | - main 161 | - fulu 162 | 163 | mev-boost: 164 | branches: 165 | - develop 166 | 167 | mev-boost-relay: 168 | branches: 169 | - main 170 | 171 | ethrex: 172 | branches: 173 | - main 174 | 175 | eth-das-guardian: 176 | branches: 177 | - main 178 | 179 | # Commented out in config.yaml 180 | # goevmlab: 181 | # branches: ["master"] 182 | -------------------------------------------------------------------------------- /eleel/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.83-bookworm AS builder 2 | RUN apt-get update && apt-get -y upgrade && apt-get install -y cmake clang libclang-dev protobuf-compiler 3 | COPY . eleel 4 | RUN cd eleel && cargo build --release --bin eleel --target x86_64-unknown-linux-gnu 5 | 6 | FROM ubuntu:24.04 7 | RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \ 8 | libssl-dev \ 9 | ca-certificates \ 10 | && apt-get clean \ 11 | && rm -rf /var/lib/apt/lists/* 12 | COPY --from=builder /eleel/target/x86_64-unknown-linux-gnu/release/eleel /usr/local/bin/eleel 13 | -------------------------------------------------------------------------------- /ethereumjs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-alpine as build 2 | RUN apk update && apk add --no-cache bash git g++ make python3 && rm -rf /var/cache/apk/* 3 | WORKDIR /usr/app 4 | 5 | COPY package.json . 6 | COPY package-lock.json . 7 | RUN npm i --ignore-scripts 8 | 9 | COPY . . 10 | RUN npm i 11 | 12 | FROM node:18-alpine 13 | WORKDIR /usr/app 14 | COPY --from=build /usr/app . 15 | 16 | # Sanity check 17 | RUN node /usr/app/packages/client/dist/esm/bin/cli.js --help 18 | 19 | 20 | # NodeJS applications have a default memory limit of 2.5GB. 21 | # This limit is bit tight, it is recommended to raise the limit 22 | # since memory may spike during certain network conditions. 23 | ENV NODE_OPTIONS=--max_old_space_size=6144 24 | 25 | ENTRYPOINT ["node", "/usr/app/packages/client/dist/esm/bin/cli.js"] 26 | -------------------------------------------------------------------------------- /goevmlab/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # The Mega Dockerfile 3 | # 4 | # This dockerfile is an attempt to bundle the following components into 5 | # one big dockerfile: 6 | # 7 | # - [x] Goevmlab binary 'generic-fuzzer' 8 | # - [x] Go-ethereum binary 'evm' 9 | # - [x] Erigon binary 'evm' 10 | # - [x] EvmOne vm binary 'evmone' 11 | # - [x] Reth VM binary 'revme' 12 | # - [x] Besu 13 | # - [x] Nethermind 14 | # - [x] Nimbus-eth1 15 | # 16 | 17 | #--------------------------------------------------------------- 18 | # golang-builder (debian-based) 19 | #--------------------------------------------------------------- 20 | FROM golang:latest as golang-builder 21 | 22 | # 23 | # Go-evmlab 24 | # 25 | 26 | RUN git clone https://github.com/holiman/goevmlab --depth 1 27 | RUN cd goevmlab && \ 28 | go build ./cmd/generic-fuzzer && \ 29 | go build ./cmd/generic-generator && \ 30 | go build ./cmd/checkslow && \ 31 | go build ./cmd/minimizer && \ 32 | go build ./cmd/repro && \ 33 | go build ./cmd/runtest && \ 34 | go build ./cmd/tracediff && \ 35 | go build ./cmd/traceview && \ 36 | go test -c ./evms 37 | # 38 | # GETH 39 | # 40 | 41 | RUN git clone https://github.com/ethereum/go-ethereum --depth 1 42 | RUN cd go-ethereum && go run build/ci.go install -static ./cmd/evm 43 | 44 | # 45 | # Erigon 46 | # 47 | RUN git clone https://github.com/ledgerwatch/erigon --depth 1 48 | RUN cd erigon && mkdir /erigon/ && make evm && \ 49 | cp ./build/bin/evm /erigon_vm && \ 50 | cp $(bash ./turbo/silkworm/silkworm_lib_path.sh) /libsilkworm_capi.so 51 | 52 | 53 | # 54 | # NIMBUS-ETH1 55 | # 56 | 57 | RUN apt-get update -q && apt-get install -qy --no-install-recommends make 58 | RUN git clone https://github.com/status-im/nimbus-eth1.git --depth 1 --recurse-submodules && \ 59 | cd nimbus-eth1 && make -j8 update && \ 60 | make -j8 evmstate && cp ./tools/evmstate/evmstate /evmstate 61 | 62 | 63 | #--------------------------------------------------------------- 64 | # debian-builder 65 | #--------------------------------------------------------------- 66 | 67 | # 68 | # EVMONE 69 | # 70 | # 71 | # evmone requires g++ v13, which is _not_ available in debian bookworm (the golang image) 72 | # but it works with debian:testing (at the time of writing this) 73 | 74 | FROM debian:testing as debian-builder 75 | RUN apt-get update -q && apt-get install -qy --no-install-recommends git make \ 76 | ca-certificates g++ cmake ninja-build libgmp-dev 77 | 78 | RUN git clone https://github.com/ethereum/evmone.git --depth 1 --recurse-submodules 79 | RUN cd evmone && cmake -S . -B build -DEVMONE_TESTING=ON -DEVMONE_PRECOMPILES_SILKPRE=1 80 | RUN cd evmone && cmake --build build --parallel 81 | RUN cp /evmone/build/bin/evmone-statetest /evmone-statetest 82 | RUN ls -la /evmone/build/lib/libevmone.so.* 83 | RUN cp /evmone/build/lib/libevmone.so.* / 84 | #--------------------------------------------------------------- 85 | # rust-builder 86 | #--------------------------------------------------------------- 87 | 88 | # 89 | # RETH 90 | # 91 | 92 | FROM lukemathwalker/cargo-chef:latest-rust-1 AS rust-builder 93 | RUN apt-get update -q && apt-get install -qy --no-install-recommends libclang-dev pkg-config 94 | RUN git clone https://github.com/bluealloy/revm.git --depth 1 95 | RUN cd revm && cargo build --release --package revme 96 | 97 | 98 | #--------------------------------------------------------------- 99 | # dotnet-builder 100 | #--------------------------------------------------------------- 101 | 102 | 103 | # 104 | # NETHERMIND 105 | # 106 | 107 | FROM mcr.microsoft.com/dotnet/sdk:9.0-noble AS dotnet-builder 108 | RUN git clone https://github.com/NethermindEth/nethermind --depth 1 109 | 110 | RUN cd nethermind/src/Nethermind/Nethermind.Test.Runner && dotnet publish --self-contained true -r linux-x64 -c Release 111 | RUN mkdir /out && mv nethermind/src/Nethermind/artifacts/bin/Nethermind.Test.Runner/release_linux-x64 /out/neth 112 | 113 | # also txparse 114 | RUN cd nethermind/tools/TxParser && dotnet publish --self-contained true -r linux-x64 -c Release 115 | # winds up at /out/neth/TxParser 116 | RUN cp -rT /nethermind/tools/artifacts/publish/TxParser/release_linux-x64/ /out/neth/ 117 | 118 | #--------------------------------------------------------------- 119 | # java-builder 120 | #--------------------------------------------------------------- 121 | 122 | # 123 | # BESU 124 | # 125 | 126 | FROM ubuntu:24.04 as java-builder 127 | 128 | RUN apt-get update -q && apt-get install -qy --no-install-recommends git ca-certificates \ 129 | openjdk-21-jdk-headless=21* libjemalloc-dev=5.* 130 | RUN git clone https://github.com/hyperledger/besu.git --depth 1 #--recurse-submodules 131 | RUN cd besu && ./gradlew --parallel ethereum:evmtool:installDist 132 | RUN mkdir /out && mv besu/ethereum/evmtool/build/install/evmtool /out/evmtool 133 | 134 | # 135 | # Main non-builder 136 | # 137 | 138 | FROM debian:testing 139 | 140 | # nethtest requires libssl-dev 141 | # besu requires openjdk-21-jre 142 | # evmone requires GLIBC_2.38 (libstdc++-13-dev) (https://github.com/holiman/goevmlab/issues/144) 143 | # EELS requires (see https://github.com/ethereum/execution-specs/issues/976) 144 | # - pipx, git, 145 | # - curl (for installing rust), 146 | # - gcc for building 'py-arkworks-bls12381', 147 | # - python3-dev for bulding 'lru-dict' 148 | # - pkg-config (see https://github.com/ethereum/execution-specs/issues/1103) 149 | RUN apt-get update -q && \ 150 | apt-get install -qy --no-install-recommends \ 151 | libssl-dev \ 152 | openjdk-21-jre-headless \ 153 | libstdc++-13-dev \ 154 | pipx git curl gcc python3-dev pkg-config \ 155 | jq nano \ 156 | && apt-get clean 157 | 158 | # Install execution-specs (EELS) 159 | RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal 160 | RUN git clone https://github.com/ethereum/execution-specs.git --branch forks/prague --depth 1 161 | RUN . "$HOME/.cargo/env"; PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/ pipx install './execution-specs/[test]' 162 | ENV EELS_BIN=/ethereum-spec-evm 163 | 164 | # Go-evmlab targets 165 | COPY --from=golang-builder /go/goevmlab/generic-fuzzer \ 166 | /go/goevmlab/generic-generator \ 167 | /go/goevmlab/checkslow \ 168 | /go/goevmlab/minimizer \ 169 | /go/goevmlab/repro \ 170 | /go/goevmlab/runtest \ 171 | /go/goevmlab/tracediff \ 172 | /go/goevmlab/traceview \ 173 | /go/goevmlab/evms.test \ 174 | /usr/bin/ 175 | 176 | COPY --from=golang-builder /go/go-ethereum/build/bin/evm /gethvm 177 | ENV GETH_BIN=/gethvm 178 | 179 | COPY --from=golang-builder /erigon_vm /erigon_vm 180 | COPY --from=golang-builder /libsilkworm_capi.so /lib/libsilkworm_capi.so 181 | ENV ERIG_BIN=/erigon_vm 182 | 183 | COPY --from=golang-builder /evmstate /nimbvm 184 | ENV NIMB_BIN=/nimbvm 185 | 186 | COPY --from=debian-builder /evmone-statetest /evmone 187 | COPY --from=debian-builder /libevmone.so.* /lib/ 188 | ENV EVMO_BIN=/evmone 189 | 190 | COPY --from=rust-builder /revm/target/release/revme /revme 191 | ENV RETH_BIN=/revme 192 | 193 | COPY --from=dotnet-builder /out/neth /neth 194 | RUN ln -s /neth/nethtest /nethtest 195 | ENV NETH_BIN=/neth/nethtest 196 | 197 | COPY --from=java-builder /out/evmtool /evmtool 198 | RUN ln -s /evmtool/bin/evmtool besu-vm 199 | ENV BESU_BIN=/evmtool/bin/evmtool 200 | 201 | COPY readme_docker.md /README.md 202 | 203 | ENV FUZZ_CLIENTS="--gethbatch=$GETH_BIN \ 204 | --nethbatch=$NETH_BIN \ 205 | --nimbusbatch=$NIMB_BIN \ 206 | --revme=$RETH_BIN \ 207 | --erigonbatch=$ERIG_BIN \ 208 | --besubatch=$BESU_BIN \ 209 | --evmone=$EVMO_BIN \ 210 | --eelsbatch=$EELS_BIN" 211 | 212 | ENV FUZZ_CLIENTS_PLAIN="--geth=$GETH_BIN \ 213 | --neth=$NETH_BIN \ 214 | --nimbus=$NIMB_BIN \ 215 | --revme=$RETH_BIN \ 216 | --erigon=$ERIG_BIN \ 217 | --besu=$BESU_BIN \ 218 | --evmone=$EVMO_BIN \ 219 | --eels=$EELS_BIN" 220 | 221 | ENTRYPOINT ["/bin/bash"] -------------------------------------------------------------------------------- /grandine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.80.1-bullseye AS builder 2 | RUN apt-get clean && apt-get update && apt-get --yes upgrade && apt-get install --yes cmake libclang-dev 3 | COPY . . 4 | RUN scripts/build/release.sh 5 | 6 | FROM ubuntu:latest 7 | RUN apt-get clean && apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \ 8 | libssl-dev \ 9 | ca-certificates \ 10 | curl \ 11 | && apt-get clean \ 12 | && rm -rf /var/lib/apt/lists/* 13 | COPY --from=builder /target/compact/grandine /usr/local/bin/grandine 14 | 15 | ENTRYPOINT ["grandine"] 16 | -------------------------------------------------------------------------------- /grandine/Dockerfile.minimal: -------------------------------------------------------------------------------- 1 | FROM rust:1.80.1-bullseye AS builder 2 | RUN apt-get clean && apt-get update && apt-get --yes upgrade && apt-get install --yes cmake libclang-dev 3 | COPY . . 4 | RUN scripts/build/minimal.sh 5 | 6 | FROM ubuntu:latest 7 | RUN apt-get clean && apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \ 8 | libssl-dev \ 9 | ca-certificates \ 10 | curl \ 11 | && apt-get clean \ 12 | && rm -rf /var/lib/apt/lists/* 13 | COPY --from=builder /target/compact/grandine /usr/local/bin/grandine 14 | 15 | ENTRYPOINT ["grandine"] 16 | -------------------------------------------------------------------------------- /grandine/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # helper to get source directory 4 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 5 | cd ${SCRIPT_DIR}/../source 6 | 7 | # load targeted git submodules 8 | git submodule update --init dedicated_executor eth2_libp2p 9 | 10 | # finally build with the tags from the dockerfile 11 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" -f "../${target_dockerfile}" . 12 | 13 | # push the image tags 14 | docker push "${target_repository}:${target_tag}" 15 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 16 | -------------------------------------------------------------------------------- /lighthouse/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.84-bullseye AS builder 2 | RUN apt-get clean && apt-get update && apt-get -y upgrade && apt-get install -y cmake clang libclang-dev protobuf-compiler 3 | COPY . lighthouse 4 | ARG FEATURES=gnosis,spec-minimal,slasher-lmdb,jemalloc 5 | ARG PROFILE=release 6 | ARG CARGO_USE_GIT_CLI=true 7 | ENV FEATURES=$FEATURES 8 | ENV PROFILE=$PROFILE 9 | ENV CARGO_NET_GIT_FETCH_WITH_CLI=$CARGO_USE_GIT_CLI 10 | RUN cd lighthouse && make 11 | 12 | FROM ubuntu:22.04 13 | RUN apt-get clean && apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \ 14 | libssl-dev \ 15 | ca-certificates \ 16 | && apt-get clean \ 17 | && rm -rf /var/lib/apt/lists/* 18 | COPY --from=builder /usr/local/cargo/bin/lighthouse /usr/local/bin/lighthouse 19 | -------------------------------------------------------------------------------- /lighthouse/xatu-sentry.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | 6 | ORIGINAL_FILE="beacon_node/network/src/sync/manager.rs" 7 | NEW_FILE="beacon_node/network/src/sync/manager.new.rs" 8 | 9 | sed '/\/\/ complete a backfill sync\./,/\/\/ Return the sync state if backfilling is not required\./d' $ORIGINAL_FILE > $NEW_FILE 10 | 11 | if((`stat -c%s "${ORIGINAL_FILE}"`==`stat -c%s "${NEW_FILE}"`));then 12 | echo "no changes detected, aborting..." 13 | echo "to remove backfilling code, remove this block (on the ref branch/tag/commit) https://github.com/sigp/lighthouse/blob/6d5a2b509fac7b6ffe693866f58ba49989f946d7/beacon_node/network/src/sync/manager.rs#L403-L422" 14 | exit 1 15 | fi 16 | 17 | mv $NEW_FILE $ORIGINAL_FILE 18 | 19 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" -f "../${target_dockerfile}" . 20 | docker push "${target_repository}:${target_tag}" 21 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 22 | -------------------------------------------------------------------------------- /lodestar/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | 6 | docker build --build-arg "COMMIT=${source_git_commit_hash_full}" -t "${target_repository}:${target_tag}" . 7 | docker push "${target_repository}:${target_tag}" 8 | docker tag "${target_repository}:${target_tag}" "${target_repository}:${target_tag}-${source_git_commit_hash}" 9 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 10 | -------------------------------------------------------------------------------- /nimbus-eth2/Dockerfile.beacon: -------------------------------------------------------------------------------- 1 | FROM debian:testing-slim AS build 2 | 3 | SHELL ["/bin/bash", "-c"] 4 | 5 | RUN apt-get clean && apt update \ 6 | && apt -y install build-essential git-lfs 7 | 8 | RUN ldd --version ldd 9 | 10 | ADD . /root/nimbus-eth2 11 | 12 | RUN cd /root/nimbus-eth2 \ 13 | && make -j$(nproc) update \ 14 | && make -j$(nproc) V=1 NIMFLAGS="-d:const_preset=mainnet -d:disableMarchNative" LOG_LEVEL=TRACE nimbus_beacon_node 15 | 16 | 17 | # --------------------------------- # 18 | # Starting new image to reduce size # 19 | # --------------------------------- # 20 | FROM debian:testing-slim as deploy 21 | 22 | SHELL ["/bin/bash", "-c"] 23 | RUN apt-get clean && apt update \ 24 | && apt -y install build-essential 25 | RUN apt update && apt -y upgrade 26 | 27 | RUN ldd --version ldd 28 | 29 | RUN rm -rf /home/user/nimbus-eth2/build/beacon_node 30 | RUN rm -rf /home/user/nimbus-eth2/build/nimbus_beacon_node 31 | 32 | # "COPY" creates new image layers, so we cram all we can into one command 33 | COPY --from=build /root/nimbus-eth2/build/nimbus_beacon_node /home/user/nimbus-eth2/build/beacon_node 34 | COPY --from=build /root/nimbus-eth2/build/nimbus_beacon_node /home/user/nimbus-eth2/build/nimbus_beacon_node 35 | 36 | ENV PATH="/home/user/nimbus-eth2/build:${PATH}" 37 | ENTRYPOINT ["nimbus_beacon_node"] 38 | WORKDIR /home/user/nimbus-eth2/build 39 | 40 | STOPSIGNAL SIGINT 41 | -------------------------------------------------------------------------------- /nimbus-eth2/Dockerfile.beacon-minimal: -------------------------------------------------------------------------------- 1 | FROM debian:testing-slim AS build 2 | 3 | SHELL ["/bin/bash", "-c"] 4 | 5 | RUN apt-get clean && apt update \ 6 | && apt -y install build-essential git-lfs 7 | 8 | RUN ldd --version ldd 9 | 10 | ADD . /root/nimbus-eth2 11 | 12 | RUN cd /root/nimbus-eth2 \ 13 | && make -j$(nproc) update \ 14 | && make -j$(nproc) V=1 NIMFLAGS="-d:const_preset=minimal -d:disableMarchNative" LOG_LEVEL=TRACE nimbus_beacon_node 15 | 16 | 17 | # --------------------------------- # 18 | # Starting new image to reduce size # 19 | # --------------------------------- # 20 | FROM debian:testing-slim as deploy 21 | 22 | SHELL ["/bin/bash", "-c"] 23 | RUN apt-get clean && apt update \ 24 | && apt -y install build-essential 25 | RUN apt update && apt -y upgrade 26 | 27 | RUN ldd --version ldd 28 | 29 | RUN rm -rf /home/user/nimbus-eth2/build/beacon_node 30 | RUN rm -rf /home/user/nimbus-eth2/build/nimbus_beacon_node 31 | 32 | # "COPY" creates new image layers, so we cram all we can into one command 33 | COPY --from=build /root/nimbus-eth2/build/nimbus_beacon_node /home/user/nimbus-eth2/build/beacon_node 34 | COPY --from=build /root/nimbus-eth2/build/nimbus_beacon_node /home/user/nimbus-eth2/build/nimbus_beacon_node 35 | 36 | ENV PATH="/home/user/nimbus-eth2/build:${PATH}" 37 | ENTRYPOINT ["nimbus_beacon_node"] 38 | WORKDIR /home/user/nimbus-eth2/build 39 | 40 | STOPSIGNAL SIGINT 41 | -------------------------------------------------------------------------------- /nimbus-eth2/Dockerfile.validator: -------------------------------------------------------------------------------- 1 | FROM debian:testing-slim AS build 2 | 3 | SHELL ["/bin/bash", "-c"] 4 | 5 | RUN apt-get clean && apt update \ 6 | && apt -y install build-essential git-lfs 7 | 8 | RUN ldd --version ldd 9 | 10 | ADD . /root/nimbus-eth2 11 | 12 | RUN cd /root/nimbus-eth2 \ 13 | && make -j$(nproc) update \ 14 | && make -j$(nproc) V=1 NIMFLAGS="-d:const_preset=mainnet -d:disableMarchNative" LOG_LEVEL=TRACE nimbus_validator_client 15 | 16 | 17 | # --------------------------------- # 18 | # Starting new image to reduce size # 19 | # --------------------------------- # 20 | FROM debian:testing-slim as deploy 21 | 22 | SHELL ["/bin/bash", "-c"] 23 | RUN apt-get clean && apt update \ 24 | && apt -y install build-essential 25 | RUN apt update && apt -y upgrade 26 | 27 | RUN ldd --version ldd 28 | 29 | RUN rm -rf /home/user/nimbus-eth2/build/nimbus_validator_client 30 | 31 | # "COPY" creates new image layers, so we cram all we can into one command 32 | COPY --from=build /root/nimbus-eth2/build/nimbus_validator_client /home/user/nimbus-eth2/build/nimbus_validator_client 33 | 34 | ENV PATH="/home/user/nimbus-eth2/build:${PATH}" 35 | ENTRYPOINT ["nimbus_validator_client"] 36 | WORKDIR /home/user/nimbus-eth2/build 37 | 38 | STOPSIGNAL SIGINT 39 | -------------------------------------------------------------------------------- /nimbus-eth2/Dockerfile.validator-minimal: -------------------------------------------------------------------------------- 1 | FROM debian:testing-slim AS build 2 | 3 | SHELL ["/bin/bash", "-c"] 4 | 5 | RUN apt-get clean && apt update \ 6 | && apt -y install build-essential git-lfs 7 | 8 | RUN ldd --version ldd 9 | 10 | ADD . /root/nimbus-eth2 11 | 12 | RUN cd /root/nimbus-eth2 \ 13 | && make -j$(nproc) update \ 14 | && make -j$(nproc) V=1 NIMFLAGS="-d:const_preset=minimal -d:disableMarchNative" LOG_LEVEL=TRACE nimbus_validator_client 15 | 16 | 17 | # --------------------------------- # 18 | # Starting new image to reduce size # 19 | # --------------------------------- # 20 | FROM debian:testing-slim as deploy 21 | 22 | SHELL ["/bin/bash", "-c"] 23 | RUN apt-get clean && apt update \ 24 | && apt -y install build-essential 25 | RUN apt update && apt -y upgrade 26 | 27 | RUN ldd --version ldd 28 | 29 | RUN rm -rf /home/user/nimbus-eth2/build/nimbus_validator_client 30 | 31 | # "COPY" creates new image layers, so we cram all we can into one command 32 | COPY --from=build /root/nimbus-eth2/build/nimbus_validator_client /home/user/nimbus-eth2/build/nimbus_validator_client 33 | 34 | ENV PATH="/home/user/nimbus-eth2/build:${PATH}" 35 | ENTRYPOINT ["nimbus_validator_client"] 36 | WORKDIR /home/user/nimbus-eth2/build 37 | 38 | STOPSIGNAL SIGINT 39 | -------------------------------------------------------------------------------- /nimbus-eth2/xatu-sentry.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | 6 | # Backfilling removal 7 | ORIGINAL_FILE="beacon_chain/consensus_object_pools/blockchain_dag.nim" 8 | NEW_FILE="beacon_chain/consensus_object_pools/blockchain_dag.new.nim" 9 | 10 | sed -e '/func needsBackfill\*/,+2d' $ORIGINAL_FILE > $NEW_FILE 11 | 12 | if((`stat -c%s "${ORIGINAL_FILE}"`==`stat -c%s "${NEW_FILE}"`));then 13 | echo "no changes detected, aborting..." 14 | echo "to remove backfilling code, remove this block (on the ref branch/tag/commit) https://github.com/status-im/nimbus-eth2/blob/ba7c0bc091161f261148dbfcb27b21cc48f1fdf8/beacon_chain/consensus_object_pools/blockchain_dag.nim#L2318-L2319" 15 | exit 1 16 | fi 17 | 18 | echo "" >> $NEW_FILE 19 | echo "func needsBackfill*(dag: ChainDAGRef): bool = false" >> $NEW_FILE 20 | 21 | mv $NEW_FILE $ORIGINAL_FILE 22 | 23 | # Deposit contract lookup removal (breaks in stubbies) 24 | ORIGINAL_FILE="beacon_chain/eth1/eth1_monitor.nim" 25 | NEW_FILE="beacon_chain/eth1/eth1_monitor.new.nim" 26 | 27 | sed -e '/if m.chainSyncingLoopFut.isNil:/,+3d' $ORIGINAL_FILE > $NEW_FILE 28 | 29 | if((`stat -c%s "${ORIGINAL_FILE}"`==`stat -c%s "${NEW_FILE}"`));then 30 | echo "no changes detected, aborting..." 31 | echo "to remove deposit syncing code, remove this block (on the ref branch/tag/commit) https://github.com/status-im/nimbus-eth2/blob/unstable/beacon_chain/eth1/eth1_monitor.nim#L2039-L2041" 32 | exit 1 33 | fi 34 | 35 | mv $NEW_FILE $ORIGINAL_FILE 36 | 37 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" -f "../${target_dockerfile}" . 38 | docker push "${target_repository}:${target_tag}" 39 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 40 | -------------------------------------------------------------------------------- /platforms.yaml: -------------------------------------------------------------------------------- 1 | besu: 2 | - linux/amd64 3 | - linux/arm64 4 | eleel: 5 | - linux/amd64 6 | erigon: 7 | - linux/amd64 8 | - linux/arm64 9 | ethereumjs: 10 | - linux/amd64 11 | - linux/arm64 12 | geth: 13 | - linux/amd64 14 | - linux/arm64 15 | lighthouse: 16 | - linux/amd64 17 | - linux/arm64 18 | lodestar: 19 | - linux/amd64 20 | - linux/arm64 21 | nethermind: 22 | - linux/amd64 23 | - linux/arm64 24 | nimbus-eth2: 25 | - linux/amd64 26 | - linux/arm64 27 | nimbus-validator-client: 28 | - linux/amd64 29 | - linux/arm64 30 | nimbus-eth1: 31 | - linux/amd64 32 | - linux/arm64 33 | prysm-beacon-chain: 34 | - linux/amd64 35 | - linux/arm64 36 | prysm-validator: 37 | - linux/amd64 38 | - linux/arm64 39 | reth: 40 | - linux/amd64 41 | - linux/arm64 42 | teku: 43 | - linux/amd64 44 | - linux/arm64 45 | flashbots-builder: 46 | - linux/amd64 47 | - linux/arm64 48 | tx-fuzz: 49 | - linux/amd64 50 | - linux/arm64 51 | consensus-monitor: 52 | - linux/amd64 53 | - linux/arm64 54 | execution-monitor: 55 | - linux/amd64 56 | - linux/arm64 57 | beacon-metrics-gazer: 58 | - linux/amd64 59 | - linux/arm64 60 | goomy-blob: 61 | - linux/amd64 62 | - linux/arm64 63 | ethereum-genesis-generator: 64 | - linux/amd64 65 | - linux/arm64 66 | armiarma: 67 | - linux/amd64 68 | - linux/arm64 69 | goteth: 70 | - linux/amd64 71 | - linux/arm64 72 | grandine: 73 | - linux/amd64 74 | - linux/arm64 75 | mev-rs: 76 | - linux/amd64 77 | - linux/arm64 78 | reth-rbuilder: 79 | - linux/amd64 80 | - linux/arm64 81 | rustic-builder: 82 | - linux/amd64 83 | - linux/arm64 84 | mev-boost: 85 | - linux/amd64 86 | - linux/arm64 87 | mev-boost-relay: 88 | - linux/amd64 89 | - linux/arm64 90 | goevmlab: 91 | - linux/amd64 92 | - linux/arm64 93 | ethrex: 94 | - linux/amd64 95 | - linux/arm64 96 | eth-das-guardian: 97 | - linux/amd64 98 | - linux/arm64 99 | -------------------------------------------------------------------------------- /prysm/Dockerfile.beacon: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | ARG ENTRY=/app/cmd/beacon-chain/beacon-chain 4 | ENV ENTRY=${ENTRY} 5 | WORKDIR /app/cmd/beacon-chain/beacon-chain.runfiles/prysm 6 | ADD ./_beacon-chain /app/cmd/beacon-chain/beacon-chain 7 | ADD ./entrypoint.sh /entrypoint.sh 8 | RUN apt-get update && apt-get install -y ca-certificates libc6 && update-ca-certificates 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | -------------------------------------------------------------------------------- /prysm/Dockerfile.validator: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | ARG ENTRY=/app/cmd/validator/validator 4 | ENV ENTRY=${ENTRY} 5 | WORKDIR /app/cmd/validator/validator.runfiles/prysm 6 | ADD ./_validator /app/cmd/validator/validator 7 | ADD ./entrypoint.sh /entrypoint.sh 8 | RUN apt-get update && apt-get install -y ca-certificates libc6 && update-ca-certificates 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | -------------------------------------------------------------------------------- /prysm/build_beacon.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]') 6 | if [ "${OS_NAME}" == "darwin" ]; then 7 | /opt/homebrew/bin/brew install go 8 | /opt/homebrew/bin/go install github.com/bazelbuild/bazelisk@latest 9 | else 10 | sudo apt-get update 11 | sudo apt-get upgrade -y 12 | sudo apt install -y ca-certificates python3 13 | go install github.com/bazelbuild/bazelisk@latest 14 | fi 15 | 16 | build_method=${build_method:-bazel} # Default to bazel if not set 17 | 18 | case ${build_method} in 19 | "go") 20 | echo "Building with Go..." 21 | go mod tidy 22 | 23 | # Define ldflags for version information 24 | ldflags=$(cat <<-END 25 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitCommit=$(git rev-parse HEAD)' \ 26 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitTag=$(git describe --tags 2>/dev/null || echo Unknown)' \ 27 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDate=$(date -u +%Y-%m-%d\ %H:%M:%S%:z)' \ 28 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDateUnix=$(date +%s)' 29 | END 30 | ) 31 | 32 | # Build with blst_enabled and blst_portable to support both amd64 and arm64. The BLST library (used for 33 | # cryptographic operations) needs specific CPU features. 34 | CGO_ENABLED=1 go build \ 35 | -tags=blst_enabled,blst_portable \ 36 | -ldflags "${ldflags}" \ 37 | -o _beacon-chain ./cmd/beacon-chain 38 | ;; 39 | "bazel") 40 | echo "Building with Bazel..." 41 | $HOME/go/bin/bazelisk build //cmd/beacon-chain:beacon-chain --config=release --define pgo_enabled=0 --enable_bzlmod=false --remote_cache=grpcs://bazel-remote-cache-grpc.primary.production.platform.ethpandaops.io:443 42 | mv bazel-bin/cmd/beacon-chain/beacon-chain_/beacon-chain _beacon-chain 43 | ;; 44 | *) 45 | echo "Invalid build_method value: ${build_method}. Must be 'go' or 'bazel'" 46 | exit 1 47 | ;; 48 | esac 49 | 50 | cp ${SCRIPT_DIR}/entrypoint.sh entrypoint.sh 51 | 52 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" --build-arg ENTRY=/app/cmd/beacon-chain/beacon-chain -f "../${target_dockerfile}" . 53 | docker push "${target_repository}:${target_tag}" 54 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" -------------------------------------------------------------------------------- /prysm/build_beacon_minimal.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]') 6 | if [ "${OS_NAME}" == "darwin" ]; then 7 | /opt/homebrew/bin/brew install go 8 | /opt/homebrew/bin/go install github.com/bazelbuild/bazelisk@latest 9 | else 10 | sudo apt-get update 11 | sudo apt-get upgrade -y 12 | sudo apt install -y ca-certificates python3 13 | go install github.com/bazelbuild/bazelisk@latest 14 | fi 15 | 16 | build_method=${build_method:-bazel} # Default to bazel if not set 17 | 18 | case ${build_method} in 19 | "go") 20 | echo "Building with Go..." 21 | go mod tidy 22 | 23 | # Define ldflags for version information 24 | ldflags=$(cat <<-END 25 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitCommit=$(git rev-parse HEAD)' \ 26 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitTag=$(git describe --tags 2>/dev/null || echo Unknown)' \ 27 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDate=$(date -u +%Y-%m-%d\ %H:%M:%S%:z)' \ 28 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDateUnix=$(date +%s)' 29 | END 30 | ) 31 | 32 | # Build with blst_enabled and blst_portable to support both amd64 and arm64. The BLST library (used for 33 | # cryptographic operations) needs specific CPU features. 34 | CGO_ENABLED=1 go build \ 35 | -tags=blst_enabled,blst_portable \ 36 | -ldflags "${ldflags}" \ 37 | -o _beacon-chain ./cmd/beacon-chain 38 | ;; 39 | "bazel") 40 | echo "Building with Bazel..." 41 | $HOME/go/bin/bazelisk build //cmd/beacon-chain:beacon-chain --config=minimal --define pgo_enabled=0 --enable_bzlmod=false --remote_cache=grpcs://bazel-remote-cache-grpc.primary.production.platform.ethpandaops.io:443 42 | mv bazel-bin/cmd/beacon-chain/beacon-chain_/beacon-chain _beacon-chain 43 | ;; 44 | *) 45 | echo "Invalid build_method value: ${build_method}. Must be 'go' or 'bazel'" 46 | exit 1 47 | ;; 48 | esac 49 | 50 | cp ${SCRIPT_DIR}/entrypoint.sh entrypoint.sh 51 | 52 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" --build-arg ENTRY=/app/cmd/beacon-chain/beacon-chain -f "../${target_dockerfile}" . 53 | docker push "${target_repository}:${target_tag}" 54 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 55 | -------------------------------------------------------------------------------- /prysm/build_validator.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]') 6 | if [ "${OS_NAME}" == "darwin" ]; then 7 | /opt/homebrew/bin/brew install go 8 | /opt/homebrew/bin/go install github.com/bazelbuild/bazelisk@latest 9 | else 10 | sudo apt-get update 11 | sudo apt-get upgrade -y 12 | sudo apt install -y ca-certificates python3 13 | go install github.com/bazelbuild/bazelisk@latest 14 | fi 15 | 16 | build_method=${build_method:-bazel} # Default to bazel if not set 17 | 18 | case ${build_method} in 19 | "go") 20 | echo "Building with Go..." 21 | go mod tidy 22 | 23 | # Define ldflags for version information 24 | ldflags=$(cat <<-END 25 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitCommit=$(git rev-parse HEAD)' \ 26 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitTag=$(git describe --tags 2>/dev/null || echo Unknown)' \ 27 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDate=$(date -u +%Y-%m-%d\ %H:%M:%S%:z)' \ 28 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDateUnix=$(date +%s)' 29 | END 30 | ) 31 | 32 | # Build with blst_enabled and blst_portable to support both amd64 and arm64. The BLST library (used for 33 | # cryptographic operations) needs specific CPU features. 34 | CGO_ENABLED=1 go build \ 35 | -tags=blst_enabled,blst_portable \ 36 | -ldflags "${ldflags}" \ 37 | -o _validator ./cmd/validator 38 | ;; 39 | "bazel") 40 | echo "Building with Bazel..." 41 | $HOME/go/bin/bazelisk build //cmd/validator:validator --config=release --define pgo_enabled=0 --enable_bzlmod=false --remote_cache=grpcs://bazel-remote-cache-grpc.primary.production.platform.ethpandaops.io:443 42 | mv bazel-bin/cmd/validator/validator_/validator _validator 43 | ;; 44 | *) 45 | echo "Invalid build_method value: ${build_method}. Must be 'go' or 'bazel'" 46 | exit 1 47 | ;; 48 | esac 49 | 50 | cp ${SCRIPT_DIR}/entrypoint.sh entrypoint.sh 51 | 52 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" --build-arg ENTRY=/app/cmd/validator/validator -f "../${target_dockerfile}" . 53 | docker push "${target_repository}:${target_tag}" 54 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 55 | -------------------------------------------------------------------------------- /prysm/build_validator_minimal.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]') 6 | if [ "${OS_NAME}" == "darwin" ]; then 7 | /opt/homebrew/bin/brew install go 8 | /opt/homebrew/bin/go install github.com/bazelbuild/bazelisk@latest 9 | else 10 | sudo apt-get update 11 | sudo apt-get upgrade -y 12 | sudo apt install -y ca-certificates python3 13 | go install github.com/bazelbuild/bazelisk@latest 14 | fi 15 | 16 | build_method=${build_method:-bazel} # Default to bazel if not set 17 | 18 | case ${build_method} in 19 | "go") 20 | echo "Building with Go..." 21 | go mod tidy 22 | 23 | # Define ldflags for version information 24 | ldflags=$(cat <<-END 25 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitCommit=$(git rev-parse HEAD)' \ 26 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.gitTag=$(git describe --tags 2>/dev/null || echo Unknown)' \ 27 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDate=$(date -u +%Y-%m-%d\ %H:%M:%S%:z)' \ 28 | -X 'github.com/offchainlabs/prysm/v5/runtime/version.buildDateUnix=$(date +%s)' 29 | END 30 | ) 31 | 32 | # Build with blst_enabled and blst_portable to support both amd64 and arm64. The BLST library (used for 33 | # cryptographic operations) needs specific CPU features. 34 | CGO_ENABLED=1 go build \ 35 | -tags=blst_enabled,blst_portable \ 36 | -ldflags "${ldflags}" \ 37 | -o _validator ./cmd/validator 38 | ;; 39 | "bazel") 40 | echo "Building with Bazel..." 41 | $HOME/go/bin/bazelisk build //cmd/validator:validator --config=minimal --define pgo_enabled=0 --enable_bzlmod=false --remote_cache=grpcs://bazel-remote-cache-grpc.primary.production.platform.ethpandaops.io:443 42 | mv bazel-bin/cmd/validator/validator_/validator _validator 43 | ;; 44 | *) 45 | echo "Invalid build_method value: ${build_method}. Must be 'go' or 'bazel'" 46 | exit 1 47 | ;; 48 | esac 49 | 50 | cp ${SCRIPT_DIR}/entrypoint.sh entrypoint.sh 51 | 52 | docker build -t "${target_repository}:${target_tag}" -t "${target_repository}:${target_tag}-${source_git_commit_hash}" --build-arg ENTRY=/app/cmd/validator/validator -f "../${target_dockerfile}" . 53 | docker push "${target_repository}:${target_tag}" 54 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 55 | -------------------------------------------------------------------------------- /prysm/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | exec "${ENTRY}" "$@" 3 | -------------------------------------------------------------------------------- /runners.yaml: -------------------------------------------------------------------------------- 1 | linux/amd64: self-hosted-ghr-size-l-x64 2 | linux/arm64: self-hosted-ghr-size-l-arm64 3 | -------------------------------------------------------------------------------- /schema.yaml: -------------------------------------------------------------------------------- 1 | list(include('build')) 2 | --- 3 | build: 4 | source: include('source') 5 | build_script: str(required=False) 6 | target: include('target') 7 | build_args: str(required=False) 8 | 9 | source: 10 | repository: str() 11 | ref: str(required=False) 12 | 13 | target: 14 | tag: str() 15 | repository: str() 16 | dockerfile: str(required=False) 17 | -------------------------------------------------------------------------------- /teku/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | cd ${SCRIPT_DIR}/../source 5 | ./gradlew distDocker 6 | docker tag consensys/teku:develop "${target_repository}:${target_tag}" 7 | docker push "${target_repository}:${target_tag}" 8 | docker tag consensys/teku:develop "${target_repository}:${target_tag}-${source_git_commit_hash}" 9 | docker push "${target_repository}:${target_tag}-${source_git_commit_hash}" 10 | --------------------------------------------------------------------------------