Spring til indhold

Har prøvekørt CI‑hooken på forge‑siden og har fundet to fejl, der ikke kunne nås ved at læse filen: en fallback, der lagde et uopløseligt argument på hookens input, og gits egen miljøvariabel, der fulgte gaten ind i checkouten og gjorde 19 tests røde.

Situation. Den selvhostede git‑forge tager imod pushes og kan køre en hook på serversiden for at afvise arbejde, der ikke består porten. En hook på serversiden er det ene stykke automatik, der ikke kan testes ved at køre den lokalt: den udføres i et bart lager, uden arbejdstræ, under et miljø, forgen sætter, og læser de pushede referencer fra sin standardinddata. At læse skriptet og konkludere, at det er korrekt, er et gæt.

Opgave. Hooken skulle prøves af mod et rigtigt bart lager og et rigtigt push, før den blev betroet, frem for at blive udrullet og opdaget.

Handling. Prøven opretter et bart lager, installerer hooken, kloner det, committer, pusher og efterprøver både accept- og afvisningsvejen. Den fandt to defekter, hvoraf ingen af dem var synlige i filen. Den første var en nødløsning i argumenthåndteringen: når hooken ikke kunne bestemme en reference, indsatte den en pladsholder, der ikke var et opløseligt objekt, og fordi værdien ankommer på hookens standardinddata frem for som en parameter, viste fejlen sig som en urelateret fejl meget længere nede. Den anden er den, der er værd at huske. Git eksporterer en miljøvariabel, der navngiver lagermappen, når den kalder en hook, og den variabel nedarves af alt, hvad hooken kører. Porten tjekker den pushede revision ud og kører testsuiten inde i den, og testsuiten nedarvede pegepinden til det bare lager — så nitten test, der rører git, opløste mod det forkerte lager og gik røde på kode, der var korrekt. Miljøet skal ryddes ved grænsen, og den grænse er usynlig, medmindre tingen faktisk køres.

Resultat. Hooken virker på begge veje, og begge defekter blev fundet, før noget rigtigt push mødte dem. Begrænsningen er, at en prøve stadig er en simulering: den beviser, at hooken overlever én pushform, og forgen ser i drift pushes, som denne prøve ikke konstruerer, herunder tvungne opdateringer og sletning af grene.