sillyspace/deploy/hetzner/setup-github.sh
2026-06-03 22:59:03 -04:00

89 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
DEPLOY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=deploy/hetzner/lib.sh
. "$DEPLOY_DIR/lib.sh"
load_required_production_env
require_command gh
require_command ssh-keyscan
BLIISH_DOMAIN="$(normalize_domain "${BLIISH_DOMAIN:-bliish.space}")"
BLIISH_BASE_URL="${BLIISH_BASE_URL:-https://$BLIISH_DOMAIN}"
BLIISH_SERVER_NAME="${BLIISH_SERVER_NAME:-bliishspace-1}"
BLIISH_DEPLOY_SSH_KEY="${BLIISH_DEPLOY_SSH_KEY:-$HOME/.ssh/bliishspace-deploy}"
BLIISH_SSH_USER="${BLIISH_SSH_USER:-root}"
BLIISH_REPOSITORY_REF="${BLIISH_REPOSITORY_REF:-main}"
BLIISH_GITHUB_REPOSITORY="${BLIISH_GITHUB_REPOSITORY:-bliish-com/bliishspace}"
BLIISH_GITHUB_ENVIRONMENT="${BLIISH_GITHUB_ENVIRONMENT:-production}"
require_repository_ref BLIISH_REPOSITORY_REF "$BLIISH_REPOSITORY_REF"
if [ ! -r "$BLIISH_DEPLOY_SSH_KEY" ]; then
echo "Deploy SSH private key not found: $BLIISH_DEPLOY_SSH_KEY" >&2
echo "Run deploy/hetzner/provision.sh first, or set BLIISH_DEPLOY_SSH_KEY." >&2
exit 1
fi
if [ -z "${BLIISH_SSH_HOST:-}" ]; then
require_command hcloud
BLIISH_SSH_HOST="$(hcloud server ip "$BLIISH_SERVER_NAME")"
fi
known_hosts="$(ssh-keyscan -T 10 "$BLIISH_SSH_HOST" 2>/dev/null || true)"
if [ -z "$known_hosts" ] && [ -n "$BLIISH_DOMAIN" ] && [ "$BLIISH_DOMAIN" != "$BLIISH_SSH_HOST" ]; then
known_hosts="$(ssh-keyscan -T 10 "$BLIISH_DOMAIN" 2>/dev/null || true)"
fi
if [ -z "$known_hosts" ]; then
echo "Could not collect SSH host keys for $BLIISH_SSH_HOST." >&2
echo "Check that the server is reachable on port 22, then rerun this script." >&2
exit 1
fi
if ! gh api --method PUT "repos/$BLIISH_GITHUB_REPOSITORY/environments/$BLIISH_GITHUB_ENVIRONMENT" --silent; then
echo "Could not create or update GitHub environment $BLIISH_GITHUB_ENVIRONMENT in $BLIISH_GITHUB_REPOSITORY." >&2
echo "Check that BLIISH_GITHUB_REPOSITORY points to a repository you control and that gh is authenticated with admin access." >&2
exit 1
fi
gh secret set BLIISH_DEPLOY_SSH_PRIVATE_KEY \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT" \
< "$BLIISH_DEPLOY_SSH_KEY"
printf "%s\n" "$known_hosts" | gh secret set BLIISH_DEPLOY_KNOWN_HOSTS \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT"
gh variable set BLIISH_BASE_URL \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT" \
--body "$BLIISH_BASE_URL"
gh variable set BLIISH_SSH_HOST \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT" \
--body "$BLIISH_SSH_HOST"
gh variable set BLIISH_SSH_USER \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT" \
--body "$BLIISH_SSH_USER"
gh variable set BLIISH_REPOSITORY_REF \
--repo "$BLIISH_GITHUB_REPOSITORY" \
--env "$BLIISH_GITHUB_ENVIRONMENT" \
--body "$BLIISH_REPOSITORY_REF"
cat <<EOF
Configured GitHub production deploys for $BLIISH_GITHUB_REPOSITORY.
Environment: $BLIISH_GITHUB_ENVIRONMENT
URL: $BLIISH_BASE_URL
SSH target: $BLIISH_SSH_USER@$BLIISH_SSH_HOST
Ref: $BLIISH_REPOSITORY_REF
Push to main after DNS and first boot are healthy.
EOF