name: Image push release
on: 
  push:
    tags:
      - v*
jobs:
  push-amd64:
    name: Image push/amd64
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-amd64
            ${{ steps.docker_meta.outputs.tags }}-amd64
          file: images/Dockerfile

      - name: Push container image for daemon based deployment
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-thick-amd64
            ${{ steps.docker_meta.outputs.tags }}-thick-amd64
          file: images/Dockerfile.thick

  push-arm64:
    name: Image push/arm64
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-arm64
            ${{ steps.docker_meta.outputs.tags }}-arm64
          file: images/Dockerfile.arm64

  push-arm32:
    name: Image push/arm32
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-arm32
            ${{ steps.docker_meta.outputs.tags }}-arm32
          file: images/Dockerfile.arm32

  push-ppc64le:
    name: Image push/ppc64le
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-ppc64le
            ${{ steps.docker_meta.outputs.tags }}-ppc64le
          file: images/Dockerfile.ppc64le

  push-s390x:
    name: Image push/s390x
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-s390x
            ${{ steps.docker_meta.outputs.tags }}-s390x
          file: images/Dockerfile.s390x

  push-origin:
    name: Image push/origin
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Push container image
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:stable-origin
            ${{ steps.docker_meta.outputs.tags }}-origin
          file: images/Dockerfile.openshift

  push-manifest:
    needs: [push-amd64, push-arm64, push-ppc64le, push-s390x]
    runs-on: ubuntu-latest
    env:
      REPOSITORY: ghcr.io/${{ github.repository }}
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: ghcr.io/${{ github.repository }}
          tag-latest: false

      - name: Login to GitHub Container Registry
        if: github.repository_owner == 'k8snetworkplumbingwg'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Create manifest for multi-arch images
        if: github.repository_owner == 'k8snetworkplumbingwg'
        run: |
          # <tag>-thick
          # get artifacts from previous steps
          docker pull ${{ steps.docker_meta.outputs.tags }}-thick-amd64
          docker manifest create ${{ steps.docker_meta.outputs.tags }}-thick ${{ steps.docker_meta.outputs.tags }}-thick-amd64
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }}-thick ${{ steps.docker_meta.outputs.tags }}-thick-amd64 --arch amd64
          docker manifest push ${{ steps.docker_meta.outputs.tags }}-thick

          # stable-thick
          # get artifacts from previous steps
          docker pull ${{ env.REPOSITORY }}:stable-thick-amd64
          docker manifest create ${{ env.REPOSITORY }}:stable-thick ${{ env.REPOSITORY }}:stable-thick-amd64
          docker manifest annotate ${{ env.REPOSITORY }}:stable-thick ${{ env.REPOSITORY }}:stable-thick-amd64 --arch amd64
          docker manifest push ${{ env.REPOSITORY }}:stable-thick

          # <tag>
          # get artifacts from previous steps
          docker pull ${{ steps.docker_meta.outputs.tags }}-amd64
          docker pull ${{ steps.docker_meta.outputs.tags }}-arm64
          docker pull ${{ steps.docker_meta.outputs.tags }}-arm32
          docker pull ${{ steps.docker_meta.outputs.tags }}-ppc64le
          docker pull ${{ steps.docker_meta.outputs.tags }}-s390x
          docker manifest create ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-amd64 ${{ steps.docker_meta.outputs.tags }}-arm64 ${{ steps.docker_meta.outputs.tags }}-arm32 ${{ steps.docker_meta.outputs.tags }}-ppc64le ${{ steps.docker_meta.outputs.tags }}-s390x
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-amd64 --arch amd64
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-arm64 --arch arm64
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-arm32 --arch arm
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-ppc64le --arch ppc64le
          docker manifest annotate ${{ steps.docker_meta.outputs.tags }} ${{ steps.docker_meta.outputs.tags }}-s390x --arch s390x
          docker manifest push ${{ steps.docker_meta.outputs.tags }}

          # stable
          # get artifacts from previous steps
          docker pull ${{ env.REPOSITORY }}:stable-amd64
          docker pull ${{ env.REPOSITORY }}:stable-arm64
          docker pull ${{ env.REPOSITORY }}:stable-arm32
          docker pull ${{ env.REPOSITORY }}:stable-ppc64le
          docker pull ${{ env.REPOSITORY }}:stable-s390x
          docker manifest create ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-amd64 ${{ env.REPOSITORY }}:stable-arm64 ${{ env.REPOSITORY }}:stable-arm32 ${{ env.REPOSITORY }}:stable-ppc64le ${{ env.REPOSITORY }}:stable-s390x
          docker manifest annotate ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-amd64 --arch amd64
          docker manifest annotate ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-arm64 --arch arm64
          docker manifest annotate ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-arm32 --arch arm
          docker manifest annotate ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-ppc64le --arch ppc64le
          docker manifest annotate ${{ env.REPOSITORY }}:stable ${{ env.REPOSITORY }}:stable-s390x --arch s390x
          docker manifest push ${{ env.REPOSITORY }}:stable
