chore(infra): Gitea-Host auf git.hg-int.dev umstellen
Gitea läuft seit 2026-11-11 auf hivegrid-control (git.hg-int.dev); git.tool-ctrl.de wird abgeschaltet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c4701e5b37
commit
d09f79b673
56 files changed
+138
-138
No files matched your search
@@ -27,7 +27,7 @@ Die mitgepushte Website-Referenz liegt hier:
|
||||
03 Quellen und Referenzen/hivegrid-website
|
||||
```
|
||||
|
||||
Sie bildet den aktuellen Quellstand von `https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Website.git` ab. Lokale Verzeichnisse wie `node_modules/` und `.next/` sind Abhängigkeiten beziehungsweise Build-Caches und werden nicht in das Wireframe-Repo übernommen.
|
||||
Sie bildet den aktuellen Quellstand von `https://git.hg-int.dev/toolctrl-labs/HiveGrid-Website.git` ab. Lokale Verzeichnisse wie `node_modules/` und `.next/` sind Abhängigkeiten beziehungsweise Build-Caches und werden nicht in das Wireframe-Repo übernommen.
|
||||
|
||||
Alter lokaler Backup-Ordner:
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
|
||||
@@ -32,12 +32,12 @@ jobs:
|
||||
DATABASE_URL: postgresql://hivegrid:hivegrid@localhost:5432/hivegrid?schema=public
|
||||
# Same repo variable ci.yml exposes top-level: the internal Gitea host IP that the
|
||||
# "Resolve internal Gitea host" step writes to /etc/hosts so checkout can clone
|
||||
# git.tool-ctrl.de inside the runner container. Without it the step is a no-op.
|
||||
# git.hg-int.dev inside the runner container. Without it the step is a no-op.
|
||||
HIVEGRID_GITEA_HOST_IP: ${{ vars.HIVEGRID_GITEA_HOST_IP }}
|
||||
|
||||
steps:
|
||||
# Same as every ci.yml job: make the internal Gitea host resolvable inside the
|
||||
# runner container so actions/checkout can clone git.tool-ctrl.de. Without this the
|
||||
# runner container so actions/checkout can clone git.hg-int.dev. Without this the
|
||||
# checkout step fails (the job never had it -> a11y could never run on Gitea).
|
||||
- name: Resolve internal Gitea host
|
||||
run: |
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout main
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout pull request
|
||||
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1 || ! docker buildx version >/dev/null 2>&1 || ! docker compose version >/dev/null 2>&1; then
|
||||
@@ -100,7 +100,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -196,7 +196,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -276,7 +276,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -327,7 +327,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -400,7 +400,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -463,7 +463,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -523,7 +523,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -583,7 +583,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -649,7 +649,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
@@ -710,7 +710,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
runs-on: toolctrl-deploy
|
||||
timeout-minutes: 90
|
||||
env:
|
||||
REGISTRY: git.tool-ctrl.de
|
||||
REGISTRY: git.hg-int.dev
|
||||
IMAGE_NAMESPACE: toolctrl-labs
|
||||
IMAGE_PREFIX: hivegrid
|
||||
DEPLOY_BUILDER_NAME: hivegrid-deploy-v0312-gc1
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
MISSING_TOOLS=""
|
||||
@@ -322,7 +322,7 @@ jobs:
|
||||
sh -eu <<'HIVEGRID_BUILDKIT_HOST_OVERRIDE'
|
||||
HOSTS_TMP="$(mktemp)"
|
||||
trap 'rm -f "$HOSTS_TMP"' EXIT HUP INT TERM
|
||||
awk -v host="git.tool-ctrl.de" '
|
||||
awk -v host="git.hg-int.dev" '
|
||||
{
|
||||
rewritten = ""
|
||||
for (field = 1; field <= NF; field += 1) {
|
||||
@@ -337,9 +337,9 @@ jobs:
|
||||
}
|
||||
' /etc/hosts > "$HOSTS_TMP"
|
||||
cat "$HOSTS_TMP" > /etc/hosts
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
BUILDKIT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" '{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" -v ip="$HIVEGRID_GITEA_HOST_IP" '$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
BUILDKIT_HOST_COUNT="$(awk -v host="git.hg-int.dev" '{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.hg-int.dev" -v ip="$HIVEGRID_GITEA_HOST_IP" '$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
if [ "$BUILDKIT_HOST_COUNT" -ne 1 ] || [ "$BUILDKIT_EXACT_HOST_COUNT" -ne 1 ]; then
|
||||
echo "BuildKit registry host override did not converge to exactly one validated mapping"
|
||||
exit 1
|
||||
|
||||
@@ -119,7 +119,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout
|
||||
|
||||
@@ -14,7 +14,7 @@ permissions:
|
||||
contents: write
|
||||
|
||||
env:
|
||||
GITEA_HOST: ${{ vars.GITEA_HOST || 'git.tool-ctrl.de' }}
|
||||
GITEA_HOST: ${{ vars.GITEA_HOST || 'git.hg-int.dev' }}
|
||||
HIVEGRID_GITEA_HOST_IP: ${{ vars.HIVEGRID_GITEA_HOST_IP }}
|
||||
LOC_METRICS_OUTPUT_DIR: /tmp/hivegrid-loc-history
|
||||
SOURCE_REF: ${{ gitea.ref }}
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout full mainline history
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
|
||||
- name: Checkout PR head
|
||||
|
||||
@@ -5,7 +5,7 @@ kommenden finalen Subframe-Screens landet, baut der Dev nach **denselben** Layou
|
||||
Standards wie David. Dann ist Davids späterer Nachzug fast nur noch Feinschliff.
|
||||
|
||||
**Quelle & Autorität:** Diese Werte sind ein **In-Repo-Spiegel** von Davids Wireframe-Vault
|
||||
`HiveGrid-Wireframes/` (Schwester-Ordner: `../HiveGrid-Wireframes/`, Gitea `git.tool-ctrl.de/david/Hivegrid-Wireframes`).
|
||||
`HiveGrid-Wireframes/` (Schwester-Ordner: `../HiveGrid-Wireframes/`, Gitea `git.hg-int.dev/david/Hivegrid-Wireframes`).
|
||||
Autoritativ ist **immer der Vault**:
|
||||
- `../HiveGrid-Wireframes/04 Standards/Subframe UI Standards/Layout/README.md` (Layout-Bibel, Entscheidungen D01–D0x)
|
||||
- `../HiveGrid-Wireframes/Tickets/Fertige Tickets/D-D0b Layout Standards.md` (Handoff der Layout-Standards)
|
||||
|
||||
@@ -21,7 +21,7 @@ for line in open(os.path.expanduser("~/.cli-tokens/plane")):
|
||||
BASE = TOK["PLANE_BASE_URL"].rstrip("/"); WS = TOK["PLANE_WORKSPACE"]; KEY = TOK["PLANE_API_KEY"]
|
||||
PID = "35d0d968-8ab3-40cc-97b8-b81d917dc5df"
|
||||
API = f"{BASE}/api/v1/workspaces/{WS}/projects/{PID}"
|
||||
GITEA = "https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/src/branch/main"
|
||||
GITEA = "https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/src/branch/main"
|
||||
BRIEFDIR = ".planning/designer-briefs"
|
||||
|
||||
def req(method, path, body=None):
|
||||
|
||||
@@ -16,7 +16,7 @@ for line in open(os.path.expanduser("~/.cli-tokens/plane")):
|
||||
BASE = TOK["PLANE_BASE_URL"].rstrip("/"); WS = TOK["PLANE_WORKSPACE"]; KEY = TOK["PLANE_API_KEY"]
|
||||
PID = "35d0d968-8ab3-40cc-97b8-b81d917dc5df"
|
||||
API = f"{BASE}/api/v1/workspaces/{WS}/projects/{PID}"
|
||||
DOC_BASE = "https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/src/branch/main/.planning/ticket-docs/"
|
||||
DOC_BASE = "https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/src/branch/main/.planning/ticket-docs/"
|
||||
LINK = ('<a target="_blank" class="text-accent-secondary underline underline-offset-[3px] '
|
||||
'hover:text-accent-primary transition-colors cursor-pointer" href="{url}" '
|
||||
'rel="noopener noreferrer">📄 Ticket-Doku ({wid})</a><br>')
|
||||
|
||||
@@ -31,7 +31,7 @@ for line in open(os.path.expanduser("~/.cli-tokens/plane")):
|
||||
BASE = TOK["PLANE_BASE_URL"].rstrip("/"); WS = TOK["PLANE_WORKSPACE"]; KEY = TOK["PLANE_API_KEY"]
|
||||
PID = "35d0d968-8ab3-40cc-97b8-b81d917dc5df" # HiveGrid (hardcoded, NICHT PowerLinked)
|
||||
API = f"{BASE}/api/v1/workspaces/{WS}/projects/{PID}"
|
||||
GITEA = "https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/src/branch/main"
|
||||
GITEA = "https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/src/branch/main"
|
||||
|
||||
def _once(method, url, body):
|
||||
r = urllib.request.Request(url, data=(json.dumps(body).encode() if body is not None else None), method=method)
|
||||
|
||||
@@ -92,7 +92,7 @@ Core-Tests: 1.001 Testdateien / 7.155 Tests bestanden; `@hivegrid/db`: 94 Testda
|
||||
Rollback, Merge-Reihenfolge und Cutover sind in `docs/ops/prisma-baseline.md` dokumentiert. Lokal sind 7/8
|
||||
DoD erfüllt; offen bleibt ausschließlich PR plus grüne Remote-CI vor dem gemeinsamen Merge-Sign-off.
|
||||
|
||||
2026-07-22: PR [#215](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/215) gegen `main` ist
|
||||
2026-07-22: PR [#215](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/215) gegen `main` ist
|
||||
eröffnet. Die Remote-CI für Implementierungs-Commit `66b1b1b68` ist mit 13/13 Checks grün, einschließlich
|
||||
Database Checks mit Baseline-Äquivalenz und Live-RLS sowie Docker Smoke, Typecheck/Tests, Coverage und
|
||||
Build/Bundle. Damit sind 8/8 DoD erfüllt. Der PR bleibt bis zum gemeinsamen Sign-off ungemergt.
|
||||
@@ -119,14 +119,14 @@ Runner-Log unmittelbar danach gesund. Der Fixture nutzt nun wie der benachbarte
|
||||
auf 90 Sekunden begrenzten TCP-`pg_isready`-Probe. Der neue statische Vertragstest und der reale lokale
|
||||
SHK-Clean-/Legacy-Upgrade-Lauf (9/9 Tests) sind grün. Es gab keine Datenbank- oder Anwendungsänderung.
|
||||
|
||||
2026-07-22: Hotfix-PR [#218](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/218) wurde mit
|
||||
2026-07-22: Hotfix-PR [#218](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/218) wurde mit
|
||||
Merge-Commit `ce748f10b` nach `main` übernommen. Der exakt rebasierte PR-Head `bfbae1b98` bestand CI-Run
|
||||
[11057](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/11057) mit 11/11 grünen Checks.
|
||||
[11057](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/11057) mit 11/11 grünen Checks.
|
||||
Der erste Post-Merge-Lauf übernahm die Baseline auf Staging nach Prüfung von drei Git-belegten historischen
|
||||
Checksum-Varianten sowie Live-Schema- und sicherheitskritischer Katalogparität; anschließend meldete Prisma
|
||||
keine ausstehenden Migrationen. Ein nachgelagerter, transienter Controller-Pre-Stop-Health-Probe brach den
|
||||
Rollout sicher ab und stellte den vorherigen Release wieder her. Der idempotente Deploy-Re-Run
|
||||
[11058, Job 46077](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/11058/jobs/46077)
|
||||
[11058, Job 46077](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/11058/jobs/46077)
|
||||
erkannte die bereits verbuchte Baseline, bestätigte erneut keine ausstehenden Migrationen und rollte alle
|
||||
Staging-Ressourcen einschließlich des revisionsgebundenen Portal-Domain-Controllers erfolgreich aus.
|
||||
`DB-BASELINE`: 8/8 DoD = 100 % done; 0 Punkte offen.
|
||||
|
||||
@@ -66,7 +66,7 @@ Gebaut in 6 Slices auf `feat/R-P6` (Branch von `origin/main`), Pre-Flight grün,
|
||||
- **Slice 5a** Permissions + Sidebar (`78a000b9d`): `crm.*`-Bundle in DefaultPermissions + permissions-seed (DoD 8), Sidebar `/crm`→`/contacts` + Permission-Gate (DoD 6/7), roleDisplay-Scope-i18n.
|
||||
- **Slice 5b** Entity-Builder-CRM-Pfad abgelöst + SHK-Seed verdrahtet (`677b23e1e`): autogenerierte/admin/dashboard CRM-Routes gelöscht, SeedService→`seedShkCustomFieldTemplate` (DoD 6), RowsApi-contact-Spezialfall nachgezogen (DoD 1).
|
||||
|
||||
**Proof:** Voller Test grün (3646 passed / 0 failed, 616 Test-Files); `pnpm typecheck` + `pnpm lint` + `pnpm verify:i18n` (parity 7488 keys, 0 forbidden) exit 0; 9 CRM-Tabellen in DB; decision-report-Check grün. **PR #13** (`git.tool-ctrl.de/.../pulls/13`) → **CI grün, alle 11 Jobs**. CI-Footgun gefixt: 9 neue tenantId-Modelle mussten in `packages/cli` `TENANT_SCOPED_MODELS` registriert werden (lokaler `pnpm test` deckt nur Core ab, CI fährt zusätzlich `test:packages`).
|
||||
**Proof:** Voller Test grün (3646 passed / 0 failed, 616 Test-Files); `pnpm typecheck` + `pnpm lint` + `pnpm verify:i18n` (parity 7488 keys, 0 forbidden) exit 0; 9 CRM-Tabellen in DB; decision-report-Check grün. **PR #13** (`git.hg-int.dev/.../pulls/13`) → **CI grün, alle 11 Jobs**. CI-Footgun gefixt: 9 neue tenantId-Modelle mussten in `packages/cli` `TENANT_SCOPED_MODELS` registriert werden (lokaler `pnpm test` deckt nur Core ab, CI fährt zusätzlich `test:packages`).
|
||||
|
||||
**Dokumentierte Default-Entscheidungen (Lücken, kein Scope-Konflikt):**
|
||||
1. **Module-Key** = registrierter `crm-basic` (Ticket sagt `'crm'`; ein ungeseedeter `'crm'`-Key → `tenantHasModule`=false → Modul unsichtbar).
|
||||
|
||||
@@ -205,7 +205,7 @@ keine neue Deliverability-Plattform und keine Reportdaten, die P14 nicht zuverl
|
||||
|
||||
**2026-07-25 · Umsetzungs-Proof:** Der geführte E-Mail-Marketing-Flow wurde mit den Commits
|
||||
`c5cc6596d` und `029f7522c` umgesetzt. PR
|
||||
[#251](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/251) bleibt bis zur lokalen
|
||||
[#251](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/251) bleibt bis zur lokalen
|
||||
Gesamtabnahme offen.
|
||||
|
||||
- Security-/RLS-Proof: Sidebar, Parent-Route, Loader und Actions unterscheiden
|
||||
@@ -229,7 +229,7 @@ Gesamtabnahme offen.
|
||||
`verify:ui-visual`, `test:hot-swap`, `verify:a11y-coverage`, gezielte Security-/VM-/Action-/
|
||||
Worker-Tests sowie der Playwright-Hauptflow und Mobile-A11y bei 390 px und 320 px sind lokal
|
||||
grün. Der vollständige
|
||||
[PR-CI-Lauf 11207](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/11207)
|
||||
[PR-CI-Lauf 11207](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/11207)
|
||||
ist mit allen elf Jobs einschließlich Docker-Smoke, Database Checks, Build/Bundle und
|
||||
Typecheck/Tests grün.
|
||||
- Interim-Baseline:
|
||||
|
||||
@@ -205,7 +205,7 @@ keine allgemeine Dokumentenplattform. Passwörter werden ausschließlich in `R-U
|
||||
|
||||
**2026-07-25 · Umsetzungs-Proof:** Der rollenabhängige Personal-Hub wurde mit den Commits
|
||||
`339262115`, `dd6cf7aeb`, `be27a8c4f` und `39297fb01` umgesetzt. PR
|
||||
[#249](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/249) bleibt bis zur lokalen
|
||||
[#249](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/249) bleibt bis zur lokalen
|
||||
Gesamtabnahme offen.
|
||||
|
||||
- Permission-/RLS-Proof: Self-, Direktbericht-, Genehmiger-, Audience- und granulare HR-Rechte
|
||||
@@ -227,7 +227,7 @@ Gesamtabnahme offen.
|
||||
`verify:permissions-audit-baseline`, `verify:ui-visual`, `test:hot-swap`,
|
||||
`verify:a11y-coverage`, 42 gezielte Payslip-/Search-/Visual-/Accessibility-Tests sowie beide
|
||||
kompilierten Playwright-Smokes sind lokal grün. Der vollständige
|
||||
[PR-CI-Lauf 11185](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/11185)
|
||||
[PR-CI-Lauf 11185](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/11185)
|
||||
ist mit allen elf Jobs einschließlich Docker-Smoke, Database Checks und Typecheck/Tests grün.
|
||||
- Interim-Baseline:
|
||||
`apps/web/app/components/screens/hr/__snapshots__/personnel-interim.visual.test.tsx.snap`;
|
||||
|
||||
@@ -209,7 +209,7 @@ Kein Passwortgenerator, kein Browser-Autofill, keine Extension, keine Gastfreiga
|
||||
**2026-07-25 · Umsetzungs-Proof:** Der Passwort-Safe ist mit Commit `0a84f474f` als
|
||||
eigenständiger Bereich `/:tenant/passwords` umgesetzt; der R-UX1-Paritätsfix wurde mit
|
||||
`fffa0b4da` auf den Stack propagiert. PR
|
||||
[#248](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/248) bleibt bis zur lokalen
|
||||
[#248](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/248) bleibt bis zur lokalen
|
||||
Gesamtabnahme offen.
|
||||
|
||||
- Reachability-/Permission-Proof: permission-gegatete Sidebar, sichere Redirects der alten
|
||||
|
||||
@@ -160,7 +160,7 @@ Core-/Portal-Ressourcen-, Digest-, Health- und UAT-Nachweis.
|
||||
2026-07-16 · Raffael: PR `#125` wurde nach grünem PR-Lauf per Squash gemergt. Die beiden aus dem
|
||||
ersten Rollout sichtbar gewordenen Deploy-Vertragsfehler wurden in PR `#130` und PR `#132` jeweils
|
||||
mit Regressionstests behoben. Der abschließende Deploy-Lauf
|
||||
[`#10300`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) hat die exakte
|
||||
[`#10300`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) hat die exakte
|
||||
Revision `f54b04162b2823b1d2f6db0318baf1a7431c5b66` erfolgreich nach Staging und Produktion
|
||||
promotet.
|
||||
|
||||
@@ -281,7 +281,7 @@ offen.
|
||||
### CI-Korrektur: RLS-Overlay-Drift
|
||||
|
||||
2026-07-18 · Raffael: Gitea-Run
|
||||
[`#10519`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10519) hat nach einem
|
||||
[`#10519`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10519) hat nach einem
|
||||
erfolgreichen 20:48-Minuten-Docker-Build den Web-Runtime-Smoke beim erneuten Einspielen des
|
||||
Standalone-RLS-Overlays abgebrochen. Der Overlay-Resolver
|
||||
`hivegrid_portal_resolve_user_email` referenzierte durch eine fehlerhafte Predicate-Übernahme den
|
||||
@@ -308,7 +308,7 @@ Staging-/UAT-Punkte; die Korrektur zählt keinen neuen DoD-Punkt.
|
||||
### CI-Korrektur: Mail-Worker-Runtime-Smoke
|
||||
|
||||
2026-07-19 · Raffael: Gitea-Run
|
||||
[`#10605`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10605) hat den neuen
|
||||
[`#10605`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10605) hat den neuen
|
||||
fail-closed `CRYPTO_SECRET`-Vertrag des Mail-Workers korrekt erkannt. Der produktive
|
||||
Coolify-/Worker-Vertrag war bereits vollständig nachgezogen; ausschließlich die isolierte
|
||||
`worker:health-mail`-Probe startete noch ohne den nicht-produktiven Envelope-Key-Fixture und meldete
|
||||
|
||||
@@ -74,7 +74,7 @@ Produktfreigabe vorgenommen.
|
||||
2026-07-16 · Raffael: Die gemeinsame P26-Migration
|
||||
`prisma/migrations/20260716123000_va_p26_customer_portal/migration.sql` wurde mit PR `#125` gemergt.
|
||||
Nach den Deploy-Hotfixes `#130` und `#132` lief Deploy
|
||||
[`#10300`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) für Revision
|
||||
[`#10300`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) für Revision
|
||||
`f54b04162b2823b1d2f6db0318baf1a7431c5b66` vollständig grün. Migration-Chain-Parität,
|
||||
Tenant-Policy-Vertrag, RLS-Release-Readiness, Live-RLS-Isolation sowie Portal-Health und -Readiness
|
||||
bestanden mit der eingeschränkten `hivegrid_portal`-Rolle über PgBouncer.
|
||||
|
||||
@@ -73,7 +73,7 @@ Done gesetzt; es gab keine Deployment-, DNS-, TLS-, Coolify- oder Produktionsmut
|
||||
### Teilnachweis aus dem P26-Basis-Deploy
|
||||
|
||||
2026-07-16 · Raffael: Deploy
|
||||
[`#10300`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) hat die gemeinsame
|
||||
[`#10300`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) hat die gemeinsame
|
||||
P26-Migration, die getrennten Core-/Portal-Rollen über PgBouncer, denselben Web-Digest für beide
|
||||
Surfaces sowie Health/Readiness der Standardhost-Portal-Runtime erfolgreich ausgerollt. Der
|
||||
Staging-Standardhost ist technisch erreichbar und die Basis-RLS-Grenze ist aktiv.
|
||||
@@ -167,7 +167,7 @@ Non-root **4/4**, der revisionsgebundene Controller-Image-Smoke und ein echter
|
||||
Tombstone, Legacy-Exact-Host und neuen aktiven Router.
|
||||
|
||||
Der automatische Staging-Deploy
|
||||
[`#10925`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10925) war auf der
|
||||
[`#10925`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10925) war auf der
|
||||
Merge-Revision vollständig grün. Build/Signatur, Migration, RLS, Core-/Portal-Health, abhängige
|
||||
Dienste und der neue 31-Sekunden-Drain bestanden. Der Controller akzeptierte den neuen Release;
|
||||
der Recovery-Pfad erkannte dies und rollte nicht zurück. Alle Produktionspfade meldeten explizit
|
||||
|
||||
@@ -456,7 +456,7 @@ bleiben bewusst geteilte Dienste über authentifiziertes öffentliches TLS.
|
||||
repariert, sondern append-only durch einen bytegleichen History-Repair-PR, der den ursprünglichen
|
||||
Feature-Head per normalem Merge-Commit anbindet.
|
||||
- **Coolify** ist das Deploy-Target (kein K8s/Terraform). Hierarchie: **Projekt = Produkt** (`HiveGrid`, TitleCase) · **Environment = Phase** (`production`/`staging`, lowercase) · **Resource = Service** (`hivegrid-web`/`-api`/`-worker`, kebab-case). Staging läuft über das zentrale Estate-Coolify; HiveGrid-Prod über das eigene AD-24-Coolify.
|
||||
- **Build-once / deploy-via-pull:** CI (Gitea-Runner `toolctrl-ci`) baut **ein** Image, pusht in die **Gitea Package Registry** (`git.tool-ctrl.de/toolctrl-labs/<image>:<sha>` immutable + Alias-Tags); Coolify **pullt** nur — **kein** Build in Coolify. Rollback = altes `:<sha>` neu deployen.
|
||||
- **Build-once / deploy-via-pull:** CI (Gitea-Runner `toolctrl-ci`) baut **ein** Image, pusht in die **Gitea Package Registry** (`git.hg-int.dev/toolctrl-labs/<image>:<sha>` immutable + Alias-Tags); Coolify **pullt** nur — **kein** Build in Coolify. Rollback = altes `:<sha>` neu deployen.
|
||||
- **CI triggert Coolify mit `POST /api/v1/deploy?uuid=…&force=true`** — NICHT `/restart` (das reuset das gecachte Image und shipped still alten Code, `infra/LESSONS.md §10`).
|
||||
- Repo unter `toolctrl-labs/<name>` in **Gitea**, **private by default**, mit `Dockerfile` + `.gitea/workflows/`. Clone von Cloud-Hosts via **HTTPS+PAT** (Gitea-SSH:2222 ist von Hetzner unerreichbar, ADR-003).
|
||||
- **DNS in Cloudflare** (SSL-Mode strict): A-Record `proxied=false` bis das LE-Cert steht, danach `true`. Mail: **OUT = Mailjet**, **IN = mailbox.org**.
|
||||
|
||||
@@ -6,13 +6,13 @@ HiveGrid Cloud ist die Produkt-Codebase fuer HiveGrid 2.0. Das Repo basiert hist
|
||||
|
||||
## Codeumfang
|
||||
|
||||
[](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/loc-history.csv)
|
||||
[](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/loc-history.csv)
|
||||
|
||||
Der Verlauf zaehlt nicht-leere Quellcodezeilen auf dem First-Parent-Pfad von `main`. Ausgangspunkt ist der Fork-/Code-Import vom 04.06.2026; die importierte Codebasis wird deshalb als Baseline und nicht als Wachstum gewertet. Die [CSV-Rohdaten](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/loc-history.csv) werden nach jedem Push auf `main` aktualisiert. Lokal laesst sich der Graph mit `pnpm metrics:loc-history` neu erzeugen; die Regeln stehen im [Generator](scripts/metrics/loc-history.mjs).
|
||||
Der Verlauf zaehlt nicht-leere Quellcodezeilen auf dem First-Parent-Pfad von `main`. Ausgangspunkt ist der Fork-/Code-Import vom 04.06.2026; die importierte Codebasis wird deshalb als Baseline und nicht als Wachstum gewertet. Die [CSV-Rohdaten](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/loc-history.csv) werden nach jedem Push auf `main` aktualisiert. Lokal laesst sich der Graph mit `pnpm metrics:loc-history` neu erzeugen; die Regeln stehen im [Generator](scripts/metrics/loc-history.mjs).
|
||||
|
||||
[](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/commit-history.csv)
|
||||
[](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/commit-history.csv)
|
||||
|
||||
Die Commit-Aktivitaet zeigt die letzten 60 Kalendertage bis zur veroeffentlichten `main`-Revision. Gezaehlt werden alle von `main` erreichbaren Commits nach Berliner Kalendertag, inklusive Merge- und Branch-Commits; Tage ohne Commit bleiben als Null-Tage sichtbar. Die [CSV-Rohdaten](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/commit-history.csv) und das SVG werden mit jedem LOC-Lauf aktualisiert. Lokal laesst sich der Graph mit `pnpm metrics:commit-history` neu erzeugen; die Regeln stehen im [Generator](scripts/metrics/commit-history.mjs).
|
||||
Die Commit-Aktivitaet zeigt die letzten 60 Kalendertage bis zur veroeffentlichten `main`-Revision. Gezaehlt werden alle von `main` erreichbaren Commits nach Berliner Kalendertag, inklusive Merge- und Branch-Commits; Tage ohne Commit bleiben als Null-Tage sichtbar. Die [CSV-Rohdaten](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics/commit-history.csv) und das SVG werden mit jedem LOC-Lauf aktualisiert. Lokal laesst sich der Graph mit `pnpm metrics:commit-history` neu erzeugen; die Regeln stehen im [Generator](scripts/metrics/commit-history.mjs).
|
||||
|
||||
## Zuerst lesen
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ describe("admin deploy snapshot service", () => {
|
||||
APP_REVISION: "abc123",
|
||||
SENTRY_RELEASE: "rel-1",
|
||||
GIT_BRANCH: "main",
|
||||
DOCKER_IMAGE: "git.tool-ctrl.de/toolctrl-labs/hivegrid-web:abc123",
|
||||
DOCKER_IMAGE: "git.hg-int.dev/toolctrl-labs/hivegrid-web:abc123",
|
||||
BUILD_TIME: "2026-07-09T00:00:00.000Z",
|
||||
})
|
||||
).toEqual({
|
||||
@@ -20,7 +20,7 @@ describe("admin deploy snapshot service", () => {
|
||||
release: "rel-1",
|
||||
revision: "abc123",
|
||||
branch: "main",
|
||||
image: "git.tool-ctrl.de/toolctrl-labs/hivegrid-web:abc123",
|
||||
image: "git.hg-int.dev/toolctrl-labs/hivegrid-web:abc123",
|
||||
buildTime: "2026-07-09T00:00:00.000Z",
|
||||
});
|
||||
});
|
||||
|
||||
@@ -23,7 +23,7 @@ Domain-Controller sind grün. Produktion wurde durch diesen UI-/Branding-Release
|
||||
|
||||
- Feature-Merge: PR `#125`; Deploy-Hotfixes: PR `#130` und `#132`.
|
||||
- Finaler Lauf:
|
||||
[`#10300`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300), exakte Revision
|
||||
[`#10300`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300), exakte Revision
|
||||
`f54b04162b2823b1d2f6db0318baf1a7431c5b66`, vollständig grün für Staging und Produktion.
|
||||
- Forward-only Migration:
|
||||
`prisma/migrations/20260716123000_va_p26_customer_portal/migration.sql`, ausgeführt im
|
||||
@@ -436,7 +436,7 @@ Staging-RLS-Proof.
|
||||
### Ausgeführter Merge-/RLS-Proof vom 2026-07-16
|
||||
|
||||
Die reviewte Migration wurde mit PR `#125` in `main` übernommen und im Deploy-Lauf
|
||||
[`#10300`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) als einmaliger
|
||||
[`#10300`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/10300) als einmaliger
|
||||
Migrationsschritt ausgeführt. Der Lauf prüfte die exakte Revision
|
||||
`f54b04162b2823b1d2f6db0318baf1a7431c5b66`, Migration-Chain-Parität, Tenant-Policy-Vertrag,
|
||||
RLS-Release-Readiness und Live-RLS-Isolation. App, Worker und Portal liefen mit getrennten Rollen
|
||||
|
||||
@@ -119,9 +119,9 @@ finaler Subframe-/Design-Polish offen; der technische Funktionsumfang von `VA-P2
|
||||
|
||||
## 8. Release-Nachweis
|
||||
|
||||
- UI-/Branding-PR: [`#212`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/pulls/212)
|
||||
- UI-/Branding-PR: [`#212`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/pulls/212)
|
||||
- Main-Revision: `090e2558a6965e1c5804eb24d3eab5da8c8611a8`
|
||||
- Staging-Deploy: [`#11018`](https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/actions/runs/11018)
|
||||
- Staging-Deploy: [`#11018`](https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/actions/runs/11018)
|
||||
- CI: 13/13 PR-Jobs grün; Typecheck, Lint, Core-Tests, Visual-, A11y-, i18n-, Hot-Swap-, Bundle- und
|
||||
Docker-Gates grün.
|
||||
- Core und Portal verwenden denselben Web-Digest
|
||||
|
||||
@@ -30,7 +30,7 @@ For the lightweight alternative (GlitchTip, no Performance/Replay/OTLP), see
|
||||
|
||||
```bash
|
||||
cd /data/coolify/services/sentry
|
||||
git clone git@git.tool-ctrl.de:toolctrl-labs/HiveGrid-Cloud.git .
|
||||
git clone git@git.hg-int.dev:toolctrl-labs/HiveGrid-Cloud.git .
|
||||
cd infra/sentry
|
||||
cp .env.example .env
|
||||
# Edit .env — fill SENTRY_ADMIN_EMAIL, SENTRY_ADMIN_PASSWORD,
|
||||
@@ -314,7 +314,7 @@ and passes source-maps through the workflow artifact instead.
|
||||
|
||||
### 2. Store secrets in Gitea Actions
|
||||
|
||||
In Gitea (`git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud`) open
|
||||
In Gitea (`git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud`) open
|
||||
**Repository Settings → Actions → Secrets** and create the same three
|
||||
secrets (`SENTRY_AUTH_TOKEN`, `SENTRY_ORG`, `SENTRY_URL`) with
|
||||
identical values. Gitea's repository secret scoping makes them available to the
|
||||
|
||||
@@ -16,7 +16,7 @@ ist Mesh-Peer und erreicht Gitea über `10.42.0.2`. Gitea-Server bleibt, wo er i
|
||||
Runner-Last zieht um.
|
||||
|
||||
- Compose: `/opt/stacks/gitea-ci-runner/docker-compose.yml` (`network_mode: host`,
|
||||
`--add-host git.tool-ctrl.de:10.42.0.2`, `CONFIG_FILE=/data/config.yaml`).
|
||||
`--add-host git.hg-int.dev:195.201.133.26`, `CONFIG_FILE=/data/config.yaml`).
|
||||
- Config: `/srv/data/gitea-ci-runner/config.yaml` (capacity, labels, cache.dir).
|
||||
- Homeserver-Runner steht auf `restart=no` (aus, kein Auto-Restart, keine OOM-Schleife).
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ Alle in **fsn1**, im Private Network, mit Firewall + SSH-Key. cx-Linie (x86):
|
||||
> insbesondere gelten heute der Entrypoint-basierte Migrationslauf und der
|
||||
> kanonische `POST /api/v1/deploy?uuid=<resource-uuid>&force=true`-Trigger.
|
||||
|
||||
- Image-Schema: `git.tool-ctrl.de/toolctrl-labs/hivegrid/{web,api,worker}:<commit-sha>`, build_pack `dockerimage`, Port **8080**.
|
||||
- Image-Schema: `git.hg-int.dev/toolctrl-labs/hivegrid/{web,api,worker}:<commit-sha>`, build_pack `dockerimage`, Port **8080**.
|
||||
- **Promote = retag, kein Rebuild:** Prod deployt denselben SHA-Tag, der getestet/gestaged ist (aktuell `9ae3963d…` = live auf Staging → Image existiert in der Gitea-Registry).
|
||||
- **7 Coolify-Apps** (nicht 3!): `web`, `api`, `worker-general`, `worker-mail`, `worker-import`, `worker-webhook`, `worker-plugin` — web/api aus `/web`+`/api`-Image, die 5 Worker aus `/worker`-Image mit unterschiedlichem `WORKER_QUEUE_GROUP`.
|
||||
- Damalige Annahme: `scripts/coolify-deploy.mjs` patcht `docker_registry_image_tag` und ein Coolify-Pre-Deployment-Command führt `migrate deploy` aus. Der Hook-Teil dieser Annahme ist überholt: Heute setzt die Pipeline die Boot-Flags, leert beide Hook-Slots und triggert nach dem Image-Patch mit `POST /api/v1/deploy?uuid=<resource-uuid>&force=true`; Migration und Seed laufen im neuen Web-Container über `start.sh`.
|
||||
@@ -183,7 +183,7 @@ Alle in **fsn1**, im Private Network, mit Firewall + SSH-Key. cx-Linie (x86):
|
||||
|
||||
## App-Deploy + Go-Live (Schritt 5–6) — LIVE 2026-06-19
|
||||
|
||||
- **Registry-Pull:** `docker login git.tool-ctrl.de` auf web/api/worker (User `gitea-admin`; Härtung: scoped Bot-PAT). Image `hivegrid/{web,api,worker}:9ae3963d…` (= Staging-Stand) gepullt.
|
||||
- **Registry-Pull:** `docker login git.hg-int.dev` auf web/api/worker (User `gitea-admin`; Härtung: scoped Bot-PAT). Image `hivegrid/{web,api,worker}:9ae3963d…` (= Staging-Stand) gepullt.
|
||||
- **7 Coolify-Apps** (Docker-Image): `hivegrid-web`, `-api`, `-worker-{general,mail,import,webhook,plugin}` (Worker je `WORKER_QUEUE_GROUP`). UUIDs in `~/.cli-tokens/coolify-prod`.
|
||||
- **Prod-Env** aus Staging transformiert (Bug gefixt: bei doppelten build/runtime-Keys nicht-leeren Wert bevorzugen — sonst Mailjet u.a. leer → Worker-Crash). Frische, app-konsistente Secrets in `~/.cli-tokens/hivegrid-prod-app-secrets`. Demo-Seed AUS, `WEB_NOINDEX` raus (Prod indexierbar).
|
||||
- **Postgres-Image korrigiert:** `postgres:16-alpine` → `pgvector/pgvector:pg16` (Migration `04_enable_pgvector` brauchte die Extension). Migration im laufenden web-Container ausgeführt → **alle Migrationen angewandt** (inkl. P2 `UserSession`+`TrustedDevice`).
|
||||
|
||||
@@ -13,7 +13,7 @@ const envOr = (key, fallback) => {
|
||||
export const CI_RUNNER_LABEL = envOr("HIVEGRID_CI_RUNNER", "toolctrl-ci");
|
||||
export const DEPLOY_RUNNER_LABEL = envOr("HIVEGRID_DEPLOY_RUNNER", "toolctrl-deploy");
|
||||
export const IMAGE_PREFIX = envOr("HIVEGRID_IMAGE_PREFIX", "hivegrid");
|
||||
export const GIT_HOST = envOr("HIVEGRID_GIT_HOST", "git.tool-ctrl.de");
|
||||
export const GIT_HOST = envOr("HIVEGRID_GIT_HOST", "git.hg-int.dev");
|
||||
export const REGISTRY_NAMESPACE = envOr("HIVEGRID_REGISTRY_NAMESPACE", "toolctrl-labs");
|
||||
export const DB_USER = envOr("HIVEGRID_DB_USER", "hivegrid");
|
||||
export const DB_NAME = envOr("HIVEGRID_DB_NAME", "hivegrid");
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ describe("repository metrics publication contract", () => {
|
||||
|
||||
it("embeds both live SVGs and links their CSVs plus the local generators", () => {
|
||||
const readme = read(README_PATH);
|
||||
const assetBase = "https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics";
|
||||
const assetBase = "https://git.hg-int.dev/toolctrl-labs/HiveGrid-Cloud/releases/download/loc-metrics";
|
||||
|
||||
expect(readme).toContain(``);
|
||||
expect(readme).toContain(`${assetBase}/loc-history.csv`);
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
//
|
||||
// Environment:
|
||||
// GITEA_TOKEN required. PAT with repository write scope.
|
||||
// GITEA_HOST default: git.tool-ctrl.de
|
||||
// GITEA_HOST default: git.hg-int.dev
|
||||
// REPO "owner/repo" (provided by Gitea workflow context).
|
||||
// PR_NUMBER PR number to post on.
|
||||
// COMMENT_PATH optional, default: bundle-comment.md
|
||||
@@ -17,7 +17,7 @@ const MARKER = "<!-- bundle-budget-report -->";
|
||||
|
||||
async function main() {
|
||||
const token = process.env.GITEA_TOKEN;
|
||||
const host = process.env.GITEA_HOST || "git.tool-ctrl.de";
|
||||
const host = process.env.GITEA_HOST || "git.hg-int.dev";
|
||||
const repo = process.env.REPO;
|
||||
const prNumber = process.env.PR_NUMBER;
|
||||
const commentPath = process.env.COMMENT_PATH || "bundle-comment.md";
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
//
|
||||
// Environment:
|
||||
// GITEA_TOKEN required. PAT with repository write scope.
|
||||
// GITEA_HOST default: git.tool-ctrl.de
|
||||
// GITEA_HOST default: git.hg-int.dev
|
||||
// REPO "owner/repo" (provided by Gitea workflow context).
|
||||
// PR_NUMBER PR number to post on.
|
||||
// COMMENT_PATH optional, default: coverage-comment.md
|
||||
@@ -16,7 +16,7 @@ import fs from "node:fs";
|
||||
|
||||
async function main() {
|
||||
const token = process.env.GITEA_TOKEN;
|
||||
const host = process.env.GITEA_HOST || "git.tool-ctrl.de";
|
||||
const host = process.env.GITEA_HOST || "git.hg-int.dev";
|
||||
const repo = process.env.REPO;
|
||||
const prNumber = process.env.PR_NUMBER;
|
||||
const commentPath = process.env.COMMENT_PATH || "coverage-comment.md";
|
||||
|
||||
@@ -120,6 +120,6 @@ describe("e2e readiness workflows", () => {
|
||||
|
||||
assert.ok(source.includes("runs-on: toolctrl-ci"));
|
||||
assert.ok(source.includes("HIVEGRID_GITEA_HOST_IP"));
|
||||
assert.ok(source.includes("git.tool-ctrl.de"));
|
||||
assert.ok(source.includes("git.hg-int.dev"));
|
||||
});
|
||||
});
|
||||
@@ -1439,7 +1439,7 @@ describe("verify-gitea-ci-workflow", () => {
|
||||
|
||||
it("fails when the internal host override is written without token validation", () => {
|
||||
const rootDir = createFixture(
|
||||
`${VALID_WORKFLOW}\n host-smoke:\n runs-on: toolctrl-ci\n steps:\n - name: Resolve internal host\n run: |\n if [ -n \"\${HIVEGRID_GITEA_HOST_IP:-}\" ]; then\n printf '%s git.tool-ctrl.de\\n' \"$HIVEGRID_GITEA_HOST_IP\" >> /etc/hosts\n fi\n`
|
||||
`${VALID_WORKFLOW}\n host-smoke:\n runs-on: toolctrl-ci\n steps:\n - name: Resolve internal host\n run: |\n if [ -n \"\${HIVEGRID_GITEA_HOST_IP:-}\" ]; then\n printf '%s git.hg-int.dev\\n' \"$HIVEGRID_GITEA_HOST_IP\" >> /etc/hosts\n fi\n`
|
||||
);
|
||||
|
||||
const result = verifyGiteaCiWorkflow(rootDir);
|
||||
|
||||
@@ -2319,7 +2319,7 @@ export function checkIsolatedDeployBuildKit(rootDir, content, analysis) {
|
||||
const validatedHostExitIndex = setupText.indexOf("exit 1", validatedHostIndex);
|
||||
const validatedHostEndIndex = setupText.indexOf("\n fi", validatedHostIndex);
|
||||
const builderExecIndex = setupText.indexOf("docker exec \\\n --env HIVEGRID_GITEA_HOST_IP=");
|
||||
const staleRemovalIndex = setupText.indexOf('awk -v host="git.tool-ctrl.de" \'', builderExecIndex);
|
||||
const staleRemovalIndex = setupText.indexOf('awk -v host="git.hg-int.dev" \'', builderExecIndex);
|
||||
const staleRemovalEndIndex = setupText.indexOf('\' /etc/hosts > "$HOSTS_TMP"', staleRemovalIndex);
|
||||
const staleRemovalText =
|
||||
staleRemovalIndex >= 0 && staleRemovalEndIndex > staleRemovalIndex
|
||||
@@ -2327,7 +2327,7 @@ export function checkIsolatedDeployBuildKit(rootDir, content, analysis) {
|
||||
: "";
|
||||
const replaceHostsIndex = setupText.indexOf('cat "$HOSTS_TMP" > /etc/hosts', staleRemovalEndIndex);
|
||||
const appendHostIndex = setupText.indexOf(
|
||||
'printf \'%s git.tool-ctrl.de\\n\' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts',
|
||||
'printf \'%s git.hg-int.dev\\n\' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts',
|
||||
replaceHostsIndex
|
||||
);
|
||||
const hostCountIndex = setupText.indexOf('BUILDKIT_HOST_COUNT="$(awk ', appendHostIndex);
|
||||
@@ -2359,10 +2359,10 @@ export function checkIsolatedDeployBuildKit(rootDir, content, analysis) {
|
||||
/if\s*\(\s*rewritten\s*!=\s*""\s*\)\s*\{\s*print\s+rewritten/.test(staleRemovalText);
|
||||
const countsEveryHostToken =
|
||||
hostCountText.trim() ===
|
||||
'BUILDKIT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" \'{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }\' /etc/hosts)"';
|
||||
'BUILDKIT_HOST_COUNT="$(awk -v host="git.hg-int.dev" \'{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }\' /etc/hosts)"';
|
||||
const countsOnlyTheValidatedHostToken =
|
||||
exactHostCountText.trim() ===
|
||||
'BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" -v ip="$HIVEGRID_GITEA_HOST_IP" \'$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }\' /etc/hosts)"';
|
||||
'BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.hg-int.dev" -v ip="$HIVEGRID_GITEA_HOST_IP" \'$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }\' /etc/hosts)"';
|
||||
const hostOverrideOrderIsSafe =
|
||||
requiredHostIndex >= 0 &&
|
||||
requiredHostIndex < requiredHostExitIndex &&
|
||||
@@ -2389,7 +2389,7 @@ export function checkIsolatedDeployBuildKit(rootDir, content, analysis) {
|
||||
if (configuresBuildKitRegistryHost) {
|
||||
passes.push(`${WORKFLOW_PATH}: isolated BuildKit replaces and verifies its validated registry host mapping`);
|
||||
} else {
|
||||
failures.push(`${WORKFLOW_PATH}: staging must require, validate, replace, and verify exactly one git.tool-ctrl.de mapping inside isolated BuildKit`);
|
||||
failures.push(`${WORKFLOW_PATH}: staging must require, validate, replace, and verify exactly one git.hg-int.dev mapping inside isolated BuildKit`);
|
||||
}
|
||||
|
||||
const quiescesHostContainer =
|
||||
|
||||
+26
-26
@@ -41,7 +41,7 @@ jobs:
|
||||
stage-or-promote:
|
||||
runs-on: toolctrl-deploy
|
||||
env:
|
||||
REGISTRY: git.tool-ctrl.de
|
||||
REGISTRY: git.hg-int.dev
|
||||
IMAGE_NAMESPACE: toolctrl-labs
|
||||
IMAGE_PREFIX: hivegrid
|
||||
DEPLOY_BUILDER_NAME: hivegrid-deploy-v0312-gc1
|
||||
@@ -82,7 +82,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
fi
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
@@ -180,7 +180,7 @@ jobs:
|
||||
sh -eu <<'HIVEGRID_BUILDKIT_HOST_OVERRIDE'
|
||||
HOSTS_TMP="$(mktemp)"
|
||||
trap 'rm -f "$HOSTS_TMP"' EXIT HUP INT TERM
|
||||
awk -v host="git.tool-ctrl.de" '
|
||||
awk -v host="git.hg-int.dev" '
|
||||
{
|
||||
rewritten = ""
|
||||
for (field = 1; field <= NF; field += 1) {
|
||||
@@ -195,9 +195,9 @@ jobs:
|
||||
}
|
||||
' /etc/hosts > "$HOSTS_TMP"
|
||||
cat "$HOSTS_TMP" > /etc/hosts
|
||||
printf '%s git.tool-ctrl.de\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
BUILDKIT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" '{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de" -v ip="$HIVEGRID_GITEA_HOST_IP" '$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
printf '%s git.hg-int.dev\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
BUILDKIT_HOST_COUNT="$(awk -v host="git.hg-int.dev" '{ for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
BUILDKIT_EXACT_HOST_COUNT="$(awk -v host="git.hg-int.dev" -v ip="$HIVEGRID_GITEA_HOST_IP" '$1 == ip { for (field = 2; field <= NF; field += 1) if ($field == host) count += 1 } END { print count + 0 }' /etc/hosts)"
|
||||
if [ "$BUILDKIT_HOST_COUNT" -ne 1 ] || [ "$BUILDKIT_EXACT_HOST_COUNT" -ne 1 ]; then
|
||||
echo "BuildKit registry host override did not converge to exactly one validated mapping"
|
||||
exit 1
|
||||
@@ -2248,21 +2248,21 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit appends without replacing a stale registry host mapping", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace('cat "$HOSTS_TMP" > /etc/hosts', 'cat "$HOSTS_TMP" > /tmp/unapplied-hosts');
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit accepts a stale mapping beside the exact registry host mapping", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace('"$BUILDKIT_HOST_COUNT" -ne 1', '"$BUILDKIT_HOST_COUNT" -lt 1');
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit no longer removes stale registry host tokens", () => {
|
||||
@@ -2272,14 +2272,14 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit no longer resets the rewritten hosts line per record", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace(' rewritten = ""\n for (field', " for (field");
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit moves the rewritten hosts reset outside the record block", () => {
|
||||
@@ -2289,17 +2289,17 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit moves the entire hosts rewrite into an AWK BEGIN block", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace(
|
||||
' awk -v host="git.tool-ctrl.de" \'\n {',
|
||||
' awk -v host="git.tool-ctrl.de" \'\n BEGIN {'
|
||||
' awk -v host="git.hg-int.dev" \'\n {',
|
||||
' awk -v host="git.hg-int.dev" \'\n BEGIN {'
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit hard-codes a passing registry host count", () => {
|
||||
@@ -2309,24 +2309,24 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit counts a different hostname", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace(
|
||||
'BUILDKIT_HOST_COUNT="$(awk -v host="git.tool-ctrl.de"',
|
||||
'BUILDKIT_HOST_COUNT="$(awk -v host="git.hg-int.dev"',
|
||||
'BUILDKIT_HOST_COUNT="$(awk -v host="localhost"'
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit drops the validated-IP predicate", () => {
|
||||
const unsafeWorkflow = VALID_WORKFLOW.replace("'$1 == ip { for (field", "'1 == 1 { for (field");
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated BuildKit validates the IP only after writing its hosts file", () => {
|
||||
@@ -2339,7 +2339,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
assert.notEqual(validationIndex, -1);
|
||||
const withoutValidation =
|
||||
VALID_WORKFLOW.slice(0, validationIndex) + VALID_WORKFLOW.slice(validationIndex + validationBlock.length);
|
||||
const builderAppend = ` printf '%s git.tool-ctrl.de\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
const builderAppend = ` printf '%s git.hg-int.dev\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
`;
|
||||
const appendIndex = withoutValidation.lastIndexOf(builderAppend);
|
||||
assert.notEqual(appendIndex, -1);
|
||||
@@ -2348,7 +2348,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
withoutValidation.slice(0, insertIndex) + validationBlock + withoutValidation.slice(insertIndex);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when the missing BuildKit host override guard is pass-open", () => {
|
||||
@@ -2358,7 +2358,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when the invalid BuildKit host override guard is pass-open", () => {
|
||||
@@ -2368,7 +2368,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when the BuildKit host count mismatch guard is pass-open", () => {
|
||||
@@ -2378,7 +2378,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
);
|
||||
const result = verifyGiteaDeployWorkflow(createFixture(unsafeWorkflow));
|
||||
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.tool-ctrl\.de mapping/);
|
||||
assert.match(result.failures.join("\n"), /must require, validate, replace, and verify exactly one git\.hg-int\.dev mapping/);
|
||||
});
|
||||
|
||||
it("fails when isolated deploy BuildKit shutdown is not always-run", () => {
|
||||
@@ -3057,7 +3057,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
assert.notEqual(validationIndex, -1);
|
||||
const withoutValidation =
|
||||
VALID_WORKFLOW.slice(0, validationIndex) + VALID_WORKFLOW.slice(validationIndex + validationBlock.length);
|
||||
const runnerAppend = ` printf '%s git.tool-ctrl.de\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
const runnerAppend = ` printf '%s git.hg-int.dev\\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
`;
|
||||
const appendIndex = withoutValidation.indexOf(runnerAppend);
|
||||
assert.notEqual(appendIndex, -1);
|
||||
@@ -3072,7 +3072,7 @@ describe("verify-gitea-deploy-workflow", () => {
|
||||
it("fails when the internal host override is written without token validation", () => {
|
||||
const result = verifyGiteaDeployWorkflow(
|
||||
createFixture(
|
||||
`${VALID_WORKFLOW}\n host-smoke:\n runs-on: toolctrl-deploy\n steps:\n - name: Resolve internal host\n run: |\n if [ -n \"\${HIVEGRID_GITEA_HOST_IP:-}\" ]; then\n printf '%s git.tool-ctrl.de\\n' \"$HIVEGRID_GITEA_HOST_IP\" >> /etc/hosts\n fi\n`
|
||||
`${VALID_WORKFLOW}\n host-smoke:\n runs-on: toolctrl-deploy\n steps:\n - name: Resolve internal host\n run: |\n if [ -n \"\${HIVEGRID_GITEA_HOST_IP:-}\" ]; then\n printf '%s git.hg-int.dev\\n' \"$HIVEGRID_GITEA_HOST_IP\" >> /etc/hosts\n fi\n`
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
REGISTRY: git.tool-ctrl.de
|
||||
IMAGE: git.tool-ctrl.de/toolctrl-labs/hivegrid-website
|
||||
REGISTRY: git.hg-int.dev
|
||||
IMAGE: git.hg-int.dev/toolctrl-labs/hivegrid-website
|
||||
HIVEGRID_GITEA_HOST_IP: ${{ vars.HIVEGRID_GITEA_HOST_IP }}
|
||||
|
||||
concurrency:
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
|
||||
apt-get update -qq
|
||||
apt-get install -qq -y --no-install-recommends ca-certificates curl git
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
run: |
|
||||
mkdir -p /workspace/repo
|
||||
cd /workspace/repo
|
||||
git clone "https://${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PAT }}@git.tool-ctrl.de/toolctrl-labs/HiveGrid-Website.git" .
|
||||
git clone "https://${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PAT }}@git.hg-int.dev/toolctrl-labs/HiveGrid-Website.git" .
|
||||
git checkout "$SHA"
|
||||
CHECKOUT_SHA="$(git rev-parse HEAD)"
|
||||
if [ "$CHECKOUT_SHA" != "$SHA" ]; then
|
||||
|
||||
@@ -4,8 +4,8 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
REGISTRY: git.tool-ctrl.de
|
||||
IMAGE: git.tool-ctrl.de/toolctrl-labs/hivegrid-website
|
||||
REGISTRY: git.hg-int.dev
|
||||
IMAGE: git.hg-int.dev/toolctrl-labs/hivegrid-website
|
||||
HIVEGRID_GITEA_HOST_IP: ${{ vars.HIVEGRID_GITEA_HOST_IP }}
|
||||
|
||||
concurrency:
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
echo "HIVEGRID_GITEA_HOST_IP must be a single IPv4 or IPv6 token"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s git.tool-ctrl.de\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
printf '%s git.hg-int.dev\n' "$HIVEGRID_GITEA_HOST_IP" >> /etc/hosts
|
||||
|
||||
apt-get update -qq
|
||||
apt-get install -qq -y --no-install-recommends ca-certificates curl git
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
run: |
|
||||
mkdir -p /workspace/repo
|
||||
cd /workspace/repo
|
||||
git clone "https://${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PAT }}@git.tool-ctrl.de/toolctrl-labs/HiveGrid-Website.git" .
|
||||
git clone "https://${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PAT }}@git.hg-int.dev/toolctrl-labs/HiveGrid-Website.git" .
|
||||
git checkout "$WORKFLOW_SHA"
|
||||
if [ "$(git rev-parse HEAD)" != "$WORKFLOW_SHA" ]; then
|
||||
echo "Checked out revision must match the Gitea workflow SHA"
|
||||
|
||||
+1
-1
@@ -299,7 +299,7 @@ Offen:
|
||||
|
||||
## Nützliche Referenzen
|
||||
|
||||
- Repo: <https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Website>
|
||||
- Repo: <https://git.hg-int.dev/toolctrl-labs/HiveGrid-Website>
|
||||
- Live: <https://hivegrid.de>
|
||||
- Coolify (Deploy): App-UUID `d108flfj9rk5hdm6p4b85er7`
|
||||
- Deploy-Workflow: `.gitea/workflows/deploy.yml`
|
||||
|
||||
+1
-1
@@ -97,4 +97,4 @@ Vor jedem Commit pruefen, dass keine fremden lokalen Aenderungen wie `.obsidian/
|
||||
|
||||
## Aktueller Remote
|
||||
|
||||
Das Repo soll nach `git.tool-ctrl.de/david/Hivegrid-Wireframes` gepusht werden. Falls Push nicht funktioniert, liegt es wahrscheinlich an SSH-/HTTPS-Zugriff oder Server-Port-Konfiguration, nicht an der lokalen Repo-Struktur.
|
||||
Das Repo soll nach `git.hg-int.dev/david/Hivegrid-Wireframes` gepusht werden. Falls Push nicht funktioniert, liegt es wahrscheinlich an SSH-/HTTPS-Zugriff oder Server-Port-Konfiguration, nicht an der lokalen Repo-Struktur.
|
||||
@@ -5,13 +5,13 @@ ticket: D-BOOK + D-P16
|
||||
area: Kalender
|
||||
status: Fertig / Development-Handoff
|
||||
scope: Kalender-Teil
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-31
|
||||
---
|
||||
|
||||
# D-BOOK Kalender
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-CHAT + AK-P15b
|
||||
area: Team-Chat / Gruppen / Projektgruppen / Direktnachrichten / Medien
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-08
|
||||
---
|
||||
|
||||
# D-CHAT Team-Chat
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
area: Kontakte / Organisationen / Kontaktmodell
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-29
|
||||
---
|
||||
|
||||
# D-CRM Kontakte und Organisationen
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-D0b
|
||||
area: Foundation / Layout Standards
|
||||
status: Fertig / Review
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
stand: 2026-07-03
|
||||
---
|
||||
|
||||
# D-D0b Layout Standards
|
||||
|
||||
Repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
|
||||
Arbeitsbereich im Repo: [D-D0b Layout Standards](../../02%20Wireframes/D0%20Foundation/D-D0b%20Layout%20Standards/D-D0b%20Layout%20Standards.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-FLOW + D-P12
|
||||
area: Workflow Engine / Automationen / Läufe / Vorlagen / Zugangsdaten
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
stand: 2026-08-04
|
||||
---
|
||||
|
||||
# D-FLOW Workflow Engine
|
||||
|
||||
Repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-FORM
|
||||
area: Termine & Formulare / Form Builder / Public Forms
|
||||
status: Review / Handoff
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
stand: 2026-07-09
|
||||
---
|
||||
|
||||
# D-FORM Form Builder
|
||||
|
||||
Repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-P2
|
||||
area: Auth / Account Lifecycle / Settings / Admin RBAC
|
||||
status: Review / Handoff
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
stand: 2026-06-26
|
||||
---
|
||||
|
||||
# D-P2 Auth Wireframes
|
||||
|
||||
Repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
Arbeitsbereiche im Repo: eigenständige `02 Wireframes/P2 …/`-Toolordner, jeweils mit eigenem Wireframe-Paket
|
||||
|
||||
|
||||
@@ -5,13 +5,13 @@ ticket: D-P3
|
||||
area: Benachrichtigungen
|
||||
status: Fertig / Development-Handoff
|
||||
scope: Teil Benachrichtigungen
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-27
|
||||
---
|
||||
|
||||
# D-P3 Benachrichtigungen
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-P4
|
||||
area: Aufgaben
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-23
|
||||
---
|
||||
|
||||
# D-P4 Aufgaben
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
area: Lead-Eingang / Arbeitsliste / Lead-Record / Kommunikation
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
stand: 2026-08-20
|
||||
---
|
||||
|
||||
# D-P7 Leads
|
||||
|
||||
Repo: https://git.tool-ctrl.de/toolctrl-labs/HiveGrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/toolctrl-labs/HiveGrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ project: HiveGrid Screen Project
|
||||
ticket: D-P8 + D-KANBAN
|
||||
area: Pipelines / Kanban / Board-Verwaltung
|
||||
status: Fertig / Development-Handoff
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
stand: 2026-07-28
|
||||
---
|
||||
|
||||
# D-P8 Pipelines Wireframes
|
||||
|
||||
Repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
Repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
|
||||
Zentrale Tracker-Datei: [Screen Paket Tracker](../../02%20Wireframes/Screen%20Paket%20Tracker.md)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ ticket: D-TAGS
|
||||
area: Lokale Tag- und Badge-Verwaltung
|
||||
status: Fertig / Development-Handoff
|
||||
stand: 2026-09-25
|
||||
repo: https://git.tool-ctrl.de/david/Hivegrid-Wireframes
|
||||
repo: https://git.hg-int.dev/david/Hivegrid-Wireframes
|
||||
---
|
||||
|
||||
# D-TAGS — Tags und Badges verwalten
|
||||
|
||||
Reference in new issue
Block a user