diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index db9d763a..5f22ac13 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-24.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