Files
Fintan Halpenny 9ff0e8b01f just: checking for ellipses
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.
2026-05-28 16:52:02 +01:00

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