-
Notifications
You must be signed in to change notification settings - Fork 4.9k
215 lines (204 loc) · 7.78 KB
/
functional_verified.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
name: Functional_Verified
on:
workflow_dispatch:
pull_request:
paths:
- "go.mod"
- "**.go"
- "**.yml"
- "**.yaml"
- "Makefile"
- "**Dockerfile**"
- "!deploy/kicbase/**"
- "!deploy/iso/**"
types:
- labeled
- opened
- synchronize
label:
types:
- created
- edited
- deleted
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.23.2'
permissions:
contents: read
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-22.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed
with:
go-version: ${{env.GO_VERSION}}
- 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 e2e-linux-arm64
cp -r test/integration/testdata ./out
- uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
with:
name: minikube_binaries
path: out
functional_docker_ubuntu_arm64:
permissions:
contents: none
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:
- uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed
with:
cache: false
go-version: ${{env.GO_VERSION}}
- name: Install tools
shell: bash
run: |
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y || true
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
wget https://raw.githubusercontent.com/kubernetes/minikube/master/hack/gh_actions/cleanup.sh
wget https://raw.githubusercontent.com/kubernetes/minikube/master/hack/gh_actions/install_cleanup.sh
chmod +x cleanup.sh install_cleanup.sh
./install_cleanup.sh
- name: Install kubectl
shell: bash
run: |
curl -LO "https://dl.k8s.io/release/$(curl -sSL https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
kubectl version --client=true
- name: Install gopogh
shell: bash
run: |
go install github.com/medyagh/gopogh/cmd/gopogh@v0.29.0
- 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 "--------------------------"
- name: Download Binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
with:
name: minikube_binaries
path: 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 -a --volumes -f || 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<<EOF' >> $GITHUB_ENV
echo "${STAT}" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
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:
permissions:
contents: none
needs:
[
functional_docker_ubuntu_arm64,
]
runs-on: ubuntu-22.04
steps:
- name: download all extra reports
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
- 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@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
with:
name: all_reports
path: all_reports