Support neutron advanced services

The recently split neutron-*aas need special treatment in release
scripts. The extra deliverables need to be uploaded to the same
Launchpad milestone page, and bugs should only be closed once (all
projects share the same Launchpad bug pages).

To this effect, we distinguish in the scripts the Launchpad concept
of project from the git project name as used in tarballs and skip
parts as needed. We also introduce an optional --deliverable option
to upload_release.py so that it can use different values for both.

Change-Id: I8a4db8b09a3b9d480a767ea0ce94373b4528d1a2
This commit is contained in:
Thierry Carrez 2015-01-28 17:41:40 +01:00
parent 208af0667a
commit 900aec2f8b
4 changed files with 74 additions and 30 deletions

View File

@ -29,6 +29,7 @@ fi
MILESTONE=$1
SHA=$2
PROJECT=$3
LPROJECT="$PROJECT"
TOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -49,12 +50,18 @@ if [[ "$PROJECT" == "oslo-incubator" ]]; then
SKIPUPLOAD=1
fi
if [[ "$PROJECT" == neutron-* ]]; then
echo "Neutron advanced services mode: skipping bugs and upload to neutron"
SKIPBUGS=1
LPROJECT="neutron"
fi
title "Resolving $MILESTONE to version"
if [[ "$IS_RELEASE" == "1" ]]; then
VERSION=$MILESTONE
RELVERSION=$MILESTONE
else
VERSION=`$TOOLSDIR/ms2version.py $PROJECT $MILESTONE`
VERSION=`$TOOLSDIR/ms2version.py $LPROJECT $MILESTONE`
RELVERSION=${VERSION:0:8}
fi
echo "$MILESTONE is $VERSION (final being $RELVERSION)"
@ -100,18 +107,20 @@ fi
if [[ "$SKIPBUGS" != "1" ]]; then
title "Setting FixCommitted bugs to FixReleased"
$TOOLSDIR/process_bugs.py $PROJECT --settarget=$MILESTONE --fixrelease
$TOOLSDIR/process_bugs.py $LPROJECT --settarget=$MILESTONE --fixrelease
read -sn 1 -p "Fix any leftover bugs manually and press key to continue..."
fi
if [[ "$SKIPUPLOAD" != "1" ]]; then
title "Uploading tarball to Launchpad"
if [[ "$IS_RELEASE" == "1" ]]; then
$TOOLSDIR/upload_release.py $PROJECT $RELVERSION
$TOOLSDIR/upload_release.py $LPROJECT $RELVERSION --deliverable=$PROJECT
else
$TOOLSDIR/upload_release.py $PROJECT $RELVERSION --milestone=$MILESTONE
$TOOLSDIR/upload_release.py $LPROJECT $RELVERSION --deliverable=$PROJECT \
--milestone=$MILESTONE
fi
else
title "Marking milestone as released in Launchpad"
$TOOLSDIR/upload_release.py $PROJECT $RELVERSION --milestone=$MILESTONE --nop
$TOOLSDIR/upload_release.py $LPROJECT $RELVERSION --deliverable=$PROJECT \
--milestone=$MILESTONE --nop
fi

View File

