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

View File

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

View File

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

View File

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