diff options
Diffstat (limited to 'scripts/update-workhorse')
-rwxr-xr-x | scripts/update-workhorse | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/scripts/update-workhorse b/scripts/update-workhorse new file mode 100755 index 00000000000..2c43b249fe4 --- /dev/null +++ b/scripts/update-workhorse @@ -0,0 +1,59 @@ +#!/bin/sh +set -e +WORKHORSE_DIR=workhorse/ +WORKHORSE_REF="$(cat GITLAB_WORKHORSE_VERSION)" +WORKHORSE_URL=${GITLAB_WORKHORSE_URL:-https://gitlab.com/gitlab-org/gitlab-workhorse.git} + +if [ $# -gt 1 ] || ([ $# = 1 ] && [ x$1 != xcheck ]); then + echo "Usage: update-workhorse [check]" + exit 1 +fi + +if echo "$WORKHORSE_REF" | grep -q '^[0-9]\+\.[0-9]\+\.[0-9]\+' ; then + # Assume this is a tagged release + WORKHORSE_REF="v${WORKHORSE_REF}" +fi + +clean="$(git status --porcelain)" +if [ -n "$clean" ] ; then + echo 'error: working directory is not clean:' + echo "$clean" + exit 1 +fi + +git fetch "$WORKHORSE_URL" "$WORKHORSE_REF" +git rm -rf --quiet -- "$WORKHORSE_DIR" +git read-tree --prefix="$WORKHORSE_DIR" -u FETCH_HEAD + +status="$(git status --porcelain)" + +if [ x$1 = xcheck ]; then + if [ -n "$status" ]; then + cat <<MSG +error: $WORKHORSE_DIR does not match $WORKHORSE_REF + +During the transition period of https://gitlab.com/groups/gitlab-org/-/epics/4826, +the workhorse/ directory in this repository is read-only. To make changes: + +1. Submit a MR to https://gitlab.com/gitlab-org/gitlab-workhorse +2. Once your MR is merged, have a new gitlab-workhorse tag made + by a maintainer +3. Update the GITLAB_WORKHORSE_VERSION file in this repository +4. Run scripts/update-workhorse to update the workhorse/ directory + +MSG + exit 1 + fi + exit 0 +fi + +if [ -z "$status" ]; then + echo "warn: $WORKHORSE_DIR is already up to date, exiting without commit" + exit 0 +fi + +tree=$(git write-tree) +msg="Update vendored workhorse to $WORKHORSE_REF" +commit=$(git commit-tree -p HEAD -p FETCH_HEAD^{commit} -m "$msg" "$tree") +git update-ref HEAD "$commit" +git log -1 |