# Publishes the Docker image.

name: docker

on:
  workflow_dispatch: {}
  push:
    tags:
      - v*

env:
  REPO_NAME: ${{ github.repository_owner }}/reth
  IMAGE_NAME: ${{ github.repository_owner }}/reth
  OP_IMAGE_NAME: ${{ github.repository_owner }}/op-reth
  CARGO_TERM_COLOR: always
  DOCKER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/reth
  OP_DOCKER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/op-reth
  DOCKER_USERNAME: ${{ github.actor }}

jobs:
  build:
    name: build and push
    runs-on: ubuntu-20.04
    permissions:
      packages: write
      contents: read
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - uses: taiki-e/install-action@cross
      - name: Log in to Docker
        run: |
          echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username ${DOCKER_USERNAME} --password-stdin
      - name: Set up Docker builder
        run: |
          docker run --privileged --rm tonistiigi/binfmt --install arm64,amd64
          docker buildx create --use --name cross-builder
      - name: Build and push reth image, tag as "latest"
        run: make PROFILE=maxperf docker-build-push-latest
      - name: Build and push reth image
        run: make PROFILE=maxperf docker-build-push
      - name: Build and push op-reth image, tag as "latest"
        run: make IMAGE_NAME=$OP_IMAGE_NAME DOCKER_IMAGE_NAME=$OP_DOCKER_IMAGE_NAME PROFILE=maxperf op-docker-build-push-latest
      - name: Build and push op-reth image
        run: make IMAGE_NAME=$OP_IMAGE_NAME DOCKER_IMAGE_NAME=$OP_DOCKER_IMAGE_NAME PROFILE=maxperf op-docker-build-push
