The script runs interactively against a host the operator has already
connected to, so pinning the option added nothing. Removing the override
lets ssh use its default (ask): it consults the user's own known_hosts
and prompts once on first connect, and still refuses a changed host key
afterwards.
Left as-is in CI, which has no prompt and pins the key via the
SSH_KNOWN_HOSTS secret.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Gitea runner is not up yet, so deploys need to be possible by hand.
scripts/deploy.sh mirrors the workflow: same hugo build, same rsync
invocation, same DEPLOY_PATH guards.
It previews every change and reports the number of server-side deletions
before asking to continue, since rsync runs with --delete. Credentials
live in the gitignored scripts/deploy.env.
Two Windows-specific guards, both hit in practice: it refuses an SSH key
under /mnt (WSL cannot hold 0600 there, so ssh rejects it) and it fails
with a clear message when run from Git Bash, which has no rsync.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There is only one server. The site is served from /var/www/mcg on the VPS
at mcg.luxick.de today, and the main domain will be pointed at the same
instance at cutover; local `hugo server` covers development.
Drops the development/production split from the workflow, its
DEPLOY_PATH_DEV / DEPLOY_PATH_PROD secrets and the workflow_dispatch
environment input, leaving a single DEPLOY_PATH. baseURL now comes from
hugo.toml rather than being injected per environment, so it is the one
place to change at cutover.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
strings.Replace takes its input as the FIRST argument, so piping into it
appended the cell value as the last argument instead: the call evaluated
as strings.Replace "\n" "<br>" .date, which returned a bare newline. Rows
rendered with the correct count but no content.
Pass the value explicitly instead. All 25 rows now render, with line
breaks and the inline link in the 2020 entry preserved.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The import is verified and content/ is now the source of truth, so the
one-shot WordPress importer under tools/ and MIGRATION.md are no longer
needed. Also drops the remaining references to the old site from the
README, config comments and data-file headers.
Build is unchanged: 38 pages, 718 internal links, none broken.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaces the WordPress 7.0.2 / HitMag site with a static Hugo build,
deployed by Gitea Actions over rsync/SSH.
Content: 26 files (9 pages + 17 posts) as Markdown page bundles, plus
127 of 165 media attachments. The remaining 38 are media-library
leftovers that appear nowhere on the live site; they are listed in
MIGRATION.md.
The WXR export contains neither media binaries nor widgets, so both were
recovered from the live host before it is retired:
- tools/fetch_media.py downloads all uploads, capping them at 2000px
- tools/build_data.py scrapes the "Unsere Mitglieder" and
"In Erinnerung" widgets into data/*.yaml
TablePress' six Termine tables became data/termine.yaml, rendered with
the newest year expanded and earlier years collapsed. Old permalinks are
not preserved (clean slugs, no redirects, as agreed).
Custom layouts, no third-party theme. Plain CSS, since the pinned Hugo
0.164.0 is the non-extended build and cannot compile Sass.
Verified: clean build with zero warnings, 718 internal links checked and
none broken, no surviving wp-content URLs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>