Izgradite Python wheel izvan mreže, objavite ga unutra
Izgradite wheel tamo gdje izvorni kod već jest, zatim prenesite upravo tu datoteku unutarnjem izdavaču. Dijestovi i potvrda zatvaraju primopredaju.
Već imate posao izgradnje koji proizvodi wheel i privatni repozitorij koji bi ga trebao primiti. Pogreška je pustiti drugi posao da ponovno izgradi s grane i nazove rezultat istim izdanjem. Prenesite datoteku koja je testirana, nazovite je po dijestu i zadržite vjerodajnicu za prijenos unutra. Opis u nastavku prati jedan artefakt od javnog CI runnera do unutarnjeg izdavača.
Gradite tamo gdje izvorni kod već jest
Pokrenite izgradnju u poslu koji već ima izvorni kod, alatni lanac i skup testova. Ništa u privatnom repozitoriju ne zahtijeva da taj posao do njega dođe. Instalirajte frontend izgradnje u okruženje koje projekt već rabi, zatim proizvedite oba formata distribucije ako projekt isporučuje oba.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Držite izlazni direktorij malim i za jednokratnu upotrebu. Jedino što je vrijedno prenijeti su datoteke koje će sljedeći posao objaviti, plus njihovi hashevi. Sve ostalo, uključujući virtualna okruženja i predmemorije, može se ponovno izgraditi iz zabilježene revizije izvornog koda. Vitak artefakt lakše je i pregledati, jer je svaka datoteka u njemu datoteka koju netko može pregledati.
Zabilježite što ih je proizvelo: naziv paketa i verziju iz naziva datoteka, reviziju izvornog koda i izvršavanje radnog toka koje ih je stvorilo. Sam niz verzije ne identificira datoteku, jer se ista verzija može dvaput izgraditi iz različitih commitova. Upišite reviziju uz nazive datoteka u opisu artefakta i tretirajte taj zapis kao dio primopredaje.
Prenosite bajtove, ne upute za ponovnu izgradnju
Druga izgradnja je drugi proizvod. Vremenske oznake, ugrađene ovisnosti i verzije alata mogu promijeniti bajtove, pa ponovna izgradnja treba vlastite dokaze testiranja i vlastiti pregled. Promovirajte umjesto toga pregledane datoteke.
Prenesite datoteke distribucije u spremište artefakata koje pruža vaša CI platforma i dajte unutarnjem poslu referencu na taj konkretni artefakt, a ne na naziv grane.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Ako vaša platforma podržava potpisano podrijetlo, zamolite je da atestira artefakt i kasnije provjeri očekivani repozitorij, radni tok i reviziju izvornog koda. GitHubova dokumentacija o atestacijama opisuje tvrdnje tog oblika. Valjani potpis dokaz je podrijetla, nije skeniranje ranjivosti i nije odluka o autorizaciji.
Provjerite iznutra prije prijenosa
Unutarnji posao počinje provjerom da je datoteka koju je primio upravo datoteka koja je odobrena. Usporedite dijestove sa zapisom iz posla izgradnje, a ne s vrijednošću ponovno izračunatom iz onoga što je stiglo.
sha256sum -c digests.txt
python -m twine check dist/*
Zatim pročitajte metapodatke. Naziv paketa, verzija i deklarirane ovisnosti trebaju odgovarati pregledu koji ste odobrili. Wheel čiji naziv izgleda ispravno, ali su pinovi ovisnosti promijenjeni, drugi je paket s istom oznakom. Ako su se metapodaci pomaknuli, tretirajte artefakt kao neodobren i otkrijte koja ga je izgradnja proizvela.
Ako se dijestovi ne podudaraju, zaustavite se. Ne prenosite i ne popravljajte datoteku ponovnom izgradnjom na licu mjesta; to briše dokaz da se nešto promijenilo u prijenosu. Nepodudarnost znači da su spremište artefakata, korak preuzimanja ili zapis pogrešni, i svaki od njih zaslužuje objašnjenje prije objave izdanja.
Riješite odgovor o dvostrukoj verziji
Privatna spremišta obično odbijaju prepisati postojeću verziju i to odbijanje je značajka. Kada prijenos ne uspije jer verzija postoji, pregledajte zapis spremišta za tu verziju i usporedite datoteke koje drži s dijestovima koje ste namjeravali objaviti.
Postojeća verzija može značiti da je raniji prijenos uspio i da je odgovor izgubljen, ili da je netko objavio drugačiji sadržaj pod istim brojem.
Ne brišite verziju i ne izmišljajte novi broj da zaobiđete pogrešku. Odlučite s vlasnikom izdanja je li pohranjeni sadržaj prihvatljiv, zatim zabilježite ishod. Ako se sadržaj razlikuje, imate problem s verzioniranjem, a ne problem s pipelineom.
Držite vjerodajnicu za prijenos na jednoj strani
Samo unutarnjem izdavaču trebaju vjerodajnice spremišta i to samo za vrijeme trajanja prijenosa. Ograničite token na ciljno spremište i na operacije prijenosa, držite ga u spremištu tajni unutarnjeg sustava i ostavite ga potpuno izvan posla izgradnje. Ako posao izgradnje može objavljivati, onda svatko tko može promijeniti izgradnju može objavljivati.
Ograničite i koji unutarnji radni tokovi smiju pokrenuti izdavača. Ručni okidač s obveznim odobrenjem razuman je zadani izbor za izdanja; push na bilo koju granu nije.
Dovršeno izdanje treba ostaviti tri stvari za sobom: datoteke distribucije, njihove dijestove uz reviziju izvornog koda i zapis spremišta koji pokazuje istu verziju.