diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index db9d763a..db26a9b2 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -1,124 +1,157 @@
 name: CI
 on:
-  - pull_request
+  pull_request:
+  push:
+    branches:
+      - master
 env:
   ACTIONS_RUNNER_DEBUG: true
   KUBEPLUS_TEST_OUTPUT: yes
+  KUBEPLUS_CI: true
 jobs:
   job1:
-    runs-on: ubuntu-20.04
-    name: Deploy to minikube
+    runs-on: ubuntu-22.04
+    name: Test kubeplus deployment on kind
     steps:
-    - uses: actions/checkout@v2
-    - name: Start minikube
-      uses: medyagh/setup-minikube@master
-    - name: Try the cluster !
-      run: kubectl get pods -A
-    - name: Deploy KubePlus and application to minikube 
-      run: |
-        export SHELL=/bin/bash
-        eval $(minikube -p minikube docker-env)
-        echo "Glibc version"
-        ldd --version
+    - name: Checkout Code
+      uses: actions/checkout@v4
+
+    - name: Create k8s Kind Cluster
+      uses: helm/kind-action@v1
+
+    - name: Verify Cluster
+      run: |
+        kubectl get pods -A
+        echo "CLUSTER_NAME=chart-testing" >> $GITHUB_ENV
+
+    - name: Install Helm, Python3 LXML and Golang
+      run: |
         sudo apt-get install python3-lxml
-        echo "Installing helm..."
+        echo "Installing Helm..."
         wget https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz
         gunzip helm-v3.12.1-linux-amd64.tar.gz
         tar -xvf helm-v3.12.1-linux-amd64.tar
         sudo mv linux-amd64/helm /usr/local/bin/.
-        echo "Installing golang..."
-        rm -rf /usr/local/go 
+        echo "Installing Golang..."
+        rm -rf /usr/local/go
         wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
         sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
         export PATH=$PATH:/usr/local/go/bin
         go version
+
+    - name: Prepare KubePlus Environment
+      run: |
+        echo "Setting up KubePlus environment..."
         echo "Current directory:`pwd`"
-        echo "Folders:`ls`"
-        kubeplus_folder="$(basename `pwd`)"
-        echo "KubePlus folder name:$kubeplus_folder"
         mkdir -p $HOME/go/src/github.com/cloud-ark
         cd ..
-        runner_dir=`pwd`
         echo "Current directory:`pwd`"
-        mv $kubeplus_folder $HOME/go/src/github.com/cloud-ark/kubeplus
+        kubeplus_folder="$(basename `pwd`)"
+        echo "KubePlus folder name:$kubeplus_folder"
+        cp -R $kubeplus_folder $HOME/go/src/github.com/cloud-ark/kubeplus
         cd $HOME/go/src/github.com/cloud-ark/kubeplus
+        export KUBEPLUS_NS=default
+        echo "KUBEPLUS_NS=default" >> $GITHUB_ENV
         export KUBEPLUS_HOME=`pwd`
+        echo "KUBEPLUS_HOME=$KUBEPLUS_HOME" >> $GITHUB_ENV
         export PATH=$KUBEPLUS_HOME/plugins:$PATH
-        echo "PATH:$PATH"
-        echo "KUBEPLUS_HOME:$KUBEPLUS_HOME"
-        kubectl kubeplus commands
-        export KUBEPLUS_NS=default
-        python3 -m venv venv
-        source venv/bin/activate
-        pip3 install -r requirements.txt
-        apiserver=`kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'`
-        echo "API_SERVER_URL:$apiserver"
-        python3 provider-kubeconfig.py -s $apiserver create $KUBEPLUS_NS
-        deactivate
+        echo "PATH=$PATH" >> $GITHUB_ENV
 
-        echo "Building mutating-webhook..."
+    - name: Build Mutating Webhook
+      run: |
+        echo "KUBEPLUS_HOME:$KUBEPLUS_HOME"
         cd $KUBEPLUS_HOME/mutating-webhook
-        export GO111MODULE=on; go get github.com/googleapis/gnostic@v0.4.0
+        export GO111MODULE=on
+        go get github.com/googleapis/gnostic@v0.4.0
         ./build-artifact.sh latest
 
-        echo "Building helmer..."
+    - name: Build Helmer
+      run: |
         cd $KUBEPLUS_HOME/platform-operator/helm-pod/
         go mod vendor
         ./build-artifact.sh latest
 
-        echo "Building platform-operator..."
+    - name: Build Platform Operator
+      run: |
         cd $KUBEPLUS_HOME/platform-operator
         ./build-artifact.sh latest
 
-        echo "Building kubeconfiggenerator..."
+    - name: Build KubeConfig Generator
+      run: |
         cd $KUBEPLUS_HOME/deploy
         ./build-artifact-kubeconfiggenerator.sh latest
-        #echo "Building webhook_init_container..."
-        #./build-artifact.sh latest
-        #echo "Building resource cleaner..."
-        #./build-artifact-clean.sh latest
-
-        #cd $KUBEPLUS_HOME/consumerui
-        #echo "Building consumer ui..."
-        #./build-artifact.sh latest
 
