118 lines
3.9 KiB
Bash
Executable File
118 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
NAMESPACE_ID=12784174
|
|
GROUP_PATH="samnasbo/shared"
|
|
VISIBILITY="private"
|
|
TMP_DIR=$(mktemp -d)
|
|
RESULTS_FILE="$TMP_DIR/results.txt"
|
|
|
|
echo "Temp directory: $TMP_DIR"
|
|
|
|
REPOS=(
|
|
"command-corrections:warpdotdev/command-corrections"
|
|
"font-kit:warpdotdev/font-kit"
|
|
"mermaid-to-svg:warpdotdev/mermaid-to-svg"
|
|
"notify:warpdotdev/notify"
|
|
"session-sharing-protocol:warpdotdev/session-sharing-protocol"
|
|
"vte:warpdotdev/vte"
|
|
"workflows:warpdotdev/workflows"
|
|
"warp-proto-apis:warpdotdev/warp-proto-apis"
|
|
"command-signatures:warpdotdev/command-signatures"
|
|
"winit:warpdotdev/winit"
|
|
"rmcp:warpdotdev/rmcp"
|
|
"rust-objc:warpdotdev/rust-objc"
|
|
"pathfinder:warpdotdev/pathfinder"
|
|
"yaml-rust:warpdotdev/yaml-rust"
|
|
"tink-rust:warpdotdev/tink-rust"
|
|
"jemallocator:warpdotdev/jemallocator"
|
|
"difflib:warpdotdev/difflib"
|
|
"rust-email_address:warpdotdev/rust-email_address"
|
|
"cosmic-text:warpdotdev/cosmic-text"
|
|
"dwrote-rs:warpdotdev/dwrote-rs"
|
|
)
|
|
|
|
for entry in "${REPOS[@]}"; do
|
|
NAME="${entry%%:*}"
|
|
GITHUB_PATH="${entry##*:}"
|
|
GITHUB_URL="git@github.com:${GITHUB_PATH}.git"
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo "Processing: $NAME"
|
|
echo "========================================="
|
|
|
|
# 1) Check if GitLab repo already exists
|
|
ENCODED_PATH=$(echo "${GROUP_PATH}/${NAME}" | sed 's/\//%2F/g')
|
|
EXISTING=$(glab api "projects/$ENCODED_PATH" 2>&1 | cat)
|
|
EXISTING_SSH=$(echo "$EXISTING" | jq -r '.ssh_url_to_repo' 2>/dev/null)
|
|
|
|
if [ -n "$EXISTING_SSH" ] && [ "$EXISTING_SSH" != "null" ]; then
|
|
echo "Repo already exists on GitLab: $EXISTING_SSH"
|
|
SSH_URL="$EXISTING_SSH"
|
|
FULL_PATH=$(echo "$EXISTING" | jq -r '.path_with_namespace')
|
|
else
|
|
# Create empty repo in GitLab
|
|
echo "Creating GitLab repo..."
|
|
CREATE_RESPONSE=$(glab api --method POST projects \
|
|
-f "name=$NAME" \
|
|
-f "namespace_id=$NAMESPACE_ID" \
|
|
-f "visibility=$VISIBILITY" | cat)
|
|
|
|
SSH_URL=$(echo "$CREATE_RESPONSE" | jq -r '.ssh_url_to_repo')
|
|
FULL_PATH=$(echo "$CREATE_RESPONSE" | jq -r '.path_with_namespace')
|
|
|
|
if [ "$SSH_URL" = "null" ] || [ -z "$SSH_URL" ]; then
|
|
echo "ERROR: Failed to create repo for $NAME"
|
|
echo "$CREATE_RESPONSE" | jq .
|
|
echo "$NAME | FAILED | n/a | n/a" >> "$RESULTS_FILE"
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
echo "GitLab SSH URL: $SSH_URL"
|
|
|
|
# 2) Clone from GitHub into tmp folder (skip if already cloned)
|
|
if [ ! -d "$TMP_DIR/$NAME" ]; then
|
|
echo "Cloning from GitHub..."
|
|
if ! git clone "$GITHUB_URL" "$TMP_DIR/$NAME"; then
|
|
echo "ERROR: Failed to clone $NAME from GitHub"
|
|
echo "$NAME | $FULL_PATH | CLONE_FAILED | n/a" >> "$RESULTS_FILE"
|
|
continue
|
|
fi
|
|
else
|
|
echo "Already cloned locally, skipping clone."
|
|
fi
|
|
|
|
# 3) Update origin to GitLab SSH URL
|
|
git -C "$TMP_DIR/$NAME" remote set-url origin "$SSH_URL"
|
|
|
|
# 4) Push default branch to GitLab
|
|
DEFAULT_BRANCH=$(git -C "$TMP_DIR/$NAME" symbolic-ref --short HEAD)
|
|
echo "Pushing branch '$DEFAULT_BRANCH' to GitLab..."
|
|
if ! git -C "$TMP_DIR/$NAME" push -u origin "$DEFAULT_BRANCH"; then
|
|
echo "ERROR: Failed to push $NAME to GitLab"
|
|
echo "$NAME | $FULL_PATH | PUSH_FAILED | n/a" >> "$RESULTS_FILE"
|
|
continue
|
|
fi
|
|
|
|
# Record result
|
|
COMMIT=$(git -C "$TMP_DIR/$NAME" rev-parse HEAD)
|
|
echo "$NAME | $FULL_PATH | $DEFAULT_BRANCH | $COMMIT" >> "$RESULTS_FILE"
|
|
|
|
echo "Done: $NAME"
|
|
done
|
|
|
|
# 5) Print summary
|
|
echo ""
|
|
echo "========================================="
|
|
echo "RESULTS"
|
|
echo "========================================="
|
|
printf "%-30s %-50s %-15s %s\n" "REPO" "GITLAB PATH" "BRANCH" "COMMIT"
|
|
echo "---------------------------------------------------------------------------------------------------------"
|
|
while IFS='|' read -r name path branch commit; do
|
|
printf "%-30s %-50s %-15s %s\n" "$(echo "$name" | xargs)" "$(echo "$path" | xargs)" "$(echo "$branch" | xargs)" "$(echo "$commit" | xargs)"
|
|
done < "$RESULTS_FILE"
|
|
|
|
echo ""
|
|
echo "Temp directory (can be removed): $TMP_DIR"
|