diff --git a/git-sync b/git-sync new file mode 100755 index 0000000..6debc71 --- /dev/null +++ b/git-sync @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +set -euo pipefail + +GIT_HOST="git.alexzaw.dev" +GIT_OWNER="alexz" +GIT_TOKEN="dc76c4827cf0c77fe51680b2fadcec879357b821" +REPO_NAME="${1:-$(basename "$(pwd)")}" +API_ROOT="https://${GIT_HOST}/api/v1" +REPO_API="${API_ROOT}/repos/${GIT_OWNER}/${REPO_NAME}" + +echo "Checking repository ${GIT_OWNER}/${REPO_NAME}…" +status="$(curl -s -o /dev/null -w "%{http_code}" \ + -H "Authorization: token ${GIT_TOKEN}" \ + "${REPO_API}")" + +if [[ "${status}" == "404" ]]; then + echo "Repository not found; creating…" + payload="$(printf '{"name":"%s","private":true}' "${REPO_NAME}")" + create_status="$(curl -s -o /dev/null -w "%{http_code}" \ + -X POST "${API_ROOT}/user/repos" \ + -H "Authorization: token ${GIT_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "${payload}")" + [[ "${create_status}" == "201" ]] || { echo "Create failed (HTTP ${create_status})."; exit 1; } +elif [[ "${status}" == "200" ]]; then + echo "Repository already exists." +else + echo "Unexpected status while checking repo (HTTP ${status})." + exit 1 +fi + +echo "Preparing local repository…" +git init >/dev/null +git branch -M main 2>/dev/null || true + +if ! git remote get-url origin >/dev/null 2>&1; then + git remote add origin "https://${GIT_HOST}/${GIT_OWNER}/${REPO_NAME}.git" +fi + +if [[ -n "$(git status --porcelain)" ]]; then + git add . + git commit -m "upload current sources" || true +else + echo "Nothing new to commit; skipping commit step." +fi + +echo "Pushing to origin/main…" +git -c credential.helper= \ + -c credential.useHttpPath=true \ + -c http.extraHeader="Authorization: token ${GIT_TOKEN}" \ + push -u origin main + +echo "Done." \ No newline at end of file