diff --git a/examples/git.example.com/org/mirror-project/deploy.sh b/examples/git.example.com/org/mirror-project/deploy.sh new file mode 100644 index 0000000..a313292 --- /dev/null +++ b/examples/git.example.com/org/mirror-project/deploy.sh @@ -0,0 +1,38 @@ +#!/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