Cara Mengunggah Perangkat Lunak Anda ke Copr, Repositori Pengguna Fedora
Ini adalah panduan singkat tentang cara membuat dan mengelola repositori Copr untuk perangkat lunak Anda secara otomatis. Panduan ini mengasumsikan Anda sudah familiar dengan Git dan cara membuat paket RPM.
Dalam panduan ini, kita akan
-
buat paket RPM untuk sebuah program
-
buat repositori Copr dan publikasikan program ke dalamnya
-
mengatur pengelolaan otomatis versi program, rilis paket, dan catatan perubahan paket
-
mengatur pembentukan otomatis versi baru paket
Tujuan utama adalah memungkinkan Anda untuk menjaga perangkat lunak Anda tetap diperbarui di Copr tanpa perlu berinteraksi dengan apa pun selain repositori Git perangkat lunak Anda.
| Anda dapat mengatur otomatisasi serupa saat mengemas program orang lain, yaitu membangun dari berkas sumber tarball yang diunduh. Perubahan yang diperlukan dijelaskan di bagian akhir tutorial. |
Persyaratan
Berikut ini yang diperlukan:
-
Sumber program kita di repositori Git yang dapat diakses publik. Tutorial ini menggunakan program contoh sederhana - hellocopr - untuk menjelaskan prosesnya. Program dan semua berkas yang disebutkan dalam panduan ini dapat ditemukan di repositori Git proyek. Ini adalah program Python yang sangat sederhana (dan tidak berguna) dengan penginstal setuptools:
user@host ~/copr-tito-quickdoc % ls doc LICENSE README.md requirements.txt setup.py src user@host ~/copr-tito-quickdoc % ls src/hellocopr colors.py hellocopr.py __init__.py -
Sebuah akun Fedora (FAS) diperlukan untuk dapat membuat repositori di Copr. Repositori demo dalam tutorial ini dapat ditemukan di di sini.
-
Utilitas `tito` yang terpasang di sistem Anda. Tito mampu melakukan banyak otomatisasi canggih untuk pembuatan paket, sebagian besar di antaranya tidak akan kita butuhkan di sini. Lihat dokumentasinya untuk informasi lebih lanjut.
-
Sebuah specfile untuk program kita. Untuk informasi lebih lanjut tentang cara membuatnya, lihat Tutorial Pengemasan: GNU Hello atau sesuaikan tutorial contoh berlabel specfile.
Anda dapat mengikuti tutorial ini dengan cara mengkloning atau memfork repositori dan memeriksa tag initial. Hal ini akan membuat repositori berada dalam keadaan sebelum langkah berikutnya. Riwayat commit repositori sesuai dengan langkah-langkah yang diikuti dalam tutorial ini.
|
Langkah 1: Membuat paket menggunakan tito
Salin spec file ke direktori dasar proyek. Beberapa perubahan perlu dilakukan sebelum melanjutkan:
-
Nilai dari
Version:danRelease:tidak penting, karena nilai-nilai ini akan dikelola oleh tito. Disarankan untuk mengaturnya menjadiVersion: 0.0.0danRelease: 0%\{?dist}untuk menandakan bahwa paket ini belum dibangun. -
tito juga akan menangani pembuatan berkas tarball sumber dari repositori Git, jadi ubah URL
Source0:`menjadi nama berkas `%{name}-%{version}.tar.gz dan tambahkan komentar untuk memberitahu pengguna cara mendapatkan berkas tarball -
Catatan perubahan dapat dibiarkan kosong.
Simpan perubahan. Selanjutnya, kita menginisialisasi proyek untuk digunakan dengan tito. ``` user@host ~/copr-tito-quickdoc % tito init Creating tito metadata in: ~/copr-tito-quickdoc/.tito - created ~/copr-tito-quickdoc/.tito - wrote tito.props - created ~/copr-tito-quickdoc/.tito/packages - wrote ~/copr-tito-quickdoc/.tito/packages/.readme commit ke git selesai!``` Ini membuat link:https://pagure.io/copr-tito-quickdoc/c/7a6919d3dd56943bb988a755f8233157965aa9bb?branch=master[subdirektori `.tito` dengan konfigurasi default], yang dapat dibiarkan apa adanya untuk saat ini. Sekarang kita dapat melakukan build uji coba paket menggunakan _`tito build`_. Biasanya, tito akan melakukan build dari tag, yang belum kita buat. Namun, dengan menggunakan bendera `--test`, kita dapat melakukan build dari commit terbaru, yang akan disimpan di `/tmp/tito`: [source] ---- user@host ~/copr-tito-quickdoc % tito build --rpm --test Creating output directory: /tmp/tito WARNING: unable to lookup latest package tag, building untagged test project WARNING: .tito/packages/hellocopr doesn't exist in git, using current directory Building package [hellocopr-0.0.0-0] Wrote: /tmp/tito/hellocopr-git-11.7a6919d.tar.gz ... Sukses dibangun: /tmp/tito/hellocopr-0.0.0-0.git.11.7a6919d.fc32.src.rpm - /tmp/tito/noarch/hellocopr-0.0.0-0.git.11.7a6919d.fc32.noarch.rpm ---- Setelah kita memperbaiki masalah apa pun yang mungkin muncul pada paket, kita dapat meminta _tito_ untuk membuat rilis paket menggunakan perintah `tito tag`. Karena kita belum menetapkan versi yang tepat, kita perlu memberikan informasi tersebut kepada tito untuk tag pertama: [source] ---- user@host ~/copr-tito-quickdoc % tito tag --use-version 1.0.0 ---- Ini akan membuka editor dan menampilkan entri changelog yang sudah diformat sebelumnya, yang dibangun dari semua commit sejak rilis terakhir, yang dapat kita edit sesuai kebutuhan. Karena belum ada commit sebelumnya, entri tersebut hanya akan berisi “- paket baru dibangun dengan tito”. Simpan file, link:https://pagure.io/copr-tito-quickdoc/c/f44e81d695df669bcdb7237612baf41b80da98e0?branch=master[dan tito akan] . atur versi di spec file menjadi 1.0.0 . atur nilai Release di spec file menjadi 1 . tambahkan entri changelog ke bagian `%changelog` dalam spec file . commit hasilnya dan beri label dengan `<name>-<version>-<release>`, i.e. `hellocopr-1.0.0-1` + [source] ---- user@host ~/copr-tito-quickdoc % tito tag --use-version 1.0.0 Creating output directory: /tmp/tito Tagging new version of hellocopr: untagged -> 1.0.0-1 Created tag: hellocopr-1.0.0-1 View: git show HEAD Undo: tito tag -u Push: git push --follow-tags origin ---- Push ke commit dan tag ke repositori jarak jauh menggunakan perintah `git push --follow-tags`, dan kita siap untuk merilis paket di Copr. == Langkah 2: Menerbitkan paket di repositori Copr . Buka https://copr.fedorainfracloud.org/ dan masuk. Setelah selesai, klik _New Project_ untuk mulai membuat repositori untuk program kita. Pada formulir input berikut, .. Di bawah _1. Informasi proyek_ -> _Nama proyek_, atur nama sesuai dengan nama yang ingin Anda gunakan untuk repositori Anda. Karena repositori ini hanya akan berisi satu paket, disarankan untuk menggunakan projectname = packagename, misalnya _hellocopr_. Ini adalah satu-satunya pengaturan yang tidak dapat diubah nanti. .. Di bawah _2. Opsi Pembuatan_, centang semua distribusi yang ingin Anda buat repositori untuknya - biasanya semua versi Fedora dan mungkin juga versi EPEL .. Di bawah _4. Opsi Lainnya_, pastikan bahwa _Ikuti Cabang Fedora_ telah dicentang. Hal ini akan memastikan bahwa repositori Anda akan diperbarui secara otomatis untuk rilis Fedora baru. . Pergi ke _Paket_ -> _Paket Baru_ .. Di bawah _1. Sediakan sumber_, tentukan nama paket & URL repositori Git Anda .. Di bawah _2. Cara membuat SRPM dari sumber_, pilih _tito_ .. Di bawah _3. Pengaturan paket generik_, centang kotak untuk _Auto-rebuild_ . Paket Anda akan muncul dalam daftar paket. Klik _Rebuild_ untuk memicu proses build. Halaman berikut memungkinkan Anda mengubah opsi build jika diperlukan, namun kita akan menggunakan pengaturan default, yaitu opsi yang telah kita atur pada langkah sebelumnya. Klik _Submit_ dan Copr akan membangun paket dari tag tito yang kita buat pada Langkah 1. Setelah proses build selesai, Anda dapat menguji pemasangan paket dari Copr dengan mengaktifkan repositori Anda. [source] ---- user@host ~/copr-tito-quickdoc % sudo dnf copr enable <username>/hellocopr user@host ~/copr-tito-quickdoc % sudo dnf install hellocopr ---- == Langkah 3: Otomatisasi proses (re)-build paket Selanjutnya, kita ingin mengonfigurasi Copr agar secara otomatis membangun versi paket baru setiap kali kita membuatnya, sehingga kita tidak perlu lagi masuk dan memicu buildnya secara manual. Untuk mencapai hal ini, kita hanya perlu memicu buildnya setiap kali kita Push tag baru ke repositori. Hal ini memerlukan beberapa konfigurasi baik pada repositori Git Anda maupun pada proyek Copr. Konfigurasi dapat ditemukan di bawah _Pengaturan_ -> _Integrasi_, halaman tersebut juga menjelaskan langkah-langkah untuk mengonfigurasi repositori Git Anda untuk semua platform Git populer (Pagure, Github, Gitlab, dan Bitbucket). Sekarang, untuk menguji ini, mari kita lakukan beberapa perubahan pada program kita yang akan berguna untuk lapisan otomatisasi terakhir dan buat rilis baru untuk perangkat lunak kita. Saat ini, program contoh memiliki versi yang dikodekan secara statis di beberapa tempat. link:https://pagure.io/copr-tito-quickdoc/c/61abf1cdf622d8c9fb4f03eb6b06c4ddc1677362?branch=master[Mari kita ubah ini] sehingga string versi diambil dari satu file. File mana yang digunakan tidak masalah, tetapi idealnya variabel versi harus menjadi satu-satunya hal yang kemungkinan akan berubah di dalamnya. Dalam hal ini, kita menggunakan file yang sebelumnya kosong `src/hellocopr/pass:[__]initpass:[__].py`. Kita menamai versi baru ini ‘1.0.1’. Simpan perubahan, dan buat rilis baru dengan tito [source] ---- user@host ~/copr-tito-quickdoc % tito tag Creating output directory: /tmp/tito Tagging new version of hellocopr: 1.0.0-1 -> 1.0.1-1 Created tag: hellocopr-1.0.1-1 View: git show HEAD Undo: tito tag -u Push: git push --follow-tags origin ---- Perhatikan bahwa dengan menghilangkan opsi `--use-version`, tito sekarang memperbarui versi secara otomatis. Hal ini dilakukan dengan . Menambah angka terakhir pada versi dengan 1 - `1.0.0` -> `1.0.1` . Mengatur ulang Release menjadi 1 jika belum diatur. Jika Anda ingin beralih ke versi yang berbeda, misalnya `1.1.0`, Anda dapat melakukannya lagi dengan menggunakan opsi `--use-version`. Push commit dan tag yang dihasilkan, dan jika Anda sekarang memeriksa halaman proyek Anda di Copr, Anda akan melihat bahwa build baru dari `hellocopr-1.0.1-1` telah dipicu oleh penambahan tag yang kita lakukan. == Langkah 4: Biarkan Tito mengelola versi program Jika Anda memeriksa riwayat Git, Anda akan menemukan bahwa saya sebenarnya lupa memperbarui variabel versi hellocopr menjadi 1.0.1. Kami tidak ingin hal itu terjadi lagi. Beruntungnya, karena kita menggunakan sumber tunggal untuk versi, kita dapat membiarkan tito secara otomatis menghasilkan berkas ini dari templat. Pertama, salin berkas sumber versi `src/hellocopr/pass:[__]initpass:[__].py` ke `.tito/templates/pass:[__]initpass:[__].py.template`. Kemudian, buka berkas templat dan ganti string versi dengan `$version`. Juga disarankan untuk menambahkan catatan bahwa berkas ini dikelola oleh tito dan tidak boleh diedit secara manual. [source] ---- user@host ~/copr-tito-quickdoc % cat .tito/templates/__init__.py.template ... # This file is automatically created from a template by tito. Do not edit it manually. __version__ = '$version' ---- Selanjutnya, tambahkan yang berikut ini ke `.tito/tito.props` [source] ---- [version_template] destination_file = src/hellocopr/__init__.py template_file = .tito/templates/__init__.py.template ---- https://pagure.io/copr-tito-quickdoc/c/28600f6e41d5a4b60f2e47cf077f2fe2d9224e1d?branch=master[Commit perubahan]. Sekarang, saat kita menandai rilis baru, tito akan mengambil templat, mengganti `$version` dengan versi yang ditandai, dan menyalin file hasilnya ke `src/hellocopr/pass:[__]initpass:[__].py` sebelum memperbarui spec file dan melakukan commit perubahan. Kita dapat menguji ini dengan menandai rilis baru: [source] ---- user@host ~/copr-tito-quickdoc % % tito tag Creating output directory: /tmp/tito Tagging new version of hellocopr: 1.0.1-1 -> 1.0.2-1 Created tag: hellocopr-1.0.2-1 View: git show HEAD Undo: tito tag -u Push: git push --follow-tags origin user@host ~/copr-tito-quickdoc % cat src/hellocopr/__init__.py ... # This file is automatically created from a template by tito. Do not edit it manually. __version__ = '1.0.2' ---- Jika Anda kembali Push tag ke repositori jarak jauh, Copr akan secara otomatis memicu proses rebuild kembali. == Prosedur pelepasan secara singkat Mulai sekarang, memperbarui perangkat lunak Anda di repositori Copr semudah . Simpan semua perubahan untuk versi baru Anda. . Lakukan build uji menggunakan `tito build --test` . Tag the release with `tito tag` (add `--use-version` if necessary) . Pindahkan tag ke repositori Git Anda menggunakan perintah `git push --follow-tags` dan Copr akan menangani sisanya. == Pengemasan dari berkas tarball sumber Anda dapat menggunakan proses serupa untuk mengelola perangkat lunak milik orang lain di Copr, yaitu membangun dari berkas tarball yang diunduh dari hulu. Untuk melakukannya, perubahan-perubahan berikut perlu dilakukan pada prosedur yang dijelaskan di atas: . Alih-alih menggunakan sumber yang belum dikompres, unduh dan simpan berkas tarball sumber yang ingin Anda kemas ke repositori Anda . Alih-alih memodifikasi sumber secara langsung, tambahkan perubahan yang diperlukan dalam bentuk berkas patch. Daftar berkas-berkas ini sebagai `PatchX:` dalam spec file . Di spec file, atur kembali `Version:` ke versi program saat ini dan `Source0:` ke URL tarball. Anda dapat menggunakan makro seperti `%\{version}` untuk yang terakhir agar secara otomatis mengikuti perubahan versi. . Ubah berkas `.tito/tito.props` milik Tito menjadi: pertama, jangan mencoba membangun berkas tarball sumber, dan kedua, tingkatkan nilai `Release:` alih-alih `Version:` saat menandai + [source] ---- [buildconfig] builder = tito.builder.NoTgzBuilder tagger = tito.tagger.ReleaseTagger ---- . Jangan melakukan templating tito Prosedur sisanya tetap sama. Jika Anda melakukan perubahan pada paket tanpa mengubah sumbernya, Anda dapat langsung menandai rilis baru dengan tito. Jika Anda memperbarui berkas tarball sumber, Anda perlu memperbarui bidang `Version:` dan mengatur ulang `Release:` menjadi `0%\{?dist}` sebelum menandai. TIP: Versi proyek yang telah diadaptasi untuk tarball dapat ditemukan di cabang `https://pagure.io/copr-tito-quickdoc/tree/foreign-sources[foreign-sources]` repositori Git.
Want to help? Learn how to contribute to Fedora Docs ›