#!/usr/bin/env bash
# Uploads a new version of the co19 CIPD package.
# This script requires access to the dart-build-access group, which EngProd has.

set -e
set -x

if [ ! -e tests/co19 ]; then
  echo "$0: error: Run this script at the root of the Dart SDK" >&2
  exit 1
fi

# Find the latest co19 commit.
rm -rf tests/co19/src.git
git clone https://dart.googlesource.com/co19 tests/co19/src.git
CO19=tests/co19/src.git
OLD=$(gclient getdep --var=co19_rev)
NEW=$(cd $CO19 && git fetch origin && git rev-parse origin/master)

git fetch origin
git branch cl-co19-roll-co19-to-$NEW origin/master
git checkout cl-co19-roll-co19-to-$NEW

# Build a cipd package of the commit.
BUILD_ID=$(bb add \
              -commit https://dart.googlesource.com/co19/+/$NEW \
              -json \
              dart/ci/co19-roller \
             | jq -r '.id')
bb collect -interval 10s $BUILD_ID

# Update DEPS:
gclient setdep --var=co19_rev=$NEW

BUILDERS=$(jq -r '.builder_configurations
  | map(select(.steps
    | any(.arguments
      | select(.!=null)
        | any(test("co19($|(/.*))")))))
  | map(.builders)
  | flatten
  | sort
  | .[] += "-try"
  | join(",")' \
  tools/bots/test_matrix.json)

# Make a nice commit. Don't include the '#' character to avoid referencing Dart
# SDK issues.
git commit DEPS -m \
  "$(printf "[co19] Roll co19 to $NEW\n\n" \
  && cd $CO19 \
  && git log --date='format:%Y-%m-%d' --pretty='format:%ad %ae %s' $OLD..$NEW \
    | tr -d '#' \
  && printf "\nCq-Include-Trybots: dart/try:$BUILDERS\n")"

rm -rf tests/co19/src.git

GIT_EDITOR=true git cl upload
ISSUE=$(git config --get branch.cl-co19-roll-co19-to-$NEW.gerritissue)

git cl web

set +x
cat << EOF

Wait for the builders to finish. If any failed, pre-approve them.
EOF
