mirror of
https://github.com/kuhyx/utils.git
synced 2026-11-10 18:07:24 +01:00
aur-publish/publish.sh 439 -> 148 + lib/aur_registration 107
+ lib/aur_verify 122 + lib/aur_publish_one 107
guard-lib/lib/file_guard.sh 350 -> 140 + file_guard_unlock 214
file_length/config.py 252 -> 45 + _tables 202 + exemptions 77
The libs are sourced, never executed: they read the readonly config the entry
script declares, and a `readonly` re-run inside a twice-sourced lib aborts
under `set -e`. Verified by function parity rather than by eye — publish.sh
resolves the same 17 functions as before the split, guardctl the same 15 —
plus `shellcheck -x` clean on every file and a real `--help` / bad-option run.
file_length is the gate's own code, so a broken import there turns the gate
into a no-op. Split three ways to avoid an import cycle without a `# noqa`:
_tables holds the data, exemptions the rules that read it, config re-exports
both so `from file_length.config import is_generated` still resolves. The
first attempt was wrong — EXCLUDED_DIRS was left behind and every invocation
raised — caught because the gate was re-run in both modes rather than
assumed. Now verified: exit 0 on a clean file, exit 1 on an over-cap one,
--explain intact, and the same 61 exemption decisions as HEAD.
Also deletes baseline-2026-08-14.json and SURVEY-2026-08-14.txt: the task
forbids a baseline file, and nothing in the tree read either.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CFSGeWxHPY5rHUGrPqhcmG
108 lines
3.4 KiB
Bash
108 lines
3.4 KiB
Bash
#!/bin/bash
|
|
|
|
# ============================================================================
|
|
# Waiting for AUR registration and SSH access to come up.
|
|
#
|
|
# Sourced by publish.sh, never executed: these functions read the readonly
|
|
# config (AUR_HOST, SSH_KEY, GATE, POLL_SECONDS) that the entry script declares, and
|
|
# a `readonly` re-run inside a twice-sourced lib would abort under `set -e`.
|
|
# ============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
register_status() {
|
|
python3 "$GATE" /register 2>/dev/null | head -1
|
|
}
|
|
|
|
open_browser() {
|
|
local url="$1"
|
|
local browser
|
|
for browser in xdg-open thorium-browser chromium google-chrome-stable firefox librewolf; do
|
|
if command -v "$browser" >/dev/null 2>&1; then
|
|
"$browser" "$url" >/dev/null 2>&1 &
|
|
info "Opened $url in $browser"
|
|
return 0
|
|
fi
|
|
done
|
|
warn "No browser found; open this yourself: $url"
|
|
}
|
|
|
|
ensure_key() {
|
|
if [[ ! -f "$SSH_KEY" ]]; then
|
|
log "Generating an AUR SSH key (none at $SSH_KEY)"
|
|
ssh-keygen -t ed25519 -f "$SSH_KEY" -N '' -C 'kuhy@aur'
|
|
fi
|
|
if ! grep -q "Host $AUR_HOST" "$HOME/.ssh/config" 2>/dev/null; then
|
|
log "Adding $AUR_HOST to ~/.ssh/config"
|
|
mkdir -p "$HOME/.ssh"
|
|
cat >> "$HOME/.ssh/config" <<EOF
|
|
|
|
# AUR uses a dedicated key so it stays separate from the GitHub identity.
|
|
Host $AUR_HOST
|
|
User aur
|
|
IdentityFile $SSH_KEY
|
|
IdentitiesOnly yes
|
|
EOF
|
|
chmod 600 "$HOME/.ssh/config"
|
|
fi
|
|
}
|
|
|
|
ssh_works() {
|
|
# The AUR refuses interactive shells; "Interactive shell is disabled" on a
|
|
# successful key auth is the success signal, not an error.
|
|
ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new \
|
|
-o ConnectTimeout=15 "aur@$AUR_HOST" help 2>&1 |
|
|
grep -qiE 'interactive shell is disabled|Welcome to AUR'
|
|
}
|
|
|
|
wait_for_registration() {
|
|
local status
|
|
status="$(register_status)"
|
|
if [[ "$status" == "200" ]]; then
|
|
log "AUR registration is OPEN"
|
|
else
|
|
log "AUR registration is closed (HTTP $status). Polling every ${POLL_SECONDS}s."
|
|
info "Ctrl-C to stop; re-run any time, nothing is lost."
|
|
while :; do
|
|
sleep "$POLL_SECONDS"
|
|
status="$(register_status)"
|
|
if [[ "$status" == "200" ]]; then
|
|
log "Registration is BACK (HTTP 200)"
|
|
break
|
|
fi
|
|
printf ' %s still HTTP %s\n' "$(date +%H:%M)" "$status"
|
|
done
|
|
fi
|
|
|
|
open_browser "https://$AUR_HOST/register"
|
|
cat <<EOF
|
|
|
|
------------------------------------------------------------------
|
|
Sign up, and paste this into the "SSH Public Key" field:
|
|
|
|
$(sed 's/^/ /' "$SSH_KEY.pub")
|
|
|
|
You will need to confirm the address from your email before the
|
|
account works. This script waits for that automatically.
|
|
------------------------------------------------------------------
|
|
EOF
|
|
}
|
|
|
|
wait_for_ssh() {
|
|
log "Waiting for the SSH key to authenticate against the AUR"
|
|
local waited=0
|
|
until ssh_works; do
|
|
sleep 30
|
|
waited=$((waited + 30))
|
|
if ((waited % 300 == 0)); then
|
|
info "still waiting ($((waited / 60)) min) — key not accepted yet"
|
|
fi
|
|
done
|
|
log "SSH authentication OK"
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Phase 2: build, verify and publish one package
|
|
# ---------------------------------------------------------------------------
|
|
|