Vytvořte GitHub App
Tenhle návod ukáže, jak serveru dát vlastní identitu na GitHubu. Zabere to asi dvě minuty, dělá to jen vlastník serveru a na každý server stačí jednou.
Vlastní účet připojíš potom podle Nastavte integraci GitHub.
Proč server potřebuje vlastní aplikaci
Sekce “Proč server potřebuje vlastní aplikaci”Z jedné registrace vycházejí dvě různé práce a aplikace je to, co obě drží poctivě:
| Práce | Čím se plní | Proč na tom záleží |
|---|---|---|
| Přihlásí se člověk | Client id aplikace, přes device flow | Dostaneš přihlašovací údaj, který je tvůj, na serveru a na každém zařízení, bez tokenu k vložení nebo obměně |
| Jedná server | Id aplikace + soukromý klíč → instalační token | Webhooky, dotazování na PR a synchronizace ticketů přestanou viset na tom, jestli token jednoho člověka ještě platí |
V tabulce není client secret. Device flow GitHubu se ověřuje jen client id, jak žádost o device code, tak poll tokenu, takže k přihlášení žádné tajemství nedržíš.
Bez vlastní aplikace ta první pořád funguje přes client id, které vozí sestavení. Ta druhá spadne na přihlašovací údaj vlastníka serveru, takže práce na pozadí visí na tom, kdo server nastavil jako první.
Než začneš
Sekce “Než začneš”- Jsi vlastník serveru. Operace
providerApps.*jsou vázané na něj a kartu nikdo jiný nevidí - Účet na GitHubu, nebo organizace, ve které umíš zakládat aplikace
- Nic veřejně dosažitelného: přihlášení je device flow, takže server nepotřebuje příchozí port, tunel, callback URL ani doménu
Zaregistruj aplikaci
Sekce “Zaregistruj aplikaci”- Otevři github.com/settings/apps/new (u organizace: Settings → Developer settings → GitHub Apps → New GitHub App)
- GitHub App name — cokoli;
Control Center (yourname)stačí. Jméno se ukáže u commitů a komentářů, které dělá server - Homepage URL — cokoli, třeba
https://github.com/your-name - Callback URL — nech prázdné. Device flow žádné nemá
- Zaškrtni Enable Device Flow. Bez tohohle nastavení přihlášení nefunguje
- Odškrtni Webhook → Active, pokud webhooky nezapojíš zvlášť
- Pod Repository permissions dej aspoň:
- Contents: Read and write
- Metadata: Read-only (povinné)
- Pull requests: Read and write
- Issues: Read and write, pokud tickety vedeš v GitHub Issues a kvůli hledání komentářů bota v konverzaci PR (viz Mluvte s Control Center z GitHub PR)
- Checks: Read-only, kvůli stavu CI na stránce PR
- Pod Where can this GitHub App be installed? vyber, co sedí. „Only on this account“ je správně pro osobní server
- Klikni na Create GitHub App
Získej tři hodnoty
Sekce “Získej tři hodnoty”Na stránce aplikace, hned po vytvoření:
| Hodnota | Kde |
|---|---|
| App ID | Záložka General, nahoře |
| Client ID | Záložka General, pod „Client secrets“ |
| Private key | Generate a private key — stáhne se .pem |
Soubor se soukromým klíčem se stáhne jednou a GitHub ho už neukáže. Nech si ho, dokud ho nevložíš. Další můžeš vygenerovat kdykoli.
Client secret je volitelný a koupí přesně jednu věc: když necháš „Expire user authorization tokens“ zapnuté, právě on potichu obnoví něčí token, místo aby se člověk musel každých osm hodin přihlásit znovu. Samotné přihlášení ho nepoužívá.
Jednodušší je to vypršení vypnout. Pak tajemství nikde nepotřebuješ. Když ho necháš zapnuté, vygeneruj secret a vlož ho v Nastavení → Server → Jednotné přihlášení (karta Aplikace poskytovatelů). Proměnná prostředí pro něj není a do sestavení se žádná nezapeče, takže zůstane na tvém serveru.
Nainstaluj ji na svůj účet
Sekce “Nainstaluj ji na svůj účet”Aplikace, která je zaregistrovaná a nenainstalovaná, umí lidi ověřit a nepřečte nic.
- Na stránce aplikace otevři Install App
- Nainstaluj ji na svůj účet nebo organizaci
- Zvol All repositories, nebo vyber ty, které má tenhle server vidět
Vlož ji do Control Center
Sekce “Vlož ji do Control Center”- Jdi do Nastavení → Server → Jednotné přihlášení a sjeď ke kartě Aplikace poskytovatelů
- V bloku GitHub vyplň pole:
- ID aplikace — číselné App ID
- Soukromý klíč — vlož celé
.pem, včetně řádkůBEGINaEND - Client id — z téže stránky
- Client secret — jen když jsi nějaké vygeneroval (kvůli obnově tokenu)
- Klikni na Test
Klíč se při uložení parsuje, takže oříznuté vložení nebo špatný formát se odmítne hned, a ne až na požadavku na pozadí o několik hodin později. Test jde dál a zeptá se GitHubu, na kterých účtech je aplikace nainstalovaná. „Uložené“ a „funguje“ jsou dvě různá tvrzení a jen to druhé znamená, že něco poběží.
Kontrola: blok GitHub hlásí „Server může jednat jako on sám a lidé se můžou přihlásit.“ a řádek GitHub v Nastavení → Pracovní prostor → Profil a identita → Hostování kódu teď nabízí Přihlásit se přes GitHub.
Nastav to radši proměnnými prostředí
Sekce “Nastav to radši proměnnými prostředí”U instalace bez rozhraní nebo ze skriptu server každé pole naplní z prostředí poprvé, kdy pro něj nemá uloženou hodnotu:
GITHUB_APP_ID=123456GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"GITHUB_CLIENT_ID=Iv1.0123456789abcdefPříznaky příkazové řádky pro ně nejsou. Tajemství na příkazové řádce přečte
každý proces na hostiteli přes ps. Prostředí je jediné místo, kam je dáš,
a přebije to, co vozí sestavení. Úplný seznam je .env.template.
Při místním vývoji nese tytéž hodnoty .env v kořeni repozitáře a desktop je
předá serveru, který spustí. Klíč tam dej na jeden řádek: hodnota v .env
je jeden řádek a \n ve dvojitých uvozovkách se dekóduje jako nový řádek.
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"GITHUB_APP_ID a GITHUB_APP_PRIVATE_KEY jsou tatáž jména, která už čte
broker tokenů sandboxu. Hostitel nastavený na tokeny agentů s úzkým rozsahem
tak dostane přihlášení navíc. Naplnění proběhne u každého pole jen jednou.
Potom vyhraje uložená hodnota, takže úprava v Nastavení se dalším restartem
nezruší.
Totéž pro Linear
Sekce “Totéž pro Linear”Linear device flow nemá, takže jeho přihlášení je cesta přes prohlížeč a callback URL potřebuje. Karta Aplikace poskytovatelů ukáže přesně tu, kterou zaregistruješ.
- Vytvoř OAuth aplikaci na linear.app/settings/api/applications/new
- Callback URL nastav na URL, které karta ukazuje, doslova
- Do bloku Linear vlož Client ID a Client secret
- Volitelně přidej API klíč pracovního prostoru. Tím údajem server synchronizuje tickety, když o to nikdo nepožádal
Řešení problémů
Sekce “Řešení problémů”Dialog přihlášení hlásí, že poskytovatel nevrátil žádný device code
Sekce “Dialog přihlášení hlásí, že poskytovatel nevrátil žádný device code”Enable Device Flow je na aplikaci vypnuté. Zapni ho pod General a zkus to znovu.
Test hlásí, že údaje fungují, ale aplikace není nikde nainstalovaná
Sekce “Test hlásí, že údaje fungují, ale aplikace není nikde nainstalovaná”Registrace a instalace jsou dva kroky. Na stránce aplikace otevři Install App a nainstaluj ji.
Test hlásí, že soukromý klíč nešel přečíst
Sekce “Test hlásí, že soukromý klíč nešel přečíst”Vlož celý soubor .pem, včetně řádků -----BEGIN a -----END. Klíč ed25519
ani EC použít nejde. GitHub Apps se podepisují RSA.
Člen se přihlásil, ale nevidí žádné repozitáře
Sekce “Člen se přihlásil, ale nevidí žádné repozitáře”Aplikace není nainstalovaná na účtu, který je vlastní, nebo její instalace vybírá jiné repozitáře. Jeho vlastní přihlášení pustí jen to, co aplikace smí vidět.