combined into a single gitfield script

This commit is contained in:
Mark Randall Havens 2025-05-30 23:39:02 -05:00
parent 245e862fb5
commit a56283ca37
3 changed files with 134 additions and 1 deletions

21
.gitfield/config Normal file
View file

@ -0,0 +1,21 @@
[bitbucket]
username=mrhavens
workspace=thefoldwithin
app_password_file=~/.bitbucket_app_password
remote=bitbucket
web_url=https://bitbucket.org/thefoldwithin/%s
[github]
username=mrhavens
remote=github
web_url=https://github.com/mrhavens/%s
[gitlab]
username=mrhavens
token_file=~/.gitfield_token
remote=gitlab
web_url=https://gitlab.com/mrhavens/%s
[radicle]
remote=radicle
home=~/.radicle

View file

@ -1 +1 @@
ceabc8af9414289cd0e0795f574ca6afc8523032 245e862fb584e99bc55590a0cb82f432b841d97e

112
gitfield Executable file
View file

@ -0,0 +1,112 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# ╭───────────────────────────────╮
# │ Configuration │
# ╰───────────────────────────────╯
CONFIG_DIR="$HOME/.gitfield"
CONFIG_FILE="$CONFIG_DIR/config"
REPO_NAME=$(basename "$(pwd)")
DEFAULT_NAME="Mark Randall Havens"
DEFAULT_EMAIL="mark.r.havens@gmail.com"
# ╭───────────────────────────────╮
# │ 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; }
# ╭───────────────────────────────╮
# │ Shared Functions │
# ╰───────────────────────────────╯
setup_git() {
command -v git >/dev/null || { sudo apt update && sudo apt install -y git || error "Git install failed"; }
git config --global user.name "$DEFAULT_NAME"
git config --global user.email "$DEFAULT_EMAIL"
[ -d .git ] || { git init; git add .; git commit -m "Initial commit" || warn "Nothing to commit"; }
}
setup_ssh() {
[ -f ~/.ssh/id_ed25519 ] || {
ssh-keygen -t ed25519 -C "$DEFAULT_EMAIL" -f ~/.ssh/id_ed25519 -N ""
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
}
}
commit_changes() {
if ! git diff --quiet || ! git diff --cached --quiet; then
git add . && git commit -m "Update: $(date '+%Y-%m-%d %H:%M:%S')" || warn "Nothing to commit"
else
info "No uncommitted changes."
fi
}
# ╭───────────────────────────────╮
# │ Platform Functions │
# ╰───────────────────────────────╯
bitbucket_init() {
local user workspace app_pass_file remote web_url
user=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "username" | cut -d'=' -f2)
workspace=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "workspace" | cut -d'=' -f2)
app_pass_file=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "app_password_file" | cut -d'=' -f2)
remote=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "remote" | cut -d'=' -f2)
web_url=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "web_url" | cut -d'=' -f2)
# Bitbucket-specific setup (e.g., app password, repo creation)
# ...
info "Bitbucket: $(git remote get-url "$remote" 2>/dev/null || echo "Not set")"
info "Web: $(printf "$web_url" "$REPO_NAME")"
}
github_init() {
# Similar setup for GitHub
# ...
}
gitlab_init() {
# Similar setup for GitLab
# ...
}
radicle_init() {
# Similar setup for Radicle
# ...
}
# ╭───────────────────────────────╮
# │ Main Logic │
# ╰───────────────────────────────╯
mkdir -p "$CONFIG_DIR"
[ -f "$CONFIG_FILE" ] || { echo "[bitbucket]\n...\n[github]\n...\n[gitlab]\n...\n[radicle]\n..." > "$CONFIG_FILE"; }
case "${1:-status}" in
status)
setup_git
info "Git Repository Status"
git status --short
info "Branch: $(git rev-parse --abbrev-ref HEAD)"
info "Configured Remotes"
bitbucket_init
github_init
gitlab_init
radicle_init
;;
push)
setup_git
setup_ssh
commit_changes
bitbucket_push
github_push
gitlab_push
radicle_push
info "All remotes synced."
;;
configure)
# Prompt for credentials and update $CONFIG_FILE
;;
*)
error "Usage: gitfield [status|push|configure]"
;;
esac