diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000000..29513cac3e --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,118 @@ +name: Build docker image + +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=sha,prefix=,suffix=-${{ matrix.platform_suffix }} + + - 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 + type=sha,prefix= + type=edge,branch=firehose-fh3.0 + type=edge,branch=release/* + 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