mirror of
https://seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5.git
synced 2026-10-18 19:10:30 +08:00
Add custom check for ellipses "...", asking for replacement of "…". Git ranges and the CLI wildcard matches are ignored. This change includes fixes to all sites that did not pass the check.
169 lines
6.4 KiB
Makefile
169 lines
6.4 KiB
Makefile
provisioner := env_var_or_default("PROVISIONER", "qemu")
|
|
cluster_name := "radicle-" + provisioner
|
|
clusters_dir := env_var("HOME") + "/.talos/clusters"
|
|
radicle_node_module := "modules/radicle-node"
|
|
module_pkg := "cue.mod/pkg"
|
|
module_gen := "cue.mod/gen"
|
|
kubectl_context := `kubectl config current-context 2>/dev/null || echo "none"`
|
|
|
|
SUCCESS := "✅ " + GREEN + BOLD
|
|
CHECK := "🔄 " + BOLD
|
|
WARN := "⚠️ " + YELLOW + BOLD
|
|
ERROR := "❌ " + RED + BOLD
|
|
HINT := "💡 " + BOLD
|
|
|
|
default:
|
|
@just --list
|
|
|
|
# Setup and start the complete simulation environment
|
|
[group('start')]
|
|
[group('setup')]
|
|
start: setup start-network
|
|
@echo ""
|
|
@echo "{{SUCCESS}}Simulation started!{{NORMAL}}"
|
|
@echo ""
|
|
|
|
# Setup cluster and dependencies
|
|
[group('setup')]
|
|
setup: configure-cluster
|
|
@echo "{{SUCCESS}}Setup complete{{NORMAL}}"
|
|
|
|
# Create the Talos cluster if it doesn't exist
|
|
[private]
|
|
create-cluster: (verify-tool "talosctl") ensure-ovmf
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
if [ ! -d "{{clusters_dir}}/{{cluster_name}}" ]; then
|
|
echo "{{CHECK}}Creating Talos cluster '{{cluster_name}}' using {{provisioner}}…{{NORMAL}}"
|
|
mkdir -p "{{clusters_dir}}"
|
|
if [ "{{provisioner}}" = "qemu" ]; then
|
|
sudo --preserve-env=HOME,PATH talosctl cluster create --name={{cluster_name}} {{provisioner}} --config-patch-controlplanes '{"cluster": {"allowSchedulingOnControlPlanes": true}}'
|
|
else
|
|
talosctl cluster create --name={{cluster_name}} {{provisioner}} --config-patch-controlplanes '{"cluster": {"allowSchedulingOnControlPlanes": true}}'
|
|
fi
|
|
else
|
|
echo "{{SUCCESS}}Cluster '{{cluster_name}}' already exists.{{NORMAL}}"
|
|
fi
|
|
|
|
# Configure the Kubernetes cluster
|
|
[private]
|
|
configure-cluster: (verify-tool "kubectl") create-cluster
|
|
@echo "{{CHECK}}Configuring cluster…{{NORMAL}}"
|
|
# Add local-path storage system
|
|
@kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
|
|
# Relax security on namespaces
|
|
@kubectl label namespace local-path-storage pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/warn=privileged pod-security.kubernetes.io/audit=privileged --overwrite
|
|
@kubectl label namespace default pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/warn=privileged pod-security.kubernetes.io/audit=privileged --overwrite
|
|
# Set default storage class
|
|
@kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
|
|
|
|
# Start the simulation network only
|
|
[group('start')]
|
|
start-network: (verify-tool "timoni") vendor-timoni-dependencies
|
|
@echo "{{CHECK}}Starting simulation network…{{NORMAL}}"
|
|
@timoni apply radicle-network {{radicle_node_module}} -f instances/network.cue
|
|
@just show-cluster
|
|
|
|
# Vendor Timoni dependencies
|
|
[private]
|
|
vendor-timoni-dependencies: (verify-tool "timoni")
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
cd {{radicle_node_module}}
|
|
if [ ! -d "{{module_pkg}}" ]; then
|
|
echo "{{CHECK}}Fetching Timoni pkg files…{{NORMAL}}"
|
|
timoni artifact pull oci://ghcr.io/stefanprodan/timoni/schemas -o cue.mod/pkg
|
|
fi
|
|
if [ ! -d "{{module_gen}}" ]; then
|
|
echo "{{CHECK}}Fetching Timoni k8s gen files…{{NORMAL}}"
|
|
timoni mod vendor k8s
|
|
fi
|
|
|
|
# Show cluster status
|
|
[group('inspect')]
|
|
show-cluster: (verify-tool "kubectl") (verify-tool "talosctl")
|
|
@echo "Cluster: {{cluster_name}}"
|
|
@echo "Context: {{kubectl_context}}"
|
|
@talosctl cluster show --name {{cluster_name}} --provisioner {{provisioner}} || true
|
|
@kubectl get pods -o wide
|
|
|
|
# Delete simulation pods and resources
|
|
[group('delete')]
|
|
delete: delete-pods delete-pvc
|
|
@echo "{{SUCCESS}}Simulation cleaned up{{NORMAL}}"
|
|
|
|
# Delete pods only
|
|
[group('delete')]
|
|
delete-pods: (verify-tool "kubectl")
|
|
@echo "{{CHECK}}Deleting pods…{{NORMAL}}"
|
|
@kubectl delete pods -l app=radicle-node --wait=false
|
|
|
|
# Delete storage volumes
|
|
[group('delete')]
|
|
delete-pvc: (verify-tool "kubectl")
|
|
@echo "{{CHECK}}Deleting storage volumes…{{NORMAL}}"
|
|
@kubectl delete pvc -l app=radicle-node --wait=false
|
|
|
|
# Destroy the Talos cluster and clean up kubeconfig
|
|
[group('delete')]
|
|
destroy: (verify-tool "kubectl") (verify-tool "talosctl") show-cluster
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
echo ""
|
|
echo -n "Are you sure you want to destroy the cluster and remove kubeconfig entries? [y/N] "
|
|
read answer
|
|
if [ "${answer:-N}" != "y" ]; then
|
|
echo "Aborted."
|
|
exit 1
|
|
fi
|
|
|
|
echo "{{CHECK}}Destroying talos cluster '{{cluster_name}}'…{{NORMAL}}"
|
|
if [ "{{provisioner}}" = "qemu" ]; then
|
|
sudo --preserve-env=HOME,PATH talosctl cluster destroy --name {{cluster_name}} --provisioner {{provisioner}}
|
|
else
|
|
talosctl cluster destroy --name {{cluster_name}} --provisioner {{provisioner}}
|
|
fi
|
|
|
|
echo "{{CHECK}}Removing kube config entries…{{NORMAL}}"
|
|
CONTEXT=$(kubectl config current-context 2>/dev/null || echo "")
|
|
if [ -n "$CONTEXT" ]; then
|
|
CLUSTER=$(echo "$CONTEXT" | cut -d '@' -f 2)
|
|
kubectl config delete-context "$CONTEXT" || true
|
|
kubectl config delete-cluster "$CLUSTER" || true
|
|
kubectl config unset "users.$CONTEXT" || true
|
|
fi
|
|
echo "{{WARN}}Make sure you remove the '{{cluster_name}}' entry from: ~/.talos/config{{NORMAL}}"
|
|
echo "{{SUCCESS}}Cluster destroyed.{{NORMAL}}"
|
|
|
|
# Check if required tools are in PATH.
|
|
[private]
|
|
verify-tool tool package_name="":
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
if ! command -v {{tool}} >/dev/null 2>&1; then
|
|
PKG="{{package_name}}"
|
|
if [ -z "$PKG" ]; then
|
|
PKG="{{tool}}"
|
|
fi
|
|
echo "{{ERROR}}Missing required tool: {{tool + NORMAL}}"
|
|
echo "{{HINT}}Use your systems package manager to install '$PKG'.{{NORMAL}}"
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure OVMF firmware is discoverable by talosctl.
|
|
# On NixOS, OVMF lives in the Nix store — not in /usr/share/OVMF where
|
|
# talosctl expects it. We symlink the firmware files into place.
|
|
[private]
|
|
ensure-ovmf:
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
if [ -z "${OVMF_FD_PATH:-}" ]; then
|
|
# Not on NixOS / not using the devshell — assume OVMF is installed normally
|
|
exit 0
|
|
fi
|
|
if [ ! -f /usr/share/OVMF/OVMF_CODE.fd ]; then
|
|
echo "{{CHECK}}Symlinking OVMF firmware from Nix store into /usr/share/OVMF…{{NORMAL}}"
|
|
sudo mkdir -p /usr/share/OVMF
|
|
sudo ln -sf "$OVMF_FD_PATH"/* /usr/share/OVMF/
|
|
fi
|