# Tech Stack — Gitea Actions CI -kirjasto > Absoluuttinen lähde sille, mitä teknologioita kirjasto käyttää ja tukee. Tämä dokumentti laaditaan `design-rationale.md`:n pohjalta. Mitään tässä listaamatonta teknologiaa ei oleteta olevan käytössä. --- ## Kirjaston oma runtime Kirjasto itsessään on kokoelma **Gitea Actions reusable workflow** -tiedostoja (`.gitea/workflows/*.yml`). Ajonaikaiset stepit käyttävät: | Teknologia | Versio / minimi | Käyttötarkoitus | |---|---|---| | **Gitea Actions** | 1.21+ | CI-alusta, workflow-moottori | | **Gitea act runner** | 0.2+ | Workflow'n suoritus | | **Bash** | 4.0+ | Integraatioskriptit workflow-stepeissä | | **curl** | 7.0+ | Gitea REST API -kutsut (statusraportointi, dispatch, pollaus) | | **jq** | 1.6+ | JSON-vastausten jäsennys REST API -kutsuista | | **git** | 2.30+ | SCM-operaatiot (checkout, tag, push) | | **MinIO client (mc)** | latest | Raporttien pushaus MinIO:hon ja URL-generointi | --- ## Konfiguraatio | Teknologia | Käyttötarkoitus | |---|---| | **YAML** | Projektikohtainen konfiguraatio (`ci-flow-values.yaml`) | | **Gitea organization secrets** | Tokenit ja salasanat (Gitea API -token, MinIO credentials) | | **Gitea organization variables** | Infra-tason asetukset (MinIO base URL, SonarQube URL) | --- ## Tuetut ulkoiset palvelut Kirjasto integroituu näihin ulkoisiin palveluihin workflow-stepeistä käsin. Palvelut eivät ole osa kirjastoa. | Palvelu | Rajapinta | Käyttötarkoitus | |---|---|---| | **Gitea REST API** | `/api/v1/` | Commit-statusraportointi, workflow-dispatch, run-status-pollaus, taggaus | | **MinIO** | S3 API + staattinen web-hosting | Testiraporttien tallennus ja selailu | | **SonarQube** | REST API (`/api/`) | Quality gate -pollaus, dashboard-linkitys | | **Gitea Packages** | Container registry API | Docker-imagen push ja taggaus | --- ## Tuetut build-ekosysteemit Kirjasto tukee näitä käyttäjäprojektien build-työkaluja. Työkalut asennetaan workflow'n ajonaikaiseen konttiin (projektin itse määrittelemään). | Ekosysteemi | Työkalut | Artifact-tyypit | |---|---|---| | **Java / Maven** | `mvn`, `java` | JAR, Docker | | **Java / Gradle** | `gradle`, `java` | JAR, Docker | | **Node.js / npm** | `npm`, `node` | npm-paketti, Docker | | **Docker** | `docker`, `docker buildx` | Docker-image | --- ## Tuetut testikehykset Kirjasto generoi ja julkaisee raportit näistä testikehyksistä. Itse testikehysten ajurit ovat käyttäjäprojektissa. | Testikehys | Raporttiformaatti | MinIO-kohde | |---|---|---| | **Cucumber** | HTML (Cucumber Reports) | `/{commit_short}/cucumber/` | | **JUnit** | XML | `/{commit_short}/junit/` | | **JaCoCo** | HTML | `/{commit_short}/jacoco/` | | **Maven Site** | HTML | `/{commit_short}/site/` | | **Mukautettu HTML** | HTML | `/{commit_short}/{report_name}/` | --- ## Tuetut deployment-työkalut | Työkalu | Käyttötarkoitus | |---|---| | **Helm v3** | Kubernetes-deployment (arvot `values-{environment}.yaml`) | | **Kubernetes** | Ajonaikainen ympäristö (testiympäristöt, tuotanto) | --- ## Mitä EI tueta (verrattuna Jenkins-versioon) Nämä olivat Jenkins-kirjastossa, mutta on tietoisesti jätetty pois Gitea Actions -versiosta: | Teknologia | Syy | |---|---| | **GitLab REST API** | Ei multi-platform-tukea (periaate 6) | | **BitBucket Server REST API** | Ei multi-platform-tukea | | **BitBucket Cloud REST API** | Ei multi-platform-tukea | | **Jenkins** (shared library, cucumber plugin, publishHTML, jacoco plugin, buildJob) | Ei Jenkins-riippuvuutta — Gitea Actions korvaa | | **Artifactory** (Docker registry) | MVP:ssä ei. Factory/adapter-patternilla lisättävissä myöhemmin | | **Nexus** (Docker registry) | MVP:ssä ei. Factory/adapter-patternilla lisättävissä myöhemmin | | **Artifactory** (npm registry) | MVP:ssä ei. Factory/adapter-patternilla lisättävissä myöhemmin | | **Groovy** | Jenkins-spesifi. Korvautuu Bashilla ja YAML:lla | --- ## Huomautus: Docker-rekisterit MVP:ssä tuetaan vain **Gitea Packages** (Container registry). Arkkitehtuuriin suunnitellaan factory/adapter-pattern, jolla Artifactory ja Nexus voidaan lisätä myöhemmin ilman workflow-muutoksia. Rekisteri konfiguroidaan `ci-flow-values.yaml`:n `docker`-osiossa `type`-kentällä (vrt. Jenkins `ArtifactRepoType`-enum). ## Huomautus: SonarQube-integraatio Jenkins-versio pollasi quality gatea: `GET /api/project_analyses/search` → etsi uusin analyysi → `GET /api/qualitygates/project_status?analysisId=X`. SonarQubessa on tätä parempi rajapinta. Tutkitaan arkkitehtuurivaiheessa. ## Huomautus: Docker-in-Docker Gitea Actions tukee Docker-in-Dockeria natiivisti `services:`-määrittelyllä workflow-tiedostossa. Tämä vastaa Jenkinsin `podTemplate`-konttia `docker:19.03.1-dind` + `docker:19.03.1` sidecar-mallia. Projektin workflow määrittelee tarvittavat kontit itse — reusable workflow ei pakota tiettyä konttivalikoimaa.