Направите Python wheel изван мреже и објавите га унутра
Направите wheel тамо где изворни код већ јесте, па пренесите баш тај фајл интерном објављивачу. Диџести и потврда затварају примопредају.
Већ имате посао билда који прави wheel и приватни репозиторијум који би требало да га прими. Грешка је пустити други посао да поново направи билд са гране и назвати резултат истим издањем. Пренесите фајл који је тестиран, назовите га по диџесту и сачувајте креденцијал за отпремање на унутрашњој страни. Водич испод прати један артефакт од јавног CI runner-а до интерног објављивача.
Градите тамо где изворни код већ живи
Покрените билд у послу који већ има изворни код, алатни ланац и скуп тестова. Ништа код приватног репозиторијума не захтева да тај посао до њега допре. Инсталирајте build frontend у окружење које пројекат већ користи, па произведите оба формата дистрибуције ако пројекат испоручује оба.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Држите излазни директоријум малим и за једнократну употребу. Једино што вреди пренети даље јесу фајлови које ће следећи посао објавити, плус њихови хешеви. Све остало, укључујући виртуелна окружења и кешеве, може се поново направити из забележене ревизије извора. Витак артефакт је и лакше прегледати, јер је сваки фајл у њему фајл који неко може прегледати.
Забележите шта их је произвело: име пакета и верзију из имена фајлова, ревизију извора и покретање workflow-а које их је направило. Сам низ верзије не идентификује фајл, јер иста верзија може бити направљена двапут из различитих commit-ова. Упишите ревизију поред имена фајлова у опису артефакта и третирајте тај запис као део примопредаје.
Преносите бајтове, не упутства за поновни билд
Други билд је други производ. Временске ознаке, укључене зависности и верзије алата могу променити бајтове, па поновни билд тражи сопствене доказе из тестова и сопствени преглед. Уместо тога промовишите прегледане фајлове.
Отпремите фајлове дистрибуције у складиште артефаката које пружа ваша CI платформа и дајте интерном послу референцу на тај конкретни артефакт, а не име гране.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Ако ваша платформа подржава потписано порекло, тражите од ње да овери артефакт, а касније проверите очекивани репозиторијум, workflow и ревизију извора. GitHub документација о атестацијама описује тврдње тог облика. Важећи потпис је доказ о пореклу, а не скенирање рањивости и не одлука о ауторизацији.
Проверите унутра пре отпремања
Интерни посао почиње провером да је фајл који је примио управо фајл који је одобрен. Упоредите диџестове са записом из билд посла, а не са вредношћу прерачунатом из онога што је стигло.
sha256sum -c digests.txt
python -m twine check dist/*
Затим прочитајте метаподатке. Име пакета, верзија и декларисане зависности треба да се поклопе са прегледом који сте одобрили. Wheel чије име изгледа исправно али чија су причвршћивања зависности промењена је други пакет са истом етикетом. Ако су се метаподаци померили, третирајте артефакт као неодобрен и откријте који га је билд произвео.
Ако се диџестови не поклапају, зауставите се. Не отпремајте и не поправљајте фајл поновним билдом на лицу места; то брише доказ да се нешто променило на путу. Несклад значи да су складиште артефаката, корак преузимања или запис погрешни, и свако од тога заслужује објашњење пре него што издање буде објављено.
Обрадите одговор о дупликату верзије
Приватни репозиторијуми обично одбијају да препишу постојећу верзију, и то одбијање је одлика. Када отпремање не успе јер верзија постоји, прегледајте запис репозиторијума за ту верзију и упоредите фајлове које држи са диџестовима које сте намеравали да објавите.
Постојећа верзија може да значи да је раније отпремање успело и да се одговор изгубио, или да је неко објавио другачији садржај под истим бројем.
Не бришите верзију и не измишљајте нови број да бисте заобишли грешку. Одлучите са власником издања да ли је сачувани садржај прихватљив, па забележите исход. Ако се садржај разликује, имате проблем са верзионисањем, а не проблем са pipeline-ом.
Држите креденцијал за отпремање на једној страни
Само интерном објављивачу требају креденцијали репозиторијума, и то само док траје отпремање. Ограничите токен на циљни репозиторијум и на операције отпремања, држите га у складишту тајни интерног система и оставите га потпуно изван билд посла. Ако билд посао може да објављује, онда свако ко може да промени билд може и да објављује.
Ограничите и то који интерни workflow-и смеју да покрену објављивача. Ручни окидач са обавезним одобрењем је разуман подразумевани избор за издања; push на било коју грану није.
Завршено издање треба да остави три ствари: фајлове дистрибуције, њихове диџестове са ревизијом извора и запис репозиторијума који показује исту верзију.