Files
gitea-ci-library/docs/tickets/0011-check-version-sh.md
T
moilanik 9a59cbc185
CI — gitea-ci-library / feature (push) Failing after 1s
CI — gitea-ci-library / master (push) Has been skipped
tiketit ja featuret vaihe 1
2026-06-08 09:34:47 +03:00

104 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ticket 0011: `check-version.sh` (Fibonacci-backoff)
**Vaihe:** 11/12
**Status:** pending
**Feature branch:** `feature/0011-check-version-sh`
**TDD required:** Yes
**Feature file required:** Yes
**Required context:**
- `docs/test-plan/tdd-guide.md`
- `tests/features/0011-check-version.feature`
- Skills: `tdd`, `implementation`, `clean-code`, `bash-script`
---
## TDD — Red-Green-Refactor
### Red
Kirjoita `tests/check-version.bats` mock-API:a vasten:
- Mock palauttaa oikean version 5. yrityksellä → exit 0
- Mock ei koskaan palauta oikeaa versiota → exit 1 (MAX_RETRIES täyttyy)
- Fibonacci-välit: 1 2 3 5 8 13 ... (tarkista sleep-kutsut)
- API ei vastaa (timeout) → exit 1
- Tyhjä URL → exit 1
```bash
bats tests/check-version.bats
# FAIL
```
### Green
Toteuta `scripts/check-version.sh` Fibonacci-backoffilla.
```bash
bats tests/check-version.bats
# PASS
```
### Refactor
Varmista curl-aikakatkaisu, paranna lokitusta.
## DoD
- [ ] Cucumber: `@ticket-0011 and @mock` → kaikki skenaariot GREEN
- [ ] `tests/check-version.bats` — kaikki testit läpi
- [ ] Fibonacci-sekvenssi: 1 2 3 5 8 13 21 34 55 89
- [ ] Maksimiaika ~231 s, MAX_RETRIES=10
- [ ] Exit 0: versio löytyi, exit 1: ei löytynyt
---
## Toiminto
Pollaa ympäristössä deployatun konttiversion API:a Fibonacci-backoffilla, kunnes haluttu versio on havaittu. Kutsutaan `test.yml`:n `version-check`-stepistä ennen testien ajoa.
## Rajapinta
```bash
check-version.sh <version_api_url> <expected_version>
```
- Exit 0: versiot täsmäävät
- Exit 1: versiota ei löytynyt `MAX_RETRIES` yrityksen jälkeen
## Fibonacci-sekvenssi
```
1s → 2s → 3s → 5s → 8s → 13s → 21s → 34s → 55s → 89s
```
Maksimiaika: ~231 sekuntia (1+2+3+5+8+13+21+34+55+89).
## Pseudokoodi
```bash
MAX_RETRIES=10
FIB=(1 2 3 5 8 13 21 34 55 89)
for i in $(seq 1 $MAX_RETRIES); do
ACTUAL=$(curl -s "$URL" | jq -r '.version // empty')
if [ "$ACTUAL" = "$EXPECTED" ]; then
echo "Version match: $ACTUAL"
exit 0
fi
echo "Attempt $i/$MAX_RETRIES: $ACTUAL != $EXPECTED, waiting ${FIB[$i-1]}s..."
sleep ${FIB[$i-1]}
done
echo "Version mismatch after $MAX_RETRIES attempts"
exit 1
```
## Verifiointi
Mock-API, jossa:
1. Pyyntö 14 → `{"version": "1.2.3.41"}` (vanha versio)
2. Pyyntö 5 → `{"version": "1.2.3.42"}` (odotettu versio)
Skripti pollaa ja löytää oikean version 5. yrityksellä → exit 0.
## Viitteet
- `docs/config-model.md` — Version check (Fibonacci-backoff)
- `docs/workflows.md``test.yml` version-check-steppi