Form to Wipe — Wdrażanie GitHub Actions
Ten przewodnik obejmuje implementację GitHub Actions Form to Wipe. Każde żądanie wipe to Pull Request. Reguły ochrony gałęzi wymuszają, że żądający nie może scalić swojego własnego PR. Gdy zatwierdzający go scali, przepływ pracy wykonuje polecenie erase i wysyła wyniki jako komentarz PR. Cała historia znajduje się w git — permanentna, przeszukiwalna i odporny na manipulacje. Żadna infrastruktura wymagana.
Jak to działa
1. Żądający otwiera Issue przy użyciu szablonu Wipe Request
2. Żądający tworzy gałąź i PR odnoszący się do issue
3. Kolega (nie żądający) przegląda i scala PR
4. GitHub Actions uruchamia: parsuje treść PR, rozwiązuje identyfikatory urządzeń, wysyła polecenia erase
5. Wyniki są wysyłane jako komentarz PR
6. Scalona PR to Twój dziennik audytu
Wymagania wstępne
- Repozytorium GitHub (publiczne lub prywatne z minutami Actions)
- Klient OAuth2 Jamf Platform API z uprawnieniami erase (zobacz Form to Wipe)
- Wyznaczony zespół zatwierdzającego w organizacji GitHub
Konfiguracja
Krok 1 — Fork lub Clone Repo
git clone https://github.com/YOUR_ORG/FTW-Form-to-Wipe.git
cd FTW-Form-to-Wipe
Lub skopiuj zawartość katalogu github-workflow/ do katalogu głównego Twojego repozytorium.
Krok 2 — Tajemnice Repozytorium
Przejdź do Settings → Secrets and variables → Actions → New repository secret i dodaj:
| Tajemnica | Wartość |
|---|---|
JAMF_CLIENT_ID |
ID klienta Jamf Platform API |
JAMF_CLIENT_SECRET |
Tajemnica klienta Jamf Platform API |
JAMF_TOKEN_URL |
Punkt końcowy tokena, np. https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token |
JAMF_REGION |
us, eu, lub apac — określa prefiks URL API Gateway |
Tajemnice GitHub nigdy nie są rejestrowane ani wyświetlane w danych wyjściowych przepływu pracy. Token pobrany w czasie wykonywania jest maskowany przez add-mask.
Krok 3 — Reguły ochrony gałęzi
Jest to najważniejszy krok. Ochrona gałęzi jest tym, co wymusza, że nikt nie może zatwierdzić swojego własnego żądania wipe.
Przejdź do Settings → Branches → Add branch protection rule
Wzór nazwy gałęzi:
main(lub Twoja gałąź domyślna)Włącz następujące ustawienia:
Ustawienie Wymagane Require a pull request before merging ✅ Require approvals — set to 1 ✅ Dismiss stale reviews when new commits are pushed ✅ Require review from Code Owners Zalecane Restrict who can dismiss pull request reviews Zalecane Do not allow bypassing the above settings ✅ Krytyczne
"Do not allow bypassing" uniemożliwia administratorom repozytorium scalenie swoich własnych żądań. Bez tego ustawienia administratorzy mogą całkowicie pominąć zatwierdzenie.
Krok 4 — CODEOWNERS (Zalecane)
Utwórz .github/CODEOWNERS, aby wymagać recenzji od określonego zespołu dla każdego pliku w katalogu requests/:
# .github/CODEOWNERS
requests/ @your-org/jamf-admins
Oznacza to, że każdy PR dotykający requests/ automatycznie wymaga recenzji od zespołu jamf-admins. Członkowie zespołu wciąż nie mogą zatwierdzić swoich własnych PR.
Krok 5 — Utwórz katalog żądań
mkdir requests
echo "# Wipe Requests\n\nMerged PRs in this directory represent executed device wipes." > requests/README.md
git add requests/
git commit -m "Add requests directory"
git push
Przepływ pracy uruchamia się na zdarzeniach pull_request → closed dla każdego PR, który dotyka requests/**.md.
Przesyłanie żądania wipe
Jako żądający
Otwórz Issue przy użyciu szablonu Device Wipe Request. Wypełnij wszystkie pola dokładnie tak jak są oznaczone. Zanotuj numer issue (np.
#42).Utwórz gałąź:
git checkout -b wipe/issue-42-device-wipeUtwórz plik żądania:
cat > requests/wipe-$(date +%Y%m%d-%H%M%S).md << 'EOF' **Tenant Name:** Production **Tenant ID:** aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee **Device Type:** computer **Device IDs:** 42,87 **Reason:** Employee offboarding — devices not returned **Find My PIN:** EOF git add requests/ git commit -m "Wipe request for devices 42, 87 - fixes #42" git push -u origin wipe/issue-42-device-wipeOtwórz Pull Request — tytuł:
Device Wipe Request — fixes #42. Poproś recenzję od kolegi.
Jako zatwierdzający
- Przejrzyj PR — sprawdź, czy identyfikatory urządzeń i powód są uzasadnione
- Potwierdź, że nie jesteś autorem PR (GitHub to wymusza, ale sprawdź)
- Zatwierdź i Scal używając merge commit (nie squash, nie rebase — merge commit zachowuje pełną historię)
- Przepływ pracy uruchamia się automatycznie przy scaleniu
- Sprawdź komentarze PR dla wyników
Ścieżka audytu
Każdy scalony PR żądania wipe jest permanentnym rekordem audytu zawierającym:
| Pole | Źródło |
|---|---|
| Kto żądał | Autor PR |
| Kto zatwierdził | Scalony przez |
| Które urządzenia | Treść PR / plik żądania |
| Który dzierżawca | Treść PR |
| Kiedy zatwierdzone | Sygnatura czasowa scalenia |
| Wynik | Komentarz przepływu pracy PR |
Aby przeszukać przeszłe wipes:
# Wypisz wszystkie scalone PR wipu po etykiecie
gh pr list --label wipe-request --state merged
# Przeszukaj po identyfikatorze urządzenia
gh pr list --state merged --search "device 42"
Zagadnienia bezpieczeństwa
- Poświadczenia Jamf Platform API znajdują się jako tajemnice repozytorium — nigdy w kodzie przepływu pracy ani treściach żądań
- Ochrona gałęzi uniemożliwia samo-zatwierdzenie na poziomie platformy
CODEOWNERSzapewnia, że tylko wyznaczeni administratorzy mogą zatwierdzić żądania wipe- Przepływ pracy waliduje żądający ≠ zatwierdzający w czasie wykonywania jako drugie sprawdzenie
- Komentarze wyników przepływu pracy są dołączane do PR i nie mogą być zmieniane po fakcie
- Katalog
requests/gromadzi trwały, niezmienny zapis każdego wykonanego wipu
Ograniczenia vs. n8n
| Funkcja | GitHub Actions | n8n |
|---|---|---|
| Interfejs | GitHub Issue + PR | Slack modal |
| Real-time approval UX | ⚠️ Async PR review | ✅ Slack DM |
| Approval timeout | ❌ Ręczne zamknięcie | ✅ Konfigurowalny |
| Ścieżka audytu | ✅ Git history (immutable) | Kanał Slack |
| Wymagana infrastruktura | Brak | Instancja n8n |
| Multi-tenant | ✅ Per request file | ✅ Per dropdown |
| Koszt | Bezpłatnie (public) / Actions minutes | Licencja n8n |