From 50d0ac37a3336d0e1b07e322e955b9ae3cb6eea6 Mon Sep 17 00:00:00 2001 From: Mark Randall Havens Date: Sat, 31 May 2025 00:34:31 -0500 Subject: [PATCH] added gitlab --- gitfield-gitlab | 171 +++++++++++++++++++++++++++++++----------------- 1 file changed, 111 insertions(+), 60 deletions(-) diff --git a/gitfield-gitlab b/gitfield-gitlab index 556e993..c46a3db 100755 --- a/gitfield-gitlab +++ b/gitfield-gitlab @@ -13,17 +13,12 @@ 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" -# ──────────────── -# Logging -# ──────────────── 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; } -# ──────────────── -# Token Handling -# ──────────────── RESET_TOKEN=false if [[ "${1:-}" == "--reset-token" ]]; then RESET_TOKEN=true @@ -44,55 +39,40 @@ else info "Token saved for future use at $TOKEN_FILE" fi -# ──────────────── -# Git Identity -# ──────────────── +sudo apt update -qq +sudo apt install -y git curl jq openssh-client lsb-release || error "Tool install failed" + +# Identity + git config --global user.name "$DEFAULT_NAME" git config --global user.email "$DEFAULT_EMAIL" info "Git identity set to: $DEFAULT_NAME <$DEFAULT_EMAIL>" -# ──────────────── -# Git Init -# ──────────────── 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." + git add . + git commit -m "Initial commit" fi if ! git rev-parse HEAD &>/dev/null; then git add . && git commit -m "Initial commit" || warn "Nothing to commit" fi -# ──────────────── -# SSH Key Setup -# ──────────────── +# SSH Setup + if [ ! -f ~/.ssh/id_rsa ]; then - info "Generating new SSH key..." ssh-keygen -t rsa -b 4096 -C "$DEFAULT_EMAIL" -f ~/.ssh/id_rsa -N "" || error "SSH keygen failed" fi eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa || error "Failed to add SSH key" -# ──────────────── -# Username from GitLab -# ──────────────── -USERNAME=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/user" | grep -oP '(?<="username":")[^"]*') || { - error "Failed to retrieve GitLab username — invalid token?" -} +USERNAME=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/user" | jq -r '.username') || error "Invalid token" info "GitLab username: $USERNAME" -# ──────────────── -# Upload SSH Key if Needed -# ──────────────── if ! ssh -T "$GITLAB_SSH" 2>&1 | grep -q "Welcome"; then PUBKEY=$(<~/.ssh/id_rsa.pub) TITLE="AutoKey-$(hostname)-$(date +%s)" - info "Uploading SSH key to GitLab..." curl -s --fail -X POST "$GITLAB_API/user/keys" \ -H "PRIVATE-TOKEN: $TOKEN" \ -H "Content-Type: application/json" \ @@ -100,20 +80,11 @@ if ! ssh -T "$GITLAB_SSH" 2>&1 | grep -q "Welcome"; then sleep 2 fi -# ──────────────── -# Create GitLab Repo (Graceful Fallback) -# ──────────────── if ! git remote get-url "$GIT_REMOTE_NAME" &>/dev/null; then - info "Creating GitLab repository '$REPO_NAME'..." - if curl -s --fail -X POST "$GITLAB_API/projects" \ - -H "PRIVATE-TOKEN: $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"name\": \"$REPO_NAME\", \"visibility\": \"public\"}" | grep -q '"ssh_url_to_repo":'; then - info "Repository created." - else - warn "Repo may already exist or creation failed — continuing..." - fi - + curl -s --fail -X POST "$GITLAB_API/projects" \ + -H "PRIVATE-TOKEN: $TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"name\": \"$REPO_NAME\", \"visibility\": \"public\"}" REMOTE_URL="$GITLAB_SSH:$USERNAME/$REPO_NAME.git" git remote add "$GIT_REMOTE_NAME" "$REMOTE_URL" info "Remote set to: $REMOTE_URL" @@ -121,20 +92,100 @@ else info "Remote already configured: $(git remote get-url "$GIT_REMOTE_NAME")" fi -# ──────────────── -# Commit & Push -# ──────────────── -if ! git diff --quiet || ! git diff --cached --quiet; then - git add . && git commit -m "Update: $(date '+%Y-%m-%d %H:%M:%S')" || warn "No changes" -else - info "No uncommitted changes." -fi +# Metadata Block +MARKDOWN_FILE=".gitlab-link.md" +TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') +DEFAULT_BRANCH=$(git symbolic-ref --short HEAD) +REPO_PATH=$(pwd) +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) +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) +WEB_LINK="$GITLAB_WEB/$USERNAME/$REPO_NAME" -BRANCH=$(git rev-parse --abbrev-ref HEAD) -if ! git config --get branch."$BRANCH".remote &>/dev/null; then - info "Pushing with upstream..." - git push -u "$GIT_REMOTE_NAME" "$BRANCH" || error "Push failed" -else - info "Pushing to $GIT_REMOTE_NAME/$BRANCH..." - git push "$GIT_REMOTE_NAME" "$BRANCH" || error "Push failed" -fi +cat > "$MARKDOWN_FILE" <