git-sigil/gitfield-radicle
Mark Randall Havens 4068b9e9b3 updated radicle
2025-05-31 01:32:43 -05:00

194 lines
7.1 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# ╭──────────────────────────────╮
# │ Config & Identity │
# ╰──────────────────────────────╯
PROJECT_NAME=$(basename "$(pwd)")
DEFAULT_NAME="Mark Randall Havens"
DEFAULT_EMAIL="mark.r.havens@gmail.com"
RAD_HOME="$HOME/.radicle"
RAD_BIN="$RAD_HOME/bin/rad"
RAD_KEYS="$RAD_HOME/keys.json"
RAD_BACKUP=".radicle-backup/keys.json"
RAD_PATH_LINE='export PATH="$HOME/.radicle/bin:$PATH"'
PROFILE_FILE="$HOME/.bashrc"
PUSH_STATE_FILE=".radicle-push-state"
MARKDOWN_FILE=".radicle-link.md"
SCRIPT_VERSION="1.0"
SEED_GARDEN="seed.radicle.garden"
SEED_KAIROS="kairos-seed.thefoldwithin.earth"
SEED_RAW="app.radicle.network"
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
# ╭──────────────────────────────╮
# │ Ensure Git is Ready │
# ╰──────────────────────────────╯
command -v git >/dev/null || {
sudo apt update && sudo apt install -y git
}
git config --global user.name "$DEFAULT_NAME"
git config --global user.email "$DEFAULT_EMAIL"
# ╭──────────────────────────────╮
# │ Radicle CLI Installation │
# ╰──────────────────────────────╯
if [ ! -x "$RAD_BIN" ]; then
sudo apt install -y curl jq unzip
curl -sSf https://radicle.xyz/install | sh
fi
export PATH="$HOME/.radicle/bin:$PATH"
if ! grep -Fxq "$RAD_PATH_LINE" "$PROFILE_FILE"; then
echo "$RAD_PATH_LINE" >> "$PROFILE_FILE"
warn "→ Run 'source $PROFILE_FILE' to make Radicle persistent"
fi
command -v rad >/dev/null || error "Radicle CLI not available."
# ╭──────────────────────────────╮
# │ Identity Restore/Create │
# ╰──────────────────────────────╯
mkdir -p "$(dirname "$RAD_BACKUP")"
if [ ! -f "$RAD_KEYS" ]; then
if [ -f "$RAD_BACKUP" ]; then
cp "$RAD_BACKUP" "$RAD_KEYS"
else
rad auth
cp "$RAD_KEYS" "$RAD_BACKUP"
fi
fi
# ╭──────────────────────────────╮
# │ Start Radicle Node │
# ╰──────────────────────────────╯
pgrep -f "rad node start" >/dev/null || {
nohup rad node start > /dev/null 2>&1 &
sleep 3
}
# ╭──────────────────────────────╮
# │ Git Repo Initialization │
# ╰──────────────────────────────╯
if [ ! -d .git ]; then
git init
git add .
git commit -m "Initial commit"
fi
# ╭──────────────────────────────╮
# │ Project Registration │
# ╰──────────────────────────────╯
if ! rad projects | grep -q "$PROJECT_NAME"; then
rad init --name "$PROJECT_NAME" --description "Radicle sovereign repo for $PROJECT_NAME"
fi
# ╭──────────────────────────────╮
# │ Push to Radicle │
# ╰──────────────────────────────╯
CURRENT_BRANCH=$(git symbolic-ref --short HEAD)
CURRENT_COMMIT=$(git rev-parse HEAD)
LAST_PUSHED_COMMIT=$(cat "$PUSH_STATE_FILE" 2>/dev/null || echo "none")
if [[ "$CURRENT_COMMIT" != "$LAST_PUSHED_COMMIT" ]]; then
git push rad "$CURRENT_BRANCH" && echo "$CURRENT_COMMIT" > "$PUSH_STATE_FILE"
else
echo "✓ Already pushed: $CURRENT_COMMIT"
fi
# ╭──────────────────────────────╮
# │ Extract IDs + Metadata │
# ╰──────────────────────────────╯
PROJECT_ID=$(rad self | grep 'Project ID' | awk '{print $NF}')
PEER_ID=$(rad self | grep 'Peer ID' | awk '{print $NF}')
URL_GARDEN="https://app.radicle.xyz/nodes/$SEED_GARDEN/rad:$PROJECT_ID"
URL_KAIROS="https://app.radicle.xyz/nodes/$SEED_KAIROS/rad:$PROJECT_ID"
URL_RAW="https://$SEED_RAW/rad:$PROJECT_ID"
OS_NAME=$(uname -s)
KERNEL_VERSION=$(uname -r)
ARCH=$(uname -m)
WSL_CHECK=$(grep -qi microsoft /proc/version && echo "Yes" || echo "No")
DOCKER_CHECK=$(grep -qE '/docker|/lxc/' /proc/1/cgroup && echo "Yes" || echo "No")
HOSTNAME=$(hostname)
USER_NAME=$(whoami)
TIMEZONE=$(date +%Z)
UPTIME=$(uptime -p || echo "Unknown")
MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n1)
LOCAL_IP=$(hostname -I | awk '{print $1}')
CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | xargs)
RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# ╭──────────────────────────────╮
# │ Write Metadata File │
# ╰──────────────────────────────╯
cat > "$MARKDOWN_FILE" <<EOF
# 🔗 Radicle Project Link Metadata
**Project Name**: \`$PROJECT_NAME\`
**Peer ID**: \`$PEER_ID\`
**Project ID**: \`$PROJECT_ID\`
---
## 🌐 Gateway Access URLs
- **Radicle Garden**: [$URL_GARDEN]($URL_GARDEN)
- **Kairos Seed**: [$URL_KAIROS]($URL_KAIROS)
- **Raw Gateway**: [$URL_RAW]($URL_RAW)
---
## 📦 Commit Metadata
- **Branch**: \`$CURRENT_BRANCH\`
- **Commit SHA**: \`$CURRENT_COMMIT\`
- **Timestamp**: \`$TIMESTAMP\`
- **Script Version**: \`v$SCRIPT_VERSION\`
---
## 🧬 Host & OS Fingerprint
- **Host Machine**: \`$HOSTNAME\`
- **User**: \`$USER_NAME\`
- **Time Zone**: \`$TIMEZONE\`
- **WSL**: \`$WSL_CHECK\`
- **Docker**: \`$DOCKER_CHECK\`
- **OS Name**: \`$OS_NAME\`
- **Kernel**: \`$KERNEL_VERSION\`
- **Architecture**: \`$ARCH\`
- **CPU**: \`$CPU_MODEL\`
- **RAM (GB)**: \`$RAM_GB\`
- **Uptime**: \`$UPTIME\`
- **MAC**: \`$MAC_ADDR\`
- **Local IP**: \`$LOCAL_IP\`
---
_Auto-generated by \`gitfield-radicle\` v$SCRIPT_VERSION_
EOF
# ╭──────────────────────────────╮
# │ Manual Config Reminder │
# ╰──────────────────────────────╯
echo -e "\n🛠 If you want to use the Kairos seed node persistently:"
echo "[network]"
echo "seeds = [\"/dns4/$SEED_KAIROS/tcp/8776\"]"
echo "→ Add above block to: \`~/.radicle/node/config.toml\`"
# ╭──────────────────────────────╮
# │ Final Output Block │
# ╰──────────────────────────────╯
echo -e "\n✅ Radicle push completed."
echo "🌐 Access URLs:"
echo " • Garden: $URL_GARDEN"
echo " • Kairos: $URL_KAIROS"
echo " • Raw: $URL_RAW"
echo "📝 Metadata written to: $MARKDOWN_FILE"