Skip to content

Opetushallitus/koto-rekisteri

Repository files navigation

Kielitutkintorekisteri

Riippuvuudet

  • mise
  • IntelliJ IDEA
  • Docker
  • tmux

Loput riippuvuudet asennetaan käyttäen mise -työkalua. Misen asennus onnistuu homebrewlla (brew install mise) tai vaihtoehtoisilla tavoilla. Kehitysympäristön perustusskripti suorittaa mise install osana kehitysympäristön perustusta, joten sen ajaminen erikseen ei ole tarpeen. Ajantasainen lista asennettavista riippuvuuksista on nähtävillä .mise.toml-tiedostossa, jossa on myös muu Misen konfiguraatio (mukaanlukien joitain tarpeellisia ympäristömuuttujia).

Kehittäminen

Salaisuudet paikallisessa kehityksessä

Sovellus hakee salaisuudet AWS Secrets Managerista start_local_env.sh tai start_local_server.sh-skriptiä käytettäessä. Tätä varten start_local_server.sh konfiguroi automaattisesti aws-komentorivityökalun käyttämään OPH:n AWS-tilejä. Voit konfiguroida AWS-profiilit myös erikseen ensure_aws_profiles.sh-komennolla.

Kehitysympäristön perustaminen

Paikallisen kehitysympäristön perustamiseen käytetään skriptiä start_local_env.sh. Skriptiä sovelletaan myös kehitysympäristön riippuvuuksien ja perustusvaiheiden dokumentaationa.

./scripts/start_local_env.sh

Skripti perustaa kehitysympäristön ja oletuksena avaa uuden tmux session, jonka eri ikkunoihin esim. tietokantaan ja taustapalvelimeen liittyvät prosessit käynnistetään.

Mikäli et halua avata tmux-sessiota ja haluat käynnistää tietokannan ja taustapalvelimen yms. jollain muulla tavoin, skriptille voi antaa --setup-only parametrin. Tällöin suoritetaan kehitysympäristön perustus ja konfigurointi, mutta tmux-session perustaminen, sekä Docker-konttien ja palvelinten käynnistäminen jätetään tekemättä.

./scripts/start_local_env.sh --setup-only

OpenAPI

Palvelimen API-rajapinnat, -tyypit ja näiden dokumentaatio generoidaan OpenAPI-spesifikaatiosta. Spesifikaation pohjalta generoidaan API-rajapinta (esim. OppijaControllerApi-rajapinta), sekä tarvittavat luokat rajapinnassa käsiteltävien olioiden mallintamiseen muistissa (luokat generated.model.*-paketissa). Varsinainen toteuttava luokka perii generoidun rajapinnan ja toteuttaa kaikki rajapinnan tarjoamat metodit (esim. OppijaController-luokka).

API-dokumentaatio on nähtävillä Swagger UI:sta, joka tarjoillaan polusta /swagger-ui.html, esim.

Tiivistettynä, vaiheet uuden rajapinnan lisäämiseen:

  1. Dokumentoi rajapinnan API ja datatyypit open-api.yaml-spesifikaatiotiedostoon
  2. Suorita ./mvnw generate-sources generoidaksesi API-rajapinnat ja muut tarvittavat luokat
  3. Mikäli kyseessä on kokonaan uusi API (uusi controller), tarvitaan uusi luokka, joka perii generoidun *ControllerApi-rajapinnan. Nimeämiskäytäntönä on käyttää generoidun rajapinnan nimeä, ilman Api-suffiksia (esim. class OppijaController : OppijaControllerApi).
  4. Mikäli lisäsit uusia datatyyppejä, on konventiona lisätä näille tyyppialias (esim. generated/model/Oppija.kt ja oppija/Oppija.kt). Konvention tarkoituksena on välttää suoria riippuvuuksia generoituun koodiin.
  5. Toteuta uudet API-metodit luokkaan, joka perii generoidun API-rajapinnan.

IDEA

Koodin tyyli ja muotoilu

Sovelluksessa käytetään ktlint - teknologiaa kotlin - tiedostojen tyylittämiseen. mise asentaa Ktlintin kehitysympäristön perustamisen yhteydessä. IntelliJ IDEA:aan saa Ktlint-liitännäisen, jonka asentamisen jälkeen IDEA:n voi laittaa muotoilemaan koodin tallentamisen yhteydessä.

  1. Navigoi Settings -> Tools -> KtLint
  2. Tämän valikon alta, aseta Mode: Distract free ja varmista että Format: on save -valintaruutu on valittu.

Ympäristöt

Sovellus julkaistaan kolmelle AWS-tilille:

Nimi AWS-tili
dev 682033502734
test 961341546901
prod 515966535475

Ensimmäinen julkaisu

Ensimmäinen julkaisu AWS-tilille, jolle ei ole vielä julkaistu palvelua vaatii, että kehittäjä käy manuaalisesti antamassa luvan AWS Chatbotille päästä käsiksi Slack-kanavaan jonne hälytykset ohjataan. Tämä tapahtuu AWS Chatbot -palvelun konsolista kohdasta "Configure a chat client" ja valitsemalla Slackin.

Automaattinen julkaisu

Julkaisu tapahtuu automaattisesti GitHub Actions -palvelussa Build-tiedoston mukaisesti jokaisella main-haaran päivityksellä.

Manuaalinen julkaisu

Julkaisun voi myös ajaa omalta koneelta komennoilla:

(cd infra && TAG=$(git rev-parse HEAD) npx cdk deploy 'Util/**')
(cd infra && TAG=$(git rev-parse HEAD) npx cdk deploy 'Dev/**')
(cd infra && TAG=$(git rev-parse HEAD) npx cdk deploy 'Test/**')
(cd infra && TAG=$(git rev-parse HEAD) npx cdk deploy 'Prod/**')

Salaisuudet AWS-ympäristöissä

Seuraavat salaisuudet pitää luoda manuaalisesti AWS Secret Manageriin.

Hyödyllisiä komentoja

# Jos haluat lisätä formatointitarkastuksen commitin luonnin yhteyteen
./scripts/setup-hooks.sh

# Tarkista formatointi. Voit formatoida koodin ajamalla `ktlint --format`
./scripts/check-formatting.sh

# paketoi projektin.
mvn package

# Voit käyttää tätä jos ajat ympäristöä terminaalin kautta
./scripts/start_local_server.sh

# e2e-testien ajaminen e2e-hakemistossa
# Playwrightin UI testien ajamiseen --ui flagilla
npx playwright test