Sul on juba ehitustöö, mis toodab wheeli, ja privaatne hoidla, mis peaks selle vastu võtma. Viga on lasta teisel tööl harust uuesti ehitada ja nimetada tulemust samaks väljaandeks. Liiguta fail, mida testiti, nimeta see digesti järgi ja hoia üleslaadimise mandaat seespool. Alljärgnev kirjeldus jälgib üht artefakti avalikust CI-jooksutajast sisemise avaldajani.

Ehita seal, kus lähtekood juba asub

Käivita ehitus töös, millel on juba lähtekood, tööriistakett ja testikomplekt. Privaatse hoidla juures ei nõua miski, et see töö selleni jõuaks. Paigalda ehituse frontend keskkonda, mida projekt juba kasutab, ja tooda siis mõlemad distributsioonivormingud, kui projekt tarnib mõlemad.

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

Hoia väljundkataloog väike ja ühekordne. Ainus, mida tasub edasi kanda, on failid, mida järgmine töö avaldab, pluss nende räšid. Kõik muu, sealhulgas virtuaalkeskkonnad ja vahemälud, saab salvestatud lähtekoodi revisjonist uuesti ehitada. Salenev artefakt on ka lihtsamini üle vaadatav, sest iga fail selles on fail, mida keegi saab uurida.

Registreeri, mis need tootis: paketi nimi ja versioon failinimedest, lähtekoodi revisjon ja töövoo käivitus, mis need lõi. Üksnes versioonistring ei identifitseeri faili, sest sama versiooni saab eri commititest kaks korda ehitada. Kirjuta revisjon failinimede kõrvale artefakti kirjeldusse ja käsitle seda kirjet üleandmise osana.

Liiguta baite, mitte juhiseid uuesti ehitada

Teine ehitus on teine toode. Ajatemplid, kaasatud sõltuvused ja tööriistade versioonid võivad baiti muuta, seega vajab uusehitus oma testitõestust ja oma ülevaatamist. Viige hoopis ülevaadatud failid edasi.

Laadi distributsioonifailid üles artefaktide hoidlasse, mida sinu CI-platvorm pakub, ja anna sisemisele tööle viide just sellele artefaktile, mitte haru nimele.

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

Kui sinu platvorm toetab allkirjastatud päritolu, lase artefakt atesteerida ja hiljem kontrollida oodatud hoidla, töövoo ja lähtekoodi revisjon. GitHubi atestatsioonide dokumentatsioon kirjeldab sellise kujuga väiteid. Kehtiv allkiri on päritolutõend, mitte haavatavuste skaneerimine ja mitte volitamisotsus.

Kontrolli seespool enne üleslaadimist

Sisemine töö algab kontrolliga, et saadud fail on see fail, mis kinnitati. Võrdle digestisid ehitustöö kirjega, mitte väärtusega, mis on ümber arvutatud sellest, mis kohale jõudis.

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

Seejärel loe metaandmeid. Paketi nimi, versioon ja deklareeritud sõltuvused peaksid vastama ülevaatamisele, mille kinnitasid. Wheel, mille nimi näeb õige välja, kuid mille sõltuvuste kinnitus on muutunud, on teine pakett sama sildiga. Kui metaandmed on liikunud, käsitle artefakti kinnitamata ja selgita välja, milline ehitus selle tootis.

Kui digestid ei kattu, peatu. Ära laadi üles ja ära paranda faili seda kohapeal uuesti ehitades; see kustutab tõendi, et midagi muutus teel. Erinevus tähendab, et artefaktihoidla, allalaadimise samm või kirje on vale, ja igaüks neist väärib selgitust enne väljaande avaldamist.

Käsitle duplikaatversiooni vastust

Privaatsed hoidlad keelduvad tavaliselt olemasoleva versiooni ülekirjutamisest ja see keeldumine on omadus. Kui üleslaadimine ebaõnnestub, sest versioon on olemas, uuri hoidla kirjet selle versiooni kohta ja võrdle seal hoitavaid faile digestidega, mida kavatsesid avaldada.

Olemasolev versioon võib tähendada, et varasem üleslaadimine õnnestus ja vastus läks kaduma, või et keegi avaldas sama numbri all teistsugust sisu.

Ära kustuta versiooni ja ära mõtle välja uut numbrit, et veast mööda minna. Otsusta väljaande omanikuga, kas salvestatud sisu on vastuvõetav, ja registreeri tulemus. Kui sisu erineb, on sul versioonimise probleem, mitte pipeline'i probleem.

Hoia üleslaadimise mandaat ühel pool

Hoidla mandaati vajab ainult sisemine avaldaja ja ainult üleslaadimise kestuse ajaks. Piira token sihthoidla ja üleslaadimistoimingutega, hoia seda sisemise süsteemi saladuste hoidlas ja jäta see ehitustööst täiesti välja. Kui ehitustöö saab avaldada, saab avaldada igaüks, kes saab ehitust muuta.

Piira ka seda, millised sisemised töövood tohivad avaldaja käivitada. Käsitsi käivitatav päästik nõutava kinnitusega on väljaannete jaoks mõistlik vaikeväärtus; push ükskõik millisesse harusse ei ole.

Valmis väljaanne peaks jätma enda järele kolm asja: distributsioonifailid, nende digestid koos lähtekoodi revisjoniga ja hoidla kirje, mis näitab sama versiooni.

Seotud artiklid