Perbualan PR
Pull request sudah pun menjadi tempat perbualan tentang kod berlaku. Perbualan
PR menjadikannya satu permukaan pada ruang kerja Control Center, sama seperti
jambatan sembang menjadikan Slack satu: @sebut
bot GitHub App pelayan pada sesuatu PR, balas di dalam benang semakannya, atau
tambah label ai-review, dan kerja itu berlaku dalam ruang semakan PR — di bawah
atribusi dan guardrail yang sama seperti apa-apa yang ditaip dalam aplikasi.
Sesuatu komen juga dikawal oleh keahlian; label tidak, kerana ia tiada penulis.
Jawapan bot kembali di GitHub, dalam lorong tempat soalan itu ditanya.
Tiga keputusan membentuk ciri ini, dan setiap satunya ialah keputusan yang sama yang dibuat oleh jambatan sembang untuk sembang, dinyatakan semula untuk hos kod: arah sambungan berjalan, apa yang memberi kebenaran kepada komen yang tiba dari luar dan kepada siapa setiap pihak diatribusikan.
Pengundian ialah pengangkutan
Bahagian bertajuk “Pengundian ialah pengangkutan”Satu-satunya saluran tolak GitHub untuk sesuatu aplikasi ialah webhook, dan webhook memerlukan URL masuk — satu-satunya perkara yang sengaja tidak pernah diperlukan oleh permukaan ini. Jadi penemuan ialah sapuan: setiap minit atau lebih, satu carian beralias bagi setiap pemasangan aplikasi meminta GitHub untuk PR yang menyebut bot itu (atau slug pendeknya) dan untuk PR terbuka yang membawa label semakan, PR yang sudah mempunyai ruang semakan akan dibaca benang komennya, dan semuanya dibezakan mengikut id komen terhadap apa yang dilihat pada sapuan lepas.
Kesan reka bentuknya wajar dinamakan:
- Kependaman ialah selang sapuan, bukan peristiwa. Pengakuan 👀 tiba dalam masa kira-kira satu minit. Tiada apa-apa yang mendesak bergantung padanya.
- Tepat sekali, bagi setiap komen. Id komen adalah unik merentas GitHub; setiap satu direkodkan pada saat ia dikelaskan sebagai layak, sebelum apa-apa bertindak ke atasnya. Ranap boleh menghilangkan pengendalian sesuatu komen, tetapi tidak pernah mencetuskannya dua kali.
- Masa luar talian disusuli, bukan dimainkan semula. Set yang dilihat disimpan secara berterusan, jadi permulaan semula menyampaikan apa yang tiba semasa ia tidak beroperasi. Satu-satunya pengecualian ialah sapuan pertama sekali: tanpa memori untuk dibezakan, semua yang tertunggak direkodkan secara senyap — pengendali yang melabel dua puluh PR sebelum pelayan ini wujud tidak boleh kembali kepada dua puluh semakan yang sedang berjalan.
- Label ialah set, bukan peristiwa. Carian melaporkan kehadiran label, jadi PR yang dilabel mencetuskan sekali sahaja, selamanya. Menambah semula label selepas membuangnya tidak kelihatan kepada sapuan; sebutan ialah laluan untuk menjalankan semula.
Carian itu berjalan sekali bagi setiap akaun pemasangan pada klien pemilik itu sendiri, kerana token pemasangan hanya melihat repositori pemasangannya sendiri — satu kelayakan seluruh pelayan akan terlepas secara senyap setiap PR di bawah pemasangan aplikasi yang lain.
Keahlian memberi kebenaran, bukan komen
Bahagian bertajuk “Keahlian memberi kebenaran, bukan komen”Komen PR tiba dengan tidak lebih daripada satu log masuk penulis — identiti luaran yang belum disahkan sehingga dibuktikan. Bot menyelesaikannya terhadap indeks songsang ahli ruang kerja dan akaun GitHub mereka yang bersambung, dibina semula mengikut TTL kerana orang mendaftar masuk dan dijemput semasa pelayan berjalan.
Gagal tertutup kelihatan seperti tangga, dan setiap anak tangga menjawab dalam benang tempat ia menolak:
- Log masuk yang tidak dikenali — tidak dipautkan, atau dipautkan oleh seseorang yang bukan ahli ruang kerja ini — diberitahu untuk mendaftar masuk dan memastikan mereka memang ahlinya
- Ahli baca sahaja (
vieweratauguest) diberitahu bahawa peranan mereka tidak boleh memulakan kerja
Dua kes log masuk tidak dikenali berkongsi satu balasan: indeks songsang hanya mengembalikan ahli ruang kerja ini, jadi akaun yang tidak dipautkan dan bukan ahli yang dipautkan ialah kes terlepas yang sama. Tiada daripada mereka meneruskan. Komen tidak pernah diatribusikan kepada seseorang yang tidak menghantarnya, dan kata-kata orang luar tidak pernah memasuki ruang kerja yang tidak dapat mereka lihat.
Label ai-review tiada penulis untuk diselesaikan, jadi ia tidak menaiki tangga
ini. Menambahnya memulakan semakan dalam ruang kerja yang sudah memautkan
repositori itu.
Dua identiti, dengan sengaja
Bahagian bertajuk “Dua identiti, dengan sengaja”Setiap pihak dalam perbualan membawa identiti yang berbeza, dan perbezaan itulah cirinya:
- Di GitHub, bot ialah pelayan. Setiap komen, reaksi dan balasan yang disiarkan oleh jambatan menggunakan token pemasangan aplikasi. Tiada sesiapa mengklik apa-apa dalam klien, jadi tiada apa-apa meminjam akaun seseorang — peraturan yang sama yang menjauhkan webhook dan pengundian daripada kelayakan manusia.
- Dalam ruang, soalan itu milik anda. Mesej itu diatribusikan kepada ahli yang diselesaikan oleh penulis, dan larian ejen dilaksanakan bagi pihak mereka: komit menyenaraikan mereka sebagai pengarang bersama, dan dail autonomi serta guardrail tindakan ruang itu terpakai tepat seperti pada mesej yang ditaip dalam aplikasi. Tulisan hos kod daripada larian itu masih keluar sebagai aplikasi — peraturan yang sama seperti titik di atas — bukan dengan token peribadi ahli itu.
Menerbitkan penemuan semakan kembali ke GitHub kekal sebagai keputusan seseorang, dibuat dalam Control Center. Sebutan boleh memulakan semakan; hanya manusia yang menerbitkannya.
Pengawal gelung, dan nama pendek
Bahagian bertajuk “Pengawal gelung, dan nama pendek”Semua yang dikarang oleh akaun bot digugurkan sebelum sebarang get dijalankan —
bot kita khususnya, dan setiap akhiran [bot], supaya bot semakan aplikasi lain
juga tidak boleh membangunkan bot kita. Tanpa ini, jawapan bot sendiri akan tiba
sebagai komen baharu dan mencetusnya semula selama-lamanya.
Akhiran [bot] juga sebab bentuk pendek itu wujud. GitHub menetapkan log masuk
akaun aplikasi pada <slug>[bot], tidak menawarkan autolengkap untuknya, dan
tidak pernah menyelesaikan @slug kepada aplikasi itu — jadi menerima slug
kosong ialah keputusan pemadan kami, dan menemukannya memerlukan lorong
carian teks komen mentah dan bukan indeks sebutan GitHub. Kosnya dinyatakan
dan bukan diperhalusi: pengguna manusia yang berkongsi slug aplikasi itu akan
menyebut bot dengan setiap sebutan bentuk pendek terhadap diri mereka sendiri.
Nama aplikasi yang tersendiri menjadikan pertembungan itu hipotetikal.
Apa yang sengaja tidak ditawarkan
Bahagian bertajuk “Apa yang sengaja tidak ditawarkan”- Tiada penerbitan automatik. Penemuan mendarat dalam ruang semakan; menerbitkan ke GitHub ialah tindakan manusia yang berasingan
- Tiada identiti kabur. Penulis diselesaikan kepada tepat satu ahli atau ditolak — tiada atribusi tekaan terbaik
- Tiada webhook GitHub App. Permukaan ini tidak pernah mendaftarkannya, jadi tiada URL masuk untuk didedahkan bagi komen PR. Webhook produk lain (pipeline, penyegerakan tiket) ialah persediaan berasingan yang pilihan.
Lihat juga
Bahagian bertajuk “Lihat juga”- Bercakap dengan Control Center dari PR GitHub: panduan cara untuk semua ini
- Jambatan sembang: tiga keputusan yang sama, dibuat untuk sembang
- Cipta GitHub App: dari mana identiti bot itu datang
- Multipemain dan kehadiran: prinsipal dan peranan yang dilalui oleh sesuatu log masuk untuk diselesaikan
- Guardrail: apa yang dibenarkan dilakukan oleh ejen yang menjawab
- Gunakan semakan berkuasa AI: pipeline yang dimulakan oleh sebutan atau label