Jika Anda memiliki atau memelihara repo GitHub dan pernah mendorong paket darinya ke PyPI dan/atau Fedora, Anda tahu itu memerlukan beberapa pekerjaan tambahan menggunakan infrastruktur Fedora.
Kabar baik:Kami telah mengembangkan alat bernama release-bot yang mengotomatiskan proses. Yang perlu Anda lakukan adalah mengajukan masalah ke repositori upstream Anda dan release-bot menangani sisanya. Tapi mari kita tidak mendahului diri kita sendiri. Pertama, mari kita lihat apa yang perlu disiapkan agar otomatisasi ini terjadi. Saya telah memilih meta-test-family repositori hulu sebagai contoh.
File konfigurasi untuk rilis-bot
Ada dua file konfigurasi untuk release-bot:conf.yaml dan release-conf.yaml .
conf.yaml
conf.yaml harus dapat diakses selama inisialisasi bot; itu menentukan cara mengakses repositori GitHub. Untuk menunjukkan itu, saya telah membuat repositori git baru bernama mtf-release-bot , yang berisi conf.yaml dan file rahasia lainnya.
nama_repositori:nama
pemilik_repositori:pemilik
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token:xxxxxxxxxxxxxxxxxxxxxxxxx
# waktu dalam detik selama pemeriksaan untuk rilis baru
refresh_interval:180
Untuk kasus meta-test-family, file konfigurasi terlihat seperti ini:
repository_name:meta-test-family
repository_owner:fedora-modularity
github_token:xxxxxxxxxxxxxxxxxxxxx
refresh_interval:180
release-conf.yaml
release-conf.yaml harus disimpan dalam repositori itu sendiri; itu menentukan bagaimana melakukan rilis GitHub/PyPI/Fedora.
# daftar versi python utama yang bot akan membuat roda terpisah untuk
python_versions:
- 2
- 3
# opsional:
changelog:
- Contoh entri changelog
- Entri changelog lain
# ini adalah info untuk pembuatan changelog
# jika ini tidak disetel, orang yang menggabungkan PR rilis akan digunakan sebagai penulis
author_name:John Doe
author_email:[email protected]
# apakah akan dirilis di fedora. False secara default
fedora:false
# daftar bot cabang fedora harus dirilis. Guru selalu tersirat
fedora_branches:
- f27
Untuk kasus meta-test-family, file konfigurasi terlihat seperti ini:
python_versions:
- 2
fedora:true
fedora_branches:
- f29
- f28
trigger_on_issue:true
File konfigurasi PyPI
Berkas .pypirc , disimpan di mtf-release-bot . Anda repositori pribadi, diperlukan untuk mengunggah versi paket baru ke PyPI:
[pypi]
nama pengguna =phracek
sandi =xxxxxxxxx
Kunci SSH pribadi, id_rsa , yang Anda konfigurasikan di FAS.
Struktur akhir dari repositori git, dengan conf.yaml dan yang lainnya, tampilannya seperti ini:
$ ls -la
total 24
drwxrwxr-x 3 phracek phracek 4096 24 Sep 12:38 .
drwxrwxr-x. 20 phracek phracek 4096 24 Sep 12:37 ..
-rw-rw-r-- 1 phracek phracek 199 24 Sep 12:26 conf.yaml
drwxrwxr-x 8 phracek phracek 4096 24 Sep 12:38 .git
-rw-rw-r-- 1 phracek phracek 3243 24 Sep 12:38 id_rsa
-rw------- 1 phracek phracek 78 24 Sep 12:28 .pypircPersyaratan
Lebih Banyak Sumber Daya Python
- Apa itu IDE?
- Lembar cheat:Python 3.7 untuk pemula
- Kerangka kerja GUI Python teratas
- Unduh:7 pustaka PyPI penting
- Pengembang Topi Merah
- Konten Python terbaru
Merilis ke PyPI memerlukan paket wheel untuk Python 2 dan Python 3, jadi instal requirements.txt dengan kedua versi pip. Anda juga harus menyiapkan detail login PyPI Anda di $HOME/.pypirc , seperti yang dijelaskan dalam dokumentasi PyPI. Jika Anda merilis ke Fedora, Anda harus memiliki tiket Kerberos aktif saat bot berjalan, atau tentukan jalur ke file tab kunci Kerberos dengan -k/–keytab
. Juga, fedpkg mengharuskan Anda memiliki kunci SSH di gantungan kunci yang Anda unggah ke FAS.
Cara menerapkan rilis-bot
Ada dua cara untuk menggunakan release-bot:sebagai image Docker atau sebagai template OpenShift.
Gambar buruh pelabuhan
Mari buat gambar menggunakan s2i
perintah:
$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name
di mana $CONFIGURATION_REPOSITORY_URL
adalah referensi ke repositori GitHub, seperti https://
Mari kita lihat gambar Docker:
$ gambar docker
repositori ID gambar ID yang dibuat ukuran
mtf-rilis-bot Latest 08897871E65E 6 menit yang lalu 705 MB
docker.io/usercont/release-bot Terbaru 5B34AA670639 9 hari yang lalu 705 MB
Sekarang mari kita coba menjalankan mtf-release-bot gambar dengan perintah ini:
$ docker run mtf-release-bot
---> Menyiapkan kunci ssh...
Agent pid 12
Identitas ditambahkan:./.ssh/id_rsa (./. ssh/id_rsa)
12:21:18.982 configuration.py DEBUG Konfigurasi yang dimuat untuk fedora-modularity/meta-test-family
12:21:18.982 releasebot.py INFO release-bot v0.4.1 pelaporan untuk duty!
12:21:18.982 github.py DEBUG Mengambil release-conf.yaml
12:21:37.611 releasebot.py DEBUG Tidak ditemukan PR rilis gabungan
12:21:38.282 releasebot. py INFO Menemukan masalah rilis baru dengan versi:0.8.5
12:21:42.565 releasebot.py DEBUG Tidak ada lagi masalah terbuka yang ditemukan
12:21:43.190 releasebot.py INFO Membuat PR baru untuk rilis versi 0.8.5 berdasarkan masalah.
12:21:46.709 utils.py DEBUG ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family. git', '.']
12:21:47.401 github.py DEBUG {"message":"Cabang tidak ditemukan","documentation_url":"https://developer.github.com/ v3/repos/cabang hes/#get-branch"}
12:21:47.994 utils.py DEBUG ['git', 'config', 'user.email', '[email protected]']
12:21:47.996 utils.py DEBUG ['git', 'config', 'user.name', 'Release bot']
12:21:48.009 utils. py DEBUG ['git', 'checkout', '-b', '0.8.5-release']
12:21:48.014 utils.py ERROR File versi tidak ditemukan. Membatalkan pembaruan versi.
12:21:48.014 utils.py PERINGATAN Tidak ada CHANGELOG.md dalam repositori
[Errno 2] Tidak ada file atau direktori seperti itu:'/tmp/tmpmbvb05jq/CHANGELOG.md'
12:21:48.020 utils.py DEBUG ['git', 'commit', '--allow-empty', '-m', '0.8.5 release']
[0.8.5-release 7ee62c6] 0.8.5 rilis
12:21:51.342 utils.py DEBUG ['git', 'push', 'origin', '0.8.5-release']
12:21:51.905 github.py DEBUG Tidak ditemukan PR terbuka
12:21:51.905 github.py DEBUG Mencoba PR untuk cabang rilis 0.8.5
12:21:53.215 github.py INFO Membuat PR:https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py INFO Saya baru saja membuat permintaan PR untuk rilis versi 0.8. 5
12:21:54.154 github.py DEBUG Komentar ditambahkan ke PR:Saya baru saja membuat permintaan PR untuk rilis versi 0.8.5
Berikut adalah [link ke PR](https://github .com/fedora-modularity/meta-test-family/pull/2 43)
12:21:54.154 github.py DEBUG Mencoba menutup masalah #242
12:21:54.992 github.py DEBUG Menutup masalah #242
Seperti yang Anda lihat, release-bot secara otomatis menutup masalah berikut, meminta rilis upstream baru dari meta-test-family:https://github.com/fedora-modularity/meta-test-family/issues/243.
Selain itu, release-bot membuat PR baru dengan changelog. Anda dapat memperbarui PR—misalnya, squash changelog—dan setelah Anda menggabungkannya, PR akan dirilis secara otomatis ke GitHub, dan PyPI serta Fedora akan dimulai.
Anda sekarang memiliki solusi yang berfungsi untuk merilis versi upstream paket Anda ke PyPi dan Fedora dengan mudah.
Template OpenShift
Opsi lain untuk mengirimkan rilis otomatis menggunakan release-bot adalah dengan menerapkannya di OpenShift.
Template OpenShift terlihat sebagai berikut:
kind:Template
apiVersion:v1
metadata:
name:release-bot
annotations:
description:S2I Relase-bot image builder
tags:release-bot s2i
iconClass:icon-python
labels:
template:release-bot
peran:releasebot_application_builder
objects:
- kind :ImageStream
apiVersion :v1
metadata :
name :${APP_NAME}
labels :
appid :release-bot-${APP_NAME}
- kind :ImageStream
apiVersion :v1
metadata :
name :${APP_NAME}-s2i
labels :
appid :release-bot-${APP_NAME}
spec :
tags :
- name :recent
from :
kind :DockerImage
name :usercont/release-bot:latest
# scheduled:true
- kind :BuildConfig
apiVersion :v1
metadata :
name :${APP_NAME}
labels :
appid :release-bot-${APP_NAME}
spec :
triggers :
- type :ConfigChange
- type :ImageChange
source :
type :Git
git :
uri :${CONFIGURATION_REPOSITORY}
contextDir :${CONFIGURATION_REPOSITORY }
-secret
strategi :
type :Source
sourceStrategy :
from :
kind :ImageStreamTag
{ _nama} /> output :
to :
kind :ImageStreamTag
name :${APP_NAME}:latest
- kind :DeploymentConfig
apiVersion
name:${APP_NAME}
labels :
appid :release-bot-${APP_NAME}
spec :
strategi :
type :Rolling
pemicu :
- type :ConfigC Hange
- Tipe:ImageChange
Imagechangeparams:
Otomatis:Benar
Conesername:
- $ {app_name}
Dari:
Kind:ImageStreamtag
name :${APP_NAME}:latest
replicas :1
selector :
deploymentconfig :${APP_NAME}
template :
> labels :
appid:release-bot-${APP_NAME}
deploymentconfig :${APP_NAME}
spec :
name _
gambar :${APP_NAME}:latest
sumber daya:
permintaan:
memori:"64 Mi" /> memory:"128Mi"
cpu:"100m"
parameter :
- name :APP_NAME
description :Nama ap plication
nilai :
diperlukan :true
- nama :CONFIGURATION_REPOSITORY
description :Repositori Git dengan konfigurasi
nilai :
diperlukan :true
Cara termudah untuk menerapkan mtf-release-bot repositori dengan file rahasia ke dalam OpenShift adalah dengan menggunakan dua perintah berikut:
$ curl -sLO https://github.com/user-cont/release-bot/raw/master/openshift-template.yml
Dalam instance OpenShift Anda, terapkan template dengan menjalankan perintah berikut:
oc process -p APP_NAME="mtf-release-bot" -p CONFIGURATION_REPOSITORY="git@<git_lab_path>/mtf-release-conf.git" -f openshift-template.yml | oc apply
Ringkasan
Lihat contoh permintaan tarik di repositori upstream meta-test-family, di mana Anda akan menemukan informasi tentang rilis-bot apa yang dirilis. Setelah Anda mencapai titik ini, Anda dapat melihat bahwa release-bot mampu mendorong versi upstream baru ke GitHub, PyPI, dan Fedora tanpa campur tangan pengguna yang berat. Ini mengotomatiskan semua langkah sehingga Anda tidak perlu mengunggah dan membuat versi upstream baru dari paket Anda secara manual.