diff --git a/.github/workflows/e2e-1.24.yaml b/.github/workflows/e2e-1.24.yaml new file mode 100644 index 00000000..bb425c1b --- /dev/null +++ b/.github/workflows/e2e-1.24.yaml @@ -0,0 +1,113 @@ +name: E2E-1.24 + +on: + push: + branches: + - master + - release-* + pull_request: {} + workflow_dispatch: {} + +env: + # Common versions + GO_VERSION: '1.18' + KIND_ACTION_VERSION: 'v1.3.0' + KIND_VERSION: 'v0.14.0' + KIND_IMAGE: 'kindest/node:v1.24.2' + KIND_CLUSTER_NAME: 'ci-testing' + +jobs: + + game-kruise: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@v3 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@v1.3.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-game-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + set -ex + kubectl cluster-info + make helm + helm repo add openkruise https://openkruise.github.io/charts/ + helm repo update + helm install kruise openkruise/kruise + for ((i=1;i<10;i++)); + do + set +e + PODS=$(kubectl get pod -n kruise-system | grep '1/1' | grep kruise-controller-manager | wc -l) + set -e + if [ "$PODS" -eq "2" ]; then + break + fi + sleep 3 + done + set +e + PODS=$(kubectl get pod -n kruise-system | grep '1/1' | grep kruise-controller-manager | wc -l) + set -e + if [ "$PODS" -eq "2" ]; then + echo "Wait for kruise-manager ready successfully" + else + echo "Timeout to wait for kruise-manager ready" + exit 1 + fi + - name: Install Kruise Game + run: | + set -ex + kubectl cluster-info + IMG=openkruise/kruise-game-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh + for ((i=1;i<10;i++)); + do + set +e + PODS=$(kubectl get pod -n kruise-game-system | grep '1/1' | wc -l) + set -e + if [ "$PODS" -eq "1" ]; then + break + fi + sleep 3 + done + set +e + PODS=$(kubectl get pod -n kruise-game-system | grep '1/1' | wc -l) + kubectl get node -o yaml + kubectl get all -n kruise-game-system -o yaml + set -e + if [ "$PODS" -eq "1" ]; then + echo "Wait for kruise-game ready successfully" + else + echo "Timeout to wait for kruise-game ready" + exit 1 + fi + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + make ginkgo + set +e + ./bin/ginkgo -timeout 60m -v test/e2e + retVal=$? + # kubectl get pod -n kruise-game-system --no-headers | grep manager | awk '{print $1}' | xargs kubectl logs -n kruise-game-system + restartCount=$(kubectl get pod -n kruise-game-system --no-headers | awk '{print $4}') + if [ "${restartCount}" -eq "0" ];then + echo "Kruise-game has not restarted" + else + kubectl get pod -n kruise-game-system --no-headers + echo "Kruise-game has restarted, abort!!!" + kubectl get pod -n kruise-game-system --no-headers| awk '{print $1}' | xargs kubectl logs -p -n kruise-game-system + exit 1 + fi + exit $retVal \ No newline at end of file diff --git a/Makefile b/Makefile index be48dd4e..c6538b6e 100644 --- a/Makefile +++ b/Makefile @@ -131,3 +131,10 @@ $(CONTROLLER_GEN): $(LOCALBIN) envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. $(ENVTEST): $(LOCALBIN) GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest + +HELM = $(shell pwd)/bin/helm +helm: ## Download helm locally if necessary. + $(call go-get-tool,$(HELM),helm.sh/helm/v3@v3.8.1) + +ginkgo: ## Download ginkgo locally if necessary. + GOBIN=$(LOCALBIN) go install github.com/onsi/ginkgo/ginkgo@v1.16.5 \ No newline at end of file diff --git a/scripts/deploy_kind.sh b/scripts/deploy_kind.sh new file mode 100755 index 00000000..8ab4fa4d --- /dev/null +++ b/scripts/deploy_kind.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +if [ -z "$IMG" ]; then + echo "no found IMG env" + exit 1 +fi + +set -e + +make kustomize +KUSTOMIZE=$(pwd)/bin/kustomize +(cd config/manager && "${KUSTOMIZE}" edit set image controller="${IMG}") +"${KUSTOMIZE}" build config/default | sed -e 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' > /tmp/kruise-game-kustomization.yaml +echo -e "resources:\n- manager.yaml" > config/manager/kustomization.yaml +kubectl apply -f /tmp/kruise-game-kustomization.yaml \ No newline at end of file diff --git a/test/kind-conf.yaml b/test/kind-conf.yaml new file mode 100644 index 00000000..66536a27 --- /dev/null +++ b/test/kind-conf.yaml @@ -0,0 +1,9 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: + - role: control-plane + - role: worker + - role: worker + - role: worker +featureGates: + EphemeralContainers: true \ No newline at end of file