annotate src/capnproto-0.6.0/release.sh @ 83:ae30d91d2ffe

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