Skip to content

Commit e116f6a

Browse files
committed
feat: assert deployment success
1 parent f2fbe10 commit e116f6a

File tree

2 files changed

+41
-24
lines changed

2 files changed

+41
-24
lines changed

.github/workflows/k8s_apply.yml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ jobs:
2626
- name: Checkout
2727
uses: actions/checkout@v4
2828

29+
- name: GitHub Configuration
30+
run: git config --global url."https://oauth2:${{ secrets.GH_TOKEN }}@github.com".insteadOf https://github.com
31+
32+
- name: Clone cicd-deployment-scripts
33+
run: git clone https://github.com/code-kern-ai/cicd-deployment-scripts.git
34+
2935
- name: Azure Cloud Login
3036
uses: azure/login@v2
3137
with:
@@ -57,9 +63,18 @@ jobs:
5763
5864
- name: Apply Kustomization
5965
shell: bash
60-
# env:
61-
# DRY_RUN: ${{ github.event_name == 'push' && 'none' || 'client' }}
6266
run: |
6367
kubectl apply \
6468
--filename apply.yml \
6569
--namespace ${{ env.KUBERNETES_NAMESPACE }}
70+
71+
- name: Assert Deploy Success
72+
shell: bash
73+
run: |
74+
bash cicd-deployment-scripts/k8s/assert_deploy_success.sh \
75+
-n ${{ env.KUBERNETES_NAMESPACE }} \
76+
-p ${{ github.event.pull_request.number }}
77+
78+
- name: Revert on failure
79+
if: failure()
80+
run: echo "::error::Deployment failed, revert this PR" && exit 1

k8s/assert_deploy_success.sh

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,41 @@
22
set -e
33

44
KUBERNETES_NAMESPACE=""
5-
KUBERNETES_DEPLOYMENT_NAME=""
6-
APPLICATION_STARTUP_MESSAGE="Application startup complete"
5+
PR_NUMBER=""
6+
DEPLOY_SUCCESSFUL=true
77

8-
while getopts n:d:m: flag
8+
while getopts n:p: flag
99
do
1010
case "${flag}" in
1111
n) KUBERNETES_NAMESPACE=${OPTARG};;
12-
d) KUBERNETES_DEPLOYMENT_NAME=${OPTARG};;
13-
m) APPLICATION_STARTUP_MESSAGE=${OPTARG};;
12+
p) PR_NUMBER=${OPTARG};;
1413
esac
1514
done
1615

1716
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
1817
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
1918

20-
echo "Reading logs to determine application startup status for '$KUBERNETES_DEPLOYMENT_NAME'"
21-
echo "Searching for message: '$APPLICATION_STARTUP_MESSAGE'"
19+
UPDATED_FILES=$(gh pr diff $PR_NUMBER --name-only)
20+
while IFS= read -r file; do
21+
if [[ $file != apps/* ]]; then
22+
continue
23+
fi
2224

23-
LOG_CONTENTS=$(kubectl logs deployment/${KUBERNETES_DEPLOYMENT_NAME} \
24-
|| echo "Waiting for application startuop ...")
25+
deploy=$(echo "$file" | cut -d/ -f 2)
2526

26-
while [[ "$LOG_CONTENTS" != *"$APPLICATION_STARTUP_MESSAGE"* ]]; do
27-
echo "Waiting for application startup..."
28-
sleep 3
29-
LOG_CONTENTS=$(kubectl logs deployment/${KUBERNETES_DEPLOYMENT_NAME} \
30-
|| echo "Waiting for application startuop ...")
31-
32-
if [[ "$LOG_CONTENTS" == *"ERROR"* ]]; then
33-
echo "Application startup failed:"
34-
echo "$LOG_CONTENTS"
35-
exit 1
27+
set +e
28+
kubectl rollout status deploy $deploy --timeout 30s
29+
if [ $? -ne 0 ]; then
30+
echo "::error::Deployment $deploy failed to rollout"
31+
DEPLOY_SUCCESSFUL=false
3632
fi
37-
done
33+
set -e
34+
35+
done <<< "$UPDATED_FILES"
3836

39-
echo "Application startup successful:"
40-
echo "$LOG_CONTENTS"
37+
if [ $DEPLOY_SUCCESSFUL = true ]; then
38+
echo "::notice::Automated release successful"
39+
else
40+
echo "::error::Automated release failed"
41+
exit 1
42+
fi

0 commit comments

Comments
 (0)