Ini adalah yang pertama daripada 4 skrip yang saya akan tulis seperti yang dinyatakan dalam seni bina sistem. Terasa bersemangat! ia merupakan satu langkah ke arah mencipta pengalaman "wiki" yang mendapat sumbangan kepada Sumber Terbuka tanpa berantara muka dengan UI GitHub ?.
Apakah skrip ini?
Ini adalah fail js yang memegang beberapa fungsi boleh guna semula yang berkaitan terutamanya bertujuan untuk digunakan untuk berinteraksi dengan API GitHub; ia sama ada digunakan dalam skrip yang sama atau dieksport untuk digunakan untuk melaksanakan fungsi asas mereka di tempat lain dalam projek. Mereka menerima tika Octokit yang disahkan pengguna sebagai parameter daripada orang lain, tika ini digunakan untuk melaksanakan tindakan/fungsi melalui API GitHub bagi pihak pengguna yang disahkan.
Keperluan untuk mencipta aliran sumbangan kepada Sumber Terbuka tanpa berantaramuka dengan UI GitHub bermakna kami perlu mengautomasikan beberapa proses - mensimulasikan setiap langkah yang akan diambil oleh pengguna jika mereka menyumbang melalui UI GitHub, langkah-langkahnya adalah seperti mengikuti..
- Repo Projek Fork
- Buat Cawangan
- Komit Perubahan pada Cawangan (tambah fail mdx baharu dalam direktori src/pages/word/ untuk perkataan baharu atau edit yang sedia ada, dalam kes kami)
- Buat Permintaan Tarik (Serahkan perubahan perkataan, dalam kes kami)
Kebenaran yang patut dinyatakan
Saya mula menulis skrip ini sejurus selepas komit awal, ini sebenarnya PR #2, tetapi ia mendapat kesan semasa rehat bulan yang panjang? saya mengambil daripada projek itu sebelum kembali bekerja pada ciri kamus asas.
Skrip
Tugas di sini adalah untuk mencipta "Skrip Fork" — yang matlamat akhirnya adalah untuk mencipta/mendapatkan percabangan repo jargons.dev pada/daripada akaun pengguna. Ia sepatutnya menempatkan setiap fungsi yang akan melakukan perkara berikut.
- Semak sama ada Fork of jargons.dev sudah wujud pada akaun pengguna
- Jika Fork Wujud
- Semak sama ada Fork dalam-Segerak dengan huluan (iaitu terkini dengan cawangan utama repo jargons.dev); JIKA TIDAK — Kemas kini garpu
- Jika TIADA Garpu ditemui
Memahami tugasan itu, saya "menyelidiki" terus dalam mengusahakan skrip.
Saya sudah sangat terbiasa dengan API GitHub kerana penggunaan kerap saya dalam kerja harian saya di Hearts ❤️... Jadi saya mempunyai Dokumentasi Fork GitHub kelihatan seperti broski kepada saya ?...
Langkah-langkah
- Saya mencipta fungsi forkRepository utama yang merupakan titik masuk utama untuk melaksanakan fungsi fork - ia membawa ke tempat lain
- Saya menambah fungsi berikut, yang kebanyakannya berfungsi sebagai pembantu kepada fungsi forkRepository utama yang jelas
-
isRepositoryForked - fungsi ini menyemak sama ada repositori jargons.dev sudah bercabang ke akaun pengguna yang disahkan semasa
-
isRepositoryForkUpdated - untuk menyemak sama ada garpu (jika ditemui) (dalam Segerakkan dengan repo kepala) terkini dengan jargons.dev repo utama
-
updateRepositoryFork - digunakan untuk mengemas kini repositori (Segerakkan) kepada keadaan repositori jargons.dev utama (kepala)
-
getBranch - ialah utiliti asas (diperlukan semasa menulis skrip ini) yang digunakan untuk mengambil butiran Branch/Ref untuk repo jargons.dev dan garpu pengguna untuk digunakan dalam perbandingan yang dilakukan dalam pembantu isRepositoryForkUpdated untuk melaksanakan fungsi utamanya; ia menggunakan titik akhir Rujukan GitHub.
Andaian saya yang pelik
Terlintas di fikiran saya? semasa saya menulis skrip ini adalah pemikiran yang saya pegang selepas membaca perenggan yang dipetik di bawah pada Dokumentasi Fork GitHub
Nota: Forking Repository berlaku secara tidak segerak. Anda mungkin perlu menunggu masa yang singkat sebelum anda boleh mengakses objek git. Jika ini mengambil masa lebih daripada 5 minit, pastikan anda menghubungi Sokongan GitHub.
Saya salah faham ini dan menganggap bahawa kami hanya akan dapat memulakan proses garpu, meneruskan dan pastinya tidak akan dapat menunggu objek tindak balas yang mengembalikan butiran garpu baharu kerana kami tidak tahu apabila proses garpu selesai.
Andaian ini memaksa saya untuk tidak memulangkan sebarang data daripada fungsi forkRepository utama dan saya sudah mula berfikir pada ketika ini - bagaimana saya hendak mendapatkan butiran fork untuk diproses ke fasa seterusnya proses sumbangan!? Hmm, mungkin saya akan menggunakan webhooks?!?
Nampaknya saya terlalu memikirkannya?, Saya menyedari kemudian bahawa saya akan mendapatkan butiran tindak balas untuk garpu dan ini menyebabkan saya melakukan susulan PR untuk menangani pemulangan data yang diperlukan daripada objek tindak balas garpu untuk penggunaan dalam proses sumbangan.
PR itu
Utama:
feat: melaksanakan skrip repositori `fork`
#3
Permintaan Tarik ini melaksanakan skrip garpu; skrip ini bertujuan untuk digunakan untuk memprogramkan repo projek utama ke akaun pengguna; Ia menempatkan fungsi utama dan fungsi pembantu lain yang digunakannya untuk melakukan beberapa tindakan yang perlu bagi memastikan operasi garpu repo yang cekap.
Perubahan Dibuat
- Melaksanakan fungsi forkRepository utama dalam skrip; fungsi ini ialah fungsi eksport utama yang melaksanakan operasi garpu utama; ia menerima contoh penggunaOctokit (objek yang disahkan pengguna dengan kebenaran untuk bertindak bagi pihak pengguna) dan butiran repositori projek iaitu objek repoDetails dan ia melakukan perkara berikut...
- Ia menyemak sama ada repositori projek telah dicabangkan ke akaun pengguna menggunakan fungsi pembantu isRepositoryForked; ini mengembalikan garpu null
- Jika repo telah dicabang, maka kami melakukan semakan sama ada garpu itu dikemas kini/selaras dengan repo projek utama menggunakan fungsi pembantu isRepositoryForkUpdated; ini mengembalikan sifat kemas kiniSHA dan boolean isUpdated yang mengesahkan sama ada fork adalah terkini
- Jika garpu tidak terkini; kemudian kami melakukan kemas kini dengan membawanya selari dengan repo projek utama menggunakan fungsi pembantu updateRepositoryFork
- Jika repo dikemas kini/selaras dengan repo projek utama; kami membatalkan operasi pada ketika ini dengan pulangan awal;
- Jika repositori projek tidak dicabangkan ke akaun pengguna; kemudian kami meneruskan untuk memulakan proses garpu dengan memanggil titik akhir "POST /repos/{owner}/{repo}/forks" menggunakan contoh userOctokit. (Ini memulakan proses garpu, kita tidak tahu dengan tepat bila proses itu selesai?)
- Laksanakan fungsi pembantu berikut yang digunakan dalam fungsi forkRepository utama dan dalam fungsi pembantu lain juga
-
updateRepositoryFork - digunakan untuk mengemas kini repositori (Segerakkan) kepada keadaan repositori (kepala) utama
-
isRepositoryForkUpdated - digunakan untuk menyemak sama ada garpu (dalam Segerakkan dengan repo kepala) terkini dengan repo utama
-
getBranch - digunakan untuk mengambil butiran Cawangan/Ruj
-
isRepositoryForked - digunakan untuk menyemak kehadiran repo tertentu dalam senarai repo fork pengguna
- Menambahkan getRepoParts ke /lib/utils; ia adalah fungsi utiliti yang digunakan untuk menyelesaikan repoOwner dan repoName daripada nama penuh repositori.
Isu Berkaitan
Menyelesaikan #2
Siaran Skrin/Tangkapan Skrin
https://github.com/babblebey/jargons.dev/assets/25631971/16221b7e-3c28-4c6c-a1f3-24d583ce7e3a
?
Lihat di GitHub
Susulan:
feat: return repo `nama penuh` dalam skrip fork
#29
PR ini adalah susulan kepada langkah yang hilang dalam pelaksanaan awal skrip fork di #3; skrip fork gagal mengembalikan repo yang boleh digunakan dalam langkah pengiraan seterusnya. Ini adalah kerana andaian aneh yang saya ada semasa pelaksanaan awal. ?Lihat andaian saya di bawah...
Saya menganggap bahawa panggilan ke titik akhir "POST /repos/{owner}/{repo}/forks" hanya memastikan untuk memulakan proses fork tanpa memberi jaminan kepada kami tentang respons sama sekali. Bermaksud kami mungkin tidak mendapat respons.data selepas panggilan
...tetapi itu tidak benar, saya mendapati bahawa respons.data sebenarnya datang, tetapi ia mungkin mengambil sedikit masa dan hanya dalam kes di mana repo yang dicabang adalah besar.... dan pada masa ini forking repo projek berlaku dalam masa kurang daripada 5 saat.
Perubahan Dibuat
- Returned fork repo - ini ialah nilai nama penuh repo yang dikembalikan daripada fungsi pembantu isRepositoryForked; Saya dengan ini mengembalikannya sebagai nilai pulangan utama daripada pelaksanaan fungsi forkRepository dalam keadaan repo sudah bercabang pada akaun pengguna pelaksana
- Returned response.data.full_name - ini ialah nama penuh fork repo yang baru dibuat; Nilai ini daripada respons kepada panggilan titik akhir "POST /repos/{owner}/{repo}/forks"; Saya dengan ini mengembalikannya sebagai nilai semula utama daripada pelaksanaan fungsi forkRepository dalam kes di mana tiada garpu telah ditemui pada akaun pengguna pelaksana
- Cherry memilih beberapa perubahan daripada #25 untuk digunakan di sini
- f12f25f548a5c5836e9be7d601ed226c5269f5ee
- 436ceea649b67812c0ec1164fde95d443ce556e0
?
Lihat di GitHub
Atas ialah kandungan terperinci Membina jargons.dev [# Skrip Fork. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!