Initial commit: personal homepage with live Harbor registry
build / image (push) Failing after 15s

- Linktree-style homepage with photo, social links, and self-hosted
  services (container registry, Git server)
- Registry pages rendered on demand from Harbor via a live content
  collection, cached in memory (60s fresh, 10min stale-while-revalidate)
- Pinned registry images (PINNED_IMAGES) shown first with a star
- Node standalone server with security headers; self-contained server
  build so the Docker image ships no node_modules
- Gitea workflow building multi-arch images for Flux

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-29 10:23:02 +02:00
co-authored by Claude Opus 5.5
commit 7b670010b1
33 changed files with 5004 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
name: build
on:
push:
branches: [main]
tags: ["v*"]
workflow_dispatch:
env:
IMAGE: registry.traberph.de/public/homepage
# Baked in at build time (canonical URLs); override with a repository variable.
SITE_URL: ${{ vars.SITE_URL || 'https://traberph.de' }}
jobs:
image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
# Tag scheme for Flux image automation: <UTC yyyymmddHHMMSS>-<short sha>,
# e.g. 20260926154233-1a2b3c4. Timestamps sort numerically, see README.
- name: Compute tags
id: tags
run: |
ts="$(date -u +%Y%m%d%H%M%S)"
sha="$(git rev-parse --short=7 HEAD)"
tags="${IMAGE}:${ts}-${sha}"
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
tags="${tags},${IMAGE}:${GITHUB_REF_NAME}"
else
tags="${tags},${IMAGE}:latest"
fi
echo "tags=${tags}" >> "$GITHUB_OUTPUT"
echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT"
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
echo "Tags: ${tags}"
- uses: docker/setup-qemu-action@v4
- uses: docker/setup-buildx-action@v4
- uses: docker/login-action@v4
with:
registry: registry.traberph.de
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_TOKEN }}
- uses: docker/build-push-action@v7
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.tags.outputs.tags }}
# Harbor settings are runtime env vars, so only the site URL is a build arg.
build-args: |
SITE_URL=${{ env.SITE_URL }}
labels: |
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.revision=${{ steps.tags.outputs.sha }}
org.opencontainers.image.created=${{ steps.tags.outputs.created }}