annotate src/capnproto-git-20161025/release.sh @ 55:284acf908dcd

Add source for PortAudio stable v190600_20161030
author Chris Cannam
date Tue, 03 Jan 2017 13:44:07 +0000
parents 9530b331f8c1
children
rev   line source
cannam@48 1 #! /usr/bin/env bash
cannam@48 2
cannam@48 3 set -euo pipefail
cannam@48 4
cannam@48 5 if (grep -r KJ_DBG c++/src | egrep -v '/debug(-test)?[.]'); then
cannam@48 6 echo '*** Error: There are instances of KJ_DBG in the code.' >&2
cannam@48 7 exit 1
cannam@48 8 fi
cannam@48 9
cannam@48 10 if (egrep -r 'TODO\((now|soon)\)' *); then
cannam@48 11 echo '*** Error: There are release-blocking TODOs in the code.' >&2
cannam@48 12 exit 1
cannam@48 13 fi
cannam@48 14
cannam@48 15 doit() {
cannam@48 16 echo "@@@@ $@"
cannam@48 17 "$@"
cannam@48 18 }
cannam@48 19
cannam@48 20 get_version() {
cannam@48 21 local VERSION=$(grep AC_INIT c++/configure.ac | sed -e 's/^[^]]*],\[\([^]]*\)].*$/\1/g')
cannam@48 22 if [[ ! "$VERSION" =~ $1 ]]; then
cannam@48 23 echo "Couldn't parse version: $VERSION" >&2
cannam@48 24 exit 1
cannam@48 25 fi
cannam@48 26 echo "$VERSION"
cannam@48 27 }
cannam@48 28
cannam@48 29 get_release_version() {
cannam@48 30 get_version '^[0-9]+[.][0-9]+[.][0-9]+(-rc[0-9]+|[.][0-9]+)?$'
cannam@48 31 }
cannam@48 32
cannam@48 33 update_version() {
cannam@48 34 local OLD=$1
cannam@48 35 local NEW=$2
cannam@48 36 local BRANCH_DESC=$3
cannam@48 37
cannam@48 38 local OLD_REGEX=${OLD//./[.]}
cannam@48 39 doit sed -i -e "s/$OLD_REGEX/$NEW/g" c++/configure.ac
cannam@48 40 doit sed -i -e "s/set(VERSION.*)/set(VERSION $NEW)/g" c++/CMakeLists.txt
cannam@48 41
cannam@48 42 local NEW_NOTAG=${NEW%%-*}
cannam@48 43 declare -a NEW_ARR=(${NEW_NOTAG//./ })
cannam@48 44 doit sed -i -re "
cannam@48 45 s/^#define CAPNP_VERSION_MAJOR [0-9]+\$/#define CAPNP_VERSION_MAJOR ${NEW_ARR[0]}/g;
cannam@48 46 s/^#define CAPNP_VERSION_MINOR [0-9]+\$/#define CAPNP_VERSION_MINOR ${NEW_ARR[1]}/g;
cannam@48 47 s/^#define CAPNP_VERSION_MICRO [0-9]+\$/#define CAPNP_VERSION_MICRO ${NEW_ARR[2]:-0}/g" \
cannam@48 48 c++/src/capnp/common.h
cannam@48 49
cannam@48 50 local NEW_COMBINED=$(( ${NEW_ARR[0]} * 1000000 + ${NEW_ARR[1]} * 1000 + ${NEW_ARR[2]:-0 }))
cannam@48 51 doit sed -i -re "s/^#if CAPNP_VERSION != [0-9]*\$/#if CAPNP_VERSION != $NEW_COMBINED/g" \
cannam@48 52 c++/src/*/*.capnp.h c++/src/*/*/*.capnp.h
cannam@48 53
cannam@48 54 doit git commit -a -m "Set $BRANCH_DESC version to $NEW."
cannam@48 55 }
cannam@48 56
cannam@48 57 build_packages() {
cannam@48 58 local VERSION=$1
cannam@48 59 local VERSION_BASE=${VERSION%%-*}
cannam@48 60
cannam@48 61 echo "========================================================================="
cannam@48 62 echo "Building C++ package..."
cannam@48 63 echo "========================================================================="
cannam@48 64 cd c++
cannam@48 65 doit autoreconf -i
cannam@48 66 doit ./configure
cannam@48 67 doit make -j6 distcheck
cannam@48 68 doit make dist-zip
cannam@48 69 doit mv capnproto-c++-$VERSION.tar.gz ..
cannam@48 70 doit mv capnproto-c++-$VERSION.zip ../capnproto-c++-win32-$VERSION.zip
cannam@48 71 doit make distclean
cannam@48 72 doit ./configure --host=i686-w64-mingw32 --with-external-capnp \
cannam@48 73 --disable-shared CXXFLAGS='-static-libgcc -static-libstdc++'
cannam@48 74 doit make -j6 capnp.exe capnpc-c++.exe capnpc-capnp.exe
cannam@48 75 doit i686-w64-mingw32-strip capnp.exe capnpc-c++.exe capnpc-capnp.exe
cannam@48 76 doit mkdir capnproto-tools-win32-$VERSION
cannam@48 77 doit mv capnp.exe capnpc-c++.exe capnpc-capnp.exe capnproto-tools-win32-$VERSION
cannam@48 78 doit zip -r ../capnproto-c++-win32-$VERSION.zip capnproto-tools-win32-$VERSION
cannam@48 79 doit make maintainer-clean
cannam@48 80 cd ..
cannam@48 81 }
cannam@48 82
cannam@48 83 cherry_pick() {
cannam@48 84 shift
cannam@48 85 if [ $# -gt 0 ]; then
cannam@48 86 echo "========================================================================="
cannam@48 87 echo "Cherry-picking fixes"
cannam@48 88 echo "========================================================================="
cannam@48 89 doit git cherry-pick "$@"
cannam@48 90 fi
cannam@48 91 }
cannam@48 92
cannam@48 93 done_banner() {
cannam@48 94 local VERSION=$1
cannam@48 95 local PUSH=$2
cannam@48 96 local FINAL=$3
cannam@48 97 echo "========================================================================="
cannam@48 98 echo "Done"
cannam@48 99 echo "========================================================================="
cannam@48 100 echo "Ready to release:"
cannam@48 101 echo " capnproto-c++-$VERSION.tar.gz"
cannam@48 102 echo " capnproto-c++-win32-$VERSION.zip"
cannam@48 103 echo "Don't forget to push changes:"
cannam@48 104 echo " git push origin $PUSH"
cannam@48 105
cannam@48 106 read -s -n 1 -p "Shall I push to git and upload to capnproto.org now? (y/N)" YESNO
cannam@48 107
cannam@48 108 echo
cannam@48 109 case "$YESNO" in
cannam@48 110 y | Y )
cannam@48 111 doit git push origin $PUSH
cannam@48 112 doit gcutil push fe capnproto-c++-$VERSION.tar.gz capnproto-c++-win32-$VERSION.zip \
cannam@48 113 /var/www/capnproto.org
cannam@48 114
cannam@48 115 if [ "$FINAL" = yes ]; then
cannam@48 116 echo "========================================================================="
cannam@48 117 echo "Publishing docs"
cannam@48 118 echo "========================================================================="
cannam@48 119 cd doc
cannam@48 120 doit ./push-site.sh
cannam@48 121 cd ..
cannam@48 122 echo "========================================================================="
cannam@48 123 echo "Really done"
cannam@48 124 echo "========================================================================="
cannam@48 125 fi
cannam@48 126
cannam@48 127 echo "Release is available at:"
cannam@48 128 echo " http://capnproto.org/capnproto-c++-$VERSION.tar.gz"
cannam@48 129 ;;
cannam@48 130 * )
cannam@48 131 echo "OK, do it yourself then."
cannam@48 132 ;;
cannam@48 133 esac
cannam@48 134 }
cannam@48 135
cannam@48 136 BRANCH=$(git rev-parse --abbrev-ref HEAD)
cannam@48 137
cannam@48 138 case "${1-}:$BRANCH" in
cannam@48 139 # ======================================================================================
cannam@48 140 candidate:master )
cannam@48 141 echo "New major release."
cannam@48 142
cannam@48 143 if [ $# -gt 1 ]; then
cannam@48 144 echo "Cannot cherry-pick when starting from master. Do it yourself." >&2
cannam@48 145 exit 1
cannam@48 146 fi
cannam@48 147
cannam@48 148 HEAD_VERSION=$(get_version '^[0-9]+[.][0-9]+-dev$')
cannam@48 149 RELEASE_VERSION=${HEAD_VERSION%%-dev}.0
cannam@48 150
cannam@48 151 echo "Version: $RELEASE_VERSION"
cannam@48 152
cannam@48 153 echo "========================================================================="
cannam@48 154 echo "Creating release branch..."
cannam@48 155 echo "========================================================================="
cannam@48 156 doit git checkout -b release-$RELEASE_VERSION
cannam@48 157
cannam@48 158 update_version $HEAD_VERSION $RELEASE_VERSION-rc1 "release branch"
cannam@48 159
cannam@48 160 build_packages $RELEASE_VERSION-rc1
cannam@48 161
cannam@48 162 echo "========================================================================="
cannam@48 163 echo "Updating version in master branch..."
cannam@48 164 echo "========================================================================="
cannam@48 165
cannam@48 166 doit git checkout master
cannam@48 167 declare -a VERSION_ARR=(${RELEASE_VERSION//./ })
cannam@48 168 NEXT_VERSION=${VERSION_ARR[0]}.$((VERSION_ARR[1] + 1))
cannam@48 169
cannam@48 170 update_version $HEAD_VERSION $NEXT_VERSION-dev "mainlaine"
cannam@48 171
cannam@48 172 done_banner $RELEASE_VERSION-rc1 "master release-$RELEASE_VERSION" no
cannam@48 173 ;;
cannam@48 174
cannam@48 175 # ======================================================================================
cannam@48 176 candidate:release-* )
cannam@48 177 echo "New release candidate."
cannam@48 178 OLD_VERSION=$(get_release_version)
cannam@48 179
cannam@48 180 if [[ $OLD_VERSION == *-rc* ]]; then
cannam@48 181 # New release candidate for existing release.
cannam@48 182
cannam@48 183 RC=${OLD_VERSION##*-rc}
cannam@48 184 BRANCH_VERSION=${OLD_VERSION%%-rc*}
cannam@48 185 RC_VERSION=$BRANCH_VERSION-rc$(( RC + 1 ))
cannam@48 186
cannam@48 187 echo "Version: $RC_VERSION"
cannam@48 188 else
cannam@48 189 # New micro release.
cannam@48 190
cannam@48 191 declare -a VERSION_ARR=(${OLD_VERSION//./ })
cannam@48 192 BRANCH_VERSION=${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((VERSION_ARR[2] + 1))
cannam@48 193
cannam@48 194 RC_VERSION=$BRANCH_VERSION-rc1
cannam@48 195 echo "Version: $RC_VERSION"
cannam@48 196
cannam@48 197 echo "========================================================================="
cannam@48 198 echo "Creating new release branch..."
cannam@48 199 echo "========================================================================="
cannam@48 200
cannam@48 201 doit git checkout -b release-$BRANCH_VERSION
cannam@48 202 fi
cannam@48 203
cannam@48 204 echo "========================================================================="
cannam@48 205 echo "Updating version number to $RC_VERSION..."
cannam@48 206 echo "========================================================================="
cannam@48 207
cannam@48 208 update_version $OLD_VERSION $RC_VERSION "release branch"
cannam@48 209
cannam@48 210 cherry_pick "$@"
cannam@48 211
cannam@48 212 build_packages $RC_VERSION
cannam@48 213
cannam@48 214 done_banner $RC_VERSION release-$BRANCH_VERSION no
cannam@48 215 ;;
cannam@48 216
cannam@48 217 # ======================================================================================
cannam@48 218 final:release-* )
cannam@48 219 echo "Final release."
cannam@48 220 OLD_VERSION=$(get_release_version)
cannam@48 221
cannam@48 222 if [[ $OLD_VERSION != *-rc* ]]; then
cannam@48 223 echo "Current version is already a final release. You need to create a new candidate first." >&2
cannam@48 224 exit 1
cannam@48 225 fi
cannam@48 226
cannam@48 227 if [ $# -gt 1 ]; then
cannam@48 228 echo "Cannot cherry-pick into final release. Make another candidate." >&2
cannam@48 229 exit 1
cannam@48 230 fi
cannam@48 231
cannam@48 232 RC=${OLD_VERSION##*-rc}
cannam@48 233 NEW_VERSION=${OLD_VERSION%%-rc*}
cannam@48 234
cannam@48 235 echo "Version: $NEW_VERSION"
cannam@48 236
cannam@48 237 echo "========================================================================="
cannam@48 238 echo "Updating version number to $NEW_VERSION..."
cannam@48 239 echo "========================================================================="
cannam@48 240
cannam@48 241 doit sed -i -re "s/capnproto-c[+][+]-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-c++-$NEW_VERSION/g" doc/install.md
cannam@48 242 doit sed -i -re "s/capnproto-c[+][+]-win32-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-c++-win32-$NEW_VERSION/g" doc/install.md
cannam@48 243 doit sed -i -re "s/capnproto-tools-win32-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-tools-win32-$NEW_VERSION/g" doc/install.md
cannam@48 244 update_version $OLD_VERSION $NEW_VERSION "release branch"
cannam@48 245
cannam@48 246 doit git tag v$NEW_VERSION
cannam@48 247
cannam@48 248 build_packages $NEW_VERSION
cannam@48 249
cannam@48 250 done_banner $NEW_VERSION "v$NEW_VERSION release-$NEW_VERSION" yes
cannam@48 251 ;;
cannam@48 252
cannam@48 253 # ======================================================================================
cannam@48 254 security:release-* )
cannam@48 255 echo "Security release."
cannam@48 256 OLD_VERSION=$(get_release_version)
cannam@48 257
cannam@48 258 if [[ $OLD_VERSION == *-rc* ]]; then
cannam@48 259 echo "Security releases don't have candidates." >&2
cannam@48 260 exit 1
cannam@48 261 fi
cannam@48 262
cannam@48 263 declare -a VERSION_ARR=(${OLD_VERSION//./ } 0)
cannam@48 264 NEW_VERSION=${VERSION_ARR[0]}.${VERSION_ARR[1]}.${VERSION_ARR[2]}.$((VERSION_ARR[3] + 1))
cannam@48 265
cannam@48 266 echo "Version: $NEW_VERSION"
cannam@48 267
cannam@48 268 echo "========================================================================="
cannam@48 269 echo "Updating version number to $NEW_VERSION..."
cannam@48 270 echo "========================================================================="
cannam@48 271
cannam@48 272 doit sed -i -re "s/capnproto-c[+][+]-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-c++-$NEW_VERSION/g" doc/install.md
cannam@48 273 doit sed -i -re "s/capnproto-c[+][+]-win32-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-c++-win32-$NEW_VERSION/g" doc/install.md
cannam@48 274 doit sed -i -re "s/capnproto-tools-win32-[0-9]+[.][0-9]+[.][0-9]+([.][0-9]+)?\>/capnproto-tools-win32-$NEW_VERSION/g" doc/install.md
cannam@48 275 update_version $OLD_VERSION $NEW_VERSION "release branch"
cannam@48 276
cannam@48 277 cherry_pick "$@"
cannam@48 278
cannam@48 279 doit git tag v$NEW_VERSION
cannam@48 280
cannam@48 281 build_packages $NEW_VERSION
cannam@48 282
cannam@48 283 done_banner $NEW_VERSION "v$NEW_VERSION release-$NEW_VERSION" yes
cannam@48 284 ;;
cannam@48 285
cannam@48 286 # ======================================================================================
cannam@48 287 retry:release-* )
cannam@48 288 echo "Retrying release."
cannam@48 289 OLD_VERSION=$(get_release_version)
cannam@48 290 echo "Version: $OLD_VERSION"
cannam@48 291
cannam@48 292 if [[ $OLD_VERSION == *-rc* ]]; then
cannam@48 293 # We can add more cherry-picks when retrying a candidate.
cannam@48 294 cherry_pick "$@"
cannam@48 295 else
cannam@48 296 if [ $# -gt 1 ]; then
cannam@48 297 echo "Cannot cherry-pick into final release. Make another candidate." >&2
cannam@48 298 exit 1
cannam@48 299 fi
cannam@48 300 fi
cannam@48 301
cannam@48 302 OLD_VERSION=$(get_release_version)
cannam@48 303 build_packages $OLD_VERSION
cannam@48 304
cannam@48 305 if [[ $OLD_VERSION == *-rc* ]]; then
cannam@48 306 BRANCH_VERSION=${OLD_VERSION%%-rc*}
cannam@48 307 done_banner $OLD_VERSION release-$BRANCH_VERSION no
cannam@48 308 else
cannam@48 309 doit git tag v$OLD_VERSION
cannam@48 310 done_banner $OLD_VERSION "v$OLD_VERSION release-$OLD_VERSION" no
cannam@48 311 fi
cannam@48 312 ;;
cannam@48 313
cannam@48 314 # ======================================================================================
cannam@48 315 *:master )
cannam@48 316 echo "Invalid command for mainline branch. Only command is 'candidate'." >&2
cannam@48 317 exit 1
cannam@48 318 ;;
cannam@48 319
cannam@48 320 *:release-* )
cannam@48 321 echo "Invalid command for release branch. Commands are 'candidate', 'final', and 'retry'." >&2
cannam@48 322 exit 1
cannam@48 323 ;;
cannam@48 324
cannam@48 325 * )
cannam@48 326 echo "Not a master or release branch." >&2
cannam@48 327 exit 1
cannam@48 328 ;;
cannam@48 329 esac