annotate src/capnproto-git-20161025/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 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