58 lines
2 KiB
Bash
Executable file
58 lines
2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ==========================================================
|
|
# Deploy Forgejo act_runner + KEDA autoscaling to Kubernetes
|
|
# ==========================================================
|
|
|
|
NAMESPACE="forgejo-runners"
|
|
SCRIPT_DIR="$(dirname "$0")"
|
|
|
|
echo "=== Deploying Forgejo Runner with KEDA Autoscaling ==="
|
|
|
|
RUNNER_TOKEN="RPAjk4Jdc42By5vSxnULPPPrjU0goPLQIiKgwOIo"
|
|
|
|
# Forgejo API token — create at https://git.juntekim.com/user/settings/applications
|
|
# Needs: read:repository scope (to list repos and query action tasks)
|
|
if [[ -z "${FORGEJO_API_TOKEN:-}" ]]; then
|
|
read -rsp "Forgejo API token (for metrics exporter): " FORGEJO_API_TOKEN
|
|
echo
|
|
fi
|
|
|
|
# Install KEDA if not already installed
|
|
if ! kubectl get crd scaledobjects.keda.sh &>/dev/null; then
|
|
echo "=== Installing KEDA ==="
|
|
helm repo add kedacore https://kedacore.github.io/charts
|
|
helm repo update kedacore
|
|
helm install keda kedacore/keda --namespace keda --create-namespace
|
|
echo "✅ KEDA installed"
|
|
else
|
|
echo "✅ KEDA already installed"
|
|
fi
|
|
|
|
kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Runner registration token (used by act_runner to register with Forgejo)
|
|
kubectl create secret generic forgejo-runner-secret \
|
|
--namespace "$NAMESPACE" \
|
|
--from-literal=token="$RUNNER_TOKEN" \
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Forgejo API token (used by metrics exporter to query job queue)
|
|
kubectl create secret generic forgejo-api-secret \
|
|
--namespace "$NAMESPACE" \
|
|
--from-literal=token="$FORGEJO_API_TOKEN" \
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
kubectl apply -f "$SCRIPT_DIR/deployment.yaml"
|
|
kubectl apply -f "$SCRIPT_DIR/metrics-exporter.yaml"
|
|
kubectl apply -f "$SCRIPT_DIR/keda-scaledobject.yaml"
|
|
|
|
echo
|
|
echo "✅ Forgejo runner deployed with KEDA autoscaling"
|
|
echo
|
|
echo "Next steps:"
|
|
echo " kubectl get pods -n $NAMESPACE"
|
|
echo " kubectl get scaledobject -n $NAMESPACE"
|
|
echo " kubectl logs -n $NAMESPACE deploy/forgejo-metrics-exporter"
|
|
echo " Check runners at: https://git.juntekim.com/-/admin/runners"
|