From f7dbd579afe6d623d887c6ed4d10b74c02e23f2e Mon Sep 17 00:00:00 2001 From: Iliyan Ivanov Date: Wed, 29 Jul 2020 12:05:33 +0300 Subject: [PATCH] initial --- .gitignore | 1 + migrate.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ repos/.gitignore | 2 ++ 3 files changed, 61 insertions(+) create mode 100644 .gitignore create mode 100755 migrate.sh create mode 100644 repos/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11a595e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/runme.sh diff --git a/migrate.sh b/migrate.sh new file mode 100755 index 0000000..5038b55 --- /dev/null +++ b/migrate.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -euf -o pipefail + +curp="$(cd "$(dirname "$0")" && pwd)" + +create_org() { + orgid=$(curl --silent -X POST "${apiurl}/orgs" \ + -H "Authorization: token ${token}" \ + -H "accept: application/json" \ + -H "Content-Type: application/json" \ + -d "{ \"username\": \"$1\", \"visibility\": \"limited\"}" | jq -r '.id') + [[ "$orgid" != "null" ]] && sleep 1 || true +} + +create_repo() { + repoid=$(curl --silent -X POST "${apiurl}$2" \ + -H "Authorization: token ${token}" \ + -H "accept: application/json" \ + -H "Content-Type: application/json" \ + -d "{\"auto_init\": false, \"private\": true, \"name\": \"$1\"}" | jq -r '.id') + [[ "$repoid" != "null" ]] && sleep 5 || true +} + +serverurl="$1" +token="$2" +admin="$3" +password="$4" +repos="${@:5}" +pushuri="$(echo "$serverurl" | perl -pe "s#(https?://)#\${1}${admin}:${password}@#")" +apiurl="$serverurl/api/v1" + +# repo examples +# /path/to/repo:orgname ( orgname only ) +# /path/to/repo::reponame ( repo name only ) +# /path/to/repo:orgname:reponame ( all options passed ) +# /path/to/repo ( use name from path, no org ) + +# init repos +for repo in ${repos}; do + repoPath="$(echo "$repo" | cut -d ':' -f1 | tr -d '[:space:]')" + repoOrg="$(echo "$repo" | cut -d ':' -f2 | tr -d '[:space:]')" + repoName="$(echo "$repo" | cut -d ':' -f3 | tr -d '[:space:]')" + [ -z "$repoName" ] && repoName="$(basename "$repoPath")" + if [ -z "$repoOrg" ]; then + repoAPIEP="/user/repos" + repoOwner="${ADMIN_USER}" + else + create_org "$repoOrg" + repoAPIEP="/org/$repoOrg/repos" + repoOwner="$repoOrg" + fi + create_repo "${repoName}" "${repoAPIEP}" 1>&2 + ( + cd "$repoPath" + git push "$pushuri/${repoOwner}/${repoName}.git" master + ) +done diff --git a/repos/.gitignore b/repos/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/repos/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore