@@ -103,15 +103,21 @@ jobs:
103103 helm-version : " v3.19.2"
104104 releaseName : " test-release"
105105 id : bake
106+ - name : Set up buildx
107+ run : |
108+ docker buildx create --use --name draft-builder || docker buildx use draft-builder
109+ docker buildx inspect --bootstrap
106110 - name : Build and Push image
107111 run : |
108112 export SHELL=/bin/bash
109113 eval $(minikube -p minikube docker-env)
110- docker build -f ./langtest/Dockerfile -t testapp ./langtest/
111- docker tag testapp host.minikube.internal:5001/testapp
112- echo -n "verifying images:"
113- docker images
114- docker push host.minikube.internal:5001/testapp
114+ docker buildx build \
115+ --cache-from=type=gha,scope=${{ inputs.language }}-helm \
116+ --cache-to=type=gha,scope=${{ inputs.language }}-helm,mode=max \
117+ -f ./langtest/Dockerfile \
118+ -t host.minikube.internal:5001/testapp \
119+ --push \
120+ ./langtest/
115121 echo 'Curling host.minikube.internal test app images from minikube'
116122 minikube ssh "curl http://host.minikube.internal:5001/v2/testapp/tags/list"
117123 # Deploys application based on manifest files from previous step
@@ -146,14 +152,29 @@ jobs:
146152 kubectl get svc
147153 echo 'Starting minikube tunnel'
148154 minikube tunnel > /dev/null 2>&1 & tunnelPID=$!
149- sleep 120
155+ trap 'kill $tunnelPID' EXIT
156+ echo 'Waiting for service IP'
157+ for i in {1..30}; do
158+ SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
159+ if [ -n "$SERVICEIP" ]; then
160+ break
161+ fi
162+ sleep 4
163+ done
150164 kubectl get svc
151- SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
152165 echo "SERVICEIP: $SERVICEIP"
153- echo 'Curling service IP'
154- curl -m 3 $SERVICEIP:${{env.serviceport}}
155- sleep 5
156- kill $tunnelPID
166+ if [ -z "$SERVICEIP" ]; then
167+ echo 'Service IP not ready'
168+ exit 1
169+ fi
170+ echo 'Curling service IP with retries'
171+ for i in {1..20}; do
172+ if curl -m 3 "http://$SERVICEIP:${{env.serviceport}}"; then
173+ exit 0
174+ fi
175+ sleep 3
176+ done
177+ exit 1
157178 - run : |
158179 ./draft -v generate-workflow \
159180 -d ./langtest/ \
@@ -282,16 +303,22 @@ jobs:
282303 renderEngine : " kustomize"
283304 kustomizationPath : ./langtest/base
284305 kubectl-version : " latest"
306+ - name : Set up buildx
307+ run : |
308+ docker buildx create --use --name draft-builder || docker buildx use draft-builder
309+ docker buildx inspect --bootstrap
285310 - name : Build and Push Image
286311 continue-on-error : true
287312 run : |
288313 export SHELL=/bin/bash
289314 eval $(minikube -p minikube docker-env)
290- docker build -f ./langtest/Dockerfile -t testapp ./langtest/
291- docker tag testapp host.minikube.internal:5001/testapp
292- echo -n "verifying images:"
293- docker images
294- docker push host.minikube.internal:5001/testapp
315+ docker buildx build \
316+ --cache-from=type=gha,scope=${{ inputs.language }}-kustomize \
317+ --cache-to=type=gha,scope=${{ inputs.language }}-kustomize,mode=max \
318+ -f ./langtest/Dockerfile \
319+ -t host.minikube.internal:5001/testapp \
320+ --push \
321+ ./langtest/
295322 echo 'Curling host.minikube.internal test app images from minikube'
296323 minikube ssh "curl http://host.minikube.internal:5001/v2/testapp/tags/list"
297324 # Deploys application based on manifest files from previous step
@@ -326,14 +353,29 @@ jobs:
326353 kubectl get svc
327354 echo 'Starting minikube tunnel'
328355 minikube tunnel > /dev/null 2>&1 & tunnelPID=$!
329- sleep 120
356+ trap 'kill $tunnelPID' EXIT
357+ echo 'Waiting for service IP'
358+ for i in {1..30}; do
359+ SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
360+ if [ -n "$SERVICEIP" ]; then
361+ break
362+ fi
363+ sleep 4
364+ done
330365 kubectl get svc
331- SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
332366 echo "SERVICEIP: $SERVICEIP"
333- echo 'Curling service IP'
334- curl -m 3 $SERVICEIP:${{env.serviceport}}
335- sleep 5
336- kill $tunnelPID
367+ if [ -z "$SERVICEIP" ]; then
368+ echo 'Service IP not ready'
369+ exit 1
370+ fi
371+ echo 'Curling service IP with retries'
372+ for i in {1..20}; do
373+ if curl -m 3 "http://$SERVICEIP:${{env.serviceport}}"; then
374+ exit 0
375+ fi
376+ sleep 3
377+ done
378+ exit 1
337379 - run : |
338380 ./draft -v generate-workflow \
339381 -d ./langtest/ \
@@ -458,16 +500,22 @@ jobs:
458500 uses : medyagh/setup-minikube@master
459501 with :
460502 insecure-registry : " host.minikube.internal:5001,10.0.0.0/24"
503+ - name : Set up buildx
504+ run : |
505+ docker buildx create --use --name draft-builder || docker buildx use draft-builder
506+ docker buildx inspect --bootstrap
461507 - name : Build and Push Image
462508 continue-on-error : true
463509 run : |
464510 export SHELL=/bin/bash
465511 eval $(minikube -p minikube docker-env)
466- docker build -f ./langtest/Dockerfile -t testapp ./langtest/
467- docker tag testapp host.minikube.internal:5001/testapp
468- echo -n "verifying images:"
469- docker images
470- docker push host.minikube.internal:5001/testapp
512+ docker buildx build \
513+ --cache-from=type=gha,scope=${{ inputs.language }}-manifests \
514+ --cache-to=type=gha,scope=${{ inputs.language }}-manifests,mode=max \
515+ -f ./langtest/Dockerfile \
516+ -t host.minikube.internal:5001/testapp \
517+ --push \
518+ ./langtest/
471519 echo 'Curling host.minikube.internal test app images from minikube'
472520 minikube ssh "curl http://host.minikube.internal:5001/v2/testapp/tags/list"
473521 # Deploys application based on manifest files from previous step
@@ -497,14 +545,29 @@ jobs:
497545 kubectl get svc
498546 echo 'Starting minikube tunnel'
499547 minikube tunnel > /dev/null 2>&1 & tunnelPID=$!
500- sleep 120
548+ trap 'kill $tunnelPID' EXIT
549+ echo 'Waiting for service IP'
550+ for i in {1..30}; do
551+ SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
552+ if [ -n "$SERVICEIP" ]; then
553+ break
554+ fi
555+ sleep 4
556+ done
501557 kubectl get svc
502- SERVICEIP=$(kubectl get svc -o jsonpath={'.items[1].status.loadBalancer.ingress[0].ip'})
503558 echo "SERVICEIP: $SERVICEIP"
504- echo 'Curling service IP'
505- curl -m 3 $SERVICEIP:${{env.serviceport}}
506- sleep 5
507- kill $tunnelPID
559+ if [ -z "$SERVICEIP" ]; then
560+ echo 'Service IP not ready'
561+ exit 1
562+ fi
563+ echo 'Curling service IP with retries'
564+ for i in {1..20}; do
565+ if curl -m 3 "http://$SERVICEIP:${{env.serviceport}}"; then
566+ exit 0
567+ fi
568+ sleep 3
569+ done
570+ exit 1
508571 - run : |
509572 ./draft -v generate-workflow \
510573 -d ./langtest/ \
@@ -570,13 +633,21 @@ jobs:
570633 - name : start minikube
571634 id : minikube
572635 uses : medyagh/setup-minikube@master
636+ - name : Set up buildx
637+ run : |
638+ docker buildx create --use --name draft-builder || docker buildx use draft-builder
639+ docker buildx inspect --bootstrap
573640 - name : Build image
574641 run : |
575642 export SHELL=/bin/bash
576643 eval $(minikube -p minikube docker-env)
577- docker build -f ./langtest/Dockerfile -t testapp ./langtest/
578- echo -n "verifying images:"
579- docker images
644+ docker buildx build \
645+ --cache-from=type=gha,scope=${{ inputs.language }}-manifest-update \
646+ --cache-to=type=gha,scope=${{ inputs.language }}-manifest-update,mode=max \
647+ --load \
648+ -f ./langtest/Dockerfile \
649+ -t testapp \
650+ ./langtest/
580651 # Deploys application based on manifest files from previous step
581652 - name : Deploy application
582653 run : kubectl apply -f ./langtest/manifests/
0 commit comments