mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 10:13:58 +00:00
Summary: Removed the prole-db-manager microservice and simplified deployment to use prole-authority as the internal management and authorization point. Fixed two blocking bugs that prevented silent install from completing on knoe-dev-cluster. Removed: prole-db-manager - Deleted db-manager-deployment.yaml and db-manager-service.yaml from opentofu manifests - Deleted src/db-manager/ (Dockerfile, server.js, package.json, tests) - Removed prole-db-manager port-forward mapping from installer/core/env.py - Removed init_db_manager.sh from Initialization Scripts (milestones.py, actions.py) - Removed init_certmgr.sh and init_db_manager.sh tabs from services screen (services.py) - Removed live k8s Deployment/Service from knoe-dev-cluster Fixed: PostgreSQL version downgrade error (pg17 -> pg18) - Created conf/postgresql/.version with value 18 - Updated k8s/prole/prole-db.yaml and prole-db-recovery.yaml.tpl imageName to prole-db:18-089 - Fixed _init_database_options_state() to restore saved version_type from prole.cfg so db_version_type defaults to v18 (pg18) instead of silently reverting to pg17 - Added database_options.* keys to _collect_input_snapshot() in cfg.py so distribution, version_type, and all extension toggles persist to prole.cfg Fixed: Cluster name inconsistency - Removed stale prole-dev-cluster references; all scripts now use knoe-dev-cluster - Added knoe-dev-cluster to mode-detection case in etc/prole_cfg.sh Config: conf/prole.cfg - Set kerberos_config.enabled = False, KERBEROS_AUTO_ENABLED = False - Added database_options.distribution = percona, version_type = v18 - Added all 13 extension flags set to True (postgis, pgvector, pgcrypto, pgaudit, pg_repack, pg_stat_statements, pg_buffercache, pg_freespacemap, pgrowlocks, postgres_fdw, dblink, pg_stat_monitor, pgbadger) Verification: ./install.py -s -l -v -c conf/prole.cfg completed successfully. CNPG deployed prole-db:18-089 to knoe-dev-cluster; all milestones passed. Co-authored-by: Junie <junie@jetbrains.com>
257 lines
7.0 KiB
Bash
Executable File
257 lines
7.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROG="init_gitea"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/prole_cfg.sh"
|
|
|
|
MODE="$(prole_normalize_mode "${PROLE_MODE:-${DEPLOYMENT_MODE:-k3d}}")"
|
|
NAMESPACE="${GITEA_NAMESPACE:-}"
|
|
CFG_PATH=""
|
|
FORCE=0
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage:
|
|
$PROG [options] [deploy]
|
|
|
|
Options:
|
|
--mode <k3d|k3s|k8s|local> Deployment mode (default: ${MODE:-k3d})
|
|
-n, --namespace <name> Target namespace (default: gitea)
|
|
-c, --config <prole.cfg> Path to prole.cfg (defaults to detected)
|
|
--force Delete existing release before deploy
|
|
--help Show this help
|
|
|
|
Behavior:
|
|
- Prefers Helm install/upgrade (gitea-charts/gitea).
|
|
- Falls back to applying a generated Deployment/Service/Ingress manifest.
|
|
- If a local registry is enabled, the image is mirrored there first.
|
|
EOF
|
|
}
|
|
|
|
die() { echo "[ERROR] $*" >&2; exit 2; }
|
|
log() { echo "[INFO] $*"; }
|
|
warn() { echo "[WARN] $*" >&2; }
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--mode) MODE="$(prole_normalize_mode "${2:-}")"; shift 2 ;;
|
|
--mode=*) MODE="$(prole_normalize_mode "${1#*=}")"; shift 1 ;;
|
|
-n|--namespace) NAMESPACE="${2:-}"; shift 2 ;;
|
|
--namespace=*) NAMESPACE="${1#*=}"; shift 1 ;;
|
|
-c|--config) CFG_PATH="${2:-}"; shift 2 ;;
|
|
--config=*) CFG_PATH="${1#*=}"; shift 1 ;;
|
|
--force) FORCE=1; shift ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
|
|
# Resolve config path and namespace defaults from prole.cfg when present
|
|
if [[ -z "$CFG_PATH" && -n "${PROLE_CONF:-}" && -f "${PROLE_CONF}/prole.cfg" ]]; then
|
|
CFG_PATH="${PROLE_CONF}/prole.cfg"
|
|
elif [[ -z "$CFG_PATH" && -f "$SCRIPT_DIR/../conf/prole.cfg" ]]; then
|
|
CFG_PATH="$SCRIPT_DIR/../conf/prole.cfg"
|
|
fi
|
|
|
|
if [[ -z "$NAMESPACE" && -n "$CFG_PATH" ]]; then
|
|
maybe_ns="$(_prole_cfg_extract_key "$CFG_PATH" "GITOPS_NAMESPACE")"
|
|
[[ -z "$maybe_ns" ]] && maybe_ns="$(_prole_cfg_extract_key "$CFG_PATH" "GITEA_NAMESPACE")"
|
|
NAMESPACE="$maybe_ns"
|
|
fi
|
|
NAMESPACE="${NAMESPACE:-gitea}"
|
|
export GITEA_NAMESPACE="$NAMESPACE"
|
|
|
|
case "$MODE" in
|
|
k3d|k3s|k8s|local) ;;
|
|
*) die "Unsupported mode '$MODE' (use k3d, k3s, k8s, or local)" ;;
|
|
esac
|
|
export PROLE_MODE="$MODE"
|
|
|
|
command -v kubectl >/dev/null || die "kubectl not found"
|
|
command -v helm >/dev/null || warn "helm not found — will use manifest fallback"
|
|
|
|
kubectl get ns "$NAMESPACE" >/dev/null 2>&1 || kubectl create namespace "$NAMESPACE" >/dev/null 2>&1
|
|
|
|
CHART_REPO="https://dl.gitea.com/charts"
|
|
CHART_NAME="gitea-charts/gitea"
|
|
RELEASE_NAME="gitea"
|
|
IMAGE_REPO_DEFAULT="gitea/gitea"
|
|
IMAGE_TAG="${GITEA_IMAGE_TAG:-1.22.3}"
|
|
IMAGE_REPO="$IMAGE_REPO_DEFAULT"
|
|
|
|
# Optional reset
|
|
if [[ "$FORCE" -eq 1 ]]; then
|
|
warn "--force specified; removing existing Gitea resources in namespace $NAMESPACE"
|
|
if command -v helm >/dev/null 2>&1; then
|
|
helm uninstall "$RELEASE_NAME" -n "$NAMESPACE" >/dev/null 2>&1 || true
|
|
fi
|
|
kubectl -n "$NAMESPACE" delete deploy/gitea svc/gitea-http svc/gitea-ssh ingress/gitea >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# Mirror to local registry if enabled
|
|
if _prole_local_registry_enabled && command -v docker >/dev/null; then
|
|
HOST_REG="${LOCAL_REGISTRY:-${PROLE_LOCAL_REGISTRY:-}}"
|
|
INTERNAL_REG="${LOCAL_REGISTRY_INTERNAL:-${PROLE_LOCAL_REGISTRY_INTERNAL:-}}"
|
|
if [[ -n "$HOST_REG" ]]; then
|
|
HOST_IMG="${HOST_REG}/${IMAGE_REPO_DEFAULT}"
|
|
log "Pulling ${IMAGE_REPO_DEFAULT}:${IMAGE_TAG}"
|
|
docker pull "${IMAGE_REPO_DEFAULT}:${IMAGE_TAG}" >/dev/null
|
|
log "Tagging ${HOST_IMG}:${IMAGE_TAG}"
|
|
docker tag "${IMAGE_REPO_DEFAULT}:${IMAGE_TAG}" "${HOST_IMG}:${IMAGE_TAG}"
|
|
log "Pushing ${HOST_IMG}:${IMAGE_TAG}"
|
|
docker push "${HOST_IMG}:${IMAGE_TAG}" >/dev/null || warn "Push to local registry failed; continuing with upstream image"
|
|
if [[ -n "$INTERNAL_REG" ]]; then
|
|
IMAGE_REPO="${INTERNAL_REG}/gitea/gitea"
|
|
else
|
|
IMAGE_REPO="${HOST_REG}/gitea/gitea"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
VALUES_FILE="$(mktemp /tmp/gitea-values.XXXXXX.yaml)"
|
|
cat >"$VALUES_FILE" <<EOF
|
|
image:
|
|
repository: "${IMAGE_REPO}"
|
|
tag: "${IMAGE_TAG}"
|
|
service:
|
|
http:
|
|
type: ClusterIP
|
|
port: 3000
|
|
ssh:
|
|
type: ClusterIP
|
|
port: 22
|
|
gitea:
|
|
config:
|
|
server:
|
|
DOMAIN: ${GITEA_DOMAIN:-git.prole.org}
|
|
SSH_DOMAIN: ${GITEA_SSH_DOMAIN:-git.prole.org}
|
|
ROOT_URL: "http://${GITEA_DOMAIN:-git.prole.org}:3000/"
|
|
ingress:
|
|
enabled: ${GITEA_INGRESS_ENABLED:-$( [[ "$MODE" == "k3s" || "$MODE" == "k8s" ]] && echo true || echo false )}
|
|
className: ${GITEA_INGRESS_CLASS:-nginx}
|
|
hosts:
|
|
- host: ${GITEA_DOMAIN:-git.prole.org}
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: ${RELEASE_NAME}-http
|
|
port:
|
|
number: 3000
|
|
EOF
|
|
|
|
helm_deployed=0
|
|
if command -v helm >/dev/null; then
|
|
if ! helm repo list 2>/dev/null | grep -q "gitea-charts"; then
|
|
helm repo add gitea-charts "$CHART_REPO" >/dev/null 2>&1 || warn "helm repo add failed"
|
|
fi
|
|
helm repo update >/dev/null 2>&1 || true
|
|
|
|
log "Deploying Gitea via Helm to namespace ${NAMESPACE} (mode=${MODE})"
|
|
set +e
|
|
helm upgrade --install "$RELEASE_NAME" "$CHART_NAME" \
|
|
--namespace "$NAMESPACE" \
|
|
--create-namespace \
|
|
-f "$VALUES_FILE"
|
|
rc=$?
|
|
set -e
|
|
if [[ $rc -eq 0 ]]; then
|
|
helm_deployed=1
|
|
log "Helm deployment successful."
|
|
else
|
|
warn "Helm deployment failed (code $rc); falling back to manifests."
|
|
fi
|
|
fi
|
|
|
|
if [[ $helm_deployed -eq 0 ]]; then
|
|
MANIFEST_FILE="$(mktemp /tmp/gitea-manifest.XXXXXX.yaml)"
|
|
cat >"$MANIFEST_FILE" <<EOF
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: gitea
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: gitea
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: gitea
|
|
spec:
|
|
containers:
|
|
- name: gitea
|
|
image: ${IMAGE_REPO}:${IMAGE_TAG}
|
|
ports:
|
|
- name: http
|
|
containerPort: 3000
|
|
- name: ssh
|
|
containerPort: 22
|
|
volumeMounts:
|
|
- name: data
|
|
mountPath: /data
|
|
volumes:
|
|
- name: data
|
|
emptyDir: {}
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: gitea-http
|
|
spec:
|
|
selector:
|
|
app: gitea
|
|
ports:
|
|
- name: http
|
|
port: 3000
|
|
targetPort: 3000
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: gitea-ssh
|
|
spec:
|
|
selector:
|
|
app: gitea
|
|
ports:
|
|
- name: ssh
|
|
port: 22
|
|
targetPort: 22
|
|
EOF
|
|
if [[ "$MODE" == "k3s" || "$MODE" == "k8s" ]]; then
|
|
cat >>"$MANIFEST_FILE" <<EOF
|
|
---
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: gitea
|
|
annotations:
|
|
nginx.ingress.kubernetes.io/proxy-body-size: "64m"
|
|
spec:
|
|
ingressClassName: nginx
|
|
rules:
|
|
- host: git.prole.org
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: gitea-http
|
|
port:
|
|
number: 3000
|
|
EOF
|
|
fi
|
|
|
|
log "Applying fallback manifest"
|
|
kubectl -n "$NAMESPACE" apply -f "$MANIFEST_FILE"
|
|
fi
|
|
|
|
# Ensure port-forward hints / conflicts handled by caller via _build_required_port_forwards
|
|
log "Gitea deployment completed in namespace '$NAMESPACE'."
|