Menulis ekstensi untuk penerapan
Halaman ini mendokumentasi langkah-langkah yang diperlukan bagi seorang pengelola atau penatalayan kode ekstensi MediaWiki untuk mendapatkan ekstensi itu melalui proses peninjauan sebelum ekstensi tersebut kemungkinan diterapkan ke wiki Wikimedia. Apa pun yang disebarkan di peladen Wikimedia perlu ditinjau untuk masalah keamanan dan skalabilitas. Jika kata "ekstensi" muncul di bawah, "kulit" atau "kode" adalah sinonimnya.
Menulis ekstensi untuk penerapan dapat menjadi proyek yang memakan waktu; setiap pihak yang berminat didorong untuk memulai proses jauh sebelum batas waktu.
Anda dapat melihat daftar semua ekstensi yang menunggu tinjauan.
Setelah suatu ekstensi berhasil melewati peninjauan, ekstensi tersebut dapat dijadwalkan untuk disebarkan oleh Pengelola Keluaran Yayasan Wikimedia.
Daftar Periksa/Proses
Prasyarat dan harapan umum
Ikuti pedoman umum dan rekomendasi tentang penulisan ekstensi. Baca Konvensi pengodean, Daftar periksa pra-komit, Pedoman kinerja, dan Security for developers dan pastikan kode Anda mengikuti pedoman ini.
- WMF stewardship: Find at least one WMF team (or staff member on behalf of their team) to agree to offer basic support for the extension for when it's deployed to Wikimedia Production.[1] Do this step before any other steps. Due to technical debt, WMF capacity to steward extensions is limited.
- Dokumentasi:
- Buat halaman
Extension:My Extensiondi ruang nama Extension: di mediawiki.org untuk mendokumentasi bagi pengembang dan orang-orang yang akan memasang atau mengonfigurasi ekstensi. Gunakan Templat:Pengaya untuk ini. Anda dapat menggunakan bidang di bawah ini untuk membantu Anda. - Buat halaman
Help:Extension:My Extensiondi ruang namaHelp:Extension:pada mediawiki.org untuk dokumentasi pengguna akhir ekstensi Anda. Tautkan silang dengan halamanExtension:My Extensiondi atas. Lihat pula Manual:Mengembangkan ekstensi#Dokumentasi bantuan. Contoh: Bantuan:VisualEditor/Panduan pengguna. Rekaman layar dapat berguna dalam menjelaskan cara kerja sesuatu. Anda dapat menggunakan bidang di bawah ini untuk membantu Anda.
- Buat halaman
- Pengadaan hos kode - Minta repositori Git/Gerrit baru untuk menyimpan kode sumber untuk ekstensi Anda. Gerrit adalah tempat semua peninjauan kode akan terjadi.
- Pelacakan masalah - Minta proyek di Phabricator untuk melacak kekutu dan permintaan fitur untuk ekstensi Anda. Dapatkan pemberitahuan tentang tugas baru yang dilaporkan dalam proyek Anda.
- Kepenatalayanan - Tambahkan proyek ke halaman Developers/Maintainers yang menunjukkan siapa yang akan bertanggung jawab atas kepenatalayanan dan pemeliharaan jangka panjang.
- Pelokalan - Ekstensi Anda harus dapat diterjemahkan di Translatewiki.net sebelum dapat digunakan di mana saja. Ini mengharuskan kode Anda memiliki berkas i18n yang tepat, dll.
- Setelah ekstensi disebarkan pada wiki pengujian Wikimedia, ekstensi tersebut harus ditambahkan ke kelompok "Ekstensi yang digunakan oleh Wikimedia - Mendatang".
- Setelah ekstensi diterapkan pada wiki produksi Wikimedia mana pun, ekstensi tersebut harus ditambahkan ke salah satu kelompok "Ekstensi yang digunakan oleh Wikimedia - *" lainnya: "Utama" untuk ekstensi yang digunakan di semua wiki, atau yang sangat menonjol; "Lanjutan" untuk ekstensi bagi pengguna berpengalaman atau ekstensi yang hanya bekerja di beberapa wiki; dan seterusnya. Berkas pesan API dan ekstensi yang hanya ditujukan untuk orang-orang yang sangat teknis harus berada dalam kelompok "Teknis".
- Penerapan gerbang dan bendera fitur - Yayasan Wikimedia menjalankan hampir seribu wiki dalam ratusan bahasa. Saat kami menyebarkan kode di gugus kami, kami menyalakan ekstensi pada setiap wiki dan sering mengonfigurasinya secara berbeda untuk setiap wiki. Ekstensi harus memiliki bendera fitur (misalnya,
wgMaxGeoSearchRadius) untuk menyalakan dan mematikan perilaku tertentu atau mengonfigurasi beberapa bagian ekstensi, jika itu masuk akal. Saat ekstensi diterapkan, ekstensi tersebut akan dibatasi di belakang peubah konfigurasi global khusus Wikimedia sepertiwmgUseEventLogging. Ini memungkinkan ekstensi untuk diterapkan pada sebagian wiki (misalnya, test dan test2) tanpa memengaruhi semua wiki. Anda dapat mencari melalui CommonSettings.php dan InitialiseSettings.php yang sangat besar yang ada untuk acuan. - Pengujian satuan - Bersikaplah baik, persiapkan pengujian otomatis yang memadai. Berbagai bagian kode memerlukan jenis pengujian yang berbeda. Khususnya periksa Manual:PHP unit testing dan Manual:JavaScript unit testing.
- Skema pangkalan data - Lihat Kebijakan pangkalan data MediaWiki. Jika kode Anda memerlukan perubahan skema (misalnya kolom baru pada tabel yang sudah ada) baik untuk inti atau ekstensi, perlu diingat bahwa perubahan skema mungkin terjadi hanya beberapa tahun kemudian di gugus Wikimedia. Jika memungkinkan, hindari perubahan skema.
- Kompatibilitas - Ekstensi Anda harus kompatibel dengan semua ekstensi yang digunakan di gugus Wikimedia.
- Pengadaan hos versi uji - Toolforge atau Cloud VPS dapat digunakan untuk menghos wiki pengujian dengan ekstensi Anda terpasang untuk pengujian dan peragaan. Lihat Panduan Memulai Layanan Awan untuk informasi lebih lanjut.
- Peninjauan kode - Anda harus bekerja sama secara erat dengan pengembang MediaWiki yang tepercaya dan mapan (bagusnya, pemelihara inti atau pemelihara ekstensi yang telah diterapkan ke situs Wikimedia) selama keseluruhan proses pengembangan dan penerapan, untuk memastikan bahwa Anda memahami persyaratan dan kekhasan khusus untuk menulis kode yang diterapkan Wikimedia. Jika Anda tidak memiliki pengembang tertentu dalam pikiran, tanyakan di IRC atau di daftar surel pengembang. Semua ekstensi yang diterapkan Wikimedia dan yang sedang dalam proses penerapan harus mengikuti Gerrit/Privilege policy.
Setelah langkah-langkah di atas dilakukan, pertimbangkan untuk mendapatkan dukungan komunitas untuk gagasan Anda:
- Dukungan komunitas dapat ditunjukkan dengan mengadakan pembahasan aktif mengenai perlunya ekstensi pada wiki dan mendokumentasi tanggapannya. Jika tidak ada dukungan komunitas yang aktif, dukungan dapat dibangun melalui pembahasan dan pengusulan.
- Kirimkan gagasan Anda ke daftar surel wikitech-l untuk memperoleh masukan dari pengembang berpengalaman dan Wikimediawan. Orang mungkin mengarahkan Anda ke ekstensi lain yang sudah digunakan yang fungsinya menduplikasi apa yang Anda inginkan, atau dapat dengan mudah diperluas untuk melakukan apa yang Anda inginkan. Dalam kasus tersebut, Anda harus menggunakan Git untuk mengerjakan ekstensi tersebut yang sudah digunakan.
- Komunikasikan gagasan dan rencana Anda ke wiki yang terdampak untuk memperoleh dukungan, saran, dan umpan balik lainnya.
- Untuk mempermudah dan mempercepat langkah-langkah di bawah ini bagi para peninjau, Anda juga dianjurkan untuk membuat peran MW-Vagrant untuk ekstensi tersebut.
Jika Anda telah mengikuti saran di atas dan umpan balik yang diberikan oleh peninjau awal dengan saksama, Anda seharusnya tidak mengalami banyak masalah pada langkah berikutnya.
Mempersiapkan penerapan
- Buat tugas pelacakan penerapan produksi dalam Phabricator (dalam proyek #Wikimedia-Extension-setup dan #Wikimedia-Extension-Review-Queue) untuk memasukkan ekstensi ke dalam antrean tinjauan. Tugas ini seharusnya hanya menyangkut penerapan itu sendiri. Masalah apa pun yang memblokir penerapan harus menjadi tugas terpisah (tercantum dalam "Grafik Tugas") yang memblokir tugas induk ini.
- Kekutu penerapan Anda seharusnya mengarah ke konsensus komunitas di wiki (dan/atau dukungan/keinginan komunitas) untuk memasang ekstensi pada wiki tertentu, jika berlaku.
- Minta dan sertakan umpan balik dari tinjauan berikut. Ini dapat disertakan sebagai "daftar periksa" dalam deskripsi tugas pelacakan penerapan produksi, (misalnya phab:T190716) atau sebagai subtugas dari tugas pelacakan penerapan produksi. Perhatikan juga bahwa tidak setiap tinjauan yang tercantum di bawah ini merupakan persyaratan ketat untuk penerapan produksi dan bahwa tidak ada urutan tinjauan khusus yang perlu diikuti.
- Tinjauan dari pemilik produk untuk area yang terdampak, jika berlaku. Jika Anda tidak yakin siapa orangnya, mungkin merupakan hal yang bagus untuk menghubungi berbagai tim rekayasa dalam vertikal Produk atau Teknologi untuk informasi dan panduan lebih lanjut.
- Tinjauan rancangan, jika berlaku.
- Tinjauan fitur beta, jika ekstensi Anda menambahkan fitur beta.
- Tinjauan keamanan aplikasi: untuk membuka permintaan membuat tugas tinjauan keamanan aplikasi dan menandainya sebagai subtugas dari tugas pelacakan penerapan produksi (melalui "Sunting Tugas" di sudut kanan atas). Tinjauan kesiapan keamanan bisa menjadi penghambat penerapan produksi tergantung pada rincian permintaan dan hasilnya.
- Tinjauan keamanan untuk setiap kebergantungan luar baru yang kemudian harus ditambahkan ke mediawiki/vendor. Berikut adalah daftar dasar yang biasanya diperiksa oleh Tim Keamanan saat meninjau kode pihak ketiga/vendor.
- TInjauan kinerja. Tinjauan ini pada umumnya tidak menjadi penghambat penerapan produksi.
- Jika Anda memiliki alasan untuk berpikir bahwa tinjauan pangkalan data diperlukan, buat permintaan di Phabricator.
- IMPORTANT: Setiap masalah serius (misalnya yang memblokir) yang teridentifikasi dalam tinjauan yang disebutkan di atas harus diatasi sebelum upaya apa pun untuk menerapkan kode ke produksi dilakukan.
- Minta penerapan ke Beta Cluster. Lihat #Terapkan ke Gugus Beta di bawah untuk informasi lebih lanjut. Meski sangat direkomendasikan untuk melakukan tinjauan kesiapan keamanan sebelum penerapan gugus beta, waktu berbagai tonggak proyek dan sifat proyek itu sendiri mungkin tidak menampung hal ini. Dalam kasus ini, yang terbaik adalah membahas setiap usulan penerapan gugus beta dengan Tim Keamanan di luar tinjauan yang diminta. Memiliki rencana pemeliharaan jangka panjang yang tepat untuk pangkalan kode yang tidak bergantung pada relawan perorangan sering kali menjadi penghambat untuk lolos tinjauan keamanan aplikasi.[2]
- Pastikan ekstensi bercabang secara otomatis dengan make-wmf-branch.
- IMPORTANT: Tidak menerima tinjauan kesiapan keamanan yang memuaskan merupakan penghambat untuk langkah ini.
- IMPORTANT: Lakukan ini sedini mungkin! Bagusnya, setidaknya tiga minggu sebelum tanggal penerapan sasaran Anda, untuk memastikan ekstensi Anda sudah tersedia sebagai submodul di cabang yang diperlukan. (Submodul ekstensi harus ada di semua cabang yang saat ini berjalan di gugus, atau pembangun tembolok pelokalan akan gagal.)
- Minta tanggal/waktu untuk penerapan dalam tugas pelacakan penerapan untuk menambahkannya ke kalender penerapan.
- "Anda" (orang atau orang-orang yang menggerakkan/meminta ini) harus daring (di IRC di #wikimedia-operations connect) dan tersedia selama penerapan untuk menanggapi masalah apa pun yang mungkin timbul.
Daftar ini menguraikan prosedur umum yang harus diikuti, termasuk persyaratan yang mesti dipenuhi, tetapi tidak berarti suatu "proses". Secara khusus, kegiatan pengiriman ekstensi baru ke produksi tidaklah mempunyai pemilik WMF, yang dapat menyulitkan pencarian tinjauan untuk tambalan terkait. Jika terjadi masalah, disarankan untuk mencari orang (lihat Gerrit/Code review/Getting reviews#Add reviewers). Pengembang disarankan bahwa hanya membuka tugas Phabricator dan menunggu seseorang memperhatikannya saja kemungkinan besar tidak akan cukup. Lihat penjelasan Martin Urbanec di phab:T61245#9152895.
Terapkan ke Gugus Beta
Sebelum menyalakan ekstensi baru dalam produksi, ekstensi tersebut harus diuji pada Gugus Beta. Berikut langkah-langkah yang diperlukan untuk menerapkan dan menyalakan ekstensi baru pada Beta. (Jika ekstensi Anda memiliki lebih banyak langkah/kebergantungan, katakanlah Wikibase, pastikan untuk memeriksa dengan seseorang sebelum Anda menerapkannya.)
Proses
- Tambahkan submodul ekstensi baru ke repo git mediawiki/extensions jika belum ada di dalamnya. Lihat contoh. Ini akan mengakibatkan kode tersebut diterapkan (tak terpakai) ke Gugus Beta.
- Pindahkan konfigurasi CI ekstensi Anda ke bagian "Produksi Wikimedia", tambahkan templat pekerjaan "
in-wikimedia-production", dan pastikan ekstensi tersebut mempunyai dan meneruskan semua pekerjaan yang diharapkan untuk kode produksi. Lihat contoh. - Tambahkan ekstensi Anda ke alat keluaran json make-wmf-branch setidaknya dua minggu sebelum tanggal sasaran Anda untuk menyalakan di Gugus Beta. Ini akan menambahkan ekstensi sebagai submodul dari mediawiki/core ketika cabang penerapan mingguan dipotong, dan kode akan diterapkan (tak terpakai) ke produksi (lihat penjelasan pada langkah berikutnya). Lihat contoh.
- Tambahkan ekstensi Anda ke
extension-list. Lihat contoh. Ini memerlukan kode tersebut hadir di setiap cabang yang berjalan dalam produksi, karenaextension-listdigunakan untuk membangun pangkalan data CDB untuk berkas i18n dalam Beta dan produksi.[3] - Tambahkan peubah konfigurasi ekstensi Anda ke
InitialiseSettings.phpdan atur ke bawaanfalse. Lihat contoh. - Tambahkan peubah konfigurasi ekstensi Anda (sama seperti pada langkah sebelumnya) ke
InitialiseSettings-labs.phpdan atur menjaditruepada wiki Gugus Beta yang Anda inginkan. Anda mungkin ingin mematikannya untuk loginwiki (yang tidak mempunyai sebagian besar ekstensi). Lihat contoh. - Muat ekstensi Anda dalam
CommonSettings-labs.php. Lihat contoh.
Catatan
Gugus Beta menggunakan direktori wmf-config yang sama dalam repositori operations/mediawiki-config seperti produksi, tetapi sebagai tambahan, peladen Gugus Beta memuat berkas InitialiseSettings-labs.php dan CommonSettings-labs.php sehingga Anda dapat mempunyai pengaturan yang hanya berlaku untuk Gugus Beta.
Baca lebih lanjut tentang berkas-berkas konfigurasi ini).
Saat menguji pada Gugus Beta sebelum produksi, ini dapat mengesampingkan wmgUseMyExtension, mengaturnya menjadi benar pada satu atau lebih wiki Gugus Beta.
(Setelah ekstensi Anda digunakan dalam wiki produksi yang sesuai dengan Gugus Beta, Anda mungkin dapat menghapus penggantian -labs.php.)
Gugus Beta menjalankan kode dari cabang induk di Git. Anda harus menggabungkan kode ke cabang induk sedini mungkin dan sesering mungkin agar dapat menjalankan kode tersebut sepenuh mungkin di Gugus Beta sebelum diterbitkan ke khalayak ramai. Jika Anda memiliki pertanyaan khusus tentang penggunaan Gugus Beta, Anda dapat mengirim surel ke daftar surel Quality Assurance atau bertanya di #wikimedia-releng connect pada IRC.
Kulit mengikuti proses yang sama (tetapi dalam repositori mediawiki/skins).
Setelah penerapan ke produksi
- Perbarui halaman
Extension:My ExtensionAnda di mediawiki.org dengan menambahkan templat{{OnWikimedia}}.
Lihat pula

- Proyek antrian tinjauan
- Requests for comment – tempat membahas tentang gagasan proyek besar untuk MediaWiki
- How to deploy code#Case 1d: new extension – rincian penerapan ekstensi baru di gugus Wikimedia
- Meminta perubahan konfigurasi wiki dan Batasan perubahan konfigurasi
Sumber acuan
- ↑ phab:T355150#9812817
- ↑ Lihat, contohnya, T260466#6530378.
- ↑ mailarchive:engineering/2018-March/000520.html