Initial commit.

This commit is contained in:
2026-04-18 13:54:24 +01:00
parent 6c28c293ef
commit a65b03ad23

83
git-mirror Executable file
View File

@@ -0,0 +1,83 @@
#!/bin/bash
# Directory containing your local git repositories
SOURCE_DIR="$(realpath "data/small/gitea/git/repositories/sean")"
# Your GitHub username
THIRD_PARTY_GIT_USER="seanhly"
# Your personal access tokens
GITHUB_TOKEN="$(pass github-token)"
GITLAB_TOKEN="$(pass gitlab-token)"
CODEBERG_TOKEN="$(pass codeberg-token)"
cd "$SOURCE_DIR" || exit 1
for dir in *; do
# Handle non-bare repos (with .git subdir)
if [ -d "$dir/.git" ]; then
REPO_NAME="${dir%/}"
REPO_PATH="$dir"
# Handle bare repos (ending in .git)
elif [ -d "$dir" ] && [[ "$dir" == *.git ]]; then
REPO_NAME="${dir%.git}"
REPO_PATH="$dir"
else
continue
fi
echo "Processing $REPO_NAME..."
# --- GitHub ---
# Create repo on GitHub (if it doesn't exist)
curl -s -u "$THIRD_PARTY_GIT_USER:$GITHUB_TOKEN" \
-X POST \
-H "Accept: application/vnd.github+json" \
https://api.github.com/user/repos \
-d "{\"name\":\"$REPO_NAME\", \"private\":true}" \
| grep -q '"full_name"' && echo "Created $REPO_NAME on GitHub."
cd "$REPO_PATH" || continue
git config --global --add safe.directory "$PWD"
# Set up mirror remote and push to GitHub
git remote remove github-mirror 2>/dev/null
git remote add github-mirror "git@github.com:$THIRD_PARTY_GIT_USER/$REPO_NAME.git"
git push --mirror github-mirror
# --- GitLab ---
# Check if GitLab repo exists
GITLAB_API="https://gitlab.com/api/v4"
GITLAB_REPO_PATH="$THIRD_PARTY_GIT_USER/$REPO_NAME"
GITLAB_REPO_SSH="git@gitlab.com:$THIRD_PARTY_GIT_USER/$REPO_NAME.git"
echo Checking if $REPO_NAME exists on GitLab...
REPO_EXISTS=$(curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"$GITLAB_API/projects/$(
echo -n "$GITLAB_REPO_PATH" | sed 's/\//%2F/g'
)" | grep -c '"id"'
)
echo "Repository exists check returned: $REPO_EXISTS"
if [ "$REPO_EXISTS" -eq 0 ]; then
echo "Creating $REPO_NAME on GitLab..."
curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" -X POST "$GITLAB_API/projects" \
--data "name=$REPO_NAME&visibility=private" | grep -q '"id"' && echo "Created $REPO_NAME on GitLab."
fi
# Set up mirror remote and push to GitLab
git remote remove gitlab-mirror 2>/dev/null
git remote add gitlab-mirror "$GITLAB_REPO_SSH"
git push --prune gitlab-mirror 'refs/heads/*:refs/heads/*' 'refs/tags/*:refs/tags/*'
# --- Codeberg ---
CODEBERG_API="https://codeberg.org/api/v1"
CODEBERG_REPO_SSH="git@codeberg.org:$THIRD_PARTY_GIT_USER/$REPO_NAME.git"
echo Checking if $REPO_NAME exists on Codeberg...
CB_REPO_EXISTS=$(curl -s -H "Authorization: token $CODEBERG_TOKEN" "$CODEBERG_API/repos/$THIRD_PARTY_GIT_USER/$REPO_NAME" | grep -c '"id"')
echo "Repository exists check returned: $CB_REPO_EXISTS"
if [ "$CB_REPO_EXISTS" -eq 0 ]; then
echo "Creating $REPO_NAME on Codeberg..."
curl -s -H "Authorization: token $CODEBERG_TOKEN" -X POST "$CODEBERG_API/user/repos" \
-H "Content-Type: application/json" \
-d '{"name": "'$REPO_NAME'", "private": true}' | grep -q '"id"' && echo "Created $REPO_NAME on Codeberg."
fi
# Set up mirror remote and push to Codeberg
git remote remove codeberg-mirror 2>/dev/null
git remote add codeberg-mirror "$CODEBERG_REPO_SSH"
git push --prune codeberg-mirror 'refs/heads/*:refs/heads/*' 'refs/tags/*:refs/tags/*'
cd "$SOURCE_DIR"
done