Read in English

upstream-watch: tiedä, mitä upstreamissa muuttui, ennen kuin pullaat. Julkaisut ja tagit, riskiliput, ff-only-päivitykset.

Minulla on kansiollinen klooneja. Työkaluja, jotka käännän lähdekoodista, kirjastoja, joita luen, ja dotfile-kokoelmia, joista lainaan ideoita. Muutaman viikon välein ajan niissä git pull. Harvoin katson, mitä tuli.

Tavasta halusin eroon, koska osa työkaluista pyörii omilla tunnuksillani. Tein siksi työkalun nimeltä upstream-watch. Se hakee, lukee ja kertoo, mikä muuttui, ennen kuin pullaan.

Ongelma

Julkisen repon klooni on hiljainen riippuvuus. Sillä ei ole lukkotiedostoa eikä katselmointia. Mitä ylläpitäjä pushasi, sen käännät ja ajat.

Yleensä se on kunnossa. Huonot tapaukset näyttävät samanlaisilta: tagi, joka siirtyi, uudelleenkirjoitettu haara, uusi henkilö, joka muutti asennusskriptiä, julkaisu, jota ei enää ole allekirjoitettu. Mikään näistä ei näy git pull -komennon tulosteessa.

Mitä työkalu tekee

Se etsii GitHub-kloonit nimeämistäsi kansioista ja ohittaa omat reposi. Jokaisessa kloonissa se ajaa git fetch eikä mitään muuta, mikä koskisi työpuuhun. Sitten se vertaa edelliseen tarkistukseen ja kirjoittaa Markdown-raportin.

Raportissa ovat uudet julkaisut muistiinpanoineen, uudet tagit ja tulevien committien muutosloki tyypeittäin ryhmiteltynä. Se näyttää myös, missä oma haarasi on.

Sitten tulevat liput.

  • Korkea: force-push, tagi, joka osoittaa eri kohtaan kuin viimeksi, tai repo, jonka omistaja tai nimi vaihtui.
  • Katsottava: oletushaaran vaihtuminen, allekirjoittamaton tagi allekirjoitettujen jälkeen, uudet tekijät, jotka kirjoittivat suurimman osan uusista commiteista tai koskivat build-tiedostoihin, muutokset omistajuustiedostoihin sekä asennusskripteihin, build-koukkuihin tai CI:hin. Myös uudet suoritettavat tai binääritiedostot ja lisätty rivi, joka putkittaa latauksen shelliin.
  • Tiedoksi: arkistoitu, fork, matala klooni, irrallinen HEAD.

Lippu on syy lukea diff. Työkalu sanoo sen joka paikassa, jossa voi, koska uuden tekijän iso pull request näyttää sille samalta kuin uusi ylläpitäjä.

Päivittäminen

Päivitys on erillinen komento ja erillinen päätös. upstream-watch update kysyy repo kerrallaan ja siirtää haaran juuri siihen committiin, jonka raportti kuvasi, hakematta uudelleen. Se kieltäytyy, jos klooni on likainen, edellä, irrallaan, kesken rebasen, tarkistamatta viimeisen vuorokauden aikana tai jos sillä on korkea lippu. Se ei koskaan mergeä eikä rebasea puolestasi.

Luotetuille repoille asetustiedoston sallittujen lista antaa ajastetun tarkistuksen päivittää ne itse, paitsi jos korkea lippu on päällä.

Mihin se asettuu

myrepos ja gita ajavat Git-komentoja monessa repossa ja tekevät sen hyvin. upstream-watch ei korvaa niitä. Se vastaa kapeampaan kysymykseen: mitä on tulossa ja onko pull turvallinen. README:ssä on vertailutaulukko.

Mitä olen testannut

Testit rakentavat upstream-repot ja kloonit väliaikaiskansioon, tekevät force-pushin, siirtävät tagin, muuttavat asennusskriptiä ja puhuvat paikalliselle väärennetylle GitHub-rajapinnalle. CI ajaa ne Linuxilla ja macOS:llä Pythonin versioilla 3.11–3.14. Mikään testi ei käytä verkkoa.

Ajoin koko ketjun myös käsin testirepoilla: perustarkistus, upstreamin force-push ja muutettu asennusskripti, toinen tarkistus, joka liputti molemmat, ja päivitys, joka kieltäytyi.

Omaan kloonikansiooni en ole sitä vielä osoittanut. Se on seuraava askel, ja oletan, että ylläpitäjäheuristiikka vaatii säätöä oikeiden projektien kanssa.

Mitä työkalu ei tee

Se toimii vain GitHubin kanssa. Se ei tarkista allekirjoituksia, vaan kertoo, onko tagilla allekirjoitus ja mitä GitHub siitä sanoo. Liput ovat heuristiikkaa, eikä puhdas raportti ole tae. Ilman GitHub-tokenia se tekee kaksi rajapintakutsua repoa kohden ja jatkaa pelkällä gitillä, kun tuntiraja tulee vastaan.

Kokeile

Koodi on osoitteessa github.com/ollijunes/upstream-watch. Aja init GitHub-nimelläsi ja kloonikansiollasi, sitten list ja check. Lue yksi raportti, ennen kuin asennat ajastuksen.

Issuet ja pull requestit ovat tervetulleita. Kuvaa ongelma testien testirepoilla, älä oman koneesi raportilla.