Commit Graph

17 Commits

Author SHA1 Message Date
haemka a579c519b2 Add devel/staging staged-publishing flow, rename default branch to main
- .gitea/workflows/build-deploy.yml: trigger on [main, staging, devel];
  build step picks publishconf.py (main) / stagingconf.py (staging) /
  bare pelicanconf.py (devel, same as a plain local build); deploy
  step already had prod-vs-test branching, updated its ref check from
  master to main to match the repo's renamed default branch.
- stagingconf.py: new, prod-like preview config (feeds, absolute URLs)
  pointed at the internal dev webserver instead of the real domain.
- pelicanconf.py: SITEURL set to the dev webserver address (was ''),
  used by both stagingconf.py and bare devel builds.
2026-08-14 10:54:33 +00:00
haemka f5919d364c Track theme submodule via SSH URL, drop CI-only override
origin is already an SSH remote for this repo, so there's no real
reason for the submodule to stay on HTTPS. Removes the runtime
'git config submodule...url' override from the workflow, which is
now redundant.
2026-08-13 15:52:20 +00:00
haemka 443012e3c7 Consolidate GITEA_HOST_KEY/DEPLOY_HOST_KEY into one KNOWN_HOSTS var
No technical need for separate vars; one holding both known_hosts
lines (pasted straight from an existing trusted known_hosts file) is
simpler to configure.
2026-08-13 15:48:26 +00:00
haemka 8bb88d0faa Pin host keys via variables instead of ssh-keyscan
Replaces the ssh-keyscan-based known_hosts population (and the
diagnostic step added to debug its flakiness) with two vars,
GITEA_HOST_KEY and DEPLOY_HOST_KEY, each a full known_hosts-format
line. No extra network calls before the real connections, no TOFU, and
no more risk of tripping aquaria's connection-rate limiting — the
actual root cause of the earlier flakiness was ssh-keyscan opening
multiple near-simultaneous connections (one per probed key type).
2026-08-13 15:46:31 +00:00
haemka 09bae3e783 Restrict ssh-keyscan to -t rsa to avoid tripping rate limiting
Latest diagnostic run showed aquaria's OpenSSH responding fine on the
first of several near-simultaneous connections ssh-keyscan opens (one
per default-probed key type), then hanging on the rest with no
response — a rate-limiting signature, not an outright ban. Both hosts
confirmed to offer an RSA host key, so scan just that type: one
connection per host instead of ~4 at once. Left the diagnostic step in
to confirm before removing it. Dropped -v now that the cause is known.
2026-08-13 15:44:15 +00:00
haemka 13fdf05121 Add temporary diagnostic step for aquaria connectivity
ssh-keyscan's -v only traces SSH-protocol activity; a pre-handshake
failure (bad DNS, TCP connect hang/drop) prints nothing regardless.
Firewall allow-listing is ruled out (same external IP as a working
manual connection), so check DNS resolution and a raw nc TCP connect
from inside the runner container directly. Remove once root-caused.
2026-08-13 15:41:43 +00:00
haemka 0f3a526224 Add -v to ssh-keyscan for real diagnostic output
Plain ssh-keyscan prints nothing on a per-host failure (by design, so
scanning long host lists doesn't spam errors for hosts that are down),
which is why removing 2>/dev/null earlier revealed nothing. -v forces
it to actually report what's failing.
2026-08-13 15:37:18 +00:00
haemka d272405be0 Force IPv4 for git.haemka.in SSH connections too
Missed two spots: the git.haemka.in keyscan and the submodule fetch's
GIT_SSH_COMMAND. If git.haemka.in's DNS answer includes an AAAA record
(depends on which resolver the runner hits), these hit the same no
IPv6 route issue intermittently, explaining the flaky failures.
2026-08-13 15:35:16 +00:00
haemka 960a4c3ca3 Force IPv4 for SSH connections to the deploy host
aquaria.haemka.net has both A and AAAA records; the runner container has
no IPv6 route, so ssh picked the AAAA address and failed with 'Network
is unreachable'. Force -4 on both the keyscan and the actual rsync
connection.
2026-08-13 15:30:42 +00:00
haemka 2bcbcebb60 Stop suppressing ssh-keyscan stderr in Set up SSH key step
The step failed silently (exit 1, no message) because stderr was
redirected to /dev/null while sh -e aborts on ssh-keyscan's non-zero
exit. Let the real error (DNS/firewall/etc.) show up in the log.
2026-08-13 15:25:21 +00:00
haemka 89bd4280b7 Revert DEPLOY_USER back to a secret
Only host/port were asked to move to variables; user stays a secret.
2026-08-13 15:22:00 +00:00
haemka c9daa14ec8 Move deploy host/port/user/path to repo variables, split port out
None of these are sensitive, so use Actions variables (vars) instead of
secrets. DEPLOY_PORT is now its own variable (default 22) rather than
being packed into DEPLOY_HOST. Only DEPLOY_SSH_KEY remains a secret.
2026-08-13 15:19:13 +00:00
haemka f49cb77fa4 Support non-standard SSH port in DEPLOY_HOST (fqdn:port)
ssh-keyscan and rsync's -e ssh both need the port passed via -p rather
than embedded in the hostname; parse DEPLOY_HOST accordingly, defaulting
to 22 when no port is given.
2026-08-13 15:16:54 +00:00
haemka 85543e6602 Use SSH deploy key instead of account token for theme submodule
Avoids tying CI to a personal/bot Gitea account: the same DEPLOY_SSH_KEY
secret used for the webserver rsync step is reused as a read-only Gitea
deploy key on hmk/pelican-latex. The submodule's tracked HTTPS URL is
overridden to SSH just for this checkout so it authenticates with that
key instead of needing a token with access to both repos.
2026-08-13 15:13:44 +00:00
haemka 18c855f672 Pass explicit token to checkout for private theme submodule
The default per-job Actions token only covers the triggering repo; the
theme submodule lives in a separate private repo (hmk/pelican-latex), so
cloning it needs a token with read access to both. Add CHECKOUT_TOKEN
as a repo secret (a Gitea access token with repo read scope) for this
to work.
2026-08-13 15:08:26 +00:00
haemka 31cfcf461b Install nodejs in workflow container so actions/checkout can run
python:3.12-slim has no Node.js; JS-based actions like actions/checkout
need it to execute their bundled dist/index.js.
2026-08-13 15:03:49 +00:00
haemka 31c8351b6b Add Gitea Actions workflow to build and deploy the site
Requires a self-hosted runner and repo secrets (DEPLOY_HOST, DEPLOY_USER,
DEPLOY_PATH, DEPLOY_SSH_KEY) to be set up before it will actually run.
2026-08-13 14:46:19 +00:00