summaryrefslogtreecommitdiff
path: root/scripts/update-workhorse
blob: 2c43b249fe4529d331fb19c70ab465a2512cc2ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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