This is a mono-repo for the microservices that together form the new letter ordering system.
Dokumentasjonen fra docs
-mappa i dette repoet blir automatisk publisert til https://navikt.github.io/pensjonsbrev/
For å kjøre løsningen lokalt må man ha docker og docker compose installert. Bygging av brevbakeren krever at du har konfigurert gradle med packages.read token for å hente pakker. Se seksjonen under for oppsett av read token i gradle.
Bruk følgende for å bygge og kjøre:
./gradlew :pensjon-brevbaker:build :pdf-bygger:build
Dersom du kun skal kjøre brevbaker og pdf-bygger og ikke skribenten må du fortsatt pga en bug i docker-compose generere tomme env files for skribenten:
(mkdir -p - skribenten-backend/secrets tjenestebuss-integrasjon/secrets skribenten-web/bff pensjon-brevbaker/secrets/kafka)
(touch skribenten-backend/secrets/azuread.env skribenten-backend/secrets/unleash.env tjenestebuss-integrasjon/secrets/docker.env skribenten-web/bff/.env\
pensjon-brevbaker/secrets/kafka/kafka-secret.env\
pensjon-brevbaker/secrets/kafka/client.keystore.p12\
pensjon-brevbaker/secrets/kafka/client.truststore.jks
)
docker-compose up -d --build
- For å hente alle secrets må du ha installert:
- kubectl
- python
- vault
- gcloud cli
- kjørende docker/colima
- naisdevice med standard dev-miljø tilganger og tjenestebuss-q2 gruppe-tilgang (optional - tilgangen trengs kun dersom du har behov for å kjøre hele backend i docker compose. Lokalt frontend kan kjøres mot q2)
- Legg til
155.55.2.73 tjenestebuss-q2.adeo.no
i /etc/hosts
- Legg til
- Hent alle secrets:
./fetch-secrets.sh
- Sett opp tokens for npm og gradle se oppsett av packages.read token
- Kjør følgende for å bygge alle applikasjonene og publisere docker images til lokalt registry:
(cd skribenten-web/bff && npm i && npm run build) (cd skribenten-web/frontend && npm i) (cd brevoppskrift-web/bff && npm i && npm run build) (cd brevoppskrift-web/frontend && npm i) ./gradlew build -x test
- Kjør alle backend-tjenester
docker-compose --profile skribenten up -d --build
- Kjør front-end. Applikasjonen krever at du logger på med en @trygdeetaten.no test bruker med saksbehandler tilganger.
npm run dev --prefix skribenten-web/frontend
- Åpne http://localhost:8083/vite-on for å koble front-enden opp mot bff(backend for front-end).
Ulike docker-tjenester har eksponerte porter som du kan koble en remote debugger på.
I docker-compose.yml finner du de ulike portene som mappes til remote debug for de ulike tjenestene. F.eks her hvor remote agent kjører i containeren på port 5008 og mappes ut til 5018 som du kan bruke til å koble til remote-debugger.
ports:
- "5018:5008"
environment:
- JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5008
Vi har ikke noe bra oppsett for dette, men her er en oppskrift på hvordan man kan løse det.
- Endre PEN_URL environment variable i docker-compose.yaml for skribenten-backend til
http://host.docker.internal/pen/api/
Om du får ConnectTimeoutException på kall til PEN fra skribenten, så betyr det mest sannsynlig at du har en brannmur som blokkerer. Følgende oppskrift er for linux.
- Kjør
docker network ls
og merk deg NETWORK ID for "pensjon-local" - Sjekk at du har et network interface med navnet
br-<NETWORK ID>
ved å kjøreip link show
- Legg til en (midlertidig) regel for å tillate tilkobling til host fra docker compose med
sudo iptables -I INPUT 1 -i br-<NETWORK ID> -j ACCEPT
For å hente enkelte avhengigheter under byggene må du lage ett github token med packages.read tilgang.
legg tokenet og gir brukernavn i gradle.properties filen $HOME/.gradle/gradle.properties
:
gpr.user=<github brukernavn>
gpr.token=<packages.read token>
For å hente npm pakker ved å legge inn brukernavn og samme token som passord med følgende kommando:
npm login --registry=https://npm.pkg.github.com --auth-type=legacy
Vi bruker gradle-pluginen binary-compatibility-validator
for å se etter endringer i koden i modulene som inngår i biblioteket (per nå brevbaker-api-model-common
, brevbaker-dsl
og `brevbaker). Denne holder oversikt representert i .api-filer i disse modulene.
Ved endringer av public-kode i disse modulene - inkludert sletting av metoder eller nye metoder - må du huske å kjøre gradle apiDump
og sjekke inn de oppdaterte .api-filene. Glemmer du dette vil bygget feile - det kjører automatisk gradle apiCheck
-kommandoen.
Mer om dette på https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html
Ytelsestesten er i utgangspunktet satt opp til å teste vedtaksbrevet UNG_UFOER_AUTO.
- Evt. rediger
locust/autobrev_request.json
om du ønsker å teste et annet brev. - Kjør
./locust/fetch-secrets.sh
- Start docker compose med locust profil
docker compose --profile locust up
- Gå inn på locust grensesnittet via http://localhost:8089/ og skriv inn url til endepunktet du ønsker å ytelses-teste. Se dokumentasjon fra locust for mer info om bruk.
Brevbakeren bruker pensjon-brevbaker-api-model for bestilling av brev. Api modellen eksporteres som artifakt og brukes av eksterne systemer for å fylle ut informasjon som kreves ved bestilling av brev.
Vi må kunne endre på obligatoriske felter i api modellen uten å ødelegge pågående brevbestillinger i produksjon. For å oppnå dette må man ha en overgangsperiode hvor brevbakeren er kompatibel med gammel og ny versjon av api modellen. Vi kan ikke bytte direkte over til ny versjon uten å gjøre avsender inkompatibel med mottaker(brevbaker), noe som vil kreve nedetid.
La oss si at vi skal erstatte ett felt annetBeloep med barnetillegg:
// før
data class PensjonsBrevDto(
val annetBeloep: Int,
)
// etter
data class PensjonsBrevDto(
val barnetillegg: Kroner,
)
En strategi for overgangen kan se slik ut:
- Påkrev begge versjoner av feltene samtidig og bruk denne modellen på avsender-siden.
Brevbakeren er satt opp til å ignorere ukjente felter(fail on unknown properties=false), så den vil fortsette å lese annetBeloep i dette tilfellet.
// overgangsperiode data class PensjonsBrevDto( val barnetillegg: Kroner, val annetBeloep: Int, )
- Ta i bruk de nye feltene i Brevbakeren. Nå vil brevbakeren ignorere det gamle feltet og bruke det nye:
// data class PensjonsBrevDto( val barnetillegg: Kroner, )
- Ta i bruk den nye versjonen i avsender systemet.
For å fort kunne oppdatere latex filene i pdf-byggeren under kjøring, anbefales det å kjøre følgende kommando som before launch for LatexVisualITest.
docker exec -u 0 -it pensjonsbrev-pdf-bygger-1 rm -rf /app/pensjonsbrev_latex && docker cp ./pdf-bygger/containerFiles/latex pensjonsbrev-pdf-bygger-1:/app/pensjonsbrev_latex/
Da vil du kunne se på pensjon-brevbaker/build/test_visual/pdf resultatet av endringen fort.
For å se at du kun har endret det du skal, så kan du kjøre følgende script etterpå:
folder=./pensjon-brevbaker/build/test_visual
original_files=$folder/image_old
compare_to_folder=$folder/pdf
mogrify_folder=$folder/image_new
output_folder=$folder/out
mkdir -p $output_folder
mkdir -p $mogrify_folder
magick mogrify -path $mogrify_folder -format png -background white -alpha remove -alpha off -density 200 -quality 85 $compare_to_folder/*.pdf
for absolutefilename in $original_files/*.png; do
filename=$(basename "$absolutefilename")
echo -e "\n-------------------------------"
echo comparing $filename
magick compare -metric MAE -density 150 -compose multiply $original_files/$filename $mogrify_folder/$filename $output_folder/$filename
echo -e "\n-------------------------------"
done
Først en gang for å lage bilder i image_new, så kan du kopiere bildene til image_old for å få ett sammenligningsgrunnlag. Deretter kan du kjøre scriptet på nytt og få vite hvor ulike de er, samt en diff mellom bildene i out mappen.
Du vil også kunne se disse endringene i percey ved å lage en pull-request.
Ved først bygge pdf-bygger/latex.Dockerfile, så sette "from" i pdf-bygger/Dockerfile, kan du iterere over det å oppdatere latex imaget/pakker. Når du er ferdig med det, så kan du kjøre github action workflowen "update-latex-image" på branchen, så vil den publisere ett nytt dato-stemplet image som kan tas i bruk i pdf-bygger/Dockerfile.
Vær obs på at pdf-bygger kjører med en egendefinert Java Runtime, bygd opp i pdf-bygger sin Dockerfile, som kun har med modulene fra Java vi bruker. Dermed får vi en så liten runtime som mulig. Ulempa med dette er at vi må passe på litt ekstra ved endringer. For eksempel er localedata
-modulen viktig for å få norsk dato formatert riktig. Sjekk percy eller ny opp mot gammel pdf fra lokal generering ved endringer i latex-delen, eller tekniske endringer som for eksempel Java-oppgradering, av pdf-bygger for å se at ting ser likt ut.
Dette repoet inneholder forekomster av kode generert av GitHub Copilot.
ERROR: Cannot connect to kubernetes cluster dev-gcp: getting credentials
Have you remembered to connect naisdevice? (see https://doc.nais.io/basics/access/)
- Hvis du har tidligere fulgt setupen, kan du prøve å verifiser at du er autensitert i gcloud, og potensielt oppdatere credentials ved å kjøre
gcloud auth login --update-adc
, så kan du prøve igjen.
- Prøv
brew install jq
.