name: Deploy on kind

on:
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * *" # This will run the workflow every day at midnight UTC

jobs:
  deploy:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04]
        #kind: [v0.21.0, v0.22.0, v0.23.0, v0.24.0, v0.25.0]
        kind: [v0.25.0]
    steps:
      - name: Create kind
        uses: helm/kind-action@v1
        with:
          version: ${{ matrix.kind }}
      - name: Print Kubernetes Version
        run: |
          kubectl version
      - name: Test kind
        run: |
          kubectl get no
          kubectl get pods -A -o wide
          kubectl get sc
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Install OpenEBS
        run: |
          kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
          echo "Sleeping for 60 seconds, give time for the operator to create the CRDs" && sleep 60
          kubectl get sc
          kubectl get po -A -o wide
      - name: Install Prometheus operator
        id: install-prometheus-operator
        run: |
          kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.48.1/bundle.yaml
          echo "Sleeping for 30 seconds, give time for the operator to create the CRDs" && sleep 30
          kubectl get crd
          kubectl get po -A -o wide
      - name: Install Minio
        id: install-minio
        run: |
          git clone --depth 1 --branch v6.0.1 https://github.com/minio/operator.git && kubectl apply -k operator/
          kubectl apply -f ./base/minio/minio-tenant-base.yaml
          echo "Sleeping for 60 seconds, give time for the operator/tenant to create the CRDs" && sleep 60
          kubectl get po -A -o wide
          kubectl get po -A -o wide | grep myminio-pool-0-0 | awk '{print $3}' | grep -q '2/2' && echo "myminio-pool-0-0 pod is running with status 2/2" || (echo "myminio-pool-0-0 pod is not running with status 2/2" && exit 1)
      - name: Install MongoDB
        id: install-mongodb
        run: |
          helm repo add bitnami https://charts.bitnami.com/bitnami
          kubectl create namespace mongodb
          helm install mongodb -n mongodb bitnami/mongodb --values ./base/mongodb/mongodb-values.yaml
          echo "Sleeping for 250 seconds, give time for the helm chart to create the pods" && sleep 250
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep mongodb | awk '{print $3}' | grep -q '1/1' && echo "mongodb pod is running with status 1/1" || (echo "mongodb pod is not running with status 1/1" && exit 1)
      - name: Install RabbitMQ
        id: install-rabbitmq
        run: |
          helm repo add bitnami https://charts.bitnami.com/bitnami
          kubectl create namespace rabbitmq
          helm install rabbitmq -n rabbitmq bitnami/rabbitmq --values ./base/rabbitmq/rabbitmq-values.yaml
          echo "Sleeping for 60 seconds, give time for the helm chart to create the pods" && sleep 60
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep rabbitmq | awk '{print $3}' | grep -q '1/1' && echo "rabbitmq pod is running with status 1/1" || (echo "rabbitmq pod is not running with status 1/1" && exit 1)
      - name: Install Vernemq (MQTT Broker)
        id: install-vernemq
        run: |
          kubectl create namespace vernemq
          helm repo add vernemq https://vernemq.github.io/docker-vernemq
          helm install vernemq vernemq/vernemq --values ./base/vernemq/vernemq-values.yaml -n vernemq --create-namespace
          echo "Sleeping for 120 seconds, give time for the helm chart to create the pods" && sleep 120
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep vernemq-0 | awk '{print $3}' | grep -q '1/1' && echo "vernemq pod is running with status 1/1" || (echo "vernemq pod is not running with status 1/1" && exit 1)
          kubectl exec --namespace vernemq vernemq-0 -- /vernemq/bin/vmq-admin cluster show
      - name: Install Kerberos Vault
        id: install-kerberos-vault
        run: |
          kubectl create namespace kerberos-vault
          kubectl apply -f ./base/vault/mongodb-configmap.yaml -n kerberos-vault
          kubectl apply -f ./base/vault/kerberos-vault-deployment.yaml -n kerberos-vault
          kubectl apply -f ./base/vault/kerberos-vault-service.yaml -n kerberos-vault
          echo "Sleeping for 30 seconds, give time for the helm chart to create the pods" && sleep 30
          kubectl get pods -A -o wide 
          kubectl get pods -A -o wide | grep kerberos-vault | awk '{print $3}' | grep -q '1/1' && echo "kerberos-vault pod is running with status 1/1" || (echo "kerberos-vault pod is not running with status 1/1" && exit 1)
      - name: Install Kerberos Agent
        id: install-kerberos-agent
        run: |
          kubectl apply -f ./base/agent/kerberos-agent-deployment.yaml
          echo "Sleeping for 30 seconds, give time for the helm chart to create the pods" && sleep 30
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep agent | awk '{print $3}' | grep -q '1/1' && echo "kerberos-agent pod is running with status 1/1" || (echo "kerberos-agent pod is not running with status 1/1" && exit 1)
      - name: Install Data filtering
        id: install-data-filtering
        run: |
          sed -e '/nvidia/ s/^#*/#/' -i ./base/vault/data-filtering-deployment.yaml
          kubectl apply -f ./base/vault/data-filtering-deployment.yaml
          echo "Sleeping for 250 seconds, give time for the helm chart to create the pods" && sleep 250
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep data-filtering | awk '{print $3}' | grep -q '1/1' && echo "data-filtering pod is running with status 1/1" || (echo "data-filtering pod is not running with status 1/1" && exit 1)
      - name: Install Kerberos Hub helm chart
        id: install-kerberos-hub
        run: |
          helm repo add kerberos https://charts.kerberos.io
          kubectl create namespace kerberos-hub
          helm install hub kerberos/hub --values ./base/hub/kerberos-hub-values.yaml -n kerberos-hub --create-namespace
          echo "Sleeping for 300 seconds, give time for the helm chart to create the pods" && sleep 300
          kubectl get pods -A -o wide
          kubectl get pods -A -o wide | grep kerberos-hub | awk '{print $3}' | grep -q '1/1' && echo "kerberos-hub pod is running with status 1/1" || (echo "kerberos-hub pod is not running with status 1/1" && exit 1)
