blob: 4ea9533932d4bee597f5dd2b27c455d4b044a541 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This script choose a commit to be the basis of a release candidate
# and pushed a new tagged commit for that RC.
set -e
function usage() {
echo 'Usage: choose_rc_commit.sh --release <version> --rc <rc> --commit <commit> [--debug] [--clone] [--push-tag]'
}
RELEASE=
RC=
COMMIT=
PUSH_TAG=no
CLONE=no
OVERWRITE=no
DEBUG=
GIT_REPO=git@github.com:apache/beam
while [[ $# -gt 0 ]] ; do
arg="$1"
case $arg in
--release)
shift
RELEASE=$1
shift
;;
--rc)
shift
RC=$1
shift
;;
--commit)
shift
COMMIT=$1
shift
;;
--debug)
DEBUG=--debug
set -x
shift
;;
--push-tag)
PUSH_TAG=yes
shift
;;
--overwrite)
OVERWRITE=yes
shift
;;
--clone)
CLONE=yes
shift
;;
*)
usage
exit 1
;;
esac
done
if [[ -z "$RELEASE" ]] ; then
echo 'No release version supplied.'
usage
exit 1
fi
if [[ -z "$RC" ]] ; then
echo 'No RC number supplied'
usage
exit 1
fi
if [[ -z "$COMMIT" ]] ; then
echo 'No commit hash supplied.'
usage
exit 1
fi
SCRIPT_DIR=$(dirname $0)
RC_TAG="v${RELEASE}-RC${RC}"
if [[ "$CLONE" == yes ]] ; then
CLONE_DIR=`mktemp -d`
git clone "$GIT_REPO" "$CLONE_DIR" --single-branch --branch "release-$RELEASE" --shallow-exclude master
else
echo "Not cloning repo; assuming working dir is the desired repo. To run with a fresh clone, run with --clone."
CLONE_DIR=$PWD
fi
{
cd "$CLONE_DIR"
bash "$SCRIPT_DIR/set_version.sh" "${RELEASE}" --release --git-add $DEBUG
git checkout --quiet "$COMMIT" # suppress warning about detached HEAD: we want it detached so we do not edit the branch
git commit -m "Set version for ${RELEASE} RC${RC}"
if git rev-parse "$RC_TAG" >/dev/null 2>&1; then
if [[ "$OVERWRITE" == yes ]]; then
git push origin ":refs/tags/$RC_TAG"
else
echo "Tag $RC_TAG already exists. Either delete it manually or run with --overwrite. Do not overwrite if an RC has been built and shared!"
exit 1
fi
fi
git tag -a -m "$RC_TAG" "$RC_TAG" HEAD
if [[ "$PUSH_TAG" == yes ]] ; then
git push --follow-tags origin "$RC_TAG"
else
echo "Not pushing tag $RC_TAG. You can push it manually or run with --push-tag."
fi
}