fix(2.7.1): Auskuenfte, die stimmen - Fassung, Health, doctor, Ansicht
Der erste Durchlauf der Testinstanz hat neun Bugs zutage gefoerdert, und fast
alle waren dieselbe Sorte Fehler: eine Auskunft, die nicht stimmte.
Am folgenreichsten die Fassung. config/config.php fuehrte app.version als feste
Zeichenkette und stand seit 2.0.0 darauf, waehrend 2.7.0 lief - unbemerkt, weil
die Datei gitignored ist und in keinem Diff auftaucht. Zwei gemeldete Bugs sind
daran fehldiagnostiziert worden ("der Server ist zu alt"). src/bootstrap.php
leitet die Fassung jetzt aus "current" in public/docs/changelog.json ab.
Im Einzelnen:
- #346 Fassung aus dem Changelog statt aus der Konfiguration
- #60 /api/health ueberlebt eine leere Datenbank: eigener Check "schema",
healthy=false mit Begruendung statt HTTP 500
- #54 dc-testkit doctor prueft Mindestfassung (semantisch) und Rechte, statt
sie nur anzuzeigen - dafuer neu: GET /api/tokens/v1/whoami
- #53 dc-testkit.sh unter /testkit/ erreichbar (Route fehlte, der
dokumentierte Bezugsweg hat nie funktioniert) und mit LF ausgeliefert
(deploy.py/deploy_dev.py entfernen CR bei .sh/.bash beim Upload)
- #288 Filter und Formulare werfen nicht mehr aufs Dashboard zurueck: die
offene Ansicht wandert bei GET als "view" in den Query-String, und die
Filter loesen ueber requestSubmit() aus - form.submit() erzeugt kein
submit-Ereignis, weshalb der zentrale Zuhoerer dort nie lief
- #347 /api/bugtracker/v1/roadmap auch ohne .php erreichbar
- #55 Fassungshinweis in TESTUMGEBUNG.md 4.6 (serverseitig war das mit 2.6.0
bereits behoben)
Nicht geprueft: php -l. Auf dem Arbeitsplatz ist kein PHP installiert; die
Abnahme laeuft ueber die Testinstanz.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
afcbb3c091
commit
3b56839a1e
@@ -46,6 +46,13 @@ DC_PROJECT="${DC_PROJECT:-}"
|
||||
DC_TOKEN="${DC_TOKEN:-}"
|
||||
DC_CHANNEL="${DC_CHANNEL:-prod}"
|
||||
|
||||
# Aelteste Fassung des Deploymentcenters, mit der dieses Testkit vollstaendig
|
||||
# arbeiten kann. Darunter fehlen /api/license/v1/dev-key (dc-testkit license),
|
||||
# der Bezug ueber /testkit/ und /api/tokens/v1/whoami (Rechtepruefung in
|
||||
# doctor). Die Zahl stand vorher nur in einer Fehlermeldung mitten im Ablauf -
|
||||
# doctor kannte sie nicht und meldete "Bereit" auf einem zu alten Server.
|
||||
DC_MIN_SERVER="${DC_MIN_SERVER:-2.6.1}"
|
||||
|
||||
# Die Maschinenkennung entscheidet, welchen DEV-Schluessel der Server
|
||||
# heraussucht. Sie muss ueber Laeufe hinweg gleich bleiben - sonst sammelt sich
|
||||
# je Lauf ein weiterer Schluessel an, bis die Grenze je Projekt greift.
|
||||
@@ -241,6 +248,52 @@ ensure_state() {
|
||||
chmod 700 "$dir" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fassungen und Rechte
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Ist $1 aelter als $2? 0 = ja, 1 = nein, 2 = nicht vergleichbar.
|
||||
#
|
||||
# Nicht "sort -V": das fehlt auf BusyBox-Systemen, und die Antwort waere dort
|
||||
# still falsch statt laut fehlend. Ein Vorabkennzeichen (1.2.3-rc1) wird
|
||||
# abgeschnitten - fuer die Frage "reicht der Server aus" genuegt das.
|
||||
version_lt() {
|
||||
local a="${1%%-*}" b="${2%%-*}" i av bv
|
||||
|
||||
for i in 1 2 3; do
|
||||
av=$(printf '%s' "$a" | cut -d. -f$i)
|
||||
bv=$(printf '%s' "$b" | cut -d. -f$i)
|
||||
av="${av:-0}"; bv="${bv:-0}"
|
||||
|
||||
case "$av$bv" in
|
||||
''|*[!0-9]*) return 2 ;;
|
||||
esac
|
||||
|
||||
[ "$av" -lt "$bv" ] && return 0
|
||||
[ "$av" -gt "$bv" ] && return 1
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Deckt die Rechteliste $1 (JSON-Array aus whoami) das Recht $2 ab?
|
||||
#
|
||||
# Die Wildcards muessen mitgedacht werden: "*" deckt alles ab, "bugtracker:*"
|
||||
# alles darunter. Sonst meldete das Werkzeug ein Recht als fehlend, das der
|
||||
# Server anerkennt - und schickte jemanden ein Token neu bauen, das passt.
|
||||
has_scope() {
|
||||
local list="$1" want="$2" prefix
|
||||
prefix="${2%%:*}"
|
||||
|
||||
case "$list" in
|
||||
*'"*"'*) return 0 ;;
|
||||
*"\"$want\""*) return 0 ;;
|
||||
*"\"$prefix:*\""*) return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# doctor - laeuft hier ueberhaupt etwas?
|
||||
#
|
||||
@@ -263,9 +316,34 @@ cmd_doctor() {
|
||||
|
||||
step "Deploymentcenter unter $DC_URL"
|
||||
if api GET /api/health; then
|
||||
local healthy
|
||||
local healthy server_version
|
||||
healthy=$(printf '%s' "$API_BODY" | json_get '.healthy' || echo '?')
|
||||
ok "erreichbar, healthy=$healthy, Fassung $(printf '%s' "$API_BODY" | json_get '.version' || echo '?')"
|
||||
server_version=$(printf '%s' "$API_BODY" | json_get '.version' || echo '')
|
||||
ok "erreichbar, healthy=$healthy, Fassung ${server_version:-?}"
|
||||
|
||||
# Die Fassung stand doctor immer schon vor Augen - verglichen wurde sie
|
||||
# nur nie. Deshalb meldete er "Bereit" und der erste Schritt, der den
|
||||
# Server wirklich braucht, scheiterte danach mit "kennt
|
||||
# /api/license/v1/dev-key noch nicht".
|
||||
if [ -z "$server_version" ]; then
|
||||
warn "der Server nennt keine Fassung - $DC_MIN_SERVER nicht pruefbar"
|
||||
else
|
||||
version_lt "$server_version" "$DC_MIN_SERVER"
|
||||
case $? in
|
||||
0)
|
||||
warn "zu alt: $server_version - gebraucht wird mindestens $DC_MIN_SERVER"
|
||||
warn " Es fehlen: dc-testkit license (dev-key), der Bezug ueber /testkit/"
|
||||
warn " und die Rechtepruefung. Der Server muss deployt werden."
|
||||
failed=1
|
||||
;;
|
||||
2)
|
||||
warn "Fassung \"$server_version\" ist nicht auswertbar - $DC_MIN_SERVER ungeprueft"
|
||||
;;
|
||||
*)
|
||||
ok "erfuellt die Mindestfassung $DC_MIN_SERVER"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
warn "nicht erreichbar: $(api_error)"
|
||||
failed=1
|
||||
@@ -275,8 +353,50 @@ cmd_doctor() {
|
||||
if [ -z "$DC_TOKEN" ]; then
|
||||
warn "kein Token gesetzt (DC_TOKEN)"
|
||||
failed=1
|
||||
elif api GET /api/bugtracker/v1/projects; then
|
||||
ok "gueltig - der Bugtracker antwortet"
|
||||
elif api GET /api/tokens/v1/whoami; then
|
||||
# Fruehere Fassungen meldeten hier nur "gueltig - der Bugtracker
|
||||
# antwortet". Das lief auch mit einem Laufzeit-Token durch, dem
|
||||
# bugtracker:manage und license:dev fehlten - der Lauf scheiterte dann
|
||||
# erst dort, wo die Rechte wirklich gebraucht wurden.
|
||||
local tok_name tok_owner tok_project tok_scopes tok_workbench want
|
||||
tok_name=$(printf '%s' "$API_BODY" | json_get '.name' || echo '?')
|
||||
tok_owner=$(printf '%s' "$API_BODY" | json_get '.owner_type' || echo '?')
|
||||
tok_project=$(printf '%s' "$API_BODY" | json_get '.project_slug' || echo '')
|
||||
tok_scopes=$(printf '%s' "$API_BODY" | json_get '.scopes' || echo '[]')
|
||||
tok_workbench=$(printf '%s' "$API_BODY" | json_get '.is_workbench' || echo 'false')
|
||||
|
||||
ok "gueltig - \"$tok_name\", Besitzerart $tok_owner, Projekt ${tok_project:-keins}"
|
||||
dim " Rechte: $tok_scopes"
|
||||
|
||||
if [ "$tok_workbench" != 'true' ]; then
|
||||
warn "kein Werkbank-Token: Besitzerart ist $tok_owner, gebraucht wird dev_agent"
|
||||
warn " Ein Laufzeit-Token darf nicht in fremde Projekte melden (TESTUMGEBUNG.md 4.2)."
|
||||
failed=1
|
||||
fi
|
||||
|
||||
for want in bugtracker:manage license:dev updateservice:read; do
|
||||
if ! has_scope "$tok_scopes" "$want"; then
|
||||
warn "Recht fehlt: $want"
|
||||
failed=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$tok_project" ] && [ -n "$DC_PROJECT" ] && [ "$tok_project" != "$DC_PROJECT" ]; then
|
||||
warn "Token gehoert zu $tok_project, gearbeitet wird an $DC_PROJECT"
|
||||
warn " Je Projekt ein eigenes Token - sonst ist die Herkunft einer Meldung nicht mehr ablesbar."
|
||||
failed=1
|
||||
fi
|
||||
elif [ "$API_STATUS" = '404' ]; then
|
||||
# Server ohne whoami. Dann bleibt nur die alte, grobe Pruefung - und
|
||||
# der ausdrueckliche Hinweis, dass die Rechte ungeprueft sind. Still
|
||||
# "gueltig" zu melden waere genau der Fehler, der hier behoben wird.
|
||||
if api GET /api/bugtracker/v1/projects; then
|
||||
warn "gueltig, aber die Rechte sind ungeprueft"
|
||||
warn " /api/tokens/v1/whoami gibt es erst ab $DC_MIN_SERVER."
|
||||
else
|
||||
warn "Token wird nicht angenommen: $(api_error)"
|
||||
failed=1
|
||||
fi
|
||||
else
|
||||
warn "Token wird nicht angenommen: $(api_error)"
|
||||
failed=1
|
||||
|
||||
Reference in New Issue
Block a user