75 lines
2.4 KiB
Text
75 lines
2.4 KiB
Text
|
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
readonly SOURCE_ROOT="/var/tmp/hlcc-deploy-src-20260726"
|
||
|
|
readonly SOURCE_COMMIT="b03619e359b9c5f5eeae73b15db6b255b9b243f7"
|
||
|
|
readonly TOOL_ROOT="/usr/local/libexec/guanghu/hlcc-candidate"
|
||
|
|
readonly PACKAGE_ROOT="/var/tmp/hlcc-offline-20260726"
|
||
|
|
readonly CONFIG_FILE="${TOOL_ROOT}/candidate-app.enterprise.ini"
|
||
|
|
readonly STATE_ROOT="/var/lib/guanghu-enterprise-code-channel"
|
||
|
|
readonly RECEIPT_ROOT="${STATE_ROOT}/receipts"
|
||
|
|
readonly RECEIPT_FILE="${RECEIPT_ROOT}/AW-GZ-001-HLCC-16.0.1.json"
|
||
|
|
readonly GUANGHU_GROUP="$(id -gn guanghu)"
|
||
|
|
|
||
|
|
if [[ "$(id -u)" != "0" ]]; then
|
||
|
|
echo "This fixed connector must be invoked by root." >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ "$(git -C "${SOURCE_ROOT}" rev-parse HEAD)" != "${SOURCE_COMMIT}" ]]; then
|
||
|
|
echo "Pinned deployment source commit does not match." >&2
|
||
|
|
exit 3
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ ! -d "${PACKAGE_ROOT}" || ! -f "${CONFIG_FILE}" ]]; then
|
||
|
|
echo "Verified package staging or pinned candidate configuration is missing." >&2
|
||
|
|
exit 3
|
||
|
|
fi
|
||
|
|
|
||
|
|
install -d -o guanghu -g "${GUANGHU_GROUP}" -m 0700 "${STATE_ROOT}"
|
||
|
|
|
||
|
|
if ss -ltnH 'sport = :3340' | grep -q .; then
|
||
|
|
echo "Loopback candidate port 3340 is already in use." >&2
|
||
|
|
exit 4
|
||
|
|
fi
|
||
|
|
|
||
|
|
chown -R root:"${GUANGHU_GROUP}" "${PACKAGE_ROOT}"
|
||
|
|
chmod 0750 "${PACKAGE_ROOT}"
|
||
|
|
find "${PACKAGE_ROOT}" -type f -exec chmod 0640 {} +
|
||
|
|
|
||
|
|
rollback_candidate() {
|
||
|
|
runuser -u guanghu -- "${TOOL_ROOT}/stop-candidate.sh" || true
|
||
|
|
}
|
||
|
|
trap rollback_candidate ERR
|
||
|
|
|
||
|
|
runuser -u guanghu -- "${TOOL_ROOT}/install-candidate.sh" \
|
||
|
|
"${PACKAGE_ROOT}" \
|
||
|
|
"${CONFIG_FILE}"
|
||
|
|
runuser -u guanghu -- "${TOOL_ROOT}/start-candidate.sh"
|
||
|
|
|
||
|
|
install -d -o guanghu -g "${GUANGHU_GROUP}" -m 0700 "${RECEIPT_ROOT}"
|
||
|
|
runuser -u guanghu -- python3 - "${RECEIPT_FILE}" "${SOURCE_COMMIT}" <<'PY'
|
||
|
|
import json
|
||
|
|
import sys
|
||
|
|
from datetime import datetime, timezone
|
||
|
|
|
||
|
|
receipt = {
|
||
|
|
"schema": "guanghu.agent-execution-receipt/v1",
|
||
|
|
"agent_id": "AW-HLCC-CANDIDATE-DEPLOYER",
|
||
|
|
"action": "deploy_release",
|
||
|
|
"target_node_id": "AW-GZ-001",
|
||
|
|
"release": "Forgejo 16.0.1",
|
||
|
|
"source_commit": sys.argv[2],
|
||
|
|
"listen": "127.0.0.1:3340",
|
||
|
|
"scope": "isolated-candidate",
|
||
|
|
"production_cutover": False,
|
||
|
|
"created_at": datetime.now(timezone.utc).isoformat(),
|
||
|
|
}
|
||
|
|
with open(sys.argv[1], "w", encoding="utf-8") as handle:
|
||
|
|
json.dump(receipt, handle, ensure_ascii=False, indent=2)
|
||
|
|
handle.write("\n")
|
||
|
|
PY
|
||
|
|
chmod 0600 "${RECEIPT_FILE}"
|
||
|
|
trap - ERR
|
||
|
|
|
||
|
|
echo "AW-HLCC-CANDIDATE-DEPLOYER completed the registered deployment action."
|