mirror of
https://github.com/openssl/openssl.git
synced 2024-12-21 06:09:35 +08:00
a8d9bd8114
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16534)
(cherry picked from commit 54d987b92c
)
202 lines
8.0 KiB
Bash
202 lines
8.0 KiB
Bash
#! /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
|
|
}
|