Skip to content

Commit 8917fc7

Browse files
committed
chore(action): add create namespace workflow
Signed-off-by: Gabriel Mocanu <gabi.mocanu98@gmail.com>
1 parent 56ae62c commit 8917fc7

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
name: Deploy challenges by namespace
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
chapter:
7+
description: "Chapter to deploy (e.g., web-application-security)"
8+
required: true
9+
default: "web-application-security"
10+
namespace:
11+
description: "Namespace to deploy (e.g., web-basics)"
12+
required: true
13+
default: "web-basics"
14+
15+
concurrency:
16+
group: deploy-${{ inputs.namespace }}
17+
cancel-in-progress: false
18+
19+
jobs:
20+
deploy:
21+
runs-on: sss-node-01
22+
timeout-minutes: 30
23+
env:
24+
CHAPTER: ${{ inputs.chapter }}
25+
NAMESPACE: ${{ inputs.namespace }}
26+
KUBECONFIG: /home/ubuntu/.kube/config
27+
28+
defaults:
29+
run:
30+
shell: bash -euo pipefail {0}
31+
32+
steps:
33+
- name: Checkout
34+
uses: actions/checkout@v4
35+
36+
- name: Verify prerequisites
37+
run: |
38+
command -v kubectl >/dev/null || { echo "::error::kubectl not found"; exit 1; }
39+
command -v helm >/dev/null || { echo "::error::helm not found"; exit 1; }
40+
kubectl cluster-info
41+
helm version --short
42+
43+
- name: Deploy all challenges in namespace
44+
run: |
45+
DRILLS_PATH="chapters/${CHAPTER}/${NAMESPACE}/drills"
46+
47+
if [[ ! -d "$DRILLS_PATH" ]]; then
48+
echo "::error::Namespace path not found: $DRILLS_PATH"
49+
exit 1
50+
fi
51+
52+
# Check if any challenges exist
53+
shopt -s nullglob
54+
values_files=("$DRILLS_PATH"/*/deploy/values.yaml)
55+
shopt -u nullglob
56+
57+
if [[ ${#values_files[@]} -eq 0 ]]; then
58+
echo "::error::No challenges found in $DRILLS_PATH"
59+
exit 1
60+
fi
61+
62+
echo "Found ${#values_files[@]} challenge(s) to deploy"
63+
64+
# Create namespace
65+
kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
66+
67+
# Deploy each challenge
68+
failed=0
69+
succeeded=0
70+
for values_file in "${values_files[@]}"; do
71+
challenge_name=$(basename "$(dirname "$(dirname "$values_file")")")
72+
echo "::group::Deploying $challenge_name"
73+
74+
if helm upgrade --install "$challenge_name" ./helm/web-challenge \
75+
--namespace "$NAMESPACE" \
76+
--values "$values_file" \
77+
--atomic \
78+
--timeout 5m; then
79+
echo "$challenge_name deployed successfully"
80+
succeeded=$((succeeded + 1))
81+
else
82+
echo "::error::Failed to deploy $challenge_name"
83+
failed=$((failed + 1))
84+
fi
85+
86+
echo "::endgroup::"
87+
done
88+
89+
# Write summary
90+
{
91+
echo "## Deployment Summary"
92+
echo ""
93+
echo "| Metric | Count |"
94+
echo "|--------|-------|"
95+
echo "| Total | ${#values_files[@]} |"
96+
echo "| Succeeded | $succeeded |"
97+
echo "| Failed | $failed |"
98+
} >> "$GITHUB_STEP_SUMMARY"
99+
100+
if [[ $failed -gt 0 ]]; then
101+
echo "::error::$failed challenge(s) failed to deploy"
102+
exit 1
103+
fi
104+
105+
- name: Show deployment status
106+
if: always()
107+
run: |
108+
echo "::group::Resources in $NAMESPACE"
109+
kubectl get all -n "$NAMESPACE"
110+
echo "::endgroup::"
111+
echo "::group::Helm releases"
112+
helm list -n "$NAMESPACE"
113+
echo "::endgroup::"

0 commit comments

Comments
 (0)