1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#!/usr/bin/perl
# creates a new release
# Copyright (C) 2014 Jürgen E. Fischer <jef@norbit.de>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
use strict;
use warnings;
use Getopt::Long;
use Pod::Usage;
my $newmajor;
my $newminor;
my $releasename;
my $help;
my $result = GetOptions(
"major" => \$newmajor,
"minor" => \$newminor,
"releasename=s" => \$releasename,
"help" => \$help
);
$releasename = shift @ARGV;
pod2usage(1) if $help or !defined $releasename;
my $major;
my $minor;
open F, "CMakeLists.txt";
while(<F>) {
if(/SET\(CPACK_PACKAGE_VERSION_MAJOR "(\d+)"\)/) {
$major = $1;
} elsif(/SET\(CPACK_PACKAGE_VERSION_MINOR "(\d+)"\)/) {
$minor = $1;
}
}
close F;
if( defined $newmajor ) {
die "New major must be equal or greater than old major $major" if $newmajor <= $major;
$newminor = 0 unless defined $newminor;
} else {
$newmajor = $major;
}
if( defined $newminor ) {
die "New minor must be greater than current minor $minor" if $newmajor==$major && $newminor<=$minor;
} else {
$newminor = $minor + 1;
}
sub updateCMakeLists {
my($major,$minor,$release) = @_;
rename "CMakeLists.txt", "CMakeLists.txt.orig" or die "cannot rename CMakeLists.txt: $!";
open I, "CMakeLists.txt.orig";
open O, ">CMakeLists.txt" or die "cannot create CMakeLists.txt: $!";
while(<I>) {
s/SET\(CPACK_PACKAGE_VERSION_MAJOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MAJOR "$major")/;
s/SET\(CPACK_PACKAGE_VERSION_MINOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MINOR "$minor")/;
s/SET\(RELEASE_NAME "(.+)"\)/SET(RELEASE_NAME "$release")/;
print O;
}
close O;
close I;
}
print "Last pull rebase...\n";
system( "git pull --rebase" ) == 0 or die "git pull rebase failed";
my $release = "$newmajor.$newminor";
my $relbranch = "release-${newmajor}_${newminor}";
my $reltag = "final-${newmajor}_${newminor}_0";
print "Creating branch...\n";
system( "git checkout -b $relbranch" ) == 0 or die "git checkout release branch failed";
updateCMakeLists($newmajor,$newminor,$releasename);
print "Updating branch...\n";
system( "dch -r ''" ) == 0 or die "dch failed";
system( "dch --newversion $newmajor.$newminor.0 'Release of $release'" ) == 0 or die "dch failed";
system( "cp debian/changelog /tmp" ) == 0 or die "backup changelog failed";
if( -f "images/splash/splash-release.png" ) {
system( "cp -v images/splash/splash-release.png images/splash/splash.png" ) == 0 or die "splash png switch failed";
} else {
print "WARNING: NO images/splash/splash-release.png\n";
}
if( -f "images/splash/splash-release.xcf.bz2" ) {
system( "cp -v images/splash/splash-release.xcf.bz2 images/splash/splash.xcf.bz2" ) == 0 or die "splash xcf switch failed";
} else {
print "WARNING: NO images/splash/splash-release.xcf.bz2\n";
}
if( -f "ms-windows/Installer-Files/WelcomeFinishPage-release.bmp" ) {
system( "cp -v ms-windows/Installer-Files/WelcomeFinishPage-release.bmp ms-windows/Installer-Files/WelcomeFinishPage.bmp" ) == 0 or die "installer bitmap switch failed";
} else {
print "WARNING: NO ms-windows/Installer-Files/WelcomeFinishPage-release.bmp\n";
}
system( "git commit -a -m 'Release of $release ($releasename)'" ) == 0 or die "release commit failed";
system( "git tag $reltag -m 'Version $release'" ) == 0 or die "tag failed";
print "Producing archive...\n";
system( "git archive --format tar --prefix=qgis-$release.0/ $reltag | bzip2 -c >qgis-$release.0.tar.bz2" ) == 0 or die "git archive failed";
system( "md5sum qgis-$newmajor.$newminor.0.tar.bz2 >qgis-$release.0.tar.bz2.md5" ) == 0 or die "md5sum failed";
$newminor++;
print "Updating master...\n";
system( "git checkout master" ) == 0 or die "checkout master failed";
updateCMakeLists($newmajor,$newminor,"Master");
system( "cp /tmp/changelog debian" ) == 0 or die "restore changelog failed";
system("dch -r ''" ) == 0 or die "dch failed";
system( "dch --newversion $newmajor.$newminor.0 'New development version $newmajor.$newminor after branch of $release'" ) == 0 or die "dch failed";
system( "git commit -a -m 'Bump version to $newmajor.$newminor'" ) == 0 or die "bump version failed";
print "Push dry-run...\n";
system( "git push -n origin master $relbranch $reltag" ) == 0 or die "git push -n failed";
print "Now manually push and upload the tarballs :\n\tgit push origin master $relbranch $reltag\n\trsync qgis-$release.0.tar.bz2* qgis.org:/var/www/downloads/\n\n";
=head1 NAME
release.pl - create a new release
=head1 SYNOPSIS
release.pl [options] releasename
Options:
-major=newmajor new major number for release (defaults to current major version number)
-minor=newminor new minor number for release (defaults to current minor + 1 or 0 when major version number was increased)
next master will become minor + 1
=cut
|