# 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: ci

on:
  pull_request:
    paths-ignore:
      - 'deploy/helm/**'
      - 'docs/**'
      - 'design/**'
      - 'changelogs/**'
      - '*.md'
    branches:
      # on pull requests to develop and release branches
      - develop
      - 'v*'

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Shellcheck
        uses: reviewdog/action-shellcheck@v1
        with:
          github_token: ${{ secrets.github_token }}
          reporter: github-pr-review
          path: '.'
          pattern: '*.sh'


  unit-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Unit test
        run: make test

      - name: Upload Coverage Report
        uses: codecov/codecov-action@v1

  bdd-test:
    needs: ['unit-test']
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        kubernetes: [v1.25.10]
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Installation
        run: |
          sudo apt-get update -qq
          sudo apt-get install -y zfsutils-linux
          truncate -s 100G /tmp/disk.img
          sudo zpool create zfspv-pool `sudo losetup -f /tmp/disk.img --show`

      - name: Set up Go 1.19
        uses: actions/setup-go@v4
        with:
          go-version: 1.19.9
          cache: false

      - name: Setup Minikube-Kubernetes
        uses: manusa/actions-setup-minikube@v2.7.2
        with:
          minikube version: 'v1.26.1'
          kubernetes version: ${{ matrix.kubernetes }}
          github token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setting environment variables
        run: |
          echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
          echo "OPENEBS_NAMESPACE=openebs" >> $GITHUB_ENV

      - name: Build images locally
        run: make zfs-driver-image || exit 1;

      - name: bootstrap
        run: make bootstrap

      - name: Running tests
        run: |
          make ci
          make sanity 

  csi-driver:
    runs-on: ubuntu-latest
    needs: ['lint', 'bdd-test']
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - 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: Build
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./buildscripts/zfs-driver/zfs-driver.Dockerfile
          push: false
          platforms: linux/amd64, linux/arm64
          tags: |
            openebs/zfs-driver:ci
