109 lines
2.8 KiB
Markdown
109 lines
2.8 KiB
Markdown
# Ticket 0006: `ci-feature.yml` (reusable workflow)
|
|
|
|
**Vaihe:** 6/12
|
|
**Status:** pending
|
|
**Feature branch:** `feature/0006-ci-feature-yml`
|
|
**TDD required:** Yes
|
|
**Feature file required:** Yes
|
|
|
|
**Required context:**
|
|
- `docs/test-plan/tdd-guide.md`
|
|
- `tests/features/0006-ci-feature.feature`
|
|
- Skills: `tdd`, `implementation`, `clean-code`
|
|
|
|
---
|
|
|
|
## TDD — Red-Green-Refactor + Dogfood
|
|
|
|
### Red
|
|
Ennen workflow'ta, kirjoita validointitestit (`tests/workflows.bats`):
|
|
- YAML-skeema: kaikki vaaditut `inputs` määritelty
|
|
- `concurrency`-ryhmä estää rinnakkaiset ajot
|
|
- `uses:`-viittaukset oikeisiin skripteihin
|
|
|
|
```bash
|
|
bats tests/workflows.bats
|
|
# FAIL: workflow-tiedostoa ei ole
|
|
```
|
|
|
|
### Green
|
|
Toteuta `gitea/workflows/ci-feature.yml`.
|
|
|
|
```bash
|
|
bats tests/workflows.bats
|
|
# PASS: YAML validi, skeema täsmää
|
|
```
|
|
|
|
### Dogfood
|
|
Lisää kutsu `gitea/workflows/ci.yml`:stä:
|
|
|
|
```yaml
|
|
feature:
|
|
if: github.ref != 'refs/heads/master'
|
|
uses: ./gitea/workflows/ci-feature.yml@main
|
|
```
|
|
|
|
Jokainen push feature-branchiin ajaa `ci-feature.yml`:n.
|
|
|
|
## DoD
|
|
- [ ] Cucumber: `@ticket-0006 and @mock` → kaikki skenaariot GREEN
|
|
- [ ] `tests/workflows.bats` — YAML-validointi läpi
|
|
- [ ] Kaikki stepit määritelty: start → unit-test → code-coverage → publish-html → end
|
|
- [ ] `concurrency` estää rinnakkaiset ajot samalle branchille
|
|
- [ ] Dogfood: kirjaston oma CI käyttää tätä workflow'ta
|
|
- [ ] Statusviestit raportoivat jokaisen stepin tilan
|
|
|
|
---
|
|
|
|
## Toiminto
|
|
|
|
Feature-branchin CI-workflow. Kutsuu `report-status.sh` ja `push-reports.sh` (Ticket 0001 ja 0003).
|
|
|
|
## Trigger
|
|
|
|
`workflow_call` (reusable workflow)
|
|
|
|
## Inputs
|
|
|
|
| Parametri | Pakollinen | Kuvaus |
|
|
|-----------|------------|--------|
|
|
| `config-file` | Kyllä | Polku `ci-flow-values.yaml`:aan |
|
|
| `maven-image` | Ei | Maven-kontti (esim. `maven:3.9-eclipse-temurin-21`) |
|
|
| `node-image` | Ei | Node-kontti (npm-projektit) |
|
|
|
|
## Steppit
|
|
|
|
```
|
|
start → unit-test → code-coverage → publish-html → end
|
|
```
|
|
|
|
| Steppi | Skripti | Status |
|
|
|--------|---------|--------|
|
|
| `start` | `report-status.sh pending "Building..."` | INPROGRESS |
|
|
| `unit-test` | Projektin oma testiajo | — |
|
|
| `code-coverage` | JaCoCo / vastaava | — |
|
|
| `publish-html` | `push-reports.sh cucumber; push-reports.sh jacoco` | — |
|
|
| `end` | `report-status.sh success/failure` | Lopullinen status |
|
|
| `fail` (catch) | `report-status.sh failure` | FAILURE |
|
|
|
|
## Concurrency
|
|
|
|
```yaml
|
|
concurrency:
|
|
group: feature-${{ github.ref }}
|
|
cancel-in-progress: false
|
|
```
|
|
|
|
## Verifiointi
|
|
|
|
Simuloi paikallisesti (act-runner tai manuaalinen steppien ajo):
|
|
1. `report-status.sh pending` → commitin status = pending
|
|
2. Testit ajetaan
|
|
3. `push-reports.sh` → raportit MinIO:ssa
|
|
4. `report-status.sh success` → statusviesti + URL
|
|
|
|
## Viitteet
|
|
|
|
- `docs/workflows.md` — `ci-feature.yml` — Feature-branch
|
|
- `docs/architecture.md` — Järjestelmäkaavio
|