Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add install.sh Script, Streamline README, and Modularize GitHub Actions Workflow #1348

Merged
merged 3 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 97 additions & 64 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
@@ -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
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/[email protected]
export GO111MODULE=on
go get github.com/googleapis/[email protected]
./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
devdattakulkarni marked this conversation as resolved.
Show resolved Hide resolved

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
Loading