61 lines
No EOL
1.8 KiB
Bash
61 lines
No EOL
1.8 KiB
Bash
#!/bin/bash
|
|
|
|
Get-Existing(){
|
|
curl -s "https://gitlab.skynet.ie/compsoc1/skynet/nixos/-/raw/main/sync/repos.csv" -o "./repos_active.csv"
|
|
}
|
|
|
|
Get-Diff(){
|
|
diff --changed-group-format='%<' --unchanged-group-format='' repos.csv repos_active.csv > repos_diff.csv
|
|
}
|
|
|
|
Mirror-Clear(){
|
|
# existing remotes
|
|
local id=$(tr -d '\n\t\r ' <<<"${1}" )
|
|
local token=$(tr -d '\n\t\r ' <<<"$TOKEN" )
|
|
local response=$(curl -s -X "GET" "https://gitlab.skynet.ie/api/v4/projects/$id/remote_mirrors" --header "PRIVATE-TOKEN: $token")
|
|
|
|
# https://stackoverflow.com/a/67638584
|
|
readarray -t my_array < <(jq -c '.[]' <<< $response)
|
|
# iterate through the Bash array
|
|
for item in "${my_array[@]}"; do
|
|
local id_mirror=$(jq --raw-output '.id' <<< "$item")
|
|
curl -s -X "DELETE" "https://gitlab.skynet.ie/api/v4/projects/$id/remote_mirrors/$id_mirror" --header "PRIVATE-TOKEN: $token"
|
|
done
|
|
}
|
|
|
|
Mirror-Create(){
|
|
# make sure the values are clean of extra characters
|
|
local id=$(tr -d '\n\t\r ' <<<"${1}" )
|
|
local REPO_TMP=$(tr -d '\n\t\r ' <<<"${2}" )
|
|
local REPO=${REPO_TMP#"https://"}
|
|
local token=$(tr -d '\n\t\r ' <<<"$TOKEN" )
|
|
local token_remote=$(tr -d '\n\t\r ' <<<"$TOKEN_REMOTE" )
|
|
|
|
local body="url=https://oauth2:$token_remote@$REPO&enabled=true&only_protected_branches=false&keep_divergent_refs=false"
|
|
local uri="https://gitlab.skynet.ie/api/v4/projects/$id/remote_mirrors"
|
|
echo $uri
|
|
curl -s -X "POST" "$uri" --header "PRIVATE-TOKEN: $token" --data $body
|
|
# to put output on a new line
|
|
echo ""
|
|
}
|
|
|
|
Main() {
|
|
# for local dev
|
|
source .env
|
|
|
|
# if SYNC_OVERRIDE is not set then
|
|
if [ -z "${SYNC_OVERRIDE}" ]; then
|
|
Get-Existing
|
|
Get-Diff
|
|
else
|
|
cp repos.csv repos_diff.csv
|
|
fi
|
|
|
|
while IFS="," read -r id remote
|
|
do
|
|
Mirror-Clear $id
|
|
Mirror-Create $id $remote
|
|
done < <(tail -n +2 ./repos_diff.csv)
|
|
}
|
|
|
|
Main |