14a411e340
CI Main / Load example-gitea-env.conf to pipeline env (push) Successful in 18s
CI Main / Check existing artifact (push) Successful in 12s
unit-tests Link to Bats reports
CI Main / Bats tests (push) Successful in 1m41s
acc-tests Link to Cucumber reports
CI Main / Cucumber tests (push) Successful in 1m7s
ci-docker-build-push Docker build & push 0.2.1 OK
CI Main / Build & Push Docker (push) Successful in 34s
CI Main / Report Summary (push) Successful in 4s
Co-authored-by: moilanik <niko.moilanen@tietoevry.com> Reviewed-on: #12
125 lines
3.8 KiB
Markdown
125 lines
3.8 KiB
Markdown
# Konfiguraatiomalli — `gitea-env.conf`
|
|
|
|
> Consumer määrittelee ympäristökohtaiset arvot KEY=VALUE-muotoisessa
|
|
> `.conf`-tiedostossa. Providerin `config-provider.yml` validoi tiedoston
|
|
> ja muuntaa sen JSON:ksi (`env_json`), jota kaikki downstream-workflowt
|
|
> käyttävät.
|
|
|
|
---
|
|
|
|
## Tiedoston sijainti ja nimi
|
|
|
|
Consumerin repossa: `.gitea/workflows/gitea-env.conf` (nimi vapaasti
|
|
valittavissa — `config-provider.yml`:n `config_path`-input määrittää polun).
|
|
|
|
Esimerkki (tämän repon dogfood):
|
|
```
|
|
.gitea/workflows/example-gitea-env.conf
|
|
```
|
|
|
|
## Skeema
|
|
|
|
```
|
|
KEY=VALUE
|
|
```
|
|
|
|
Yksi `KEY=VALUE` per rivi. Kommentit `#`-merkillä. Tyhjät rivit ohitetaan.
|
|
|
|
### Pakolliset avaimet
|
|
|
|
| Avain | Kuvaus | Esimerkki |
|
|
|---|---|---|
|
|
| `GITEA_API_URL` | Gitea-instanssin URL | `https://gitea.example.com` |
|
|
| `GIT_PAGES_URL` | Raporttihostauksen URL | `https://reports.example.com` |
|
|
|
|
### Docker-spesifit avaimet (vain jos käytetään `docker-build-push.yml`)
|
|
|
|
| Avain | Pakollinen | Kuvaus |
|
|
|---|---|---|
|
|
| `DOCKER_REGISTRY` | Kyllä | Rekisterin host/path, esim. `gitea.example.com/org` |
|
|
| `DOCKER_IMAGE_NAME` | Kyllä | Kontin nimi ilman registry-prefixiä |
|
|
| `DOCKER_UI_URL` | Ei | Linkki kontin UI-näkymään registryssä |
|
|
| `DOCKERFILE` | Ei | Dockerfile-nimi, oletus `Dockerfile` |
|
|
|
|
### Esimerkki
|
|
|
|
```ini
|
|
GITEA_API_URL=https://gitea.example.com
|
|
GIT_PAGES_URL=https://reports.example.com
|
|
DOCKER_REGISTRY=gitea.example.com/myorg
|
|
DOCKER_IMAGE_NAME=temperature-store
|
|
DOCKER_UI_URL=https://gitea.example.com/myorg/-/packages/container/temperature-store
|
|
#DOCKERFILE=Dockerfile.platform
|
|
```
|
|
|
|
---
|
|
|
|
## Salaisuudet
|
|
|
|
Salaisuudet eivät ole `.conf`-tiedostossa. Ne määritellään Gitean
|
|
organization/repository secrets -mekanismissa ja välitetään workflowlle
|
|
`secrets: inherit` -direktiivillä.
|
|
|
|
| Secret | Pakollinen | Käyttäjä |
|
|
|---|---|---|
|
|
| `GITEA_TOKEN` | Kyllä | `report-status.sh`, `check-version.yml`, `docker-build-push.yml` |
|
|
| `GIT_PAGES_PUBLISH_TOKEN` | Kyllä | `publish-git-pages.sh`, `config-provider.yml` (validointi) |
|
|
| `DOCKER_USERNAME` | Ei | `docker-build-push.yml` (oletus: `github.actor`, ei pakollinen kaikissa registryissä) |
|
|
| `DOCKER_PASSWORD` | Kyllä | `docker-build-push.yml` |
|
|
|
|
---
|
|
|
|
## `config-provider.yml` — lataus ja validointi
|
|
|
|
Provider-workflow joka lukee `.conf`-tiedoston, validoi sen ja palauttaa
|
|
JSON-muotoisen `env_json`:n.
|
|
|
|
**Input:** `config_path` (polku `.conf`-tiedostoon)
|
|
|
|
**Output:** `env_json` (JSON-string), `config_path` (sama polku takaisin)
|
|
|
|
**Validointi:**
|
|
- `.conf`-tiedosto on olemassa
|
|
- Jokaisella `KEY=VALUE`-rivillä on arvo (ei tyhjää)
|
|
- URL-tyyppiset avaimet alkavat `http://` tai `https://`
|
|
- Pakolliset secretit (`GITEA_TOKEN`, `GIT_PAGES_PUBLISH_TOKEN`) on asetettu
|
|
|
|
Kutsu:
|
|
```yaml
|
|
load-config:
|
|
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
|
secrets: inherit
|
|
with:
|
|
config_path: .gitea/workflows/gitea-env.conf
|
|
```
|
|
|
|
---
|
|
|
|
## `check-version.yml` — version päättely
|
|
|
|
Provider-workflow joka etsii version prioriteettijärjestyksessä:
|
|
|
|
1. `VERSION`-tiedosto (plain text, esim. `0.2`)
|
|
2. `package.json` → `.version`-kenttä (Node.js)
|
|
3. `pom.xml` → `<version>`-elementti (Maven)
|
|
|
|
Hakee git-tagit Gitea API:sta ja laskee seuraavan vapaan patch-version.
|
|
|
|
**Output:** `artifact_exists` (true/false), `version` (string)
|
|
|
|
**Idempotentti:** Jos commitilla on jo versiotagi, `artifact_exists=true` ja
|
|
build-vaiheet skipataan. Samaa committia ei buildata kahdesti.
|
|
|
|
---
|
|
|
|
## `env_json`-propagointi
|
|
|
|
```
|
|
gitea-env.conf → config-provider.yml → env_json (JSON-string)
|
|
↓
|
|
ci.yml with: env_json → kaikki downstream-workflowt
|
|
```
|
|
|
|
Jokainen provider-workflow purkaa tarvitsemansa arvot `fromJson(inputs.env_json).KEY`:lla.
|
|
Consumerin ei tarvitse tietää mitä avaimia kukin provider käyttää.
|