39 lines
1.2 KiB
Bash
39 lines
1.2 KiB
Bash
|
#!/bin/bash
|
||
|
set -u
|
||
|
set -e
|
||
|
|
||
|
my_mirror=git.example.com/org/project
|
||
|
echo "Mirroring ${GIT_REPO_ID}#${GIT_REF_NAME} to $my_mirror ..."
|
||
|
|
||
|
# See the Git Credentials Cheat Sheet
|
||
|
# https://coolaj86.com/articles/vanilla-devops-git-credentials-cheatsheet/
|
||
|
if [[ ! -d "$HOME/git-mirrors/${GIT_REPO_ID}" ]]; then
|
||
|
mkdir -p "$(dirname "$HOME/git-mirrors/${GIT_REPO_ID}")"
|
||
|
git clone "${GIT_CLONE_URL}" "$HOME/git-mirrors/${GIT_REPO_ID}"
|
||
|
pushd "$HOME/git-mirrors/${GIT_REPO_ID}"
|
||
|
git remote add mirror ssh://git@${my_mirror}.git
|
||
|
git fetch --all
|
||
|
popd
|
||
|
fi
|
||
|
|
||
|
pushd "${HOME}/git-mirrors/${GIT_REPO_ID}"
|
||
|
# get a random branch name
|
||
|
my_tmp="$(xxd -l8 -ps /dev/urandom)"
|
||
|
# get clean
|
||
|
git reset --hard HEAD
|
||
|
# make a temp branch
|
||
|
git checkout -b "${my_tmp}"
|
||
|
# delete the existing branch, if any
|
||
|
git branch -D "${GIT_REF_NAME}"
|
||
|
# get updated
|
||
|
git fetch --force origin
|
||
|
# get the latest branch
|
||
|
git checkout --force "origin/${GIT_REF_NAME}" -b "${GIT_REF_NAME}"
|
||
|
# delete the temp branch
|
||
|
git branch -D "${my_tmp}"
|
||
|
# get the latest of this branch
|
||
|
git pull --force
|
||
|
# overwrite the mirror's copy
|
||
|
git push --force mirror "${GIT_REF_NAME}"
|
||
|
popd
|