123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #! /bin/sh
- # Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
- #
- # Licensed under the Apache License 2.0 (the "License"). You may not use
- # this file except in compliance with the License. You can obtain a copy
- # in the file LICENSE in the source distribution or at
- # https://www.openssl.org/source/license.html
- # This will increase the version number and pre-release tag, according to the
- # current state of the source tree, and the function's first argument (called
- # |next| internally), which is how the caller tells what the next step should
- # be.
- #
- # The possible current source tree states are:
- # '' The source is in a released state.
- # 'dev' The source is in development. This is the normal state.
- # 'alpha', 'alphadev'
- # The source is undergoing a series of alpha releases.
- # 'beta', 'betadev'
- # The source is undergoing a series of beta releases.
- # These states are computed from $PRE_LABEL and $TYPE
- #
- # The possible |next| values are:
- # 'alpha' The source tree should move to an alpha release state, or
- # stay there. This trips the alpha / pre-release counter.
- # 'beta' The source tree should move to a beta release state, or
- # stay there. This trips the beta / pre-release counter.
- # 'final' The source tree should move to a final release (assuming it's
- # currently in one of the alpha or beta states). This turns
- # off the alpha or beta states.
- # '' The source tree should move to the next release. The exact
- # meaning depends on the current source state. It may mean
- # tripping the alpha / beta / pre-release counter, or increasing
- # the PATCH number.
- #
- # 'minor' The source tree should move to the next minor version. This
- # should only be used in the master branch when a release branch
- # has been created.
- #
- # This function expects there to be a function called fixup_version(), which
- # SHOULD take the |next| as first argument, and SHOULD increase the label
- # counter or the PATCH number accordingly, but only when the current
- # state is "in development".
- next_release_state () {
- local next="$1"
- local today="$(date '+%-d %b %Y')"
- local retry=true
- local before="$PRE_LABEL$TYPE"
- while $retry; do
- retry=false
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$before=$before"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$next=$next"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$MAJOR=$MAJOR"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$MINOR=$MINOR"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PATCH=$PATCH"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$TYPE=$TYPE"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PRE_LABEL=$PRE_LABEL"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PRE_NUM=$PRE_NUM"
- $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$RELEASE_DATE=$RELEASE_DATE"
- case "$before+$next" in
- # MAKING ALPHA RELEASES ##################################
- # Alpha releases can't be made from beta versions or real versions
- beta*+alpha | +alpha )
- echo >&2 "Invalid state for an alpha release"
- echo >&2 "Try --beta or --final, or perhaps nothing"
- exit 1
- ;;
- # For alpha releases, the tag update is dev => alpha or
- # alpha dev => alpha for the release itself, and
- # alpha => alpha dev for post release.
- dev+alpha | alphadev+alpha )
- TYPE=
- RELEASE_DATE="$today"
- fixup_version "alpha"
- ;;
- alpha+alpha )
- TYPE=dev
- RELEASE_DATE=
- fixup_version "alpha"
- ;;
- # MAKING BETA RELEASES ###################################
- # Beta releases can't be made from real versions
- +beta )
- echo >&2 "Invalid state for beta release"
- echo >&2 "Try --final, or perhaps nothing"
- exit 1
- ;;
- # For beta releases, the tag update is dev => beta1, or
- # alpha{n}-dev => beta1 when transitioning from alpha to
- # beta, or beta{n}-dev => beta{n} for the release itself,
- # or beta{n} => beta{n+1}-dev for post release.
- dev+beta | alphadev+beta | betadev+beta )
- TYPE=
- RELEASE_DATE="$today"
- fixup_version "beta"
- ;;
- beta+beta )
- TYPE=dev
- RELEASE_DATE=
- fixup_version "beta"
- ;;
- # It's possible to switch from alpha to beta in the
- # post release. That's what --next-beta does.
- alpha+beta )
- TYPE=dev
- RELEASE_DATE=
- fixup_version "beta"
- ;;
- # MAKING FINAL RELEASES ##################################
- # Final releases can't be made from the main development branch
- dev+final)
- echo >&2 "Invalid state for final release"
- echo >&2 "This should have been preceded by an alpha or a beta release"
- exit 1
- ;;
- # For final releases, the starting point must be a dev state
- alphadev+final | betadev+final )
- TYPE=
- RELEASE_DATE="$today"
- fixup_version "final"
- ;;
- # The final step of a final release is to switch back to
- # development
- +final )
- TYPE=dev
- RELEASE_DATE=
- fixup_version "final"
- ;;
- # SWITCHING TO THE NEXT MINOR RELEASE ####################
- *+minor )
- TYPE=dev
- RELEASE_DATE=
- fixup_version "minor"
- ;;
- # MAKING DEFAULT RELEASES ################################
- # If we're coming from a non-dev, simply switch to dev.
- # fixup_version() should trip up the PATCH number.
- + )
- TYPE=dev
- fixup_version ""
- ;;
- # If we're coming from development, switch to non-dev, unless
- # the PATCH number is zero. If it is, we force the caller to
- # go through the alpha and beta release process.
- dev+ )
- if [ "$PATCH" = "0" ]; then
- echo >&2 "Can't update PATCH version number from 0"
- echo >&2 "Please use --alpha or --beta"
- exit 1
- fi
- TYPE=
- RELEASE_DATE="$today"
- fixup_version ""
- ;;
- # If we're currently in alpha, we continue with alpha, as if
- # the user had specified --alpha
- alpha*+ )
- next=alpha
- retry=true
- ;;
- # If we're currently in beta, we continue with beta, as if
- # the user had specified --beta
- beta*+ )
- next=beta
- retry=true
- ;;
- *)
- echo >&2 "Invalid combination of options"
- exit 1
- ;;
- esac
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$before=$before"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$next=$next"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$MAJOR=$MAJOR"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$MINOR=$MINOR"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$PATCH=$PATCH"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$TYPE=$TYPE"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$PRE_LABEL=$PRE_LABEL"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$PRE_NUM=$PRE_NUM"
- $DEBUG >&2 "DEBUG[next_release_state]: END: \$RELEASE_DATE=$RELEASE_DATE"
- done
- }
|