mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 12:03:59 +00:00
208 lines
6.1 KiB
Bash
208 lines
6.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROG="init_gitea"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/knoe_cfg.sh"
|
|
|
|
MODE="$(knoe_normalize_mode "${KNOE_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 <knoe.cfg> Path to knoe.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="$(knoe_normalize_mode "${2:-}")"; shift 2 ;;
|
|
--mode=*) MODE="$(knoe_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 knoe.cfg when present
|
|
if [[ -z "$CFG_PATH" && -n "${KNOE_CONF:-}" && -f "${KNOE_CONF}/knoe.cfg" ]]; then
|
|
CFG_PATH="${KNOE_CONF}/knoe.cfg"
|
|
elif [[ -z "$CFG_PATH" && -f "$SCRIPT_DIR/../conf/knoe.cfg" ]]; then
|
|
CFG_PATH="$SCRIPT_DIR/../conf/knoe.cfg"
|
|
fi
|
|
|
|
if [[ -z "$NAMESPACE" && -n "$CFG_PATH" ]]; then
|
|
maybe_ns="$(_knoe_cfg_extract_key "$CFG_PATH" "GITOPS_NAMESPACE")"
|
|
[[ -z "$maybe_ns" ]] && maybe_ns="$(_knoe_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 KNOE_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 _knoe_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
|
|
|
|
deploy_with_helm() {
|
|
command -v helm >/dev/null 2>&1 || return 1
|
|
|
|
helm repo add gitea-charts "$CHART_REPO" >/dev/null 2>&1 || true
|
|
helm repo update >/dev/null 2>&1 || true
|
|
|
|
# Minimal config: NodePort or ClusterIP + Ingress depending on environment.
|
|
# Avoid heavy persistence defaults; users can override via values later.
|
|
helm upgrade --install "$RELEASE_NAME" "$CHART_NAME" \
|
|
-n "$NAMESPACE" \
|
|
--set image.repository="$IMAGE_REPO" \
|
|
--set image.tag="$IMAGE_TAG" \
|
|
--set service.http.type=ClusterIP \
|
|
--set service.ssh.type=ClusterIP \
|
|
--set gitea.admin.username="${GITEA_ADMIN_USER:-gitea_admin}" \
|
|
--set gitea.admin.password="${GITEA_ADMIN_PASSWORD:-gitea_admin}" \
|
|
--set gitea.admin.email="${GITEA_ADMIN_EMAIL:-gitea_admin@example.local}" \
|
|
--wait --timeout 10m
|
|
}
|
|
|
|
apply_manifest_fallback() {
|
|
warn "Helm unavailable; applying fallback manifest"
|
|
cat <<EOF | kubectl apply -n "$NAMESPACE" -f -
|
|
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: 2222
|
|
env:
|
|
- name: GITEA__server__ROOT_URL
|
|
value: "http://gitea.${NAMESPACE}.svc.cluster.local:3000"
|
|
---
|
|
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: 2222
|
|
targetPort: 2222
|
|
EOF
|
|
}
|
|
|
|
ACTION="${1:-deploy}"
|
|
case "$ACTION" in
|
|
deploy|"") ;;
|
|
*) usage; die "Unknown action '$ACTION'" ;;
|
|
esac
|
|
|
|
log "Deploying Gitea to namespace '$NAMESPACE' (mode=$MODE)"
|
|
if deploy_with_helm; then
|
|
log "Gitea deployed via Helm"
|
|
else
|
|
apply_manifest_fallback
|
|
log "Gitea deployed via manifest fallback"
|
|
fi
|
|
|
|
log "Waiting for deployment rollout..."
|
|
kubectl -n "$NAMESPACE" rollout status deploy/gitea --timeout=10m
|
|
|
|
log "Done. Service endpoints:"
|
|
kubectl -n "$NAMESPACE" get svc gitea-http gitea-ssh
|