name: Functional_Verified on: workflow_dispatch: pull_request: paths: - "go.mod" - "**.go" - "**.yml" - "**.yaml" - "Makefile" - "!deploy/kicbase/**" - "!deploy/iso/**" types: - labeled - opened - synchronize label: types: - created - edited - deleted env: GOPROXY: https://proxy.golang.org GO_VERSION: '1.17.3' jobs: # Runs before all other jobs # builds the minikube binaries build_minikube: if: contains(github.event.pull_request.labels.*.name, 'ok-to-test') runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: go-version: ${{env.GO_VERSION}} stable: true - name: Download Dependencies run: go mod download - name: Build Binaries run: | sudo apt-get update sudo apt-get install -y libvirt-dev MINIKUBE_BUILD_IN_DOCKER=y make cross e2e-cross debs cp -r test/integration/testdata ./out - uses: actions/upload-artifact@v1 with: name: minikube_binaries path: out functional_docker_ubuntu_arm64: needs: [ build_minikube ] runs-on: [ self-hosted, arm64 ] env: TIME_ELAPSED: time JOB_NAME: "functional_docker_ubuntu_arm64" GOPOGH_RESULT: "" SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 steps: - name: Install tools shell: bash run: | sudo apt update sudo apt install -y jq docker git cron sudo usermod -aG docker $USER - name: Init shell: bash run: | if [[ -f /var/run/reboot.in.progress ]]; then echo "reboot in progress" exit 1 fi sudo touch /var/run/job.in.progress rm -rf cleanup.sh install_cleanup.sh # after this PR is merged, update URLs to get the scripts from github master wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh chmod +x cleanup.sh install_cleanup.sh ./install_cleanup.sh - name: Install kubectl shell: bash run: | curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl sudo install kubectl /usr/local/bin/kubectl kubectl version --client=true - name: Install gopogh shell: bash run: | curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - name: Docker Info shell: bash run: | echo "--------------------------" docker version || true echo "--------------------------" docker info || true echo "--------------------------" docker system df || true echo "--------------------------" docker system info --format='{{json .}}'|| true echo "--------------------------" docker ps || true echo "--------------------------" whoami || true echo "--------------------------" hostname || true echo "--------------------------" # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - uses: actions/setup-go@v2 with: go-version: ${{env.GO_VERSION}} stable: true - name: Download Binaries uses: actions/download-artifact@v1 with: name: minikube_binaries - name: Pre-cleanup continue-on-error: true run: | minikube_binaries/minikube-linux-arm64 delete --all --purge || true docker kill $(docker ps -aq) || true docker system prune --volumes --force || true - name: Run Integration Test continue-on-error: false # bash {0} to allow test to continue to next step. in case of shell: bash {0} run: | cd minikube_binaries mkdir -p report mkdir -p testhome chmod a+x e2e-* chmod a+x minikube-* MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-arm64 delete --all --purge START_TIME=$(date -u +%s) KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt END_TIME=$(date -u +%s) TIME_ELAPSED=$(($END_TIME-$START_TIME)) min=$((${TIME_ELAPSED}/60)) sec=$((${TIME_ELAPSED}%60)) TIME_ELAPSED="${min} min $sec seconds " echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - name: Generate HTML Report shell: bash run: | cd minikube_binaries export PATH=${PATH}:`go env GOPATH`/bin go tool test2json -t < ./report/testout.txt > ./report/testout.json || true STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true echo status: ${STAT} FailNum=$(echo $STAT | jq '.NumberOfFail') TestsNum=$(echo $STAT | jq '.NumberOfTests') GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV echo 'STAT<> $GITHUB_ENV echo "${STAT}" >> $GITHUB_ENV echo 'EOF' >> $GITHUB_ENV - uses: actions/upload-artifact@v1 with: name: functional_docker_ubuntu_arm64 path: minikube_binaries/report - name: The End Result - functional_docker_ubuntu_arm64 shell: bash run: | echo ${GOPOGH_RESULT} numFail=$(echo $STAT | jq '.NumberOfFail') numPass=$(echo $STAT | jq '.NumberOfPass') echo "*******************${numPass} Passes :) *******************" echo $STAT | jq '.PassedTests' || true echo "*******************************************************" echo "---------------- ${numFail} Failures :( ----------------------------" echo $STAT | jq '.FailedTests' || true echo "-------------------------------------------------------" if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - name: finalize shell: bash run: sudo rm -rf /var/run/job.in.progress # After all integration tests finished # collect all the reports and upload them upload_all_reports: needs: [ functional_docker_ubuntu_arm64, ] runs-on: ubuntu-20.04 steps: - name: download all extra reports uses: actions/download-artifact@v2-preview - name: upload all extra reports shell: bash {0} continue-on-error: true run: | mkdir -p all_reports cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ - uses: actions/upload-artifact@v1 with: name: all_reports path: all_reports