Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
name: Deploy Marketing-Site
|
|
|
|
|
|
|
|
|
|
on:
|
|
|
|
|
push:
|
|
|
|
|
branches:
|
|
|
|
|
- main
|
|
|
|
|
workflow_dispatch:
|
|
|
|
|
|
|
|
|
|
concurrency:
|
|
|
|
|
group: deploy-marketing
|
|
|
|
|
cancel-in-progress: false
|
|
|
|
|
|
|
|
|
|
jobs:
|
2026-05-05 00:08:04 +00:00
|
|
|
build-and-deploy:
|
|
|
|
|
name: Build, Test und Deploy
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
runs-on: docker
|
|
|
|
|
container:
|
|
|
|
|
image: node:22-bookworm
|
|
|
|
|
steps:
|
2026-05-05 00:08:04 +00:00
|
|
|
- name: Checkout (inkl. Submodule brand-system)
|
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
|
with:
|
|
|
|
|
submodules: recursive
|
|
|
|
|
fetch-depth: 1
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
|
|
|
|
|
- name: pnpm aktivieren
|
|
|
|
|
run: |
|
|
|
|
|
corepack enable
|
|
|
|
|
corepack prepare pnpm@latest --activate
|
|
|
|
|
|
|
|
|
|
- name: Dependencies
|
|
|
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
|
|
|
|
|
|
- name: Production-Build
|
|
|
|
|
run: pnpm build
|
|
|
|
|
|
|
|
|
|
- name: Playwright-Browser
|
|
|
|
|
run: pnpm exec playwright install --with-deps chromium
|
|
|
|
|
|
|
|
|
|
- name: Smoke-Tests gegen Production-Build
|
|
|
|
|
run: pnpm exec playwright test
|
|
|
|
|
env:
|
|
|
|
|
CI: '1'
|
|
|
|
|
|
2026-05-05 00:08:04 +00:00
|
|
|
- name: rsync + ssh installieren
|
|
|
|
|
run: apt-get update && apt-get install -y --no-install-recommends rsync openssh-client
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
|
|
|
|
|
- name: SSH-Key setzen
|
2026-05-05 00:08:04 +00:00
|
|
|
env:
|
|
|
|
|
SSH_KEY: ${{ secrets.MARKETING_SSH_KEY }}
|
|
|
|
|
HOST: ${{ secrets.MARKETING_HOST }}
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
run: |
|
|
|
|
|
mkdir -p ~/.ssh
|
2026-05-05 00:08:04 +00:00
|
|
|
chmod 700 ~/.ssh
|
|
|
|
|
echo "$SSH_KEY" > ~/.ssh/marketing
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
chmod 600 ~/.ssh/marketing
|
2026-05-05 00:08:04 +00:00
|
|
|
ssh-keyscan -H "$HOST" >> ~/.ssh/known_hosts 2>/dev/null
|
Initial Astro-Build, Deployment-Setup und Forgejo-Workflow
- Astro 6 + React + Tailwind v4 Projekt-Skelett mit allen Marketing-Seiten
(Home, Module, Tester, Souveränität, Roadmap, Kontakt, Impressum, Datenschutz)
- Self-hosted Outfit + JetBrains Mono Fonts (DSGVO)
- Marketing-Komponenten gemäss CLAUDE.md §5.6 (NumberedItem, ModuleCard,
StatusDot, TechStrip, SovereigntyBlock, RoadmapTimeline, etc.)
- Module-Daten in src/content/module.ts als Single Source of Truth
- E2E Smoke-Tests via Playwright
- OG-Image-Generator
- Forgejo Workflow .forgejo/workflows/deploy.yml für Tier-2 Static Deploy
- Infra-as-Code Snapshot in infra/marketing-vps/
- Brand-System Submodule auf Forgejo umgezogen (war GitHub)
- Deployment- und Handoff-Dokumentation
- .DS_Store aus Tracking entfernt, .gitignore um Test-Artefakte ergaenzt
2026-05-04 23:59:35 +00:00
|
|
|
|
|
|
|
|
- name: Rsync zu Marketing-VPS
|
|
|
|
|
run: |
|
|
|
|
|
rsync -avz --delete \
|
|
|
|
|
-e "ssh -i ~/.ssh/marketing -o StrictHostKeyChecking=yes" \
|
|
|
|
|
dist/ \
|
|
|
|
|
"${{ secrets.MARKETING_USER }}@${{ secrets.MARKETING_HOST }}:slimcore.io/"
|
|
|
|
|
|
|
|
|
|
- name: Deploy-Verifikation
|
|
|
|
|
run: |
|
|
|
|
|
sleep 3
|
2026-05-05 00:08:04 +00:00
|
|
|
STATUS=$(curl -sI https://slimcore.io/ | awk '/HTTP\//{print $2; exit}')
|
2026-05-05 00:36:35 +00:00
|
|
|
# 200 = oeffentlich; 401 = Pre-Launch mit Basic-Auth (siehe Caddyfile).
|
|
|
|
|
# Beide bestaetigen, dass Caddy den frischen Build serviert.
|
|
|
|
|
case "$STATUS" in
|
|
|
|
|
200|401) echo "✓ slimcore.io antwortet mit $STATUS" ;;
|
|
|
|
|
*) echo "slimcore.io liefert HTTP $STATUS, erwartet 200 oder 401"; exit 1 ;;
|
|
|
|
|
esac
|