name: Publish release tarball
on: 
  push: 
    tags:
     - '*'

jobs:
  get-artifact-list:
    runs-on: ubuntu-latest
    steps:
      - name: get the list
        run: |
         git clone https://github.com/kata-containers/packaging
         pushd packaging
         tag=$(echo $GITHUB_REF | cut -d/ -f3-)
         git checkout $tag
         popd
         ./packaging/artifact-list.sh > artifact-list.txt
      - name: save-artifact-list
        uses: actions/upload-artifact@master
        with:
          name: artifact-list
          path: artifact-list.txt

  build-kernel:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_kernel"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - run: |
         sudo apt-get update && sudo apt install -y flex bison libelf-dev bc iptables
      - name: build-kernel
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-kernel.tar.gz

  build-experimental-kernel:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_experimental_kernel"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - run: |
         sudo apt-get update && sudo apt install -y flex bison libelf-dev bc iptables
      - name: build-experimental-kernel
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-experimental-kernel.tar.gz

  build-qemu:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_qemu"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-qemu
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-qemu.tar.gz

  build-nemu:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_nemu"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-nemu
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-nemu.tar.gz

  # Job for building the QEMU binaries with virtiofs support
  build-qemu-virtiofsd:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_qemu_virtiofsd"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-qemu-virtiofsd
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-qemu-virtiofsd.tar.gz

  # Job for building the image
  build-image:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_image"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-image
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-image.tar.gz

  # Job for building firecracker hypervisor
  build-firecracker:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_firecracker"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-firecracker
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-firecracker.tar.gz

  # Job for building cloud-hypervisor
  build-clh:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_clh"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-clh
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-clh.tar.gz

  # Job for building kata components
  build-kata-components:
    runs-on: ubuntu-16.04
    needs: get-artifact-list
    env:
      buildstr: "install_kata_components"
    steps:
      - uses: actions/checkout@v1
      - name: get-artifact-list
        uses: actions/download-artifact@master
        with:
          name: artifact-list
      - name: build-kata-components
        run: |
         if grep -q $buildstr ./artifact-list/artifact-list.txt; then
           $GITHUB_WORKSPACE/.github/workflows/generate-artifact-tarball.sh $buildstr
           echo ::set-env name=artifact-built::true
         else
           echo ::set-env name=artifact-built::false
         fi
      - name: store-artifacts
        if: env.artifact-built == 'true'
        uses: actions/upload-artifact@master
        with:
          name: kata-artifacts
          path: kata-static-kata-components.tar.gz

  gather-artifacts:
    runs-on: ubuntu-16.04
    needs: [build-experimental-kernel, build-kernel, build-qemu, build-qemu-virtiofsd, build-image, build-firecracker, build-kata-components, build-nemu, build-clh]
    steps:
      - uses: actions/checkout@v1
      - name: get-artifacts
        uses: actions/download-artifact@master
        with:
          name: kata-artifacts
      - name: colate-artifacts
        run: |
          $GITHUB_WORKSPACE/.github/workflows/gather-artifacts.sh
      - name: store-artifacts
        uses: actions/upload-artifact@master
        with:
          name: release-candidate
          path: kata-static.tar.xz

  kata-deploy:
    needs: gather-artifacts
    runs-on: ubuntu-latest
    steps:
      - name: get-artifacts
        uses: actions/download-artifact@master
        with:
          name: release-candidate
      - name: build-and-push-kata-deploy-ci
        id: build-and-push-kata-deploy-ci
        run: |
          tag=$(echo $GITHUB_REF | cut -d/ -f3-)
          git clone https://github.com/kata-containers/packaging
          pushd packaging
          git checkout $tag
          pkg_sha=$(git rev-parse HEAD)
          popd
          mv release-candidate/kata-static.tar.xz ./packaging/kata-deploy/kata-static.tar.xz
          docker build --build-arg KATA_ARTIFACTS=kata-static.tar.xz -t katadocker/kata-deploy-ci:$pkg_sha ./packaging/kata-deploy
          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker push katadocker/kata-deploy-ci:$pkg_sha

          echo "##[set-output name=PKG_SHA;]${pkg_sha}"
          echo ::set-env name=TAG::$tag
      - 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 }}
      - name: push-tarball
        run: |
          # tag the container image we created and push to DockerHub
          tag=$(echo $GITHUB_REF | cut -d/ -f3-)
          docker tag katadocker/kata-deploy-ci:${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}} katadocker/kata-deploy:${tag}
          docker push katadocker/kata-deploy:${tag}

  upload-static-tarball:
    needs: kata-deploy
    runs-on: ubuntu-latest
    steps:
      - name: download-artifacts
        uses: actions/download-artifact@master
        with:
          name: release-candidate
      - name: install hub
        run: |
          HUB_VER=$(curl -s "https://api.github.com/repos/github/hub/releases/latest" | jq -r .tag_name | sed 's/^v//')
          wget -q -O- https://github.com/github/hub/releases/download/v$HUB_VER/hub-linux-amd64-$HUB_VER.tgz | \
          tar xz --strip-components=2 --wildcards '*/bin/hub' && sudo mv hub /usr/local/bin/hub
      - name: push static tarball to github
        run: |
          tag=$(echo $GITHUB_REF | cut -d/ -f3-)
          tarball="kata-static-$tag-x86_64.tar.xz"
          repo="https://github.com/kata-containers/runtime.git"
          mv release-candidate/kata-static.tar.xz "release-candidate/${tarball}"
          git clone "${repo}"
          cd runtime
          echo "uploading asset '${tarball}' to '${repo}' tag: ${tag}"
          GITHUB_TOKEN=${{ secrets.GIT_UPLOAD_TOKEN }} hub release edit -m "" -a "../release-candidate/${tarball}" "${tag}"
