Python wheel-i şəbəkədən kənarda qur, içəridə yayımla
Wheel-i mənbənin artıq olduğu yerdə qur, sonra həmin faylı olduğu kimi daxili yayımlayıcıya köçür. Digest-lər və qəbz təhvili tamamlayır.
Artıq wheel istehsal edən bir build işiniz və onu qəbul etməli olan şəxsi repozitoriyanız var. Səhv odur ki, ikinci iş branch-dən yenidən build etsin və nəticəni eyni buraxılış adlandırsın. Sınaqdan keçmiş faylı köçürün, onu digest ilə adlandırın və yükləmə etimadnaməsini içəridə saxlayın. Aşağıdakı icmal bir artefaktı açıq CI runner-dən daxili yayımlayıcıya qədər izləyir.
Mənbənin artıq olduğu yerdə qur
Build-i artıq mənbəyə, alət zəncirinə və test dəstinə sahib olan işdə icra edin. Şəxsi repozitoriya ilə bağlı heç nə həmin işin ona çatmasını tələb etmir. Build frontend-i layihənin artıq istifadə etdiyi mühitə quraşdırın, sonra layihə hər iki formatı göndərirsə hər iki paylama formatını istehsal edin.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Çıxış qovluğunu kiçik və birdəfəlik saxlayın. İrəli daşımağa dəyər yeganə şey növbəti işin yayımlayacağı fayllar və onların heşləridir. Qalan hər şey, o cümlədən virtual mühitlər və keşlər, qeydə alınmış mənbə revizyonundan yenidən qurula bilər. Yığcam artefaktın nəzərdən keçirilməsi də asandır, çünki içindəki hər fayl kimsənin yoxlaya biləcəyi fayldır.
Onları nəyin istehsal etdiyini qeyd edin: fayl adlarından paket adı və versiya, mənbə revizyonu və onları yaradan workflow run. Tək versiya sətri faylı identifikasiya etmir, çünki eyni versiya iki fərqli commit-dən iki dəfə build edilə bilər. Revizyonu artefakt təsvirində fayl adlarının yanına yazın və bu qeydi təhvilin bir hissəsi sayın.
Baytları köçürün, yenidən qurma təlimatlarını yox
İkinci build ikinci məhsuldur. Zaman damğaları, paketə daxil edilmiş asılılıqlar və alət versiyaları baytları dəyişə bilər, ona görə yenidən qurma öz test sübutuna və öz nəzərdən keçirilməsinə ehtiyac duyur. Əvəzində nəzərdən keçirilmiş faylları irəli çəkin.
Paylama fayllarını CI platformanızın təqdim etdiyi artefakt anbarına yükləyin və daxili işə branch adı yerinə məhz həmin artefakta istinad verin.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Platformanız imzalanmış mənşəyi dəstəkləyirsə, ondan artefaktı təsdiqləməsini və sonra gözlənilən repozitoriyanı, workflow-u və mənbə revizyonunu yoxlamasını istəyin. GitHub-ın attestasiya sənədləri bu formada iddiaları təsvir edir. Etibarlı imza mənşə sübutudur, zəiflik skanı deyil və avtorizasiya qərarı da deyil.
Yükləməzdən əvvəl içəridə yoxlayın
Daxili iş aldığı faylın təsdiqlənmiş fayl olduğunu yoxlamaqla başlayır. Digest-ləri build işinin qeydi ilə müqayisə edin, gələn hər şeydən yenidən hesablanmış dəyərlə yox.
sha256sum -c digests.txt
python -m twine check dist/*
Sonra metadatanı oxuyun. Paket adı, versiya və elan edilmiş asılılıqlar təsdiqlədiyiniz nəzərdən keçirməyə uyğun olmalıdır. Adı düzgün görünən, lakin asılılıq pin-ləri dəyişmiş wheel eyni etiketi geyinən başqa paketdir. Metadata dəyişibsə, artefaktı təsdiqlənməmiş sayın və hansı build-in onu istehsal etdiyini tapın.
Digest-lər uyğun gəlmirsə, dayanın. Yükləməyin və faylı yerində yenidən qurmaqla bərpa etməyin; bu, tranzitdə nəyinsə dəyişdiyinə dair sübutu silir. Uyğunsuzluq artefakt anbarının, endirmə mərhələsinin və ya qeydin səhv olduğunu bildirir və hər biri buraxılış yayımlanmazdan əvvəl izahat tələb edir.
Təkrar versiya cavabını idarə edin
Şəxsi repozitoriyalar adətən mövcud versiyanın üzərinə yazmaqdan imtina edir və bu imtina bir xüsusiyyətdir. Versiya mövcud olduğu üçün yükləmə uğursuz olarsa, repozitoriyanın həmin versiya üzrə qeydini yoxlayın və saxladığı faylları yayımlamaq istədiyiniz digest-lərlə müqayisə edin.
Mövcud versiya əvvəlki yükləmənin uğurla bitdiyini və cavabın itdiyini göstərə bilər, ya da kiminsə eyni nömrə altında fərqli məzmun yayımladığını.
Versiyanı silməyin və xətanı keçmək üçün yeni nömrə uydurmayın. Saxlanılan məzmunun məqbul olub-olmadığına buraxılış sahibi ilə birlikdə qərar verin, sonra nəticəni qeyd edin. Məzmun fərqlidirsə, bu versiyalama problemidir, pipeline problemi deyil.
Yükləmə etimadnaməsini bir tərəfdə saxlayın
Repozitoriya etimadnamələri yalnız daxili yayımlayıcıya lazımdır və yalnız yükləmə müddəti üçün. Token-i hədəf repozitoriya və yükləmə əməliyyatları ilə məhdudlaşdırın, daxili sistemin sirr anbarında saxlayın və build işindən tamamilə kənarda tutun. Əgər build işi yayımlaya bilirsə, build-i dəyişə bilən hər kəs yayımlaya bilər.
Hansı daxili workflow-ların yayımlayıcını işə sala biləcəyini də məhdudlaşdırın. Tələb olunan təsdiqi olan əl ilə tetikleyici buraxılışlar üçün məqbul standartdır; hər hansı branch-ə push isə deyil.
Bitmiş buraxılış arxasında üç şey qoymalıdır: paylama faylları, onların digest-ləri ilə mənbə revizyonu, və eyni versiyanı göstərən repozitoriya qeydi.