16 KiB
Cheat Sheet Kontributor Kubernetes
Kumpulan resources umum yang digunakan ketika berkontribusi ke Kubernetes, termasuk tips, trik, dan best practices yang digunakan di dalam proyek Kubernetes. Ini merupakan referensi singkat ("TL;DR") informasi yang bermanfaat untuk meningkatkan pengalaman kamu ketika berkontribusi di GitHub menjadi lebih baik.
Daftar Isi
- Sumber Penting
- Berkomunikasi Secara Efektif di GitHub
- Mengumpulkan Kontribusi
- Bekerja pada Mesin Lokal
Sumber Penting
Mulai Berkontribusi
- Panduan Kontributor - Panduan bagaimana cara berkontribusi dalam proyek Kubernetes.
- Panduan Pengembang - Panduan untuk berkontribusi dalam pengembangan kode pada proyek Kubernetes.
- Informasi Security dan Disclosure - Panduan pelaporan celah keamanan dan proses rilis keamanan.
SIG dan Grup Lainnya
Komunitas
- Kalender - Melihat semua acara Komunitas Kubernetes View (pertemuan SIG/WG, acara, dll.)
- kubernetes-dev - Alamat email pengembangan Kubernetes
- Forum Kubernetes - Forum resmi Kubernetes.
- Slack channels - Slack resmi Kubernetes.
- Stack Overflow - Platform tanya jawab pengguna Kubernetes.
- YouTube Channel - Channel resmi untuk komunitas Kubernetes.
Workflow
- Prow - Mekanisme CI/CD Kubernetes.
- Tide - Plugin Prow yang melakukan manajemen merge dan test. Dasbor Tide
- Perintah Bot - Perintah yang dapat kamu gunakan untuk berinteraksi dengan Bot Kubernetes (contoh:
/cc
,/lgtm
, dan/retest
) - Label GitHub - List label yang digunakan pada proyek Kubernetes
- Pencarian Kode Kubernetes, di-maintain oleh @dims
Testing
- Prow - Mekanisme CI/CD Kubernetes.
- Test Grid - Melihat data historical testing beserta informasi terkait.
- Dasbor Triase - Melakukan agregasi failure untuk mekanisme troubleshoot yang lebih baik.
Alamat Email Penting
- community@kubernetes.io - Mengirim surat pada seseorang yang berada dalam tim komunitas (Kontributor SIG Experience) mengenai isu komunitas.
- conduct@kubernetes.io - Mengirim surat pada komite Code of Conduct, mailing list private.
- github@kubernetes.io - Mengirim Surat pada Tim Administrasi GitHub secara pribadi, untuk item sensitif.
- steering@kubernetes.io - Mengirim surat pada steering committee. Alamat publik dengan archieve.
- steering-private@kubernetes.io - Mengirim surat pada steering committee secara private, untuk informasi yang sensitif.
- social@cncf.io - Mengirim surat pada tim CNCF; blog, akun twitter, and properti sosial lainnya.
Tautan Lain
- Statistik Pengembang - Melihat statistik pengembang untuk semua proyek yang dikelola oleh CNCF.
- Rilis Patch Kubernetes Jadwal dan informasi kontak tim untuk rilis patch Kubernetes
Berkomunikasi Secara Efektif di GitHub
Bagaimana Cara Bekerja Sama dengan Baik
Pada tahap awal, pelajari dan pahami Code of Conduct.
Contoh Komunikasi Yang Baik/Buruk
Ketika membuka sebuah isu, atau mencari bantuan, tolong bersikap dengan sopan ketika melakukan hal tersebut:
🙂 “X tidak dapat dikompilasi, apakah kamu memiliki saran?”
😞 “X tidak bekerja sebagaimana mestinya! Tolong perbaiki!”
Ketika menutup sebuah PR, berikan penjelasan yang rinci mengenai alasan kenapa PR tersebut tidak memenuhi standar untuk di-merge.
🙂 “Aku menutup PR ini karena fitur ini tidak mendukung kebutuhan X. Sesuai kesepakatan, akan lebih baik jika ini diimplementasikan dengan Y. Terima kasih sudah menyempatkan waktu untuk mengerjakan hal ini."
😞 “Mengapa PR ini tidak mengikuti konvensi API? Hal ini harusnya tidak dilakukan di sini!"
Mengumpulkan Kontribusi
Menandatangani CLA
Sebelum kamu mengumpulkan kontribusi kamu, kamu harus terlebih dahulu menyetujui Contributor License Agreement(CLA). Proyek Kubernetes hanya menerima kontribusi yang kamu kerjakan apabila kamu sudah menyetujui CLA.
Apabila kamu kesulitan ketika menyetujui CLA, ikuti petunjuk troubleshooting CLA.
Membuka dan Menanggapi Isu
Isu GitHub merupakan mekanisme tracking berbagai hal yang ada, termasuk pelaporan bug, permintaan peningkatan fitur, atau pelaporan isu lainnya seperti terjadi kegagalan ketika menjalankan test. Hal tersebut tidak diperuntukkan bagi user support request. Untuk tujuan tersebut, kamu bisa membaca petunjuk troubleshooting, laporkan permasalahan yang ada ke Stack Overflow atau ikuti forum Kubernetes.
Referensi
Membuat Sebuah Isu
- Gunakan templat isu (jika tersedia). Menggunakan templat yang tersedia akan
memudahkan kontributor lain ketika menanggapi isu yang kamu buat.
- Ikuti petunjuk yang dideskripsikan di templat tersebut.
- Berikan deskripsi yang cukup ketika membuat suatu isu.
- Gunakan label yang tepat. Jika kamu kurang yakin, k8s-ci-robot bot
(Kubernetes CI bot) akan membalas isu yang kamu buat dengan respons
needed labels
. - Selektiflah ketika meng-assign suatu isu menggunakan
/assign @<username>
atau/cc @<username>
. Isu yang kamu buat akan ditriase secara lebih efektif apabila kamu menambahkan label yang tepat.
Menanggapi sebuah Isu
- Ketika menghadapi sebuah isu, berikan komentar terhadap isu tersebut yang menandakan kamu sedang mengerjakan isu tersebut untuk mencegah pengerjaan berulang.
- Ketika kamu sudah menyelesaikan hal tersebut, berikan komentar yang mengindikasikan kamu sudah menyelesaikannya sebelum kamu menutup isu tersebut, hal ini bertujuan agar orang lain tahu alasan kenapa kamu menutup isu tersebut.
- Masukkan referensi ke PR atau isu lain (atau material lain yang dapat diakses)
misalnya "ref: #1234". Hal ini nantinya dapat digunakan untuk mengidentifikasi hal terkait yang mungkin sudah dibahas/dikerjakan di tempat lain.
Membuka sebuah Pull Request (PR)
Pull requests (PR) adalah mekanisme utama yang digunakan untuk melakukan kontribusi kode, dokumentasi, atau segala bentuk hal yang disimpan dalam repositori git.
Referensi:
Membuat sebuah Pull Request (PR)
- Ikuti petunjuk yang ada pada templat PR (jika tersedia). Menggunakan templat yang tersedia akan memudahkan kontributor lain ketika menanggapi PR yang kamu buat.
- Jika hal tersebut merupakan trivial fix seperti tautan yang broken, typo atau kesalahan grammar, review dokumen secara menyeluruh untuk mengecek apakah terjadi kesalahan yang serupa. Jangan membuka multipel PR untuk fix kecil pada dokumen yang sama.
- Berikan referensi ke isu yang terkait dengan PR kamu, atau isu lain yang mungkin dapat diselesaikan dengan PR yang kamu buat.
- Hindari perubahan yang sangat besar dalam suatu commit, Sebaliknya, pisahkan PR kamu dalam multipel PR yang lebih kecil. Ini akan memudahkan proses review PR yang kamu buat.
- Berikan komentar pada PR yang kamu buat, apabila kamu merasa ada hal yang membutuhkan penjelasan lebih lanjut.
- Selektiflah ketika meng-assign suatu isu menggunakan
/assign @<username>
. Meng-assign reviewer secara berlebihan tidak mempercepat proses review yang dilakukan untuk PR kamu. - Jika PR kamu masih dalam tahap "Work in progress" berikan prefiks
[WIP]
atau gunakan perintah/hold
. Hal ini mencegah agar PR tidak di-merge hingga WIP dihilangkan. - Jika PR kamu tidak di-review, jangan tutup PR tersebut dan membukan PR lain
dengan perubahan yang sama. Ping reviewer PR kamu dengan komentar
@<github username>
.
Contoh Deskripsi PR
Ref. #3064 #3097
Semua file yang dimiliki oleh SIG testing dipidahkan dari folder `/devel` ke folder `/devel/sig-testing`.
/sig contributor-experience
/cc @stakeholder1 @stakeholder2
/kind cleanup
/area developer-guide
/assign @approver1 @approver2 @approver3
Apa saja yang dimasukkan dalam deskripsi:
- Baris 1 - Referensi ke isu atau PR lain (#3064 #3097).
- Baris 2 - Deskripsi singkat mengenai apa yang dikerjakan dalam PR tersebut.
- Baris 4 - SIG assignment dengan perintah
/sig contributor-experience
.. - Baris 5 - Reviewer yang terkait dengan isu atau PR yang dispesifikasikan dengan perintah
/cc
. - Baris 6 - Perintah
/kind cleanup
menambahkan label yang mengkategorisasi isu atau PR yang terkait untuk membersihkan kode, process, atau technical debt. - Baris 7 - Perintah
/area developer-guide
mengkategorisasi isu atau PR yang terkait dengan petunjuk pengembang. - Baris 8 - Perintah
/assign
meng-assign seorang approver untuk PR. Seorang approver akan disarankan oleh k8s-ci-robot dan dipilih dari list owner pada file [OWNERS]. Merekalah yang akan menambahkan label/approve
pada PR yang sudah di-review.
Troubleshooting sebuah PR
Setelah PR kamu diajukan, serangkaian testing akan dijalankan oleh platform CI Kubernetes, Prow. Jika terdapat salah satu test yang gagal, maka k8s-ci-robot akan memberikan balasan pada PR kamu beserta tautan yang memberikan log dari testing yang gagal dijalankan.
Apabila kamu mem-push commit baru, test pada PR kamu akan secara otomatis di-trigger.
Terkadang, bisa jadi terdapat masalah pada platform CI Kubernetes.
Hal ini dapat terjadi karena berbagai alasan bahkan ketika test yang kamu jalankan di
mesin lokal kamu berhasil. Kamu dapat men-trigger ulang test dengan cara memanggil perintah
/retest
.
Untuk informasi lebih lanjut, baca Panduan Testing.
Label
Kubernetes menggunakan label untuk melakukan kategorisasi dan triase isu dan PR. Penggunaan label yang benar akan membuat triase pada isu atau PR yang kamu ajukan menjadi lebih efektif.
Referensi:
- Label
- [Perintah Prow]
Label yang sering digunakan:
/sig <sig name>
Meng-assign SIG yang bertindak sebagai owner sebuah isu atau PR./area <area name>
Mengasosiasikan area./kind <category>
Mengkategorisasikan isu atau PR.
Bekerja pada Mesin Lokal
Sebelum kamu membuat sebuah PR, sebagian besar kamu akan mengerjakan pekerjaan kamu pada mesin lokal. Jika kamu merupakan pengguna baru git, Tutorial git Atlassian merupakan awal pembelajaran yang baik. Sebagai alternatif lain, juga terdapat tutorial Stanford's Git magic untuk pilihan multi-bahasa yang bagus.
Referensi:
Mekanisme Branch
Proyek Kubernetes menggunakan mekanisme "Fork and Pull" yang merupakan
standar GitHub. Dalam terminologi git, fork yang kamu buat disebut sebagai "origin
"
dan git proyek yang sebenarnya disebut sebagai "upstream
". Untuk menjaga branch
(origin
) tetap up to date dengan proyek (upstream
), branch tersebut harus dikonfigurasikan
pada copy lokal.
Menambahkan Upstream
Tambahkan upstream
sebagai remote, dan atur agar kamu tidak dapat mem-push ke sana.
# ganti <upstream repositori git> dengan url upstream repositori
# contoh:
# https://github.com/kubernetes/kubernetes.git
# git@github.com/kubernetes/kubernetes.git
git remote add upstream <upstream git repo>
git remote set-url --push upstream no_push
Versifikasi langkah ini dapat dilakukan dengan cara menjalankan
git remote -v
yang selanjutnya akan menampilah seluruh
remote yang sudah kamu atur.
Menjaga agar Fork Kamu tetap Sinkron
Fetch semua perubahan dari upstream
dan lakukan "rebase" pada master
branch lokal kamu.
Dengan demikian repositori lokal kamu akan tertap sinkron dengan proyek upstream
.
git fetch upstream
git checkout master
git rebase upstream/master
Kamu setidaknya harus melakukan hal ini sebelum membuat sebuah branch baru yang akan kamu gunakan untuk mengerjakan fitur baru atau melakukan fix.
git checkout -b myfeature
Melakukan Commit Squashing
Tujuan utama dari commit squashing adalah untuk membuat histori atau log git yang mudah dibaca dan bersih. Biasanya hal ini dilakukan pada fase akhir dari revisi yang kamu buat. Jika kamu masih belum yakin apakah kamu harus melakukan commit squashing atau tidak, biarkan revisi kamu apa adanya sampai ada saran khusus dari kontributor yang di-assign untuk me-review atau meng-approve revisi kamu apakah commit squashing perlu dilakukan atau tidak.