Ibni wheel Python barra min-netwerk u ppubblikaha ġewwa
Ibni l-wheel fejn diġà jinsab il-kodiċi sors, imbagħad ċaqlaq il-fajl eżatt għal pubblikatur intern. Id-digesti u riċevuta jagħlqu l-konsenja.
Diġà għandek xogħol ta' build li jipproduċi wheel, u repożitorju privat li suppost jirċevih. L-iżball huwa li tħalli xogħol ieħor jerġa' jibni minn fergħa u jsejjaħ ir-riżultat l-istess rilaxx. Ċaqlaq il-fajl li ġie ttestjat, semmih skont id-digest, u żomm il-kredenzjali tal-upload ġewwa. Id-deskrizzjoni hawn taħt issegwi artefatt wieħed minn runner CI pubbliku sa pubblikatur intern.
Ibni fejn diġà jinsab il-kodiċi sors
Mexxi l-build fl-xogħol li diġà għandu l-kodiċi sors, it-toolchain u s-suite tat-testijiet. Xejn dwar repożitorju privat ma jirrikjedi li dak ix-xogħol jasal għalih. Installa l-frontend tal-build fl-ambjent li l-proġett diġà juża, imbagħad ipproduċi ż-żewġ formati tad-distribuzzjoni jekk il-proġett jibgħat it-tnejn.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Żomm id-direttorju tal-output żgħir u ta' darba. L-unika ħaġa li tiswa li tinġarr 'il quddiem huma l-fajls li se jippubblika x-xogħol li jmiss, flimkien mal-hashes tagħhom. Kollox ieħor, inklużi ambjenti virtwali u caches, jista' jerġa' jinbena mis-reviżjoni tas-sors irreġistrata. Artefatt irqis huwa wkoll eħfef biex jiġi rivedut, għax kull fajl fih huwa fajl li xi ħadd jista' jispezzjona.
Irreġistra x'ipproduċiehom: l-isem u l-verżjoni tal-pakkett mill-ismijiet tal-fajls, ir-reviżjoni tas-sors, u l-eżekuzzjoni tal-workflow li ħolqothom. String tal-verżjoni waħdu ma jidentifikax fajl, għax l-istess verżjoni tista' tinbena darbtejn minn commits differenti. Ikteb ir-reviżjoni ħdejn l-ismijiet tal-fajls fid-deskrizzjoni tal-artefatt, u ttratta dik ir-reġistrazzjoni bħala parti mill-konsenja.
Ċaqlaq bytes, mhux struzzjonijiet biex terġa' tibni
It-tieni build huwa t-tieni prodott. It-timbri tal-ħin, id-dipendenzi miġbura u l-verżjonijiet tal-għodda kollha jistgħu jbiddlu l-bytes, għalhekk tibni mill-ġdid jeħtieġ l-evidenza tat-test tiegħu u r-reviżjoni tiegħu. Minflok, ippromwovi l-fajls li diġà ġew riveduti.
Tellgħa l-fajls tad-distribuzzjoni fil-maħżen tal-artefatti li jipprovdi l-pjattaforma CI tiegħek, u agħti lix-xogħol intern referenza għal dak l-artefatt speċifiku, mhux għal isem ta' fergħa.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Jekk il-pjattaforma tiegħek tappoġġja oriġini ffirmata, itlobha tattesta l-artefatt u aktar tard tivverifika r-repożitorju, il-workflow u r-reviżjoni tas-sors mistennija. Id-dokumentazzjoni tal-attestazzjonijiet ta' GitHub tiddeskrivi dik il-forma ta' stqarrijiet. Firma valida hija prova tal-oriġini, mhix skan tal-vulnerabbiltajiet u mhix deċiżjoni ta' awtorizzazzjoni.
Ivverifika ġewwa qabel ma ttella'
Ix-xogħol intern jibda billi jiċċekkja li l-fajl li rċieva huwa l-fajl li ġie approvat. Qabbel id-digesti mar-reġistrazzjoni mix-xogħol tal-build, mhux ma' valur ikkalkulat mill-ġdid minn dak li wasal.
sha256sum -c digests.txt
python -m twine check dist/*
Imbagħad aqra l-metadata. L-isem tal-pakkett, il-verżjoni u d-dipendenzi ddikjarati għandhom jaqblu mar-reviżjoni li approvajt. Wheel li ismu jidher tajjeb iżda li l-pins tad-dipendenzi tiegħu nbidlu huwa pakkett ieħor bl-istess tikketta. Jekk il-metadata mxiet, ittratta l-artefatt bħala mhux approvat u sib liema build ipproduċieh.
Jekk id-digesti ma jaqblux, waqaf. Ttellax, u tissewwix il-fajl billi terġa' tibnih fil-post; dan iħassar l-evidenza li xi ħaġa nbidlet fit-trasport. Nuqqas ta' qbil ifisser li l-maħżen tal-artefatti, il-pass tat-tniżżil jew ir-reġistrazzjoni huma ħżiena, u kull wieħed minnhom jistħoqqlu spjegazzjoni qabel ma jiġi ppubblikat rilaxx.
Immaniġġja t-tweġiba tal-verżjoni doppja
Ir-repożitorji privati s-soltu jirrifjutaw li jiktbu fuq verżjoni eżistenti, u dak ir-rifjut huwa karatteristika. Meta upload jonqos għax il-verżjoni teżisti, spezzjona r-reġistrazzjoni tar-repożitorju għal dik il-verżjoni u qabbel il-fajls li jżomm mad-digesti li kont beħsiebek tippubblika.
Verżjoni eżistenti tista' tfisser li upload preċedenti rnexxa u r-risposta ntilfet, jew li xi ħadd ippubblika kontenut differenti taħt l-istess numru.
Tħassarx il-verżjoni, u toħloqx numru ġdid biex tgħaddi mill-iżball. Iddeċiedi mas-sid tar-rilaxx jekk il-kontenut maħżun huwiex aċċettabbli, imbagħad irreġistra r-riżultat. Jekk il-kontenut huwa differenti, għandek problema tal-verżjonar, mhux problema tal-pipeline.
Żomm il-kredenzjali tal-upload fuq naħa waħda
Il-kredenzjali tar-repożitorju jeħtieġhom biss il-pubblikatur intern, u biss sakemm idum l-upload. Illimita t-token għar-repożitorju fil-mira u għall-operazzjonijiet tal-upload, żommu fil-maħżen sigriet tas-sistema interna, u żommu barra mix-xogħol tal-build għal kollox. Jekk ix-xogħol tal-build jista' jippubblika, allura kulħadd li jista' jbiddel il-build jista' jippubblika.
Illimita wkoll liema workflows interni jistgħu jibdew il-pubblikatur. Trigger manwali b'approvazzjoni meħtieġa huwa default raġonevoli għar-rilaxxi; push għal kwalunkwe fergħa mhuwiex.
Ir-rilaxx lest għandu jħalli tliet affarijiet warajh: il-fajls tad-distribuzzjoni, id-digesti tagħhom mar-reviżjoni tas-sors, u reġistrazzjoni tar-repożitorju li turi l-istess verżjoni.