Anda sudah mempunyai kerja build yang menghasilkan wheel, dan repositori peribadi yang sepatutnya menerimanya. Kesilapannya ialah membenarkan kerja kedua membina semula daripada cawangan dan memanggil hasilnya keluaran yang sama. Pindahkan fail yang telah diuji, namakannya mengikut digest, dan simpan kelayakan muat naik di dalam. Panduan di bawah mengikuti satu artifak daripada pelari CI awam hingga ke penerbit dalaman.

Bina di tempat kod sumber sudah ada

Jalankan build dalam kerja yang sudah mempunyai kod sumber, rantaian alat dan suite ujian. Tiada apa-apa tentang repositori peribadi yang mewajibkan kerja itu mencapainya. Pasang frontend build dalam persekitaran yang sudah digunakan projek, kemudian hasilkan kedua-dua format pengedaran jika projek menghantar kedua-duanya.

python -m build --sdist --wheel --outdir dist
python -m twine check dist/*

Kekalkan direktori output kecil dan sekali guna. Satu-satunya yang berbaloi dibawa ke hadapan ialah fail yang akan diterbitkan oleh kerja seterusnya, bersama hashnya. Semua yang lain, termasuk persekitaran maya dan cache, boleh dibina semula daripada semakan kod sumber yang direkodkan. Artifak yang langsing juga lebih mudah disemak, kerana setiap fail di dalamnya ialah fail yang boleh diperiksa oleh seseorang.

Rekodkan apa yang menghasilkannya: nama dan versi pakej daripada nama fail, semakan kod sumber, dan pelaksanaan aliran kerja yang menciptanya. Rentetan versi sahaja tidak mengenal pasti fail, kerana versi yang sama boleh dibina dua kali daripada commit yang berbeza. Tulis semakan di sebelah nama fail dalam penerangan artifak, dan anggap rekod itu sebahagian daripada penyerahan.

Pindahkan bait, bukan arahan untuk membina semula

Build kedua ialah produk kedua. Cap masa, kebergantungan yang digabungkan dan versi alat semuanya boleh mengubah bait, jadi pembinaan semula memerlukan bukti ujian dan semakan tersendiri. Naikkan fail yang telah disemak sebagai gantinya.

Muat naik fail pengedaran ke stor artifak yang disediakan platform CI anda, dan berikan kerja dalaman rujukan kepada artifak khusus itu, bukan nama cawangan.

sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description

Jika platform anda menyokong asal usul bertandatangan, minta ia mengesahkan artifak dan kemudiannya mengesahkan repositori, aliran kerja dan semakan kod sumber yang dijangka. Dokumentasi pengesahan GitHub menerangkan dakwaan bentuk itu. Tandatangan yang sah ialah bukti asal usul, bukan pengimbasan kerentanan dan bukan keputusan kebenaran.

Sahkan di dalam sebelum memuat naik

Kerja dalaman bermula dengan memeriksa bahawa fail yang diterima ialah fail yang diluluskan. Bandingkan digest dengan rekod daripada kerja build, bukan dengan nilai yang dikira semula daripada apa sahaja yang tiba.

sha256sum -c digests.txt
python -m twine check dist/*

Kemudian baca metadata. Nama pakej, versi dan kebergantungan yang diisytiharkan sepatutnya sepadan dengan semakan yang anda luluskan. Wheel yang namanya kelihatan betul tetapi pin kebergantungannya berubah ialah pakej lain yang memakai label sama. Jika metadata telah berganjak, anggap artifak itu tidak diluluskan dan cari build mana yang menghasilkannya.

Jika digest tidak sepadan, berhenti. Jangan muat naik, dan jangan baiki fail dengan membinanya semula di tempat; itu memadam bukti bahawa sesuatu berubah semasa dalam perjalanan. Ketidakpadanan bermakna stor artifak, langkah muat turun atau rekod itu salah, dan setiap satunya wajar penjelasan sebelum keluaran diterbitkan.

Tangani jawapan versi pendua

Repositori peribadi biasanya enggan menimpa versi yang sudah ada, dan keengganan itu ialah ciri. Apabila muat naik gagal kerana versi itu wujud, periksa rekod repositori untuk versi tersebut dan bandingkan fail yang disimpannya dengan digest yang anda niatkan untuk diterbitkan.

Versi yang sedia ada boleh bermaksud muat naik terdahulu berjaya dan responsnya hilang, atau seseorang telah menerbitkan kandungan berbeza di bawah nombor yang sama.

Jangan padam versi itu, dan jangan reka nombor baharu untuk melepasi ralat. Putuskan bersama pemilik keluaran sama ada kandungan tersimpan itu boleh diterima, kemudian rekod hasilnya. Jika kandungannya berbeza, anda mempunyai masalah versi, bukan masalah saluran paip.

Simpan kelayakan muat naik di satu sisi

Hanya penerbit dalaman memerlukan kelayakan repositori, dan hanya selama muat naik berlangsung. Hadkan token kepada repositori sasaran dan kepada operasi muat naik, simpan dalam stor rahsia sistem dalaman, dan jauhkan sepenuhnya daripada kerja build. Jika kerja build boleh menerbitkan, maka sesiapa yang boleh mengubah build boleh menerbitkan.

Hadkan juga aliran kerja dalaman mana yang boleh memulakan penerbit. Pencetus manual dengan kelulusan wajib ialah lalai yang munasabah untuk keluaran; push ke mana-mana cawangan bukan.

Keluaran yang siap sepatutnya meninggalkan tiga perkara: fail pengedaran, digestnya bersama semakan kod sumber, dan rekod repositori yang menunjukkan versi yang sama.

Artikel berkaitan