Bou in Python-wiel bûten it netwurk, publisearje it binnen
Bou it wiel dêr't de boarne al leit, ferpleats dan it krekte bestân nei in ynterne publisist. Digests en in kwitânsje slute de oerdracht ôf.
Do hast al in bou-opdracht dy't in wiel makket, en in privee bewarplak dat it ûntfange moat. De flater is om in twadde opdracht fan in tûke ôf wer bouwe te litten en it resultaat deselde útjefte te neamen. Ferpleats it bestân dat test is, neam it nei de digest, en hâld de opladen-identiteit binnen. De rûnlieding hjirûnder folget ien artefakt fan in iepenbiere CI-runner nei in ynterne publisist.
Bou dêr't de boarne al leit
Run de bou yn 'e opdracht dy't al de boarne, de ark-keten en de testset hat. Neat oan in privee bewarplak freget dat dy opdracht it berikt. Ynstallearje de bou-frontend yn 'e omjouwing dy't it projekt al brûkt, en meitsje dan beide distribúsjeformaten as it projekt beide leveret.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Hâld de útfier-map lyts en foar ien kear. It iennige dat it wurdich is om mei te nimmen binne de bestannen dy't de folgjende opdracht publisearret, plus har hashes. Al it oare, ynklusyf firtuele omjouwings en caches, kin op 'e nij boud wurde út 'e fêstleine boarne-revysje. In mager artefakt is ek makliker te kontrolearjen, want elk bestân deryn is in bestân dat immen besjen kin.
Skriuw op wat se makke hat: de pakketnamme en ferzje út 'e bestânsnammen, de boarne-revysje, en de workflow-run dy't se makke hat. In ferzje-string allinnich identifisearret gjin bestân, want deselde ferzje kin twa kear boud wurde út ferskate commits. Skriuw de revyzje neist de bestânsnammen yn 'e artefaktbeskriuwing, en behannelje dat fêstlizzen as part fan 'e oerdracht.
Ferpleats bytes, gjin ynstruksjes om wer te bouwen
In twadde bou is in twadde produkt. Tiidstimpels, mei-bundele ôfhinklikens en ark-ferzjes kinne allegear de bytes feroarje, dat in werbou hat syn eigen testbewiis en syn eigen kontrôle nedich. Befoarderje ynstee de kontrolearre bestannen.
Laad de distribúsjebestannen op nei it artefakt-opslachplak dat dyn CI-platfoarm biedt, en jou de ynterne opdracht in ferwizing nei dat spesifike artefakt ynstee fan in tûkenamme.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
As dyn platfoarm ûndertekene komôf stipet, freegje it dan it artefakt te attestearjen en letter it ferwachte bewarplak, de workflow en de boarne-revysje te ferifisearjen. GitHub syn attestaasje-dokumintaasje beskriuwt bewearings fan dy foarm. In jildige hantekening is komôf-bewiis, gjin kwetsberens-scan en gjin autorisaasjebeslút.
Ferifisearje binnen foar't do oplaadst
De ynterne opdracht begjint mei te kontrolearjen dat it bestân dat it krige, it bestân is dat goedkard is. Fergelykje digests mei it fêstlizzen fan 'e bou-opdracht, net mei in wearde dy't wer berekkene is út wat der oankaam.
sha256sum -c digests.txt
python -m twine check dist/*
Lês dan de metadata. De pakketnamme, de ferzje en de oanjûne ôfhinklikens moatte oerienkomme mei de kontrôle dy't do goedkard hast. In wiel waans namme goed liket mar waans ôfhinklikens-pins feroare binne, is in oar pakket mei itselde label. As de metadata ferskood is, behannelje it artefakt as net goedkard en sykje út hokker bou it makke hat.
As de digests net oerienkomme, stopje. Laad net op, en reparearje it bestân net troch it op plak wer te bouwen; dat wisket it bewiis dat der ûnderweis wat feroare is. In ôfwiking betsjut dat it artefakt-opslachplak, de download-stap of it fêstlizzen ferkeard is, en elk dêrfan fertsjinnet in ferklearring foar't in útjefte publisearre wurdt.
Hânfetsje it antwurd oer dûbele ferzjes
Privee bewarplakken wegerje meastentiids in besteande ferzje oer te skriuwen, en dy wegering is in funksje. As in opladen mislearret om't de ferzje bestiet, besjoch dan it fêstlizzen fan it bewarplak foar dy ferzje en fergelykje de bestannen dy't it hâldt mei de digests dy't do publisearje woldest.
In besteande ferzje kin betsjutte dat in eardere opladen slagge is en it antwurd ferlern gie, of dat immen oare ynhâld ûnder itselde nûmer publisearre hat.
Wiskje de ferzje net, en betink gjin nij nûmer om de flater foarby te kommen. Beslis mei de eigner fan 'e útjefte oft de bewarre ynhâld akseptabel is, en lis dan de útkomst fêst. As de ynhâld ferskilt, hast do in ferzje-probleem, gjin pipeline-probleem.
Hâld de opladen-identiteit oan ien kant
Allinnich de ynterne publisist hat bewarplak-identiteiten nedich, en allinnich foar de doer fan it opladen. Behein it token ta it doelbewarplak en ta oplaad-operaasjes, hâld it yn 'e geheime opslach fan it ynterne systeem, en lit it hielendal bûten de bou-opdracht. As de bou-opdracht publisearje kin, dan kin elkenien dy't de bou feroarje kin, publisearje.
Behein ek hokker ynterne workflows de publisist starte meie. In hânmjittige trigger mei in ferplichte goedkarring is in ridelike standert foar útjeften; in push nei hokker tûke dan ek is dat net.
De ôfmakke útjefte moat trije dingen efterlitte: de distribúsjebestannen, har digests mei de boarne-revysje, en in bewarplak-fêstlizzen dat deselde ferzje toant.