@@ -28,48 +28,63 @@ jobs:
2828
2929 # initialize empty log of kube operations
3030 echo -n '' > /tmp/kube.log
31+ echo -n '' > /tmp/kube.err
3132
3233 - name : ' Apply manifests: CRD resources'
3334 run : |
3435 if [ -d ./_/CustomResourceDefinition ]; then
35- kubectl apply -Rf ./_/CustomResourceDefinition | tee -a /tmp/kube.log
36+ # Capture errors and add context
37+ dir_errors=$(kubectl apply -Rf ./_/CustomResourceDefinition 2>&1 1>>/tmp/kube.log || true)
38+
39+ # Filter and append errors with context if meaningful
40+ filtered_errors=$(echo "$dir_errors" | \
41+ grep -v "Warning: Use tokens from the TokenRequest API" | \
42+ grep -v "^Error: exit status [0-9]*$" | \
43+ grep -v "^[[:space:]]*$" || true)
44+
45+ if [ -n "$filtered_errors" ] && echo "$filtered_errors" | grep -q '[^[:space:]]' 2>/dev/null; then
46+ echo "=== CRD Resources ===" >> /tmp/kube.err
47+ echo "$filtered_errors" >> /tmp/kube.err
48+ echo "" >> /tmp/kube.err
49+ fi
3650 fi
3751
3852 - name : ' Apply manifests: non-CRD global resources'
3953 run : |
4054 if [ -d ./_ ]; then
41- (
42- find _ \
43- -maxdepth 1 \
44- -mindepth 1 \
45- -type d \
46- -not -name 'CustomResourceDefinition' \
47- -print0 \
48- | sort -z \
49- | xargs -r0 -n 1 kubectl apply -Rf
50- ) | tee -a /tmp/kube.log
51- fi
52-
53- - name : ' Apply manifests: namespaced resources'
54- run : |
55- (
56- find . \
55+ find _ \
5756 -maxdepth 1 \
57+ -mindepth 1 \
5858 -type d \
59- -not -name '_' \
60- -not -name '.*' \
59+ -not -name 'CustomResourceDefinition' \
6160 -print0 \
6261 | sort -z \
63- | xargs -r0 -n 1 kubectl apply -Rf
64- ) | tee -a /tmp/kube.log
62+ | while IFS= read -r -d '' dir; do
63+ # Capture errors and add context per directory
64+ dir_errors=$(kubectl apply -Rf "$dir" 2>&1 1>>/tmp/kube.log || true)
65+
66+ # Filter and append errors with context if meaningful
67+ filtered_errors=$(echo "$dir_errors" | \
68+ grep -v "Warning: Use tokens from the TokenRequest API" | \
69+ grep -v "^Error: exit status [0-9]*$" | \
70+ grep -v "^[[:space:]]*$" || true)
71+
72+ if [ -n "$filtered_errors" ] && echo "$filtered_errors" | grep -q '[^[:space:]]' 2>/dev/null; then
73+ echo "=== Directory: $dir ===" >> /tmp/kube.err
74+ echo "$filtered_errors" >> /tmp/kube.err
75+ echo "" >> /tmp/kube.err
76+ fi
77+ done
78+ fi
6579
6680 - name : ' Apply manifests: generated regcred secrets'
6781 run : |
68-
6982 # apply a copy of regcred secret for every deployed namespace
7083 while IFS= read -r namespace; do
7184 namespace="$(basename "${namespace}")"
72- cat <<EOF | kubectl apply -f - | tee -a /tmp/kube.log
85+
86+ # Capture errors for this namespace's regcred
87+ secret_errors=$(cat <<EOF | kubectl apply -f - 2>&1 1>>/tmp/kube.log || true
7388 apiVersion: v1
7489 kind: Secret
7590 metadata:
7994 data:
8095 .dockerconfigjson: ${{ secrets.DOCKER_CONFIG_BASE64 }}
8196 EOF
97+ )
98+
99+ # Filter and append errors with context if meaningful
100+ filtered_errors=$(echo "$secret_errors" | \
101+ grep -v "Warning: Use tokens from the TokenRequest API" | \
102+ grep -v "^Error: exit status [0-9]*$" | \
103+ grep -v "^[[:space:]]*$" || true)
104+
105+ if [ -n "$filtered_errors" ] && echo "$filtered_errors" | grep -q '[^[:space:]]' 2>/dev/null; then
106+ echo "=== Regcred Secret: $namespace ===" >> /tmp/kube.err
107+ echo "$filtered_errors" >> /tmp/kube.err
108+ echo "" >> /tmp/kube.err
109+ fi
82110 done <<< "$(find . -maxdepth 1 -type d -not -name '_' -not -name '.*')"
83111
112+ - name : ' Apply manifests: namespaced resources'
113+ run : |
114+ find . \
115+ -maxdepth 1 \
116+ -type d \
117+ -not -name '_' \
118+ -not -name '.*' \
119+ -print0 \
120+ | sort -z \
121+ | while IFS= read -r -d '' dir; do
122+ # Capture errors and add context per directory
123+ dir_errors=$(kubectl apply -Rf "$dir" 2>&1 1>>/tmp/kube.log || true)
124+
125+ # Filter and append errors with context if meaningful
126+ filtered_errors=$(echo "$dir_errors" | \
127+ grep -v "Warning: Use tokens from the TokenRequest API" | \
128+ grep -v "^Error: exit status [0-9]*$" | \
129+ grep -v "^[[:space:]]*$" || true)
130+
131+ if [ -n "$filtered_errors" ] && echo "$filtered_errors" | grep -q '[^[:space:]]' 2>/dev/null; then
132+ echo "=== Directory: $dir ===" >> /tmp/kube.err
133+ echo "$filtered_errors" >> /tmp/kube.err
134+ echo "" >> /tmp/kube.err
135+ fi
136+ done
137+
84138 - name : ' Apply manifests: deleted resources'
85139 run : |
86140 for manifest_path in $(git diff-tree --name-only --diff-filter=D -r HEAD^ HEAD); do
@@ -90,10 +144,27 @@ jobs:
90144 kind="${kind_name%%/*}"
91145 name="${kind_name##*/}"
92146
147+ # Capture errors for this deletion
93148 if [ "${namespace}" == "_" ]; then
94- kubectl delete $kind $name | tee -a /tmp/kube.log
149+ delete_errors=$( kubectl delete $kind $name 2>&1 1>> /tmp/kube.log || true)
95150 else
96- kubectl -n $namespace delete $kind $name | tee -a /tmp/kube.log
151+ delete_errors=$(kubectl -n $namespace delete $kind $name 2>&1 1>>/tmp/kube.log || true)
152+ fi
153+
154+ # Filter and append errors with context if meaningful
155+ filtered_errors=$(echo "$delete_errors" | \
156+ grep -v "Warning: Use tokens from the TokenRequest API" | \
157+ grep -v "^Error: exit status [0-9]*$" | \
158+ grep -v "^[[:space:]]*$" || true)
159+
160+ if [ -n "$filtered_errors" ] && echo "$filtered_errors" | grep -q '[^[:space:]]' 2>/dev/null; then
161+ if [ "${namespace}" == "_" ]; then
162+ echo "=== Deleting: $kind/$name ===" >> /tmp/kube.err
163+ else
164+ echo "=== Deleting: $namespace/$kind/$name ===" >> /tmp/kube.err
165+ fi
166+ echo "$filtered_errors" >> /tmp/kube.err
167+ echo "" >> /tmp/kube.err
97168 fi
98169 done
99170
@@ -113,6 +184,17 @@ jobs:
113184 EOF
114185 )"
115186
187+ # Conditionally append error output if it has meaningful content
188+ if [ -s /tmp/kube.err ]; then
189+ comment_body="${comment_body}
190+
191+ ## Errors/Warnings
192+
193+ \`\`\`
194+ $(cat /tmp/kube.err)
195+ \`\`\`"
196+ fi
197+
116198
117199 ## get most recent merged PR
118200 echo
0 commit comments