From 4068b9e9b3fe84cbecb57d20a386bf59947c769c Mon Sep 17 00:00:00 2001 From: Mark Randall Havens Date: Sat, 31 May 2025 01:32:43 -0500 Subject: [PATCH] updated radicle --- gitfield-radicle | 240 ++++++++++++++++++++++++++++++----------------- 1 file changed, 152 insertions(+), 88 deletions(-) diff --git a/gitfield-radicle b/gitfield-radicle index a102a5f..dd0a688 100755 --- a/gitfield-radicle +++ b/gitfield-radicle @@ -1,130 +1,194 @@ #!/bin/bash - -# ──────────────────────────────────────────────────────────────── -# gitfield-radicle — v1.2.0 -# Pushes local Git repo to Radicle and generates access metadata -# Author: Mark Randall Havens — The Empathic Technologist -# ──────────────────────────────────────────────────────────────── - set -euo pipefail IFS=$'\n\t' -PROJECT_NAME="git-sigil" -LOCAL_REPO_PATH=$(pwd) -METADATA_FILE=".radicle-link.md" -DEFAULT_BRANCH="master" -SEED_URL="kairos-seed.thefoldwithin.earth" -PUBLIC_GATEWAY_GARDEN="https://app.radicle.xyz/nodes/seed.radicle.garden" -PUBLIC_GATEWAY_KAIROS="https://app.radicle.xyz/nodes/kairos-seed.thefoldwithin.earth" -PUBLIC_GATEWAY_RAW="https://app.radicle.network" +# ╭──────────────────────────────╮ +# │ 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" -echo "🌱 Initializing Radicle push..." +SEED_GARDEN="seed.radicle.garden" +SEED_KAIROS="kairos-seed.thefoldwithin.earth" +SEED_RAW="app.radicle.network" -# ── Ensure we're in a git repo -if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then - echo "❌ Not a valid Git repository" - exit 1 +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 -# ── Add Kairos seed node explicitly -rad node config set seeds "/dns4/${SEED_URL}/tcp/8776" +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 -# ── Create & push to Radicle -PROJECT_ID=$(rad init --name "$PROJECT_NAME" --default-branch "$DEFAULT_BRANCH" --no-confirm | grep "rad:" | awk '{print $NF}') -rad push "$PROJECT_ID" +command -v rad >/dev/null || error "Radicle CLI not available." -# ── Retrieve peer ID -PEER_ID=$(rad self | grep "Peer ID" | awk '{print $NF}') +# ╭──────────────────────────────╮ +# │ 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 -# ── Commit metadata -COMMIT_HASH=$(git rev-parse HEAD) -COMMIT_MSG=$(git log -1 --pretty=%B) -COMMIT_DATE=$(git log -1 --date=iso-local --pretty=format:'%cd') -COMMIT_AUTHOR=$(git log -1 --pretty=format:'%an <%ae>') -TREE_HASH=$(git rev-parse HEAD^{tree}) -TIMESTAMP=$(date +"%Y-%m-%dT%H:%M:%S%:z") +# ╭──────────────────────────────╮ +# │ 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" -# ── System Info OS_NAME=$(uname -s) -OS_VERSION=$(lsb_release -d | cut -f2) KERNEL_VERSION=$(uname -r) -ARCHITECTURE=$(uname -m) +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) -CURRENT_USER=$(whoami) -MAC_ADDR=$(ip link show eth0 | grep ether | awk '{print $2}') +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 "model name" /proc/cpuinfo | head -1 | cut -d ':' -f2 | xargs) -TOTAL_RAM=$(free -g | awk '/^Mem:/{print $2}') +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') -# ── Generate Metadata Output -cat < "$METADATA_FILE" +# ╭──────────────────────────────╮ +# │ Write Metadata File │ +# ╰──────────────────────────────╯ +cat > "$MARKDOWN_FILE" < _Auto-generated on $TIMESTAMP via \`gitfield-radicle\` push script._ +_Auto-generated by \`gitfield-radicle\` v$SCRIPT_VERSION_ EOF -touch .radicle-push-done -echo "$PROJECT_ID" > .radicle-push-state +# ╭──────────────────────────────╮ +# │ 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\`" -echo "" -echo "✅ Radicle push completed." +# ╭──────────────────────────────╮ +# │ Final Output Block │ +# ╰──────────────────────────────╯ +echo -e "\n✅ Radicle push completed." echo "🌐 Access URLs:" -echo "• Garden: $PUBLIC_GATEWAY_GARDEN/$PROJECT_ID" -echo "• Kairos: $PUBLIC_GATEWAY_KAIROS/$PROJECT_ID" -echo "• Raw: $PUBLIC_GATEWAY_RAW/$PROJECT_ID" +echo " • Garden: $URL_GARDEN" +echo " • Kairos: $URL_KAIROS" +echo " • Raw: $URL_RAW" +echo "📝 Metadata written to: $MARKDOWN_FILE"