# Prøvekjørte CI‑hooken på forge‑siden og fant to feil som ikke kunne oppdages ved å lese filen: en reserveløsning som la et uoppløselig argument på hookens inndata, og gits egen miljøvariabel som fulgte kvalitetsporten inn i utsjekkingen og gjorde 19 tester røde.

august 2026

**Situasjon.** Den selvhostede git‑tjenesten tar imot push og kan kjøre en hook på serversiden som avviser arbeid som ikke består kvalitetsporten. En hook på serversiden er den ene delen av automatiseringen som ikke kan testes ved å kjøre den lokalt: den kjører i et nakent repo uten arbeidstre, i et miljø som git‑tjenesten setter opp, og leser de pushede referansene fra standard input. Å lese skriptet og slutte at det er riktig, er gjetting.

**Oppgave.** Hooken måtte prøvekjøres mot et ekte nakent repo og en ekte push før den kunne stoles på, i stedet for å bli produksjonssatt og oppdaget der.

**Handling.** Prøvekjøringen oppretter et nakent repo, installerer hooken, kloner repoet, committer, pusher og sjekker utfallet både når pushen godtas og når den avvises. Den fant to feil, og ingen av dem var synlige i filen. Den første var en reserveløsning i argumenthåndteringen: når hooken ikke kunne bestemme en referanse, satte den inn en plassholder som ikke kunne løses opp til et objekt, og fordi verdien kommer inn på hookens standard input og ikke som en parameter, dukket svikten opp som en feilmelding uten synlig sammenheng, mye lenger ned. Den andre er den som er verdt å huske. Når Git starter en hook, eksporterer den en miljøvariabel som angir repokatalogen, og den variabelen arves av alt hooken kjører. Kvalitetsporten sjekker ut den pushede revisjonen og kjører testsuiten i den, og testsuiten arvet pekeren til det nakne repoet — så nitten tester som berører git, slo opp i feil repo og ble røde, på kode som var riktig. Miljøet må tømmes ved grensen, og den grensen er usynlig med mindre det hele faktisk kjøres.

**Resultat.** Hooken fungerer i begge tilfeller, og begge feilene ble funnet før noen ekte push møtte dem. Begrensningen er at en prøvekjøring fortsatt er en simulering: den beviser at hooken tåler én form for push, og git‑tjenesten i produksjon får push som denne prøvekjøringen ikke lager, blant annet tvungne oppdateringer og sletting av grener.

---

- Rolle: Python‑ingeniør
- Kategorier: [DevOps](https://platform.engineer.company/nb/categories/devops/), [Infrastruktur](https://platform.engineer.company/nb/categories/infrastructure/), [Automatisering og CI/CD](https://platform.engineer.company/nb/categories/automation/), [Linux og servere](https://platform.engineer.company/nb/categories/linux/), [Testing og kvalitetssikring](https://platform.engineer.company/nb/categories/testing/), [Python](https://platform.engineer.company/nb/categories/python/)
- Tjenester: [Infrastruktur som kode](https://platform.engineer.company/nb/services/infrastructure-as-code/), [DevOps og CI/CD‑automatisering](https://platform.engineer.company/nb/services/devops-cicd/), [Systemadministrasjon](https://platform.engineer.company/nb/services/system-administration/)

<https://platform.engineer.company/nb/portfolio/rehearsed-the-forge-side-ci-hook-151/>
