# Ticket 0009: `ci-master.yml` (reusable workflow) **Vaihe:** 9/12 **Status:** pending **Feature branch:** `feature/0009-ci-master-yml` **TDD required:** Yes **Feature file required:** Yes **Required context:** - `docs/test-plan/tdd-guide.md` - `tests/features/0009-ci-master.feature` - Skills: `tdd`, `implementation`, `clean-code` --- ## TDD — Red-Green-Refactor + Dogfood ### Red Validointitesti (`tests/workflows.bats`): - Kaikki `workflow_call`-inputit: `config-file`, `maven-image`, `docker-image` - `isContainerBuilt`-check: git-tagin mukaan - Docker-labelien injektointi - Test flow -ketjutus: `dispatch-workflow.sh` kutsutaan jokaiselle `test-flow`-stepille - `continueToTestFlow`-steppi skip-vaihtoehdolla ```bash bats tests/workflows.bats # FAIL ``` ### Green Toteuta `gitea/workflows/ci-master.yml`. ```bash bats tests/workflows.bats # PASS ``` ### Dogfood Kirjaston oma `ci.yml` kutsuu `ci-master.yml`:ä master-branchille. ## DoD - [ ] Cucumber: `@ticket-0009 and @mock` → kaikki skenaariot GREEN - [ ] `tests/workflows.bats` — workflow-validointi läpi - [ ] `isContainerBuilt`-check toimii: `git tag --points-at HEAD` - [ ] Docker-labelit injektoitu: `git.commit`, `build.date`, `version` - [ ] Test flow -ketju dispatchaa jokaisen stepin järjestyksessä - [ ] Dogfood: kirjaston oma master-build käyttää tätä - [ ] Kaikki skriptit (0001–0004) integroitu workflow'hun --- ## Toiminto Master-branchin CI-workflow. Orkestroi koko build-test-deploy -ketjun: buildaa kontin, tagittaa commitin, ketjuttaa test flow'n `ci-flow-values.yaml`-konfiguraation mukaan. ## Trigger `workflow_call` (reusable workflow) ## Inputs | Parametri | Pakollinen | Kuvaus | |-----------|------------|--------| | `config-file` | Kyllä | Polku `ci-flow-values.yaml`:aan | | `maven-image` | Ei | Maven-kontti | | `docker-image` | Ei | Docker-in-Docker image | ## Steppit ``` start → isContainerBuilt? ──kyllä──→ skip build, continueToTestFlow → ei → unit-test → quality-gate → build-jar → build-docker → push-docker → tag-commit → continueToTestFlow → publish-html → end ``` | Steppi | Skripti / Toiminto | |--------|-------------------| | `start` | `report-status.sh pending "Building..."` | | `isContainerBuilt` | `git tag --points-at HEAD` — onko jo buildattu? | | `unit-test` | Projektin oma testiajo | | `quality-gate` | SonarQube quality gate -pollaus | | `build-jar` | `mvn package` / `gradle build` | | `build-docker` | `docker build` + Docker-labelit | | `push-docker` | `docker push` → Gitea Packages | | `tag-commit` | `tag-commit.sh {version}` | | `continueToTestFlow` | `dispatch-workflow.sh` jokaiselle test-flow -stepille | | `publish-html` | `push-reports.sh` — Maven Site + muut | | `end` | `report-status.sh success/failure` | ## Test flow -ketjutus ```yaml # ci-flow-values.yaml — test-flow-taulu test-flow: - deploy: development wait: true - test: name: "integration fast" repo: tests/integration workflow: test.yml ref: main tags: "@temperature and not @slow" - deploy: staging wait: true - test: name: e2e repo: tests/e2e workflow: test.yml ref: main ``` Workflow iteroi `test-flow`-taulun ja kutsuu `dispatch-workflow.sh` jokaiselle stepille: ```bash for step in test-flow; do dispatch-workflow.sh {step.repo} {step.workflow} {step.ref} '{...inputs...}' done ``` ## Concurrency ```yaml concurrency: group: master-${{ github.repository }} cancel-in-progress: false ``` ## Verifiointi Simuloi koko master flow paikallisesti: 1. `isContainerBuilt` = false → build kontti 2. `tag-commit.sh` → tagi ilmestyy commitille 3. `isContainerBuilt` = true uusinta-ajossa → build skipataan 4. `dispatch-workflow.sh` kutsuu deploy → test → e2e ketjun 5. Kaikki statusviestit näkyvät oikeissa commiteissa ## Viitteet - `docs/workflows.md` — `ci-master.yml` — Master / release-branch - `docs/config-model.md` — `isContainerBuild()`, Docker-labelit, test-flow-taulukko - `docs/design-rationale.md` — Periaate 7: Cross-repo commit traceability