-        cd $KUBEPLUS_HOME
-        ls
-        docker images
+    - name: Load Docker Images to Kind cluster
+      run: |
+        for image in $(docker images --format '{{.Repository}}:{{.Tag}}' | grep '^gcr.io/cloudark-kubeplus'); do
+          kind load docker-image "$image" --name $CLUSTER_NAME
+        done
+        docker exec $CLUSTER_NAME-control-plane crictl images
 
-        echo "Installing KubePlus..."
-        helm install kubeplus ./deploy/kubeplus-chart --kubeconfig=kubeplus-saas-provider.json --set MUTATING_WEBHOOK=gcr.io/cloudark-kubeplus/pac-mutating-admission-webhook:latest --set PLATFORM_OPERATOR=gcr.io/cloudark-kubeplus/platform-operator:latest --set HELMER=gcr.io/cloudark-kubeplus/helm-pod:latest --set CRD_REGISTRATION_HELPER=gcr.io/cloudark-kubeplus/kubeconfiggenerator:latest  -n $KUBEPLUS_NS
+    - name: Deploy KubePlus and Kubeplus plugin
+      run: |
+        ./install.sh --kubeplus-plugin --kubeplus $KUBEPLUS_NS
 
-        kubectl get pods -A
+    - name: Verify KubePlus Installation
+      run: |
+        echo "Verifying KubePlus installation..."
+        kubectl get pods -n $KUBEPLUS_NS | grep kubeplus
 
-        until kubectl get pods -A | grep kubeplus | grep -i Running; do echo "Waiting for KubePlus to start.."; sleep 1; kubeplus_pod=`kubectl get pods | grep kubeplus | awk '{print $1}'`; kubectl get pods $kubeplus_pod;  done 
+    - name: Retrieve KubePlus Pod Logs
+      run: |
         kubeplus_pod=`kubectl get pods | grep kubeplus | awk '{print $1}'`
-        echo "helmer logs..."
+        echo "Helmer logs..."
         kubectl logs $kubeplus_pod -c helmer
-        echo "platform-operator logs..."
+        echo "Platform Operator logs..."
         kubectl logs $kubeplus_pod -c platform-operator
-        echo "crd-hook logs..."
+        echo "CRD Hook logs..."
         kubectl logs $kubeplus_pod -c crd-hook
-        kubectl upload chart ./examples/multitenancy/application-hosting/wordpress/wordpress-chart-0.0.3.tgz kubeplus-saas-provider.json
-        echo "Sleeping for 10 seconds before continuing..."
-        sleep 10
+
+    - name: Upload Example Chart
+      run: kubectl upload chart ./examples/multitenancy/application-hosting/wordpress/wordpress-chart-0.0.3.tgz kubeplus-saas-provider.json
+
+    - name: Sleep Before Continuing
+      run: sleep 10
+
+    - name: Deploy WordPress Service Composition
+      run: |
         kubectl create -f ./examples/multitenancy/application-hosting/wordpress/wordpress-service-composition-localchart.yaml --kubeconfig=kubeplus-saas-provider.json
-        until kubectl get crds | grep wordpressservices.platformapi.kubeplus; do echo "Waiting for CRD to be registered.."; sleep 1; done
+
+    - name: Wait for CRD Registration
+      run: |
+        until kubectl get crds | grep wordpressservices.platformapi.kubeplus; do
+          echo "Waiting for CRD to be registered..."
+          sleep 1
+        done
+
+    - name: Deploy Tenant Example
+      run: |
         kubectl create -f ./examples/multitenancy/application-hosting/wordpress/tenant1.yaml --kubeconfig=kubeplus-saas-provider.json
         kubectl get resourcecompositions
         kubectl describe resourcecomposition wordpress-service-composition
-        until kubectl get pods -n wp-tenant1 | grep Running; do echo "Waiting for Application Pods to start.."; sleep 1; done
+
+    - name: Wait for Application Pods to Start
+      run: |
+        until kubectl get pods -n wp-tenant1 | grep Running; do
+          echo "Waiting for Application Pods to start..."
+          sleep 1
+        done
+
+    - name: Interact with Deployed Application
+      run: |
         kubectl appresources WordpressService wp-tenant1 –k kubeplus-saas-provider.json
         kubectl metrics WordpressService wp-tenant1 $KUBEPLUS_NS -k kubeplus-saas-provider.json
+
+    - name: Cleanup Deployed Resources
+      run: |
         kubectl delete wordpressservice wp-tenant1 --kubeconfig=kubeplus-saas-provider.json
         kubectl delete resourcecomposition wordpress-service-composition --kubeconfig=kubeplus-saas-provider.json
-        echo "Running tests..starting in 5 seconds"
-        sleep 5
+
+    - name: Run Unit Tests
+      run: |
         cd tests
         python3 -m venv venv
         source venv/bin/activate
         pip3 install -r requirements.txt
         python3 -m unittest -v tests
         deactivate
-        cd ../..
-        mv kubeplus $runner_dir