# Copyright 2020 The OpenEBS Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: release

on:
  release:
    types:
      - "created"

jobs:
  csi-driver:
    if: contains(github.ref, 'tags/v')
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      
      - name: Set Image Org
        # sets the default IMAGE_ORG to openebs
        run: |
          [ -z "${{ secrets.IMAGE_ORG }}" ] && IMAGE_ORG=openebs || IMAGE_ORG=${{ secrets.IMAGE_ORG}}
          echo "IMAGE_ORG=${IMAGE_ORG}" >> $GITHUB_ENV

      - name: Set Tag and Branch
        run: |
          TAG="${GITHUB_REF#refs/*/v}"
          echo "TAG=${TAG}" >> $GITHUB_ENV
          echo "RELEASE_TAG=${TAG}" >> $GITHUB_ENV
          BRANCH="v${TAG%.*}.x"
          echo "BRANCH=${BRANCH}" >> $GITHUB_ENV

      - name: Set Build Date
        id: date
        run: |
          echo "::set-output name=DATE::$(date -u +'%Y-%m-%dT%H:%M:%S%Z')"
      
      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          # add each registry to which the image needs to be pushed here
          images: |
            ${{ env.IMAGE_ORG }}/zfs-driver
            quay.io/${{ env.IMAGE_ORG }}/zfs-driver
            ghcr.io/${{ env.IMAGE_ORG }}/zfs-driver
          tag-latest: true
          tag-semver: |
            {{version}}
      
      - name: Print Build info
        run: |
          echo "${{ steps.docker_meta.outputs.tags }}"
          echo "RELEASE TAG: ${RELEASE_TAG}"
          echo "RELEASE BRANCH: ${BRANCH}"

      - name: Configure Git
        run: |
          git config user.name "GitHub Actions"
          git config user.email "actions@github.com"

      - name: Update Operator YAML
        if: "!github.event.release.prerelease"
        run: |
          echo "update the operator yaml with the image tag"
          sed -i "s/zfs-driver:.*/zfs-driver:${RELEASE_TAG}/" deploy/yamls/zfs-driver.yaml
          sed -i "s/openebs.io\/version:.*/openebs.io\/version: ${RELEASE_TAG}/" deploy/yamls/zfs-driver.yaml
          sed -i "s/zfs-driver:.*/zfs-driver:${RELEASE_TAG}/" deploy/zfs-operator.yaml
          sed -i "s/openebs.io\/version:.*/openebs.io\/version: ${RELEASE_TAG}/" deploy/zfs-operator.yaml
          sed -i "s/newTag:.*/newTag: ${RELEASE_TAG}/" deploy/yamls/kustomization.yaml

          git diff --quiet deploy/ || CHANGED=$?
          if [[ $CHANGED -ne 0 ]]; then
            echo "Commiting operator yaml changes"
            git add deploy/
            git commit -s -m 'chore(yaml): updating operator yaml with the image tag'
            git push origin HEAD:"${BRANCH}"
          fi

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
        with:
          platforms: all

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
        with:
          version: v0.4.2

      - name: Login to Docker Hub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      
      - name: Login to Quay
        uses: docker/login-action@v1
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_USERNAME }}
          password: ${{ secrets.QUAY_TOKEN }}

      - name: Login to GHCR
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build & Push Image
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./buildscripts/zfs-driver/zfs-driver.Dockerfile
          push: true
          platforms: linux/amd64, linux/arm64
          tags: |
            ${{ steps.docker_meta.outputs.tags }}
          build-args: |
            DBUILD_DATE=${{ steps.date.outputs.DATE }}
            DBUILD_REPO_URL=https://github.com/openebs/zfs-localpv
            DBUILD_SITE_URL=https://openebs.io
            RELEASE_TAG=${{ env.RELEASE_TAG }}
