source: scripts/do-release @ e1d3607

Last change on this file since e1d3607 was 413c910, checked in by David Benjamin <davidben@mit.edu>, 13 years ago
Consistently use BarnOwl or barnowl BarnOwl refers to the program, barnowl is the executable and any other identifiers that are conventionally lowercase.
  • Property mode set to 100755
File size: 2.3 KB
Line 
1#!/bin/sh -e
2
3die() {
4    echo "$@" >&2
5    exit 1
6}
7
8usage() {
9    cat >&2 <<EOF
10Usage: $0 [options]
11Generate a BarnOwl release tarball.
12
13OPTIONS:
14  -f            Don't require a changelog entry for the new release.
15  --no-tag      Don't create and sign a git tag for the new release
16  --git         Do a beta release for the current git revision.
17EOF
18}
19
20force=
21no_tag=
22git=
23
24for arg; do
25    case $arg in
26        -f) force=1 ;;
27        --no-tag) no_tag=1 ;;
28        --git) git=1 ;;
29        -h|--help) usage ;;
30    esac
31done
32
33if [ "$git" ]; then
34    force=1
35    no_tag=1
36    VERS=$(git describe --match='barnowl-*' HEAD | sed s,^barnowl-,,)
37else
38    VERS=$(perl -ne 'print $1 if m{^AC_INIT\(\[[^\]]+\],\s*\[([^\]]+)\]}' configure.ac) \
39        || die "Unable to parse BarnOwl version"
40fi
41TAG=barnowl-$VERS
42TGZ="$TAG-src"
43
44if [ ! "$force" ] && [ "$VERS" != "$(head -1 ChangeLog)" ]; then
45    die "No ChangeLog entry for version $VERS, aborting."
46fi
47
48head=$(git symbolic-ref HEAD)
49head=${head#refs/heads/}
50
51git rev-parse --verify -q $head >/dev/null 2>&1
52git rev-parse --verify -q origin/$head >/dev/null 2>&1
53if [ -n "$(git rev-list $head..origin/$head)" ]; then
54    die "$head is not up to date. Aborting."
55fi
56
57if ! [ "$no_tag" ]; then
58    if git cat-file -t "$TAG" > /dev/null 2>&1; then
59        die "Error: Object $TAG already exists."
60    fi
61
62    git tag -s -m "BarnOwl $VERS" "$TAG"
63else
64    TAG=HEAD
65fi
66
67exittrap() { :; }
68for sig in 1 2 13 15; do trap "exit $(($sig + 128))" $sig; done
69trap 'exittrap' EXIT
70
71TMPDIR=$(mktemp -d /tmp/barnowl.XXXXXX)
72
73exittrap() { rm -rf "$TMPDIR"; }
74
75git archive --format=tar --prefix="$TGZ/" "$TAG" | tar -x -C "$TMPDIR"
76
77CODIR=$(pwd)
78cd "$TMPDIR/$TGZ"
79[ "$git" ] && perl -i -pe 's{^(AC_INIT\(\[[^\]]+\],\s*)\[([^\]]+)\]}{${1}['$VERS']}' configure.ac
80autoreconf -fvi
81rm -r autom4te.cache/
82cd "$TMPDIR"
83tar czvf "$TGZ.tgz" "$TGZ"
84cd "$CODIR"
85
86mv "$TMPDIR/$TGZ.tgz" .
87rm -rf "$TMPDIR"
88
89exittrap() { :; }
90
91echo "Created release tarball for BarnOwl $VERS in $(pwd)"
92echo "Remember to bump OWL_VERSION_STRING for future development."
93
94COMMIT=$(git rev-parse "$TAG")
95NOW=$(date +"%B %d, %Y")
96cat <<EOF
97 * '''$NOW''': BarnOwl $VERS released. [wiki:Download] it here, or read the [wiki:release-notes/$VERS release notes] or [/browser/ChangeLog?rev=barnowl-$VERS ChangeLog].
98EOF
Note: See TracBrowser for help on using the repository browser.