on:
  workflow_dispatch: # this is used to trigger the workflow on non-main branches
    inputs:
      pr:
        description: 'PR number from the selected branch to test'
        type: string
        required: true
  issue_comment:
    types: [created, edited]

name: test-kata-deploy

jobs:
  check-comment-and-membership:
    runs-on: ubuntu-latest
    if: |
      github.event.issue.pull_request
      && github.event_name == 'issue_comment'
      && github.event.action == 'created'
      && startsWith(github.event.comment.body, '/test_kata_deploy')
      || github.event_name == 'workflow_dispatch'
    steps:
      - name: Check membership on comment or dispatch
        uses: kata-containers/is-organization-member@1.0.1
        id: is_organization_member
        with:
          organization: kata-containers
          username: ${{ github.event.comment.user.login || github.event.sender.login }}
          token: ${{ secrets.GITHUB_TOKEN }}
      - name: Fail if not member
        run: |
          result=${{ steps.is_organization_member.outputs.result }}
          if [ $result == false ]; then
              user=${{ github.event.comment.user.login || github.event.sender.login }}
              echo Either ${user} is not part of the kata-containers organization
              echo or ${user} has its Organization Visibility set to Private at
              echo https://github.com/orgs/kata-containers/people?query=${user}
              echo 
              echo Ensure you change your Organization Visibility to Public and
              echo trigger the test again.
              exit 1
          fi

  build-asset:
    runs-on: ubuntu-latest
    needs: check-comment-and-membership
    strategy:
      matrix:
        asset:
          - cloud-hypervisor
          - firecracker
          - kernel
          - kernel-dragonball-experimental
          - nydus
          - qemu
          - rootfs-image
          - rootfs-initrd
          - shim-v2
          - virtiofsd
    steps:
      - name: get-PR-ref
        id: get-PR-ref
        run: |
            if [ ${{ github.event_name }} == 'issue_comment' ]; then
                ref=$(cat $GITHUB_EVENT_PATH | jq -r '.issue.pull_request.url' | sed  's#^.*\/pulls#refs\/pull#' | sed 's#$#\/merge#')
            else # workflow_dispatch
                ref="refs/pull/${{ github.event.inputs.pr }}/merge"
            fi
            echo "reference for PR: " ${ref} "event:" ${{ github.event_name }}
            echo "##[set-output name=pr-ref;]${ref}"
      - uses: actions/checkout@v2
        with:
          ref: ${{ steps.get-PR-ref.outputs.pr-ref }}

      - name: Build ${{ matrix.asset }}
        run: |
          make "${KATA_ASSET}-tarball"
          build_dir=$(readlink -f build)
          # store-artifact does not work with symlink
          sudo cp -r "${build_dir}" "kata-build"
        env:
          KATA_ASSET: ${{ matrix.asset }}
          TAR_OUTPUT: ${{ matrix.asset }}.tar.gz

      - name: store-artifact ${{ matrix.asset }}
        uses: actions/upload-artifact@v2
        with:
          name: kata-artifacts
          path: kata-build/kata-static-${{ matrix.asset }}.tar.xz
          if-no-files-found: error

  create-kata-tarball:
    runs-on: ubuntu-latest
    needs: build-asset
    steps:
      - name: get-PR-ref
        id: get-PR-ref
        run: |
            if [ ${{ github.event_name }} == 'issue_comment' ]; then
                ref=$(cat $GITHUB_EVENT_PATH | jq -r '.issue.pull_request.url' | sed  's#^.*\/pulls#refs\/pull#' | sed 's#$#\/merge#')
            else # workflow_dispatch
                ref="refs/pull/${{ github.event.inputs.pr }}/merge"
            fi
            echo "reference for PR: " ${ref} "event:" ${{ github.event_name }}
            echo "##[set-output name=pr-ref;]${ref}"
      - uses: actions/checkout@v2
        with:
          ref: ${{ steps.get-PR-ref.outputs.pr-ref }}
      - name: get-artifacts
        uses: actions/download-artifact@v2
        with:
          name: kata-artifacts
          path: kata-artifacts
      - name: merge-artifacts
        run: |
          ./tools/packaging/kata-deploy/local-build/kata-deploy-merge-builds.sh kata-artifacts
      - name: store-artifacts
        uses: actions/upload-artifact@v2
        with:
          name: kata-static-tarball
          path: kata-static.tar.xz

  kata-deploy:
    needs: create-kata-tarball
    runs-on: ubuntu-latest
    steps:
      - name: get-PR-ref
        id: get-PR-ref
        run: |
            if [ ${{ github.event_name }} == 'issue_comment' ]; then
                ref=$(cat $GITHUB_EVENT_PATH | jq -r '.issue.pull_request.url' | sed  's#^.*\/pulls#refs\/pull#' | sed 's#$#\/merge#')
            else # workflow_dispatch
                ref="refs/pull/${{ github.event.inputs.pr }}/merge"
            fi
            echo "reference for PR: " ${ref} "event:" ${{ github.event_name }}
            echo "##[set-output name=pr-ref;]${ref}"
      - uses: actions/checkout@v2
        with:
          ref: ${{ steps.get-PR-ref.outputs.pr-ref }}
      - name: get-kata-tarball
        uses: actions/download-artifact@v2
        with:
          name: kata-static-tarball
      - name: build-and-push-kata-deploy-ci
        id: build-and-push-kata-deploy-ci
        run: |
          PR_SHA=$(git log --format=format:%H -n1)
          mv kata-static.tar.xz $GITHUB_WORKSPACE/tools/packaging/kata-deploy/kata-static.tar.xz
          docker build --build-arg KATA_ARTIFACTS=kata-static.tar.xz -t quay.io/kata-containers/kata-deploy-ci:$PR_SHA $GITHUB_WORKSPACE/tools/packaging/kata-deploy
          docker login -u ${{ secrets.QUAY_DEPLOYER_USERNAME }} -p ${{ secrets.QUAY_DEPLOYER_PASSWORD }} quay.io
          docker push quay.io/kata-containers/kata-deploy-ci:$PR_SHA
          mkdir -p packaging/kata-deploy
          ln -s $GITHUB_WORKSPACE/tools/packaging/kata-deploy/action packaging/kata-deploy/action
          echo "::set-output name=PKG_SHA::${PR_SHA}"
      - name: test-kata-deploy-ci-in-aks
        uses: ./packaging/kata-deploy/action
        with:
          packaging-sha: ${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}}
        env:
          PKG_SHA: ${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}}
          AZ_APPID: ${{ secrets.AZ_APPID }}
          AZ_PASSWORD: ${{ secrets.AZ_PASSWORD }}
          AZ_SUBSCRIPTION_ID: ${{ secrets.AZ_SUBSCRIPTION_ID }}
          AZ_TENANT_ID: ${{ secrets.AZ_TENANT_ID }}
