From c6f2a0a956c952b0a0d1fefce605aebfa9dbe4f6 Mon Sep 17 00:00:00 2001 From: Mark Randall Havens Date: Fri, 6 Jun 2025 12:46:17 -0500 Subject: [PATCH] Post-Local sync at 2025-06-06 12:46:16 --- .gitfield/push_log.json.tmp | 0 .gitfield/pushed.log | 1 + .gitfield/sync-log.md | 6 + README.md | 8 + gitfield-bitbucket | 201 ----------------------- gitfield-github | 193 ---------------------- gitfield-gitlab | 242 --------------------------- gitfield-radicle | 318 ------------------------------------ gitfield-sync | 185 --------------------- 9 files changed, 15 insertions(+), 1139 deletions(-) create mode 100644 .gitfield/push_log.json.tmp create mode 100644 .gitfield/sync-log.md delete mode 100755 gitfield-bitbucket delete mode 100755 gitfield-github delete mode 100755 gitfield-gitlab delete mode 100755 gitfield-radicle delete mode 100755 gitfield-sync diff --git a/.gitfield/push_log.json.tmp b/.gitfield/push_log.json.tmp new file mode 100644 index 0000000..e69de29 diff --git a/.gitfield/pushed.log b/.gitfield/pushed.log index 209180c..e0dfbb8 100644 --- a/.gitfield/pushed.log +++ b/.gitfield/pushed.log @@ -97,3 +97,4 @@ [2025-06-04 20:01:24] GitLab: https://gitlab.com/mrhavens/NarcStudy_AndrewLeCody [2025-06-04 20:01:41] Bitbucket: https://bitbucket.org/thefoldwithin/NarcStudy_AndrewLeCody [2025-06-04 20:01:55] GitHub: https://github.com/mrhavens/NarcStudy_AndrewLeCody +[2025-06-06 12:46:17] Local: diff --git a/.gitfield/sync-log.md b/.gitfield/sync-log.md new file mode 100644 index 0000000..f2a8ba3 --- /dev/null +++ b/.gitfield/sync-log.md @@ -0,0 +1,6 @@ + +## ๐Ÿ”„ Sync Metadata โ€” 2025-06-04 + +- ๐Ÿ“ **Google Drive Folder**: [NarcStudy_AndrewLeCody](https://drive.google.com/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-) +- ๐ŸŒ **Published View**: [https://drv.tw/view/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-](https://drv.tw/view/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-) + diff --git a/README.md b/README.md index fd73065..2361984 100644 --- a/README.md +++ b/README.md @@ -94,3 +94,11 @@ Mirrored to: --- > **๐Ÿ•ฏ๏ธ Let no founder be erased. Let no narrative dominate unchecked. Let this pattern be remembered.** + +--- + +## ๐Ÿ” External Access + +- ๐Ÿ”— **Google Drive Folder**: [NarcStudy_AndrewLeCody](https://drive.google.com/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-) +- ๐ŸŒ **Published View**: [https://drv.tw/view/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-](https://drv.tw/view/open?id=1RxAlFKAZTk0dL4qNuWEklu8FOCA266f-) + diff --git a/gitfield-bitbucket b/gitfield-bitbucket deleted file mode 100755 index 4748a8d..0000000 --- a/gitfield-bitbucket +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -set -euo pipefail -IFS=$'\n\t' - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ CONFIGURATION โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -BITBUCKET_USER="mrhavens" -BITBUCKET_WORKSPACE="thefoldwithin" -REMOTE_NAME="bitbucket" -REPO_NAME=$(basename "$(pwd)") -EMAIL="mark.r.havens@gmail.com" -FULL_NAME="Mark Randall Havens" -APP_PASS_FILE="$HOME/.bitbucket_app_password" -API_URL="https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/$REPO_NAME" -SSH_REMOTE="git@bitbucket.org:$BITBUCKET_WORKSPACE/$REPO_NAME.git" -WEB_LINK="https://bitbucket.org/$BITBUCKET_WORKSPACE/$REPO_NAME" -SCRIPT_VERSION="1.0" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ LOGGING UTILS โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info() { echo -e "\n\e[1;34m[INFO]\e[0m $*"; } -warn() { echo -e "\n\e[1;33m[WARN]\e[0m $*"; } -error() { echo -e "\n\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; } - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ OS + HARDWARE FINGERPRINT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -OS_NAME=$(uname -s) -KERNEL_VERSION=$(uname -r) -ARCHITECTURE=$(uname -m) -OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown") -DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No") -WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No") -VM_CHECK=$(command -v systemd-detect-virt >/dev/null && systemd-detect-virt || echo "Unknown") -UPTIME=$(uptime -p 2>/dev/null || echo "Unknown") -HOSTNAME=$(hostname) -CURRENT_USER=$(whoami) -TIMEZONE=$(date +%Z) -LOCAL_IP=$(hostname -I | awk '{print $1}' || echo "Unknown") -MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2; exit}' || echo "Unknown") -CPU_MODEL=$(grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | sed 's/^ //g' || echo "Unknown") -TOTAL_RAM=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo 2>/dev/null || echo "Unknown") - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ CHECK + INSTALL TOOLS โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Checking prerequisites..." -sudo apt update -qq -sudo apt install -y git curl jq openssh-client || error "Dependency install failed" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ GIT IDENTITY SETUP โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -git config --global user.name "$FULL_NAME" -git config --global user.email "$EMAIL" -info "Git identity: $FULL_NAME <$EMAIL>" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ SSH KEYGEN + AGENT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -f ~/.ssh/id_rsa ]; then - info "Generating new SSH key..." - ssh-keygen -t rsa -b 4096 -C "$EMAIL" -f ~/.ssh/id_rsa -N "" -fi - -eval "$(ssh-agent -s)" -ssh-add ~/.ssh/id_rsa || error "Failed to add SSH key" -ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null || true - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ SSH AUTH VERIFICATION โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Verifying SSH access to Bitbucket..." -if ssh -T git@bitbucket.org 2>&1 | grep -q "authenticated"; then - info "โœ“ SSH access to Bitbucket verified." -else - warn "โŒ SSH key not authorized with Bitbucket." - echo "โ†’ Visit: https://bitbucket.org/account/settings/ssh-keys/" - cat ~/.ssh/id_rsa.pub - exit 1 -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ BITBUCKET APP PASSWORD SETUP โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -f "$APP_PASS_FILE" ]; then - echo "๐Ÿ” Create a Bitbucket App Password (repo:admin + write + webhook)" - echo "โ†’ https://bitbucket.org/account/settings/app-passwords/" - read -rsp "Enter Bitbucket App Password (input hidden): " APP_PASS - echo "$APP_PASS" > "$APP_PASS_FILE" - chmod 600 "$APP_PASS_FILE" -fi -APP_PASS=$(<"$APP_PASS_FILE") - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ GIT INIT & COMMIT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -d .git ]; then - git init - git add . - git commit -m "Initial commit" -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ CREATE REMOTE IF NOT EXISTS โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -REPO_EXISTS=$(curl -s -u "$BITBUCKET_USER:$APP_PASS" "$API_URL" | jq -r '.name // empty') -if [ -z "$REPO_EXISTS" ]; then - curl -s -u "$BITBUCKET_USER:$APP_PASS" -X POST "$API_URL" \ - -H "Content-Type: application/json" \ - -d '{"scm": "git", "is_private": false}' -fi - -git remote remove "$REMOTE_NAME" 2>/dev/null || true -git remote add "$REMOTE_NAME" "$SSH_REMOTE" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ WRITE METADATA MARKDOWN โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') -DEFAULT_BRANCH=$(git symbolic-ref --short HEAD) -REPO_PATH=$(git rev-parse --show-toplevel) -mkdir -p "$REPO_PATH/.gitfield" && MARKDOWN_FILE="$REPO_PATH/.gitfield/bitbucket.sigil.md" -LATEST_SHA=$(git rev-parse HEAD) -LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s") -LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad") -LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>") -TOTAL_COMMITS=$(git rev-list --count HEAD) -TRACKED_FILES=$(git ls-files | wc -l) -UNCOMMITTED=$(if ! git diff --quiet || ! git diff --cached --quiet; then echo "Yes"; else echo "No"; fi) -LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None") - -cat > "$MARKDOWN_FILE" <&2; exit 1; } - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ TOOLCHAIN SETUP โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Checking for required tools..." -sudo apt update -qq -sudo apt install -y git curl jq openssh-client lsb-release || error "Tool install failed" - -if ! command -v gh &>/dev/null; then - info "Installing GitHub CLI..." - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg - sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg - echo "deb [arch=$(dpkg --print-architecture)] signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages stable main" | \ - sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null - sudo apt update && sudo apt install gh -y || error "GitHub CLI install failed" -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ AUTH + IDENTITY โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if ! gh auth status &>/dev/null; then - gh auth login || error "GitHub authentication failed" -fi - -git config --global user.name "${DEFAULT_NAME}" -git config --global user.email "${DEFAULT_EMAIL}" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ SSH + GIT INIT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -f "$HOME/.ssh/id_ed25519" ]; then - ssh-keygen -t ed25519 -C "$DEFAULT_EMAIL" -f "$HOME/.ssh/id_ed25519" -N "" - eval "$(ssh-agent -s)" - ssh-add "$HOME/.ssh/id_ed25519" - gh ssh-key add "$HOME/.ssh/id_ed25519.pub" --title "$(hostname)" || warn "Manual add may be needed" -fi - -if [ ! -d .git ]; then - git init - git add . - git commit -m "Initial commit" -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ GITHUB REPO CONFIGURATION โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -USERNAME=$(gh api user | jq -r .login) -SSH_REMOTE_URL="git@github.com:$USERNAME/$REPO_NAME.git" -WEB_LINK="https://github.com/$USERNAME/$REPO_NAME" - -if ! git remote get-url "$GIT_REMOTE_NAME" &>/dev/null; then - if gh repo view "$USERNAME/$REPO_NAME" &>/dev/null; then - git remote add "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL" - else - gh repo create "$REPO_NAME" --public --source=. --remote="$GIT_REMOTE_NAME" --push || error "Failed to create repo" - fi -else - git remote set-url "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL" -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ GIT METADATA SNAPSHOT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')" -DEFAULT_BRANCH="$(git symbolic-ref --short HEAD)" -REPO_PATH="$(git rev-parse --show-toplevel)" -mkdir -p "$REPO_PATH/.gitfield" && MARKDOWN_FILE="$REPO_PATH/.gitfield/github.sigil.md" -LATEST_SHA=$(git rev-parse HEAD) -LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s") -LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad") -LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>") -TOTAL_COMMITS=$(git rev-list --count HEAD) -TRACKED_FILES=$(git ls-files | wc -l) -UNCOMMITTED=$(if ! git diff --quiet || ! git diff --cached --quiet; then echo "Yes"; else echo "No"; fi) -LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None") -HOSTNAME=$(hostname) -CURRENT_USER=$(whoami) -TIMEZONE=$(date +%Z) - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ HARDWARE + OS FINGERPRINT BLOCK โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -OS_NAME=$(uname -s) -KERNEL_VERSION=$(uname -r) -ARCHITECTURE=$(uname -m) -OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"') || OS_PRETTY_NAME="Unknown" -DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No") -WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No") -VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown") -UPTIME=$(uptime -p 2>/dev/null || echo "Unknown") -MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n 1) -LOCAL_IP=$(hostname -I | awk '{print $1}') -CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //') -RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo) - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ WRITE RICH MARKDOWN ARTIFACT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -cat > "$MARKDOWN_FILE" </dev/null; then - git push -u "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" -else - git push "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" -fi - -info "โœ… GitHub push complete." -echo -e "\n๐Ÿ”— View in browser: $WEB_LINK\n" diff --git a/gitfield-gitlab b/gitfield-gitlab deleted file mode 100755 index c470bac..0000000 --- a/gitfield-gitlab +++ /dev/null @@ -1,242 +0,0 @@ -#!/bin/bash -IFS=$'\n\t' - -# Configuration -GIT_REMOTE_NAME="gitlab" -REPO_NAME=$(basename "$(pwd)") || REPO_NAME="Unknown" -DEFAULT_NAME="Mark Randall Havens" -DEFAULT_EMAIL="mark.r.havens@gmail.com" -GITLAB_WEB="https://gitlab.com" -GITLAB_API="$GITLAB_WEB/api/v4" -GITLAB_SSH="git@gitlab.com" -TOKEN_FILE="$HOME/.gitfield_token" -SCRIPT_VERSION="1.0" -MARKDOWN_FILE="$(git rev-parse --show-toplevel)/.gitfield/gitlab.sigil.md" && mkdir -p "$(dirname "$MARKDOWN_FILE")" - -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; } - -# Function to generate markdown file -generate_markdown() { - info "Generating markdown file: $MARKDOWN_FILE" - TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "Unknown") - DEFAULT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || echo "Unknown") - REPO_PATH=$(git rev-parse --show-toplevel) - LATEST_SHA=$(git rev-parse HEAD 2>/dev/null || echo "Unknown") - LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s" 2>/dev/null || echo "Unknown") - LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad" 2>/dev/null || echo "Unknown") - LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>" 2>/dev/null || echo "Unknown") - TOTAL_COMMITS=$(git rev-list --count HEAD 2>/dev/null || echo "Unknown") - TRACKED_FILES=$(git ls-files 2>/dev/null | wc -l 2>/dev/null || echo "Unknown") - UNCOMMITTED=$(if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then echo "Yes"; else echo "No"; fi) - LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None") - HOSTNAME=$(hostname 2>/dev/null || echo "Unknown") - CURRENT_USER=$(whoami 2>/dev/null || echo "Unknown") - TIMEZONE=$(date +%Z 2>/dev/null || echo "Unknown") - OS_NAME=$(uname -s 2>/dev/null || echo "Unknown") - KERNEL_VERSION=$(uname -r 2>/dev/null || echo "Unknown") - ARCHITECTURE=$(uname -m 2>/dev/null || echo "Unknown") - OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown") - DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No") - WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No") - VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown") - UPTIME=$(uptime -p 2>/dev/null || echo "Unknown") - MAC_ADDR=$(ip link 2>/dev/null | awk '/ether/ {print $2}' | head -n 1 2>/dev/null || echo "Unknown") - LOCAL_IP=$(hostname -I 2>/dev/null | awk '{print $1}' 2>/dev/null || echo "Unknown") - CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^ //' 2>/dev/null || echo "Unknown") - RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo 2>/dev/null || echo "Unknown") - WEB_LINK="$GITLAB_WEB/$USERNAME/$REPO_NAME" - - cat > "$MARKDOWN_FILE" </dev/null || warn "Failed to remove token file" - info "Token reset requested." -fi - -if [ -f "$TOKEN_FILE" ] && [ "$RESET_TOKEN" = false ]; then - TOKEN=$(cat "$TOKEN_FILE" 2>/dev/null || error "Failed to read token file") - info "Using cached token from $TOKEN_FILE" -else - echo - echo "๐Ÿ” Paste your GitLab Personal Access Token (scopes: api, read_user, write_repository, write_ssh_key)" - echo "โ†’ Generate at: $GITLAB_WEB/-/user_settings/personal_access_tokens" - read -rp "๐Ÿ”‘ Token: " TOKEN - echo "$TOKEN" > "$TOKEN_FILE" 2>/dev/null || warn "Failed to save token file" - chmod 600 "$TOKEN_FILE" 2>/dev/null || warn "Failed to set token file permissions" - info "Token saved for future use at $TOKEN_FILE" -fi - -# Install Dependencies -sudo apt update -qq 2>/dev/null || warn "apt update failed, continuing..." -sudo apt install -y git curl jq openssh-client lsb-release 2>/dev/null || warn "Tool install failed, continuing..." - -# Identity -git config --global user.name "$DEFAULT_NAME" 2>/dev/null || warn "Failed to set git user name" -git config --global user.email "$DEFAULT_EMAIL" 2>/dev/null || warn "Failed to set git user email" -info "Git identity set to: $DEFAULT_NAME <$DEFAULT_EMAIL>" - -# Git Initialization -if [ ! -d .git ]; then - git init 2>/dev/null || warn "Git init failed, continuing..." - git add . 2>/dev/null || warn "Nothing to add" - git commit -m "Initial commit" 2>/dev/null || warn "Nothing to commit" -fi - -if ! git rev-parse HEAD &>/dev/null; then - git add . 2>/dev/null && git commit -m "Initial commit" 2>/dev/null || warn "Nothing to commit" -fi - -# SSH Setup -if [ ! -f ~/.ssh/id_rsa ]; then - ssh-keygen -t rsa -b 4096 -C "$DEFAULT_EMAIL" -f ~/.ssh/id_rsa -N "" 2>/dev/null || error "SSH keygen failed" -fi - -eval "$(ssh-agent -s 2>/dev/null)" || warn "Failed to start ssh-agent, continuing..." -ssh-add ~/.ssh/id_rsa 2>/dev/null || error "Failed to add SSH key" - -# Fetch GitLab Username -USERNAME=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/user" | jq -r '.username' 2>/dev/null) || error "Invalid token" -info "GitLab username: $USERNAME" - -# SSH Key Upload to GitLab -SSH_TEST_OUTPUT=$(ssh -T "$GITLAB_SSH" 2>&1) -if ! echo "$SSH_TEST_OUTPUT" | grep -q "Welcome"; then - warn "SSH test failed, attempting to upload SSH key. Output: $SSH_TEST_OUTPUT" - PUBKEY=$(cat ~/.ssh/id_rsa.pub 2>/dev/null || warn "Failed to read SSH public key, continuing...") - TITLE="AutoKey-$(hostname)-$(date +%s 2>/dev/null || echo 'unknown')" - CURL_OUTPUT=$(curl -s --fail -X POST "$GITLAB_API/user/keys" \ - -H "PRIVATE-TOKEN: $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"title\": \"$TITLE\", \"key\": \"$PUBKEY\"}" 2>&1) - if [[ $? -ne 0 ]]; then - warn "SSH key upload failed: $CURL_OUTPUT" - else - info "SSH key uploaded successfully." - sleep 2 - SSH_TEST_OUTPUT=$(ssh -T "$GITLAB_SSH" 2>&1) - if ! echo "$SSH_TEST_OUTPUT" | grep -q "Welcome"; then - warn "SSH test still failing after key upload. Output: $SSH_TEST_OUTPUT" - else - info "SSH test passed after key upload." - fi - fi -else - info "SSH test passed: $SSH_TEST_OUTPUT" -fi - -# Set Up Remote Repository (non-critical, allow failures) -set +e -REMOTE_URL="$GITLAB_SSH:$USERNAME/$REPO_NAME.git" -info "Checking if remote '$GIT_REMOTE_NAME' exists..." -REMOTE_EXISTS=$(git remote get-url "$GIT_REMOTE_NAME" 2>&1) -REMOTE_EXIT_CODE=$? -info "git remote get-url output: $REMOTE_EXISTS" -info "git remote get-url exit code: $REMOTE_EXIT_CODE" - -if [[ $REMOTE_EXIT_CODE -ne 0 ]]; then - info "Remote '$GIT_REMOTE_NAME' not found, setting up..." - CURL_OUTPUT=$(curl -s --fail -X POST "$GITLAB_API/projects" \ - -H "PRIVATE-TOKEN: $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"name\": \"$REPO_NAME\", \"visibility\": \"public\"}" 2>&1) - if [[ $? -ne 0 ]]; then - warn "Failed to create GitLab project: $CURL_OUTPUT" - PROJECT_EXISTS=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/projects?search=$REPO_NAME" | jq -r '.[] | select(.name == "'"$REPO_NAME"'") | .id' 2>&1) - if [[ $? -ne 0 || -z "$PROJECT_EXISTS" ]]; then - warn "Project creation failed and project does not exist: $PROJECT_EXISTS" - info "Proceeding with remote URL anyway: $REMOTE_URL" - else - info "Project already exists on GitLab." - fi - else - info "GitLab project created successfully." - fi - git remote add "$GIT_REMOTE_NAME" "$REMOTE_URL" 2>/dev/null || warn "Failed to add remote, but continuing..." - info "Remote set to: $REMOTE_URL" -else - info "Remote already configured: $REMOTE_EXISTS" -fi -set -e - -# Generate markdown file (always run this step) -generate_markdown - -# Commit and Push (non-critical, allow failures) -set +e -info "Committing markdown file..." -git add "$MARKDOWN_FILE" 2>/dev/null || warn "Failed to add markdown file" -git commit -m "GitLab metadata link commit at $TIMESTAMP โ€” $WEB_LINK/-/commit/$LATEST_SHA" 2>/dev/null || warn "No changes to commit" - -info "Pushing to GitLab..." -git push -u "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" 2>/dev/null || warn "Push to GitLab failed" -echo -e "\n๐Ÿ”— View in browser: $WEB_LINK\n" -set -e diff --git a/gitfield-radicle b/gitfield-radicle deleted file mode 100755 index 09fdc36..0000000 --- a/gitfield-radicle +++ /dev/null @@ -1,318 +0,0 @@ -#!/bin/bash -set -euo pipefail -IFS=$'\n\t' - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Config & Paths โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -PROJECT_NAME=$(basename "$(pwd)") -DEFAULT_NAME="Mark Randall Havens" -DEFAULT_EMAIL="mark.r.havens@gmail.com" -SCRIPT_VERSION="1.0" - -RAD_HOME="$HOME/.radicle" -RAD_BIN="$RAD_HOME/bin/rad" -RAD_PATH_LINE='export PATH="$HOME/.radicle/bin:$PATH"' -PROFILE_FILE="$HOME/.bashrc" -PUSH_STATE_FILE="$(git rev-parse --show-toplevel)/.gitfield/.radicle-push-state" -MARKDOWN_FILE="$(git rev-parse --show-toplevel)/.gitfield/radicle.sigil.md" -mkdir -p "$(dirname "$MARKDOWN_FILE")" -PUBLIC_GATEWAY="https://app.radicle.xyz/nodes/ash.radicle.garden" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Logging Utils โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -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; } - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Git + Tools Precheck โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Checking Git..." -command -v git >/dev/null || { - info "Installing Git..." - sudo apt update && sudo apt install -y git || error "Failed to install Git" -} -info "Git version: $(git --version)" - -NAME=$(git config --global user.name || true) -EMAIL=$(git config --global user.email || true) -[[ -z "$NAME" || -z "$EMAIL" ]] && { - info "Setting Git identity..." - git config --global user.name "$DEFAULT_NAME" - git config --global user.email "$DEFAULT_EMAIL" -} -info "Git identity: $(git config --global user.name) <$(git config --global user.email)>" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Radicle CLI Setup โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -x "$RAD_BIN" ]; then - info "Installing Radicle CLI..." - sudo apt install -y curl jq unzip || error "Missing dependencies" - curl -sSf https://radicle.xyz/install | sh || error "Radicle install failed" -fi -export PATH="$HOME/.radicle/bin:$PATH" -if ! grep -Fxq "$RAD_PATH_LINE" "$PROFILE_FILE"; then - echo "$RAD_PATH_LINE" >> "$PROFILE_FILE" - info "โ†’ Added PATH to $PROFILE_FILE" - warn "โ†’ Run 'source $PROFILE_FILE' for persistent CLI access" -fi -command -v rad >/dev/null || error "Radicle CLI unavailable. Restart terminal or check PATH." -info "Radicle CLI ready: $(rad --version)" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Radicle Identity Check โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Checking Radicle identity..." -RAD_SELF_OUTPUT=$(rad self 2>&1 || true) -if ! echo "$RAD_SELF_OUTPUT" | grep -q "DID"; then - info "Creating new Radicle identity..." - AUTH_OUTPUT=$(rad auth 2>&1) || error "Identity creation failed" - info "$AUTH_OUTPUT" -else - info "Radicle identity already exists." -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Start Rad Node โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if ! pgrep -f "rad node" >/dev/null; then - info "Starting Radicle node..." - rad node start || error "Failed to start Radicle node" -else - info "โœ“ Node is already running." -fi -info "Waiting for Radicle node to be ready..." -for i in {1..30}; do - if rad node status >/dev/null 2>&1; then - info "Radicle node is ready." - break - fi - sleep 1 -done -rad node status >/dev/null 2>&1 || error "Radicle node failed to start after 30s." - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Git Repo Initialization โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if [ ! -d .git ]; then - info "Initializing Git repository..." - git init - git add . || warn "Nothing to add" - git commit -m "Initial commit" || warn "Nothing to commit" -else - info "Git repo already initialized." -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Radicle Project Registrationโ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -if ! git remote | grep -q rad; then - info "Registering Radicle project '$PROJECT_NAME'..." - rad init --name "$PROJECT_NAME" --description "Radicle sovereign repo for $PROJECT_NAME" || error "Failed to initialize Radicle project" -else - info "Project '$PROJECT_NAME' already registered with Radicle." -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Extract Metadata โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -info "Extracting Radicle metadata..." -# Extract Project ID -PROJECT_ID=$(rad inspect | grep -o 'rad:[a-zA-Z0-9]\+' | cut -d':' -f2) -info "โ†’ Project ID from rad inspect: $PROJECT_ID" - -# Extract Peer ID -PEER_ID="" -# Try rad self first -if [[ -n "$RAD_SELF_OUTPUT" ]]; then - PEER_ID=$(echo "$RAD_SELF_OUTPUT" | grep -o 'z6M[a-zA-Z0-9]\+' || true) - info "โ†’ Peer ID from rad self: $PEER_ID" -fi -# If rad self didn't provide it, try AUTH_OUTPUT if it exists -if [[ -z "$PEER_ID" && -n "${AUTH_OUTPUT:-}" ]]; then - PEER_ID=$(echo "$AUTH_OUTPUT" | grep -o 'z6M[a-zA-Z0-9]\+' || true) - info "โ†’ Peer ID from rad auth: $PEER_ID" -fi -# If still empty, try rad node status as a last resort -if [[ -z "$PEER_ID" ]]; then - NODE_STATUS=$(rad node status 2>&1) - PEER_ID=$(echo "$NODE_STATUS" | grep -o 'z6M[a-zA-Z0-9]\+' || true) - info "โ†’ Peer ID from rad node status: $PEER_ID" -fi - -# Cross-check with Git remote -RAD_REMOTE=$(git remote -v | grep rad | head -n1 | awk '{print $2}' || true) -if [[ -n "$RAD_REMOTE" ]]; then - REMOTE_PROJECT_ID=$(echo "$RAD_REMOTE" | cut -d'/' -f3) - REMOTE_PEER_ID=$(echo "$RAD_REMOTE" | cut -d'/' -f4) - info "โ†’ Project ID from Git remote: $REMOTE_PROJECT_ID" - info "โ†’ Peer ID from Git remote: $REMOTE_PEER_ID" - [[ "$PROJECT_ID" != "$REMOTE_PROJECT_ID" ]] && warn "Project ID mismatch: rad inspect ($PROJECT_ID) vs remote ($REMOTE_PROJECT_ID)" - if [[ -z "$PEER_ID" && -n "$REMOTE_PEER_ID" ]]; then - PEER_ID="$REMOTE_PEER_ID" - info "โ†’ Using Peer ID from Git remote as fallback: $PEER_ID" - elif [[ -n "$REMOTE_PEER_ID" && "$PEER_ID" != "$REMOTE_PEER_ID" ]]; then - warn "Peer ID mismatch: rad self ($PEER_ID) vs remote ($REMOTE_PEER_ID)" - PEER_ID="$REMOTE_PEER_ID" # Prefer the remote Peer ID as it's part of the actual repo URL - info "โ†’ Using Peer ID from Git remote: $PEER_ID" - fi - PROJECT_ID="$REMOTE_PROJECT_ID" # Prefer the remote Project ID as it's the actual repo identifier -fi - -# Final validation -if [[ -z "$PROJECT_ID" || -z "$PEER_ID" ]]; then - error "Failed to determine Project ID ($PROJECT_ID) or Peer ID ($PEER_ID). Please check Radicle configuration." -fi -REPO_URN="rad://$PROJECT_ID" -info "โœ“ Metadata extracted successfully: Project ID: $PROJECT_ID, Peer ID: $PEER_ID" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Push Current Commit Logic โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -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 - info "โœ“ Already pushed commit: $CURRENT_COMMIT" -else - info "Pushing commit '$CURRENT_COMMIT' on branch '$CURRENT_BRANCH'..." - if git push rad "$CURRENT_BRANCH"; then - echo "$CURRENT_COMMIT" > "$PUSH_STATE_FILE" - info "โœ“ Pushed to Radicle successfully" - else - warn "Push failed โ€” check 'rad sync status'" - error "Push failed, cannot proceed." - fi -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Git Metadata Snapshot โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')" -DEFAULT_BRANCH="$CURRENT_BRANCH" -REPO_PATH="$(git rev-parse --show-toplevel)" -LATEST_SHA="$CURRENT_COMMIT" -LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s") -LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad") -LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>") -TOTAL_COMMITS=$(git rev-list --count HEAD) -TRACKED_FILES=$(git ls-files | wc -l) -UNCOMMITTED=$(git diff --quiet && git diff --cached --quiet && echo "No" || echo "Yes") -LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None") -HOSTNAME=$(hostname) -CURRENT_USER=$(whoami) -TIMEZONE=$(date +%Z) - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Hardware + OS Fingerprint Block โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -OS_NAME=$(uname -s) -KERNEL_VERSION=$(uname -r) -ARCHITECTURE=$(uname -m) -OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown") -DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No") -WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No") -VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown") -UPTIME=$(uptime -p 2>/dev/null || echo "Unknown") -MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n 1 || echo "Unknown") -LOCAL_IP=$(hostname -I | awk '{print $1}' || echo "Unknown") -CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //' || echo "Unknown") -RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo || echo "Unknown") - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ Write Rich Markdown Artifact โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -PUBLIC_GATEWAY_URL="$PUBLIC_GATEWAY/rad:$PROJECT_ID/tree/$LATEST_SHA" -cat > "$MARKDOWN_FILE" </dev/null || ! git ls-files "$MARKDOWN_FILE" --error-unmatch >/dev/null 2>&1; then - git add "$MARKDOWN_FILE" - git commit -m "Update Radicle metadata at $TIMESTAMP โ€” $PUBLIC_GATEWAY_URL" || warn "No changes to commit for $MARKDOWN_FILE" - if git push rad "$CURRENT_BRANCH"; then - echo "$CURRENT_COMMIT" > "$PUSH_STATE_FILE" - info "โœ“ Pushed metadata update to Radicle" - else - warn "Metadata push failed โ€” check 'rad sync status'" - fi -else - info "No changes to $MARKDOWN_FILE; skipping commit." -fi diff --git a/gitfield-sync b/gitfield-sync deleted file mode 100755 index 9301fb7..0000000 --- a/gitfield-sync +++ /dev/null @@ -1,185 +0,0 @@ -#!/bin/bash -set -euo pipefail -IFS=$'\n\t' - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ CONFIGURATION โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ -REPO_NAME=$(basename "$(pwd)") -REPO_PATH=$(git rev-parse --show-toplevel) -GITFIELD_DIR="$REPO_PATH/.gitfield" -LOG_FILE="$GITFIELD_DIR/pushed.log" -GITFIELD_MD="$REPO_PATH/GITFIELD.md" -TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') -SCRIPT_VERSION="1.0" - -# URLs for each platform (derived from existing scripts) -GITHUB_URL="https://github.com/mrhavens/$REPO_NAME" -GITLAB_URL="https://gitlab.com/mrhavens/$REPO_NAME" -BITBUCKET_URL="https://bitbucket.org/thefoldwithin/$REPO_NAME" -RADICLE_PROJECT_ID="z45QC21eWL1F43VSbnV9AZbCZrHQJ" # From gitfield-radicle output -RADICLE_URL="https://app.radicle.xyz/nodes/ash.radicle.garden/rad:$RADICLE_PROJECT_ID" - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ LOGGING UTILS โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -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; } - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ INITIAL SETUP โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# Ensure .gitfield directory exists -mkdir -p "$GITFIELD_DIR" - -# Initialize log file if it doesn't exist -if [ ! -f "$LOG_FILE" ]; then - echo "# Push Log for $REPO_NAME" > "$LOG_FILE" - echo "# Generated by gitfield-sync" >> "$LOG_FILE" - echo "" >> "$LOG_FILE" -fi - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ GENERATE GITFIELD.MD โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -generate_gitfield_md() { - info "Generating $GITFIELD_MD..." - cat > "$GITFIELD_MD" <> "$LOG_FILE" - info "Logged push to $LOG_FILE: [$timestamp] $platform: $url" -} - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ EXECUTE PUSH SCRIPT โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -execute_push() { - local script=$1 - local platform=$2 - local url=$3 - info "Running $script for $platform..." - if [ -x "$script" ]; then - ./"$script" || warn "Execution of $script failed, continuing..." - # Log the URL after successful push - log_url "$platform" "$url" - # Add and commit any new files generated by the script - git add . || warn "Nothing to add after $script" - git commit -m "Post-$platform sync at $TIMESTAMP" || warn "No changes to commit after $script" - else - error "Script $script is not executable or does not exist" - fi -} - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ RECURSIVE PUSH LOOP โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -run_push_cycle() { - local cycle_number=$1 - info "Starting push cycle $cycle_number..." - - # Push to each platform in order - execute_push "gitfield-radicle" "Radicle" "$RADICLE_URL" - execute_push "gitfield-gitlab" "GitLab" "$GITLAB_URL" - execute_push "gitfield-bitbucket" "Bitbucket" "$BITBUCKET_URL" - execute_push "gitfield-github" "GitHub" "$GITHUB_URL" -} - -# โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚ MAIN EXECUTION โ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -info "Starting gitfield-sync for $REPO_NAME..." - -# Ensure the repository is initialized -if [ ! -d .git ]; then - git init - git add . - git commit -m "Initial commit" || warn "Nothing to commit" -fi - -# Run the first push cycle -run_push_cycle 1 - -# Generate GITFIELD.md after the first cycle -generate_gitfield_md - -# Run the second push cycle to include GITFIELD.md -run_push_cycle 2 - -# Run the third push cycle for final metadata sync -run_push_cycle 3 - -info "โœ… gitfield-sync completed successfully." -info "๐Ÿ”— View logs: $LOG_FILE" -info "๐Ÿ”— View multi-repo manifest: $GITFIELD_MD"