2014-04-22 22:16:18 +00:00
|
|
|
#!/bin/bash -xe
|
|
|
|
|
|
|
|
# Licensed 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.
|
|
|
|
|
2015-05-20 21:17:05 +00:00
|
|
|
source /usr/local/jenkins/slave_scripts/common.sh
|
|
|
|
|
2014-08-01 17:12:43 +00:00
|
|
|
OWN_PROJECT=$1
|
|
|
|
if [ -z "$OWN_PROJECT" ] ; then
|
|
|
|
echo "usage: $0 project"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [ "$OWN_PROJECT" == "requirements" ] ; then
|
|
|
|
INITIAL_COMMIT_MSG="Updated from global requirements"
|
|
|
|
TOPIC="openstack/requirements"
|
2015-06-08 22:13:53 +00:00
|
|
|
PROJECTS=$(cat projects.txt)
|
2015-06-20 16:10:00 +00:00
|
|
|
VENV=$(mktemp -d)
|
2015-06-17 01:50:17 +00:00
|
|
|
trap "rm -rf $VENV" EXIT
|
|
|
|
virtualenv $VENV
|
|
|
|
$VENV/bin/pip install -e .
|
2015-06-08 22:13:53 +00:00
|
|
|
function update {
|
2015-06-17 01:50:17 +00:00
|
|
|
$VENV/bin/update-requirements $1
|
2015-06-08 22:13:53 +00:00
|
|
|
}
|
2015-06-08 21:35:04 +00:00
|
|
|
elif [ "$OWN_PROJECT" == "openstack-manuals" ] ; then
|
2014-08-01 17:12:43 +00:00
|
|
|
INITIAL_COMMIT_MSG="Updated from openstack-manuals"
|
|
|
|
TOPIC="openstack/openstack-manuals"
|
2015-06-08 22:13:53 +00:00
|
|
|
PROJECTS=$(cat projects.txt)
|
|
|
|
function update {
|
|
|
|
bash -xe tools/sync-projects.sh $1
|
|
|
|
}
|
|
|
|
elif [ "$OWN_PROJECT" == "requirements-constraints" ] ; then
|
|
|
|
INITIAL_COMMIT_MSG="Updated from generate-constraints"
|
|
|
|
TOPIC="openstack/requirements/constraints"
|
|
|
|
PROJECTS=openstack/requirements
|
2015-06-20 16:10:00 +00:00
|
|
|
VENV=$(mktemp -d)
|
2015-06-17 01:50:17 +00:00
|
|
|
trap "rm -rf $VENV" EXIT
|
|
|
|
virtualenv $VENV
|
|
|
|
$VENV/bin/pip install -e .
|
2015-06-08 22:13:53 +00:00
|
|
|
function update {
|
2015-06-22 20:38:21 +00:00
|
|
|
$VENV/bin/generate-constraints -b blacklist.txt -p /usr/bin/python2.7 \
|
2015-06-18 21:02:19 +00:00
|
|
|
-p /usr/bin/python3.4 -r global-requirements.txt \
|
2015-06-17 01:50:17 +00:00
|
|
|
> $1/upper-constraints.txt
|
2015-06-08 22:13:53 +00:00
|
|
|
}
|
2016-01-19 23:21:59 +00:00
|
|
|
elif [ "$OWN_PROJECT" == "devstack-plugins-list" ] ; then
|
|
|
|
INITIAL_COMMIT_MSG="Updated from generate-devstack-plugins-list"
|
|
|
|
TOPIC="openstack/devstack/plugins"
|
|
|
|
PROJECTS=openstack-dev/devstack
|
|
|
|
function update {
|
|
|
|
bash -ex tools/generate-devstack-plugins-list.sh $1
|
|
|
|
}
|
2016-04-04 22:09:23 +00:00
|
|
|
elif [ "$OWN_PROJECT" == "puppet-openstack-constraints" ] ; then
|
|
|
|
INITIAL_COMMIT_MSG="Updated from Puppet OpenStack modules constraints"
|
|
|
|
TOPIC="openstack/puppet/constraints"
|
|
|
|
PROJECTS=openstack/puppet-openstack-integration
|
|
|
|
function update {
|
|
|
|
bash /usr/local/jenkins/slave_scripts/generate_puppetfile.sh
|
|
|
|
}
|
2016-06-02 14:20:55 +00:00
|
|
|
elif [ "$OWN_PROJECT" == "puppet-openstack-rdo-promote" ] ; then
|
|
|
|
INITIAL_COMMIT_MSG="Promote RDO repository to latest consistent URL"
|
|
|
|
TOPIC="openstack/puppet/rdo"
|
|
|
|
PROJECTS=openstack/puppet-openstack-integration
|
|
|
|
function update {
|
|
|
|
bash /usr/local/jenkins/slave_scripts/propose_rdo_promote.sh
|
|
|
|
}
|
2015-06-08 21:35:04 +00:00
|
|
|
else
|
|
|
|
echo "Unknown project $1" >2
|
|
|
|
exit 1
|
2014-08-01 17:12:43 +00:00
|
|
|
fi
|
2014-04-22 22:16:18 +00:00
|
|
|
USERNAME="proposal-bot"
|
|
|
|
ALL_SUCCESS=0
|
|
|
|
|
2016-03-02 20:08:58 +00:00
|
|
|
if [ -z "$ZUUL_REFNAME" ] ; then
|
|
|
|
echo "No ZUUL_REFNAME set, exiting."
|
2014-04-22 22:16:18 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2015-05-20 21:17:05 +00:00
|
|
|
setup_git
|
2014-04-22 22:16:18 +00:00
|
|
|
|
2015-06-08 22:13:53 +00:00
|
|
|
for PROJECT in $PROJECTS; do
|
2014-04-22 22:16:18 +00:00
|
|
|
|
|
|
|
PROJECT_DIR=$(basename $PROJECT)
|
|
|
|
rm -rf $PROJECT_DIR
|
2015-05-04 11:49:09 +00:00
|
|
|
|
|
|
|
# Don't short circuit when one project fails to clone, just report the
|
|
|
|
# error and move onto the next project.
|
2015-07-10 21:01:31 +00:00
|
|
|
#
|
|
|
|
# TODO(fungi): switch to zuul-cloner once we add a persistent git cache
|
|
|
|
# to proposal.slave.openstack.org
|
|
|
|
if ! git clone git://git.openstack.org/$PROJECT.git; then
|
2015-05-04 11:49:09 +00:00
|
|
|
# ALL_SUCCESS is being set to 1, which means that a failure condition
|
|
|
|
# has been detected. The job will end in failure once it finishes
|
|
|
|
# cycling through the remaining projects.
|
|
|
|
ALL_SUCCESS=1
|
|
|
|
echo "Error in git clone: Ignoring $PROJECT"
|
|
|
|
continue
|
|
|
|
fi
|
2014-04-22 22:16:18 +00:00
|
|
|
pushd $PROJECT_DIR
|
|
|
|
|
2015-04-10 14:38:13 +00:00
|
|
|
# check whether the project has this branch or a suitable fallback
|
|
|
|
BRANCH=""
|
2016-03-02 20:08:58 +00:00
|
|
|
if git branch -a | grep -q "^ remotes/origin/$ZUUL_REFNAME$" ; then
|
|
|
|
BRANCH=$ZUUL_REFNAME
|
2015-04-10 14:38:13 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
# don't bother with this project if there's not a usable branch
|
|
|
|
if [ -n "$BRANCH" ] ; then
|
|
|
|
|
2015-12-27 19:45:45 +00:00
|
|
|
# Function setup_commit_message will set CHANGE_ID if a change
|
|
|
|
# exists and will always set COMMIT_MSG.
|
|
|
|
setup_commit_message $PROJECT $USERNAME $BRANCH $TOPIC "$INITIAL_COMMIT_MSG"
|
2015-04-10 14:38:13 +00:00
|
|
|
|
2014-04-22 22:16:18 +00:00
|
|
|
git checkout -B ${BRANCH} -t origin/${BRANCH}
|
|
|
|
# Need to set the git config in each repo as we shouldn't
|
|
|
|
# set it globally for the Jenkins user on the slaves.
|
2015-05-20 21:17:05 +00:00
|
|
|
setup_git
|
2014-05-29 14:47:09 +00:00
|
|
|
# Do error checking manually to continue with the next project
|
|
|
|
# in case of failures like a broken .gitreview file.
|
|
|
|
set +e
|
2014-04-22 22:16:18 +00:00
|
|
|
git review -s
|
2014-05-29 14:47:09 +00:00
|
|
|
RET=$?
|
|
|
|
set -e
|
2014-04-22 22:16:18 +00:00
|
|
|
popd
|
2014-05-29 14:47:09 +00:00
|
|
|
if [ "$RET" -ne "0" ] ; then
|
|
|
|
ALL_SUCCESS=1
|
|
|
|
echo "Error in git review -s: Ignoring $PROJECT"
|
|
|
|
continue
|
|
|
|
fi
|
2014-04-22 22:16:18 +00:00
|
|
|
|
2014-09-19 00:29:55 +00:00
|
|
|
# Don't short circuit when one project fails to sync.
|
|
|
|
set +e
|
2015-06-08 22:13:53 +00:00
|
|
|
update $PROJECT_DIR
|
2014-09-19 00:29:55 +00:00
|
|
|
RET=$?
|
|
|
|
set -e
|
|
|
|
if [ "$RET" -ne "0" ] ; then
|
|
|
|
ALL_SUCCESS=1
|
|
|
|
echo "Error in syncing: Ignoring $PROJECT"
|
|
|
|
continue
|
|
|
|
fi
|
2014-04-22 22:16:18 +00:00
|
|
|
|
|
|
|
pushd $PROJECT_DIR
|
2014-08-18 13:15:56 +00:00
|
|
|
if ! git diff --stat --exit-code HEAD ; then
|
2014-04-22 22:16:18 +00:00
|
|
|
# Commit and review
|
|
|
|
git_args="-a -F-"
|
|
|
|
git commit $git_args <<EOF
|
|
|
|
$COMMIT_MSG
|
|
|
|
EOF
|
|
|
|
# Do error checking manually to ignore one class of failure.
|
|
|
|
set +e
|
|
|
|
OUTPUT=$(git review -t $TOPIC $BRANCH)
|
|
|
|
RET=$?
|
|
|
|
[[ "$RET" -eq "0" || "$OUTPUT" =~ "no new changes" || "$OUTPUT" =~ "no changes made" ]]
|
|
|
|
SUCCESS=$?
|
|
|
|
[[ "$SUCCESS" -eq "0" && "$ALL_SUCCESS" -eq "0" ]]
|
|
|
|
ALL_SUCCESS=$?
|
|
|
|
set -e
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
popd
|
|
|
|
done
|
|
|
|
|
|
|
|
exit $ALL_SUCCESS
|