blob: 784dcb9ae3040711b7ce0ccbd63569f216aaed94 [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 helps to verify full life cycle of Gradle build and all
# PostCommit tests against release branch on Jenkins.
#
# It reads configurations from script.config, setup environment and finally
# create a test PR to run Jenkins jobs.
#
# NOTE:
# 1. Please create a personal access token from your Github account first.
# Instructions: https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line
# 2. Please set RELEASE_BUILD_CONFIGS in script.config before running this
# script.
# 3. Please manually comment trigger phrases to the created PR to start
# Gradle release build and all PostCommit jobs, or run mass_comment.py
# to do so. Phrases are listed in COMMENTS_TO_ADD in mass_comment.py.
. script.config
set -e
BEAM_REPO_URL=https://github.com/apache/beam.git
RELEASE_BRANCH=release-${RELEASE_VER}
WORKING_BRANCH=postcommit_validation_pr
function clean_up(){
echo ""
echo "==================== Final Cleanup ===================="
rm -rf ${LOCAL_BEAM_DIR}
echo "* Deleted workspace ${LOCAL_BEAM_DIR}"
}
trap clean_up EXIT
echo ""
echo "==================== 1 Checking Environment Variables ================="
echo "* PLEASE update RELEASE_BUILD_CONFIGS in file script.config first *"
echo ""
echo "Verify release build against branch: ${RELEASE_BRANCH}."
echo "Use workspace: ${LOCAL_BEAM_DIR}"
echo ""
echo "All environment and workflow configurations from RELEASE_BUILD_CONFIGS:"
for i in "${RELEASE_BUILD_CONFIGS[@]}"; do
echo "$i = ${!i}"
done
echo "[Confirmation Required] Are they all provided and correctly set? [y|N]"
read confirmation
if [[ $confirmation != "y" ]]; then
echo "Please rerun this script and make sure you have the right configurations."
exit
fi
echo ""
echo "==================== 2 Checking Requirements ======================="
echo "====================== 2.1 Checking git ========================"
if [[ -z ${GITHUB_TOKEN} ]]; then
echo "Error: A Github personal access token is required to perform git push "
echo "under a newly cloned directory. Please manually create one from Github "
echo "website with guide:"
echo "https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line"
echo "Note: This token can be reused in other release scripts."
exit
else
echo "====================== Cloning repo ======================"
git clone ${BEAM_REPO_URL} ${LOCAL_BEAM_DIR}
cd ${LOCAL_BEAM_DIR}
# Set upstream repo url with access token included.
USER_REPO_URL=https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${GITHUB_USERNAME}/beam.git
git remote add ${GITHUB_USERNAME} ${USER_REPO_URL}
# For hub access Github API.
export GITHUB_TOKEN=${GITHUB_TOKEN}
# For local git repo only. Required if global configs are not set.
git config user.name "${GITHUB_USERNAME}"
git config user.email "${GITHUB_USERNAME}@gmail.com"
fi
echo "====================== 2.2 Checking hub ========================"
HUB_VERSION=2.12.0
HUB_ARTIFACTS_NAME=hub-linux-amd64-${HUB_VERSION}
if [[ -z `which hub` ]]; then
echo "There is no hub installed on your machine."
if [[ "${INSTALL_HUB}" = true ]]; then
echo "====================== Installing hub ======================="
wget https://github.com/github/hub/releases/download/v${HUB_VERSION}/${HUB_ARTIFACTS_NAME}.tgz
tar zvxvf ${HUB_ARTIFACTS_NAME}.tgz
sudo ./${HUB_ARTIFACTS_NAME}/install
echo "eval "$(hub alias -s)"" >> ~/.bashrc
rm -rf ${HUB_ARTIFACTS_NAME}*
else
echo "Refused to install hub. Cannot proceed into next setp."; exit
fi
fi
hub version
echo ""
echo "==================== 3 Run Gradle Release Build & PostCommit Tests on Jenkins ==================="
echo "[Current Task] Run Gradle release build and all PostCommit Tests against Release Branch on Jenkins."
echo "This task will create a PR against apache/beam."
echo "After PR created, you need to comment phrases listed in description in the created PR:"
if [[ ! -z `which hub` ]]; then
git checkout -b ${WORKING_BRANCH} origin/${RELEASE_BRANCH} --quiet
# The version change is needed for Dataflow python batch tests.
# Without changing to dev version, the dataflow pipeline will fail because of non-existed worker containers.
# Note that dataflow worker containers should be built after RC has been built.
sed -i -e "s/${RELEASE_VER}/${RELEASE_VER}.dev/g" sdks/python/apache_beam/version.py
sed -i -e "s/sdk_version=${RELEASE_VER}/sdk_version=${RELEASE_VER}.dev/g" gradle.properties
git add sdks/python/apache_beam/version.py
git add gradle.properties
git commit -m "Changed version.py and gradle.properties to python dev version to create a test PR" --quiet
git push -f ${GITHUB_USERNAME} --quiet
hub pull-request -b apache:${RELEASE_BRANCH} -h ${GITHUB_USERNAME}:${WORKING_BRANCH} -F- <<<"[DO NOT MERGE] Run all PostCommit and PreCommit Tests against Release Branch
You can run many tests automatically using release/src/main/scripts/mass_comment.py."
echo ""
echo "[NOTE]: Please make sure all test targets have been invoked."
echo "Please check the test results. If there is any failure, follow the policy in release guide."
fi