name: Build, push and release (if tag) on: push: tags: - "*-v*" branches: - "firehose-fh3.0" - "release/*" env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build: strategy: matrix: include: - platform: linux/amd64 platform_suffix: amd64 runner: ubuntu-22.04 - platform: linux/arm64 platform_suffix: arm64 runner: ubuntu-22.04-arm runs-on: [ "${{ matrix.runner }}" ] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Generate docker tags/labels from github build context id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=tag,prefix=,priority=1000 type=sha,prefix= type=sha,prefix=,suffix=-${{ matrix.platform_suffix }} type=edge,branch=firehose-fh3.0,priority=1 type=edge,branch=release/*,priority=1 flavor: | latest=${{ startsWith(github.ref, 'refs/tags/') && !contains(github.ref, 'beta') && !contains(github.ref, 'rc') }} prefix=geth-,onlatest=true - name: Extract version id: extract-version run: | version="edge" if [[ "${GITHUB_REF}" == refs/tags/* ]]; then version=${GITHUB_REF#refs/tags/} fi echo "VERSION=${version} (Commit ${GITHUB_SHA::7}, Commit Date $(git show -s --format=%cI))" >> "$GITHUB_OUTPUT" - name: Build and push Docker image (${{ matrix.platform }}) uses: docker/build-push-action@v6 with: context: . file: ./Dockerfile platforms: ${{ matrix.platform }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} provenance: false build-args: | BUILDNUM="" COMMIT=${{ github.sha }} VERSION=${{ steps.extract-version.outputs.VERSION }} push: needs: build runs-on: ubuntu-22.04 permissions: contents: read packages: write steps: - name: Docker login uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Generate docker tags/labels from github build context id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=tag,prefix= type=sha,prefix= type=edge,branch=firehose-fh3.0,priority=1 type=edge,branch=release/*,priority=1 flavor: | latest=${{ startsWith(github.ref, 'refs/tags/') && !contains(github.ref, 'beta') && !contains(github.ref, 'rc') }} prefix=geth-,onlatest=true sep-tags: "," - name: Extract image id: image run: | echo "ID=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" - name: Create and push manifest images uses: Noelware/docker-manifest-action@0.4.3 with: inputs: "${{ steps.meta.outputs.tags }}" images: "${{ steps.image.outputs.ID }}-amd64, ${{ steps.image.outputs.ID }}-arm64" push: true release: if: startsWith(github.ref, 'refs/tags/') needs: build runs-on: ubuntu-22.04 permissions: contents: write steps: - name: Extract image id: image run: | echo "ID=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" - name: Extract assets if: startsWith(github.ref, 'refs/tags/') run: | # The --platform are not really needed here, but it removes the warning docker cp $(docker create --platform=linux/amd64 ${{ steps.image.outputs.ID }}-amd64):/usr/local/bin/geth ./geth_linux docker cp $(docker create --platform=linux/arm64 ${{ steps.image.outputs.ID }}-arm64):/usr/local/bin/geth ./geth_linux_arm64 - name: Release uses: softprops/action-gh-release@v2 with: prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }} files: | ./geth_linux ./geth_linux_arm64