PR-beszélgetések
Egy pull request már önmagában is az a hely, ahol a kód körüli beszélgetés
zajlik. A PR-beszélgetések egy Control Center-munkaterület felületévé teszik,
ugyanúgy, ahogy egy csevegőhíd a
Slackből az: említse meg @-tel a szerver GitHub App botját egy PR-en, válaszoljon
az átnézési szálain belül, vagy adja hozzá az ai-review címkét, és a munka a PR
átnézési terében történik — ugyanolyan attribúció és korlátok mellett, mint bármi,
amit az alkalmazásban gépelnek be. A hozzászólás emellett tagsághoz kötött; a
címke nem, mert nincs szerzője. A bot válaszai a GitHubon jönnek vissza, abban a
szálban, ahol a kérdést feltették.
Három döntés alakítja a funkciót, és mindegyik ugyanaz a döntés, amelyet a csevegőhíd a csevegéshez hozott, kódhosztra átfogalmazva: melyik irányban fut a kapcsolat, mi jogosít fel egy kívülről érkező hozzászólást, és kihez van rendelve a beszélgetés mindkét oldala.
A szállítás módja a lekérdezés
Szekció neve “A szállítás módja a lekérdezés”A GitHub egyetlen push-csatornája egy alkalmazás számára a webhook, a webhookhoz pedig bejövő URL kell — pont az, amit ez a felület szándékosan soha nem igényel. A felderítés ezért pásztázás: nagyjából percenként, alkalmazástelepítésenként egy aliasolt keresés megkérdezi a GitHubot a botot (vagy annak rövid slugját) említő PR-ekről és az átnézési címkét viselő nyitott PR-ekről, azoknak a PR-eknek, amelyeknek már van átnézési terük, beolvassuk a hozzászólásszálait, és mindent a hozzászólás azonosítója alapján vetünk össze azzal, amit az előző pásztázás látott.
A tervezési következményeket érdemes megnevezni:
- A késleltetés egy pásztázási intervallum, nem egy esemény. A 👀 visszaigazolás körülbelül egy percen belül megérkezik. Semmi sürgős nem múlik rajta.
- Pontosan egyszer, hozzászólásonként. A hozzászólás-azonosítók a GitHubon egyediek; mindegyiket abban a pillanatban rögzítjük, amikor jogosultként osztályozzuk, mielőtt bármi hatna rá. Egy összeomlás elveszítheti egy hozzászólás feldolgozását, de soha nem indítja el kétszer.
- Az offline időt behozzuk, nem újrajátsszuk. A látottak halmaza tartósan tárolódik, így egy újraindulás leszállítja azt, ami a leállás alatt érkezett. Az egyetlen kivétel a legelső pásztázás: mivel nincs mihez hasonlítani, minden függőben lévő elem csendben rögzítésre kerül — egy üzemeltető, aki húsz PR-t címkézett fel, mielőtt ez a szerver létezett, nem térhet vissza húsz futó átnézéshez.
- A címke egy halmaz, nem egy esemény. A keresés a címke jelenlétét jelenti, így egy felcímkézett PR egyszer, és csakis egyszer indul el. Egy címke eltávolítás utáni újbóli hozzáadása láthatatlan a pásztázás számára; az újrafuttatás útja az említés.
A keresés telepítési fiókonként egyszer fut, az adott tulajdonos saját kliensén, mert egy telepítési token csak a saját telepítése repóit látja — egyetlen, a teljes szerverre érvényes hitelesítő adat csendben elszalasztaná az alkalmazás összes többi telepítése alá tartozó PR-t.
A tagság jogosít fel, nem a hozzászólás
Szekció neve “A tagság jogosít fel, nem a hozzászólás”Egy PR-hozzászólás alig többet hoz magával, mint a szerző bejelentkezési nevét — egy hitelesítetlen külső identitást, amíg be nem bizonyosodik. A bot ezt a munkaterület tagjainak és a hozzájuk kapcsolt GitHub-fiókoknak a fordított indexe alapján oldja fel, amelyet TTL szerint építünk újra, mert az emberek bejelentkeznek és meghívót kapnak, miközben a szerver fut.
A zártra váltó viselkedés egy létrához hasonlít, és minden fokozat abban a szálban válaszol, amelyben elutasított:
- Egy ismeretlen bejelentkezési név — nincs összekapcsolva, vagy olyasvalaki kapcsolta össze, aki nem tagja ennek a munkaterületnek — azt a választ kapja, hogy jelentkezzen be, és győződjön meg róla, hogy ide tartozik
- Egy csak olvasásra jogosult tag (
viewervagyguest) azt a választ kapja, hogy a szerepköre nem indíthat munkát
A két ismeretlen bejelentkezési eset egyetlen választ oszt meg: a fordított index csak ennek a munkaterületnek a tagját adja vissza, így egy nem összekapcsolt fiók és egy összekapcsolt, de nem tag felhasználó ugyanaz a kihagyás. Egyikük sem folytatja. Egy hozzászólást soha nem tulajdonítunk olyasvalakinek, aki nem ő küldte, és egy idegen szavai soha nem lépnek be olyan munkaterületre, amelyet nem láthat.
Az ai-review címkének nincs szerzője, akit fel lehetne oldani, ezért nem mászik
fel ezen a létrán. A hozzáadása abban a munkaterületben indítja el az átnézést,
amely már kapcsolódik a repóhoz.
Két identitás, szándékosan
Szekció neve “Két identitás, szándékosan”A beszélgetés mindkét oldala más identitást visel, és épp a különbség maga a funkció:
- A GitHubon a bot maga a szerver. Minden hozzászólás, reakció és válasz, amelyet a híd közzétesz, az alkalmazás telepítési tokenjével megy ki. Senki nem kattintott semmire egy kliensben, így semmi nem kölcsönöz egy személy fiókját — ugyanaz a szabály, amely a webhookokat és a lekérdezést távol tartja az emberi hitelesítő adatoktól.
- A térben a kérdés az Öné. Az üzenet ahhoz a taghoz van rendelve, akivé a szerző feloldódott, és az ügynökfuttatás az ő nevében történik: a commitok társszerzőjeként tüntetik fel, a tér autonómiatárcsája és műveletkorlátai pedig pontosan úgy érvényesek, mint egy az alkalmazásban beírt üzenetre. A futtatásból származó kódhoszt-írások továbbra is az alkalmazás nevében mennek ki — ugyanaz a szabály, mint a fenti pontban —, nem a tag személyes tokenjével.
Az átnézési megállapítások visszaközzététele a GitHubra továbbra is egy személy döntése marad, amelyet a Control Centerben hoz meg. Egy említés elindíthat egy átnézést; közzétenni csak ember tud egyet.
A hurok elleni védelem és a rövid név
Szekció neve “A hurok elleni védelem és a rövid név”Minden, amit botfiók írt, még azelőtt kiesik, hogy bármelyik kapu lefutna —
konkrétan a miénk, és minden [bot] utótag, így egy másik alkalmazás átnéző
botja sem ébresztheti fel a miénket. E nélkül a bot saját válaszai új
hozzászólásként érkeznének meg, és a végtelenségig újraaktiválnák.
A [bot] utótag az oka annak is, hogy létezik a rövid forma. A GitHub egy
alkalmazásfiók bejelentkezési nevét <slug>[bot] formában rögzíti, nem kínál
hozzá automatikus kiegészítést, és soha nem oldja fel a @slug nevet az
alkalmazásra — a csupasz slug elfogadása tehát a mi illesztőnk döntése, a
felderítéséhez pedig a hozzászólás nyers szövegére irányuló keresési sávra van
szükség, nem a GitHub említési indexére. A költséget kimondjuk, nem elsimítjuk:
egy olyan emberi felhasználó, aki ugyanazt a slugot használja, mint az alkalmazás,
a saját minden rövid formájú említésével a botot szólítja meg. A jellegzetes
alkalmazásnevek hipotetikussá teszik ezt az ütközést.
Ami szándékosan nincs felkínálva
Szekció neve “Ami szándékosan nincs felkínálva”- Nincs automatikus közzététel. A megállapítások az átnézési térbe kerülnek; a GitHubra való közzététel külön, emberi művelet
- Nincs homályos identitás. A szerző pontosan egy tagra oldódik fel, vagy elutasításra kerül — nincs találgatáson alapuló attribúció
- Nincs GitHub App webhook. Ez a felület soha nem regisztrál egyet sem, így nincs PR-hozzászólásokhoz kitett bejövő URL. A termék egyéb webhookjai (pipeline-ok, jegyszinkronizáció) külön, opcionális beállítást jelentenek.
Lásd még
Szekció neve “Lásd még”- Beszélgetés a Control Centerrel GitHub PR-ből: a gyakorlati útmutató mindehhez
- Csevegőhidak: ugyanaz a három döntés, a csevegéshez meghozva
- GitHub App létrehozása: honnan származik a bot identitása
- Többszereplős mód — identitás, tagság és jelenlét: azok a szereplők és szerepkörök, amelyeken keresztül egy bejelentkezés feloldódik
- Korlátok: mit tehet meg a válaszoló ügynök
- MI-alapú átnézés használata: a pipeline, amelyet egy említés vagy címke elindít