Commit Graph

15 Commits

Author SHA1 Message Date
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