You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# $? after a pipeline is tee's status, which is always 0. Capture the
30
+
# checker's own exit code instead, or the drift issue never opens.
31
+
set +e
32
+
python3 tools/check-versions.py > report.txt
33
+
drift=$?
34
+
set -e
35
+
cat report.txt
36
+
echo "drift=$drift" >> "$GITHUB_OUTPUT"
37
+
- name: Open or update the drift issue
38
+
if: steps.check.outputs.drift != '0'
39
+
env:
40
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
+
run: |
42
+
title="Tool pins have drifted"
43
+
body=$(printf 'Weekly check of `tools/versions.yaml`.\n\n```\n%s\n```\n\nRe-pin before the next cohort. A mid-semester bump needs a full lab re-run and a Common pitfalls line.' "$(cat report.txt)")
44
+
existing=$(gh issue list --state open --search "$title in:title" --json number --jq '.[0].number')
| — | Lab 12 | VM Sandboxing *(bonus)*| Kata Containers, runc-vs-VM isolation, perf benchmark; bonus: real container-escape PoC blocked by Kata|
32
+
| — | Lab 12 | VM Sandboxing *(bonus)*| Kata Containers, runc-vs-VM isolation, perf benchmark; bonus: a privileged-container escape stopped by the guest kernel|
33
33
34
34
---
35
35
@@ -78,31 +78,31 @@ graph LR
78
78
79
79
## Technology Stack
80
80
81
-
All tools free and open-source (or have a meaningful free tier). Versions pinned to April-May 2026.
81
+
All tools free and open-source (or have a meaningful free tier). [`tools/versions.yaml`](tools/versions.yaml) is the source of truth for every pin; a weekly job reports when one falls behind upstream. Pins are refreshed before each cohort, not mid-semester.
|`.github/PULL_REQUEST_TEMPLATE.md` — students write in Lab 1 || ✅ |
125
127
|`.github/workflows/*.yml` — students add from Lab 1 bonus onward || ✅ |
126
128
|`.pre-commit-config.yaml` — students write in Lab 3 || ✅ |
@@ -148,7 +150,7 @@ Each main lab (Labs 1-10) caps at **12 pts = 10 main + 2 bonus**.
148
150
149
151
A student who only completes Task 1 across all 10 labs ends with a working DevSecOps pipeline — just not all the deeper-dive controls.
150
152
151
-
**Bonus labs (11 + 12)** have a tighter shape: **Task 1 (4 pts) + Task 2 (4 pts) + Bonus Task (2 pts) = 10 pts total** (vs main labs' 12). The labs are bonus-track in the sense that they're not on the critical path; the Bonus Task inside each lab is still the genuinely-challenging extension. Bonus labs count toward a separate 20% weight (see grading below).
153
+
**Bonus labs (11 + 12)** have a tighter shape: **Task 1 (4 pts) + Task 2 (4 pts) + Bonus Task (2 pts) = 10 pts total** (vs main labs' 12). The labs are bonus-track in the sense that they're not on the critical path; the Bonus Task inside each lab is still the harder extension. Bonus labs count toward a separate 20% weight (see grading below).
0 commit comments