-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathfix.html
More file actions
237 lines (202 loc) · 10.2 KB
/
fix.html
File metadata and controls
237 lines (202 loc) · 10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Major Platform Upgrade: Hybrid Provisioning</title>
<style>
body { max-width: 900px; margin: 0 auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.6; color: #333; }
h1 { color: #0969da; border-bottom: 3px solid #0969da; padding-bottom: 10px; }
h2 { color: #0969da; margin-top: 30px; }
h3 { color: #545d7c; }
table { width: 100%; border-collapse: collapse; margin: 20px 0; }
th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }
th { background: #f6f8fa; font-weight: 600; }
tr:nth-child(even) { background: #f9fafb; }
code { background: #f6f8fa; padding: 2px 6px; border-radius: 3px; font-family: 'Monaco', 'Courier New', monospace; }
pre { background: #f6f8fa; padding: 15px; border-radius: 6px; overflow-x: auto; font-size: 0.9em; }
a { color: #0969da; text-decoration: none; }
a:hover { text-decoration: underline; }
ul { margin: 10px 0; padding-left: 20px; }
li { margin: 5px 0; }
.highlight { background: #fff8c5; padding: 15px; border-left: 4px solid #ffc107; margin: 20px 0; }
.success { background: #d4edda; padding: 15px; border-left: 4px solid #28a745; margin: 20px 0; }
</style>
</head>
<body>
<h1>Major Platform Upgrade: Hybrid Provisioning & Enhanced Reliability</h1>
<h2>What Changed</h2>
<p>We've completed a significant upgrade to <strong>Git Going with GitHub</strong>, transitioning from GitHub Classroom to a <strong>GitHub-native Hybrid provisioning system</strong>. This change improves reliability, removes external dependencies, and streamlines the student experience.</p>
<h3>Key Changes</h3>
<h4>1. <strong>Enrollment Process</strong> (Student-Facing)</h4>
<ul>
<li><strong>Before:</strong> GitHub Classroom assignment link → accept → automatic repo creation</li>
<li><strong>After:</strong> Enrollment form → issue created → confirm acknowledgment → automated provisioning</li>
<li><strong>Why:</strong> Fully GitHub-native, no third-party dependency, more transparent automation</li>
</ul>
<h4>2. <strong>System Architecture</strong> (Behind the Scenes)</h4>
<ul>
<li><strong>Removed:</strong> All GitHub Classroom infrastructure, seeding scripts, autograder dependencies</li>
<li><strong>Added:</strong> GitHub App-based provisioning with fine-grained permissions</li>
<li><strong>Result:</strong> Self-healing, idempotent system that can safely re-run without duplicates</li>
</ul>
<h4>3. <strong>Documentation</strong> (Across All Sites)</h4>
<ul>
<li>Updated 15+ markdown files across /docs, learning-room, and admin guides</li>
<li>Removed 37+ files and directories (Classroom scripts, guides, integration docs)</li>
<li>Regenerated HTML on community-access.org/git-going-with-github and lp.csedesigns.com/ggg</li>
<li>Updated registration page (community-access.org/github) with new enrollment flow</li>
</ul>
<h4>4. <strong>Security & Configuration</strong></h4>
<ul>
<li>Created GitHub App with least-privilege permissions:
<ul>
<li>Administration: Read and write (create student repos)</li>
<li>Contents: Read and write (seed and heal repo content)</li>
<li>Issues: Read and write (manage enrollment issues)</li>
<li>Metadata: Read-only (mandatory baseline)</li>
</ul>
</li>
<li>Secrets securely stored (never in code, only in GitHub Actions secrets)</li>
<li>Provisioning driven by deterministic GitHub signals (issue closures, PR keywords, labels)</li>
</ul>
<h2>What This Means for You</h2>
<h3><strong>If You're a Student:</strong></h3>
<ol>
<li>Enrollment is now <strong>100% GitHub-native</strong>—no third-party account, no extra authorization steps</li>
<li>Your Learning Room repo is provisioned <strong>automatically</strong> after you submit the enrollment form</li>
<li>All your challenges, issues, and progress tracking happen in your private GitHub repo</li>
<li>Facilitators see your work through the same GitHub interface—no separate tools needed</li>
</ol>
<h3><strong>If You're a Facilitator:</strong></h3>
<ol>
<li><strong>Roster management:</strong> Maintain a simple <code>roster.json</code> file in a private admin repo</li>
<li><strong>Provisioning:</strong> Trigger via Actions tab or 30-minute schedule (fully automated)</li>
<li><strong>Progress tracking:</strong> Monitor via GitHub Issues, Pull Requests, and Discussions</li>
<li><strong>No more Classroom setup:</strong> Integration guide simplified to one deployment guide</li>
</ol>
<h3><strong>If You're Running This Locally or on a Server:</strong></h3>
<ol>
<li>Follow <a href="admin/HYBRID_DEPLOYMENT_GUIDE.md">HYBRID_DEPLOYMENT_GUIDE.md</a> Phases 1–4</li>
<li><strong>Phase 1:</strong> Prepare admin roster repo with <code>roster.json</code></li>
<li><strong>Phase 2:</strong> Create GitHub App (done ✓)</li>
<li><strong>Phase 3:</strong> Configure environment variables and secrets (done ✓)</li>
<li><strong>Phase 4:</strong> Run smoke test with a test learner account</li>
<li><strong>Phase 5 (optional):</strong> Deploy Flask companion for web-based enrollment form</li>
</ol>
<hr>
<h2>Enhancements & Reliability</h2>
<h3><strong>Why This Is More Reliable</strong></h3>
<h4>1. <strong>No External Dependencies</strong></h4>
<ul>
<li><strong>Before:</strong> Depended on GitHub Classroom (could go down, change, or discontinue)</li>
<li><strong>After:</strong> 100% GitHub-native—uses only GitHub API and Actions</li>
<li><strong>Impact:</strong> Zero risk of third-party service disruption</li>
</ul>
<h4>2. <strong>Idempotent Design</strong></h4>
<ul>
<li><strong>Provisioning is safe to re-run.</strong> Running the workflow twice creates:
<ul>
<li>First run: "created" (student repo provisioned)</li>
<li>Second run: "already-exists" (no changes, no duplicates)</li>
</ul>
</li>
<li><strong>Impact:</strong> No data loss, no accidental overwrites, safe manual retries</li>
</ul>
<h4>3. <strong>Least-Privilege Security</strong></h4>
<ul>
<li><strong>GitHub App uses fine-grained permissions</strong> (not personal tokens or org-wide keys)</li>
<li><strong>Secrets stored in GitHub, never in code</strong> (PEM key only in Actions secrets)</li>
<li><strong>Credentials minted on-demand and never persisted</strong></li>
<li><strong>Impact:</strong> Compliance-ready, audit-trail via GitHub, easy key rotation</li>
</ul>
<h4>4. <strong>Deterministic Signals</strong></h4>
<ul>
<li>Progress tracked by GitHub actions (issue closed, PR merged, label applied)</li>
<li>No hidden state in external databases</li>
<li>All history visible in GitHub commit/issue timeline</li>
<li><strong>Impact:</strong> Transparent, debuggable, recoverable from git history</li>
</ul>
<h4>5. <strong>Self-Healing</strong></h4>
<ul>
<li>If a student is missed (network hiccup, bot failure), re-running provisions them</li>
<li>If a repo is accidentally deleted, re-run the same workflow to recreate it</li>
<li>Roster is the source of truth, provisioning log is the audit trail</li>
<li><strong>Impact:</strong> Administrator can fix issues without manual intervention</li>
</ul>
<h2>What Stays the Same</h2>
<ul>
<li>✓ <strong>Your Learning Room repository structure</strong> — Same challenges, same workflow automation</li>
<li>✓ <strong>Challenge progression system</strong> — Challenges unlock in sequence as before</li>
<li>✓ <strong>Gandalf bot feedback</strong> — Still validates PRs and provides educational feedback</li>
<li>✓ <strong>All course content</strong> — Same 16 core + 5 bonus challenges, same podcasts and guides</li>
<li>✓ <strong>Accessibility standards</strong> — Keyboard-only and screen-reader compatible (unchanged)</li>
</ul>
<h2>Removed & Replaced</h2>
<table>
<thead>
<tr>
<th>What Was</th>
<th>Reason</th>
<th>What's New</th>
</tr>
</thead>
<tbody>
<tr>
<td>GitHub Classroom integration</td>
<td>Service going away, external dependency</td>
<td>GitHub App provisioning</td>
</tr>
<tr>
<td><code>scripts/classroom/</code></td>
<td>Classroom-specific utilities no longer needed</td>
<td><code>scripts/provisioning/</code></td>
</tr>
<tr>
<td><code>admin/classroom/</code></td>
<td>Classroom admin guides</td>
<td><code>admin/HYBRID_DEPLOYMENT_GUIDE.md</code></td>
</tr>
<tr>
<td>Classroom autograder safeguards</td>
<td>GitHub Classroom no longer used</td>
<td>Native GitHub Actions workflows</td>
</tr>
<tr>
<td><code>classroom-enrollment.yml</code> issue template</td>
<td>Replaced by form-based enrollment</td>
<td><code>start-here-roadmap.yml</code></td>
</tr>
</tbody>
</table>
<h2>Dates & Availability</h2>
<ul>
<li><strong>Documentation Updated:</strong> June 2, 2026</li>
<li><strong>Public Sites Deployed:</strong> June 2, 2026
<ul>
<li>community-access.org/git-going-with-github</li>
<li>lp.csedesigns.com/ggg</li>
</ul>
</li>
<li><strong>Enrollment Form:</strong> Ready now at community-access.org/github</li>
<li><strong>GitHub App:</strong> Configured and ready for production use</li>
</ul>
<h2>For Questions or Issues</h2>
<ul>
<li><strong>Student Support:</strong> <a href="https://github.com/Community-Access/support">Community Access Support Hub</a></li>
<li><strong>Facilitator Setup:</strong> See <a href="admin/HYBRID_DEPLOYMENT_GUIDE.md">HYBRID_DEPLOYMENT_GUIDE.md</a></li>
<li><strong>Technical Details:</strong> <a href="admin/OWNED_PROVISIONING.md">OWNED_PROVISIONING.md</a>, <a href="admin/SPEC.md">SPEC.md</a></li>
<li><strong>GitHub Repository:</strong> <a href="https://github.com/Community-Access/git-going-with-github">Community-Access/git-going-with-github</a></li>
</ul>
<h2>Thank You</h2>
<p>This transition strengthens the workshop by removing external dependencies and making the system more transparent, auditable, and resilient. <strong>Your learning experience remains our top priority.</strong></p>
<p>Welcome to the new Hybrid provisioning system.</p>
<hr>
<p><em>Last updated: June 2, 2026</em><br>
<em>Version: 1.0 (Hybrid Provisioning Release)</em></p>
<hr style="margin-top: 40px; border: none; border-top: 2px solid #eee;">
<footer style="text-align: center; color: #666; font-size: 0.9em; margin-top: 20px;">
<p>Generated June 2, 2026 | <a href="https://github.com/Community-Access/git-going-with-github">View on GitHub</a></p>
</footer>
</body>
</html>