4.0 KiB
4.0 KiB
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.mdtests/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.shkutsutaan jokaiselletest-flow-stepille continueToTestFlow-steppi skip-vaihtoehdolla
bats tests/workflows.bats
# FAIL
Green
Toteuta gitea/workflows/ci-master.yml.
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äpiisContainerBuilt-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
# 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:
for step in test-flow; do
dispatch-workflow.sh {step.repo} {step.workflow} {step.ref} '{...inputs...}'
done
Concurrency
concurrency:
group: master-${{ github.repository }}
cancel-in-progress: false
Verifiointi
Simuloi koko master flow paikallisesti:
isContainerBuilt= false → build konttitag-commit.sh→ tagi ilmestyy commitilleisContainerBuilt= true uusinta-ajossa → build skipataandispatch-workflow.shkutsuu deploy → test → e2e ketjun- Kaikki statusviestit näkyvät oikeissa commiteissa
Viitteet
docs/workflows.md—ci-master.yml— Master / release-branchdocs/config-model.md—isContainerBuild(), Docker-labelit, test-flow-taulukkodocs/design-rationale.md— Periaate 7: Cross-repo commit traceability