@ -30,12 +30,19 @@ fi
SHA=$1
SERIES=$2
PROJECT=$3
LPROJECT="$PROJECT"
if [[ "$PROJECT" == "oslo-incubator" ]]; then
echo "Oslo-incubator mode: skipping tarball check"
SKIPTARBALL=1
fi
if [[ "$PROJECT" == neutron-* ]]; then
echo "Neutron advanced services mode: skipping bugs"
SKIPBUGS=1
LPROJECT="neutron"
fi
if [[ "$PROJECT" == "swift" ]]; then
if [[ $# -eq 4 ]]; then
RC1MILESTONE="$4-rc1"
@ -55,7 +62,7 @@ function title {
}
title "Checking that $RC1MILESTONE exists"
$TOOLSDIR/ms2version.py --onlycheck $PROJECT $RC1MILESTONE
$TOOLSDIR/ms2version.py --onlycheck $LPROJECT $RC1MILESTONE
title "Cloning repository for $PROJECT"
MYTMPDIR=`mktemp -d`
@ -85,5 +92,7 @@ if [[ "$SKIPTARBALL" != "1" ]]; then
$TOOLSDIR/wait_for_tarball.py $REALSHA
fi
title "Setting FixCommitted bugs to FixReleased"
$TOOLSDIR/process_bugs.py $PROJECT --settarget=$RC1MILESTONE --fixrelease
if [[ "$SKIPBUGS" != "1" ]]; then
title "Setting FixCommitted bugs to FixReleased"
$TOOLSDIR/process_bugs.py $LPROJECT --settarget=$RC1MILESTONE --fixrelease
fi

View File

@ -30,6 +30,7 @@ fi
SERIES=$1
RC=$2
PROJECT=$3
LPROJECT="$PROJECT"
if [[ "$PROJECT" == "oslo-incubator" ]]; then
echo "Oslo-incubator mode: skipping tarball generation and upload"
@ -37,6 +38,11 @@ if [[ "$PROJECT" == "oslo-incubator" ]]; then
SKIPUPLOAD=1
fi
if [[ "$PROJECT" == neutron-* ]]; then
echo "Neutron advanced services mode: upload to Neutron Launchpad project"
LPROJECT="neutron"
fi
if [[ "$PROJECT" == "swift" ]]; then
if [[ $# -eq 4 ]]; then
FINALVERSION=$4
@ -53,25 +59,25 @@ function title {
echo "$(tput bold)$(tput setaf 1)[ $1 ]$(tput sgr0)"
}
title "Resolving $PROJECT $SERIES $RC to version"
title "Resolving $LPROJECT $SERIES $RC to version"
if [[ "$RC" == "final" ]]; then
if [[ "$PROJECT" != "swift" ]]; then
RC1VERSION=`$TOOLSDIR/ms2version.py $PROJECT $SERIES-rc1`
if [[ "$LPROJECT" != "swift" ]]; then
RC1VERSION=`$TOOLSDIR/ms2version.py $LPROJECT $SERIES-rc1`
FINALVERSION=${RC1VERSION:0:8}
fi
MILESTONE=$FINALVERSION
VERSION=$FINALVERSION
$TOOLSDIR/ms2version.py --onlycheck $PROJECT $MILESTONE
$TOOLSDIR/ms2version.py --onlycheck $LPROJECT $MILESTONE
else
if [[ "$PROJECT" != "swift" ]]; then
if [[ "$LPROJECT" != "swift" ]]; then
MILESTONE="$SERIES-$RC"
VERSION=`$TOOLSDIR/ms2version.py $PROJECT $MILESTONE`
VERSION=`$TOOLSDIR/ms2version.py $LPROJECT $MILESTONE`
FINALVERSION=${VERSION:0:8}
else
MILESTONE="$FINALVERSION-$RC"
VERSION="${FINALVERSION}$RC"
$TOOLSDIR/ms2version.py --onlycheck $PROJECT $MILESTONE
$TOOLSDIR/ms2version.py --onlycheck $LPROJECT $MILESTONE
fi
fi
echo "$SERIES $RC (milestone $MILESTONE) is version $VERSION"
@ -106,16 +112,19 @@ fi
if [[ "$SKIPUPLOAD" != "1" ]]; then
title "Uploading tarball to Launchpad"
if [[ "$RC" == "final" ]]; then
$TOOLSDIR/upload_release.py $PROJECT $FINALVERSION
$TOOLSDIR/upload_release.py $LPROJECT $FINALVERSION --deliverable=$PROJECT
else
$TOOLSDIR/upload_release.py $PROJECT $FINALVERSION --milestone=$MILESTONE
$TOOLSDIR/upload_release.py $LPROJECT $FINALVERSION \
--deliverable=$PROJECT --milestone=$MILESTONE
fi
else
title "Marking milestone as released in Launchpad"
if [[ "$RC" == "final" ]]; then
$TOOLSDIR/upload_release.py $PROJECT $FINALVERSION --nop
$TOOLSDIR/upload_release.py $LPROJECT $FINALVERSION \
--deliverable=$PROJECT --nop
else
$TOOLSDIR/upload_release.py $PROJECT $FINALVERSION --milestone=$MILESTONE --nop
$TOOLSDIR/upload_release.py $LPROJECT $FINALVERSION \
--deliverable=$PROJECT --milestone=$MILESTONE --nop
fi
fi

View File

@ -37,9 +37,11 @@ def abort(code, errmsg):
# Argument parsing
parser = argparse.ArgumentParser(description='Grab tarball and release it '
'on LP as milestone or version.')
parser.add_argument('project', help='Project to publish release for (nova)')
parser.add_argument('project', help='LP project to publish release for (nova)')
parser.add_argument('version', help='Version under development (2015.1.0)')
parser.add_argument("--milestone", help='Milestone to publish (kilo-2)')
parser.add_argument("--deliverable", help='Project name in the tarball. '
'Defaults to project')
parser.add_argument("--nop", action='store_true',
help='Only create release, do not upload tarball')
parser.add_argument("--tarball",
@ -53,6 +55,9 @@ if args.milestone is None:
else:
milestone = args.milestone
if args.deliverable is None:
args.deliverable = args.project
# Connect to LP
print "Connecting to Launchpad..."
try:
@ -70,7 +75,12 @@ except KeyError:
for lp_milestone in lp_proj.all_milestones:
if lp_milestone.name == milestone:
if lp_milestone.release:
abort(2, 'Milestone %s was already released !' % milestone)
print 'Milestone %s is already released' % milestone
if args.deliverable != args.project:
print 'We are probably just trying to add %s to LP %s.' % \
(args.deliverable, args.project)
else:
abort(2, 'That looks like an error!')
if args.milestone:
short_ms = lp_milestone.code_name.lower()
if not short_ms.startswith("rc"):
@ -88,10 +98,13 @@ if not args.nop:
print "Downloading tarball..."
tmpdir = tempfile.mkdtemp()
if args.tarball is None:
base_tgz = "%s-%s%s.tar.gz" % (args.project, args.version, preversion)
base_tgz = "%s-%s%s.tar.gz" % \
(args.deliverable, args.version, preversion)
else:
base_tgz = "%s-%s.tar.gz" % (args.project, args.tarball)
url_tgz = "http://tarballs.openstack.org/%s/%s" % (args.project, base_tgz)
base_tgz = "%s-%s.tar.gz" % \
(args.deliverable, args.tarball)
url_tgz = "http://tarballs.openstack.org/%s/%s" % \
(args.deliverable, base_tgz)
tgz = os.path.join(tmpdir, base_tgz)
(tgz, message) = urllib.urlretrieve(url_tgz, filename=tgz)
@ -129,9 +142,12 @@ else:
rel_notes = "This is %s %s release." \
% (args.project.capitalize(), args.version)
lp_release = lp_milestone.createProductRelease(
date_released=datetime.datetime.utcnow(),
release_notes=rel_notes)
if lp_milestone.release:
lp_release = lp_milestone.release
else:
lp_release = lp_milestone.createProductRelease(
date_released=datetime.datetime.utcnow(),
release_notes=rel_notes)
# Mark milestone inactive
print "Marking milestone inactive..."
@ -141,13 +157,14 @@ lp_milestone.lp_save()
if not args.nop:
# Upload file
print "Uploading release files..."
final_tgz = "%s-%s%s.tar.gz" % (args.project, args.version, preversion)
final_tgz = "%s-%s%s.tar.gz" % \
(args.deliverable, args.version, preversion)
if args.milestone:
description = '%s "%s" milestone' % \
(args.project.capitalize(), args.milestone)
(args.deliverable.capitalize(), args.milestone)
else:
description = '%s %s release' % \
(args.project.capitalize(), args.version)
(args.deliverable.capitalize(), args.version)
lp_file = lp_release.add_file(file_type='Code Release Tarball',
description=description,