|
11 | 11 | MICROK8S_CHANNEL: 1.32/stable |
12 | 12 | SHIM_SPIN_VERSION: v0.23.0 |
13 | 13 | DOCKER_BUILD_SUMMARY: false |
| 14 | + # A comma-delimited list of shim files in config/samples to test |
| 15 | + SAMPLE_SHIMS: sample_shim_spin.yaml,sample_shim_wasmtime.yaml |
14 | 16 |
|
15 | 17 | jobs: |
16 | 18 | build-images: |
@@ -156,61 +158,68 @@ jobs: |
156 | 158 | --set rcm.shimDownloaderConfig.content.sleepDuration=3 \ |
157 | 159 | deploy/helm |
158 | 160 |
|
159 | | - - name: apply Spin shim |
| 161 | + - name: apply shims |
| 162 | + working-directory: config/samples |
160 | 163 | run: | |
161 | | - shim_file=config/samples/test_shim_spin.yaml |
162 | | - if [[ "${{ matrix.config.type }}" == "microk8s" ]]; then |
163 | | - cp $shim_file config/samples/test_shim_spin_microk8s.yaml |
164 | | - shim_file=config/samples/test_shim_spin_microk8s.yaml |
165 | | - # update file to remove the 'containerdRuntimeOptions' field |
166 | | - # as there is a known bug that MicroK8s containerd does not pass the options |
167 | | - yq -i 'del(.spec.containerdRuntimeOptions)' $shim_file |
168 | | - fi |
169 | | - kubectl apply -f $shim_file |
170 | | -
|
171 | | - - name: label nodes |
172 | | - run: kubectl label node --all spin=true |
173 | | - |
174 | | - - name: verify only one installer pod with Succeeded status |
175 | | - run: | |
176 | | - timeout 60s bash -c 'until [[ "$(kubectl -n rcm get $(kubectl get pods -n rcm --no-headers -o name | grep install | head -n1) -o jsonpath="{.status.phase}" 2>/dev/null)" == "Succeeded" ]]; do sleep 2; done' |
| 164 | + IFS=',' read -ra shims <<< "${{ env.SAMPLE_SHIMS }}" |
| 165 | + for shim_file in "${shims[@]}"; do |
| 166 | + if [[ "${{ matrix.config.type }}" == "microk8s" || "${{ matrix.config.type }}" == "k3d" ]]; then |
| 167 | + cp $shim_file $shim_file.amended |
| 168 | + shim_file=$shim_file.amended |
| 169 | + # update file to remove the 'containerdRuntimeOptions' field |
| 170 | + # as there is a known bug that MicroK8s containerd does not pass the options |
| 171 | + # and k3d uses cgroupfs, not systemd |
| 172 | + yq -i 'del(.spec.containerdRuntimeOptions)' $shim_file |
| 173 | + fi |
| 174 | + kubectl apply -f $shim_file |
| 175 | + done |
| 176 | +
|
| 177 | + - name: label nodes and wait for shims to be ready |
| 178 | + run: ./scripts/sample-shims-label-nodes.sh |
177 | 179 |
|
178 | 180 | - name: verify configMap for shim-downloader is added |
179 | 181 | run: | |
180 | 182 | timeout 60s bash -c 'until [[ $(kubectl -n rcm get $(kubectl get pods -n rcm --no-headers -o name | grep install | head -n1) -o jsonpath="{.spec.initContainers[0].envFrom[0].configMapRef.name}" 2>/dev/null) == "configmap-test" ]]; do sleep 2; done' |
181 | 183 |
|
182 | | - - name: run Spin App |
| 184 | + # TODO: unify testdata/apps to all model the same behavor, eg simple web server, etc |
| 185 | + - name: run and verify spin app |
183 | 186 | run: | |
184 | | - kubectl apply -f testdata/apps/spin-app.yaml |
185 | | - kubectl rollout status deployment wasm-spin --timeout 180s |
186 | | - kubectl get pods -A |
187 | | - kubectl port-forward svc/wasm-spin 8083:80 & |
188 | | - timeout 90s bash -c 'until curl -f -vvv http://localhost:8083/hello; do sleep 2; done' |
| 187 | + kubectl apply -f testdata/apps/spin-v2-app.yaml |
| 188 | + kubectl rollout status deployment spin-v2-app --timeout 180s |
| 189 | + kubectl port-forward svc/spin-v2-app 8083:80 & |
| 190 | + timeout 60s bash -c 'until curl -f -vvv http://localhost:8083/hello; do sleep 2; done' |
189 | 191 |
|
190 | | - - name: restart system containerd |
191 | | - if: matrix.config.type == 'microk8s' |
192 | | - run: sudo systemctl start containerd |
| 192 | + - name: run and verify wasmtime app |
| 193 | + run: | |
| 194 | + kubectl apply -f testdata/apps/wasmtime-v1-app.yaml |
| 195 | + kubectl rollout status deployment wasmtime-v1-app --timeout 180s |
| 196 | + pod=$(kubectl get pod -l app=wasmtime-v1-app -o name) |
| 197 | + timeout 60s bash -c 'until kubectl logs $1 | grep -q "This is a song that never ends."; do sleep 2; done' -- $pod |
193 | 198 |
|
194 | 199 | - name: debug |
195 | 200 | if: failure() |
196 | 201 | run: | |
197 | 202 | kubectl get pods -A |
198 | | - kubectl describe shim spin-v2 |
199 | | - kubectl describe runtimeclass wasmtime-spin-v2 |
| 203 | + kubectl describe shims || true |
| 204 | + kubectl describe runtimeclasses || true |
200 | 205 |
|
201 | 206 | # Get install pod logs |
202 | | - install_pod=$(kubectl get pods -n rcm --no-headers -o name | awk '{if ($1 ~ "-spin-v2-install") print $0}') |
203 | | - kubectl describe -n rcm $install_pod || true |
204 | | - kubectl logs -n rcm -c downloader $install_pod || true |
205 | | - kubectl logs -n rcm -c provisioner $install_pod || true |
| 207 | + IFS=',' read -ra shims <<< "${{ env.SAMPLE_SHIMS }}" |
| 208 | + for shim_file in "${shims[@]}"; do |
| 209 | + shim_name="$(cat $shim_file | yq '.metadata.name')" |
| 210 | + install_pod="$(kubectl get pods -n rcm --no-headers -o name | grep $shim_name-install)" |
| 211 | + kubectl describe -n rcm $install_pod || true |
| 212 | + kubectl logs -n rcm -c downloader $install_pod || true |
| 213 | + kubectl logs -n rcm -c provisioner $install_pod || true |
| 214 | + done |
206 | 215 |
|
207 | 216 | # RCM pod logs |
208 | 217 | kubectl logs -n rcm -l app.kubernetes.io/name=runtime-class-manager || true |
209 | 218 | kubectl describe -n rcm pod -l app.kubernetes.io/name=runtime-class-manager || true |
210 | 219 |
|
211 | 220 | # App logs |
212 | | - kubectl logs -l app=wasm-spin || true |
213 | | - kubectl describe pod -l app=wasm-spin || true |
214 | | -
|
215 | | - - name: Verify curl |
216 | | - run: curl localhost:8083/hello |
| 221 | + for app_file in testdata/apps/spin-v2-app.yaml testdata/apps/wasmtime-v1-app.yaml; do |
| 222 | + app=$(cat $app_file | yq 'select(.kind == "Deployment") | .metadata.name') |
| 223 | + kubectl logs -l app=$app || true |
| 224 | + kubectl describe pod -l app=$app || true |
| 225 | + done |
0 commit comments