Commit 643a221914b2c816cb749b91d0a0ab0269dfd516
1 parent
723b054b
Refine release process
Showing
2 changed files
with
47 additions
and
28 deletions
README-maintainer
| ... | ... | @@ -40,7 +40,7 @@ RELEASE PREPARATION |
| 40 | 40 | * Run a spelling checker over the source code to catch errors in |
| 41 | 41 | variable names, strings, and comments. |
| 42 | 42 | |
| 43 | - ispell -p ispell-words **/*.hh **/*.cc manual/* | |
| 43 | + ispell -p ispell-words **/*.hh **/*.cc manual/* ChangeLog | |
| 44 | 44 | |
| 45 | 45 | * If needed, run large file and image comparison tests. Configure |
| 46 | 46 | options: |
| ... | ... | @@ -49,7 +49,8 @@ RELEASE PREPARATION |
| 49 | 49 | |
| 50 | 50 | For Windows, use a Windows style path, not an MSYS path for large files. |
| 51 | 51 | |
| 52 | -* Test with clang. Pass `CC=clang CXX=clang++` to `./configure`. | |
| 52 | +* Test with clang. Pass `CC=clang CXX=clang++` to `./configure`. Test | |
| 53 | + with newer version of gcc if available. | |
| 53 | 54 | |
| 54 | 55 | * Test build on a mac. |
| 55 | 56 | |
| ... | ... | @@ -114,14 +115,11 @@ CREATING A RELEASE |
| 114 | 115 | * Create source release: |
| 115 | 116 | |
| 116 | 117 | version=x.y.z |
| 117 | -\rm -rf /tmp/qpdf-$version | |
| 118 | -git archive --prefix=qpdf-$version/ HEAD . | (cd /tmp; tar xf -) | |
| 119 | -pushd /tmp | |
| 120 | -./qpdf-$version/make_dist | |
| 121 | -gpg --detach-sign --armor qpdf-$version.tar.gz | |
| 122 | - | |
| 123 | - Move qpdf-$version.tar.gz and qpdf-$version.tar.gz.asc to the | |
| 124 | - release archive area. | |
| 118 | +./make_dist $version | |
| 119 | +gpg --detach-sign --armor /tmp/qpdf-$version.tar.gz | |
| 120 | + | |
| 121 | + Move /tmp/qpdf-$version.tar.gz and /tmp/qpdf-$version.tar.gz.asc to | |
| 122 | + the release archive area. | |
| 125 | 123 | |
| 126 | 124 | For iterating on the release during testing, pass `--no-tests` to |
| 127 | 125 | make_dist to skip the test suite. | ... | ... |
make_dist
| ... | ... | @@ -11,28 +11,43 @@ use File::Basename; |
| 11 | 11 | use Cwd; |
| 12 | 12 | use Cwd 'abs_path'; |
| 13 | 13 | use IO::File; |
| 14 | +use File::Path qw(rmtree); | |
| 14 | 15 | |
| 15 | 16 | my $whoami = basename($0); |
| 16 | -my $srcdir = basename(dirname($0)); | |
| 17 | -my $pwd = getcwd(); | |
| 18 | -usage() unless $pwd eq abs_path(dirname(dirname($0))); | |
| 19 | 17 | |
| 20 | 18 | my $run_tests = 1; |
| 19 | +my $keep_tmp = 0; | |
| 20 | +my $version = undef; | |
| 21 | 21 | foreach my $arg (@ARGV) |
| 22 | 22 | { |
| 23 | 23 | if ($arg eq '--no-tests') |
| 24 | 24 | { |
| 25 | 25 | $run_tests = 0; |
| 26 | 26 | } |
| 27 | + elsif ($arg eq '--keep-tmp') | |
| 28 | + { | |
| 29 | + $keep_tmp = 1; | |
| 30 | + } | |
| 31 | + elsif (! defined $version) | |
| 32 | + { | |
| 33 | + $version = $arg; | |
| 34 | + } | |
| 27 | 35 | else |
| 28 | 36 | { |
| 29 | 37 | usage(); |
| 30 | 38 | } |
| 31 | 39 | } |
| 32 | 40 | |
| 33 | -usage() unless $srcdir =~ m/^qpdf-(\d+\.\d+(?:\.(a|b|rc)?\d+)?)$/; | |
| 34 | -my $version = $1; | |
| 35 | -cd($srcdir); | |
| 41 | +usage() unless defined $version; | |
| 42 | +usage() unless $version =~ m/^(\d+\.\d+(?:\.(a|b|rc)?\d+)?)$/; | |
| 43 | +my $distname = "qpdf-$version"; | |
| 44 | +my $tmpdir = "/tmp/$distname"; | |
| 45 | +if ((-d $tmpdir) && (! $keep_tmp)) | |
| 46 | +{ | |
| 47 | + rmtree($tmpdir); | |
| 48 | +} | |
| 49 | +run("git archive --prefix=qpdf-$version/ HEAD . | (cd /tmp; tar xf -)"); | |
| 50 | +cd($tmpdir); | |
| 36 | 51 | |
| 37 | 52 | # Check versions |
| 38 | 53 | my $fh = safe_open("configure.ac"); |
| ... | ... | @@ -96,21 +111,25 @@ run("./autogen.sh"); |
| 96 | 111 | run("./configure --enable-doc-maintenance --enable-werror"); |
| 97 | 112 | run("make -j8 build_manual"); |
| 98 | 113 | run("make distclean"); |
| 99 | -cd($pwd); | |
| 100 | -run("tar czvf $srcdir.tar.gz-candidate $srcdir"); | |
| 114 | +cd("/tmp"); | |
| 115 | +run("tar czvf $distname.tar.gz-candidate $distname"); | |
| 101 | 116 | if ($run_tests) |
| 102 | 117 | { |
| 103 | - cd($srcdir); | |
| 118 | + cd($tmpdir); | |
| 104 | 119 | run("./configure"); |
| 105 | 120 | run("make -j8"); |
| 106 | 121 | run("make check"); |
| 107 | - cd($pwd); | |
| 122 | + cd("/tmp"); | |
| 123 | +} | |
| 124 | +rename "$distname.tar.gz-candidate", "$distname.tar.gz" or die; | |
| 125 | + | |
| 126 | +if (! $keep_tmp) | |
| 127 | +{ | |
| 128 | + rmtree($tmpdir); | |
| 108 | 129 | } |
| 109 | -rename "$srcdir.tar.gz-candidate", "$srcdir.tar.gz" or die; | |
| 110 | 130 | |
| 111 | 131 | print " |
| 112 | -Source distribution created as $srcdir.tar.gz | |
| 113 | -You can now remove $srcdir. | |
| 132 | +Source distribution created as $tmpdir.tar.gz | |
| 114 | 133 | If this is a release, don't forget to tag the version control system and |
| 115 | 134 | make a backup of the release tar file. |
| 116 | 135 | |
| ... | ... | @@ -138,12 +157,14 @@ sub cd |
| 138 | 157 | sub usage |
| 139 | 158 | { |
| 140 | 159 | die " |
| 141 | -Usage: $whoami [ --no-tests ] | |
| 160 | +Usage: $whoami [ --no-tests --keep-tmp ] version | |
| 161 | + | |
| 162 | +Use of --no-tests can be used for internally testing releases, but do | |
| 163 | +not use it for a real release. | |
| 142 | 164 | |
| 143 | -$whoami must be run from the parent of a directory called | |
| 144 | -qpdf-<version> which must contain a pristine export of that version of | |
| 145 | -qpdf from the version control system. Use of --no-tests can be used | |
| 146 | -for internally testing releases, but do not use it for a real release. | |
| 165 | +$whoami creates /tmp/qpdf-<version> and deletes it when done. With | |
| 166 | +--keep-tmp, the directory is kept. This can be useful for debugging | |
| 167 | +the release process. | |
| 147 | 168 | |
| 148 | 169 | "; |
| 149 | 170 | } | ... | ... |