]>
Commit | Line | Data |
---|---|---|
b0b0b6a4 | 1 | #! /bin/sh |
a8d9bd81 | 2 | # Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. |
b0b0b6a4 RL |
3 | # |
4 | # Licensed under the Apache License 2.0 (the "License"). You may not use | |
5 | # this file except in compliance with the License. You can obtain a copy | |
6 | # in the file LICENSE in the source distribution or at | |
7 | # https://www.openssl.org/source/license.html | |
8 | ||
9 | # This will increase the version number and pre-release tag, according to the | |
10 | # current state of the source tree, and the function's first argument (called | |
11 | # |next| internally), which is how the caller tells what the next step should | |
12 | # be. | |
13 | # | |
14 | # The possible current source tree states are: | |
15 | # '' The source is in a released state. | |
16 | # 'dev' The source is in development. This is the normal state. | |
17 | # 'alpha', 'alphadev' | |
18 | # The source is undergoing a series of alpha releases. | |
19 | # 'beta', 'betadev' | |
20 | # The source is undergoing a series of beta releases. | |
21 | # These states are computed from $PRE_LABEL and $TYPE | |
22 | # | |
23 | # The possible |next| values are: | |
24 | # 'alpha' The source tree should move to an alpha release state, or | |
25 | # stay there. This trips the alpha / pre-release counter. | |
26 | # 'beta' The source tree should move to a beta release state, or | |
27 | # stay there. This trips the beta / pre-release counter. | |
28 | # 'final' The source tree should move to a final release (assuming it's | |
29 | # currently in one of the alpha or beta states). This turns | |
30 | # off the alpha or beta states. | |
31 | # '' The source tree should move to the next release. The exact | |
32 | # meaning depends on the current source state. It may mean | |
33 | # tripping the alpha / beta / pre-release counter, or increasing | |
34 | # the PATCH number. | |
35 | # | |
36 | # 'minor' The source tree should move to the next minor version. This | |
37 | # should only be used in the master branch when a release branch | |
38 | # has been created. | |
39 | # | |
40 | # This function expects there to be a function called fixup_version(), which | |
41 | # SHOULD take the |next| as first argument, and SHOULD increase the label | |
42 | # counter or the PATCH number accordingly, but only when the current | |
43 | # state is "in development". | |
44 | ||
45 | next_release_state () { | |
46 | local next="$1" | |
47 | local today="$(date '+%-d %b %Y')" | |
48 | local retry=true | |
49 | ||
50 | local before="$PRE_LABEL$TYPE" | |
51 | ||
52 | while $retry; do | |
53 | retry=false | |
54 | ||
55 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$before=$before" | |
56 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$next=$next" | |
57 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$MAJOR=$MAJOR" | |
58 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$MINOR=$MINOR" | |
59 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PATCH=$PATCH" | |
60 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$TYPE=$TYPE" | |
61 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PRE_LABEL=$PRE_LABEL" | |
62 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$PRE_NUM=$PRE_NUM" | |
63 | $DEBUG >&2 "DEBUG[next_release_state]: BEGIN: \$RELEASE_DATE=$RELEASE_DATE" | |
64 | ||
65 | case "$before+$next" in | |
66 | # MAKING ALPHA RELEASES ################################## | |
473664aa | 67 | |
b0b0b6a4 RL |
68 | # Alpha releases can't be made from beta versions or real versions |
69 | beta*+alpha | +alpha ) | |
70 | echo >&2 "Invalid state for an alpha release" | |
71 | echo >&2 "Try --beta or --final, or perhaps nothing" | |
72 | exit 1 | |
73 | ;; | |
74 | # For alpha releases, the tag update is dev => alpha or | |
75 | # alpha dev => alpha for the release itself, and | |
76 | # alpha => alpha dev for post release. | |
77 | dev+alpha | alphadev+alpha ) | |
78 | TYPE= | |
79 | RELEASE_DATE="$today" | |
80 | fixup_version "alpha" | |
81 | ;; | |
82 | alpha+alpha ) | |
83 | TYPE=dev | |
84 | RELEASE_DATE= | |
85 | fixup_version "alpha" | |
86 | ;; | |
87 | ||
88 | # MAKING BETA RELEASES ################################### | |
89 | ||
90 | # Beta releases can't be made from real versions | |
91 | +beta ) | |
92 | echo >&2 "Invalid state for beta release" | |
93 | echo >&2 "Try --final, or perhaps nothing" | |
94 | exit 1 | |
95 | ;; | |
96 | # For beta releases, the tag update is dev => beta1, or | |
97 | # alpha{n}-dev => beta1 when transitioning from alpha to | |
98 | # beta, or beta{n}-dev => beta{n} for the release itself, | |
99 | # or beta{n} => beta{n+1}-dev for post release. | |
100 | dev+beta | alphadev+beta | betadev+beta ) | |
101 | TYPE= | |
102 | RELEASE_DATE="$today" | |
103 | fixup_version "beta" | |
104 | ;; | |
105 | beta+beta ) | |
106 | TYPE=dev | |
107 | RELEASE_DATE= | |
108 | fixup_version "beta" | |
109 | ;; | |
110 | # It's possible to switch from alpha to beta in the | |
111 | # post release. That's what --next-beta does. | |
112 | alpha+beta ) | |
113 | TYPE=dev | |
114 | RELEASE_DATE= | |
115 | fixup_version "beta" | |
116 | ;; | |
117 | ||
118 | # MAKING FINAL RELEASES ################################## | |
119 | ||
120 | # Final releases can't be made from the main development branch | |
121 | dev+final) | |
122 | echo >&2 "Invalid state for final release" | |
123 | echo >&2 "This should have been preceded by an alpha or a beta release" | |
124 | exit 1 | |
125 | ;; | |
126 | # For final releases, the starting point must be a dev state | |
127 | alphadev+final | betadev+final ) | |
128 | TYPE= | |
129 | RELEASE_DATE="$today" | |
130 | fixup_version "final" | |
131 | ;; | |
132 | # The final step of a final release is to switch back to | |
133 | # development | |
134 | +final ) | |
135 | TYPE=dev | |
136 | RELEASE_DATE= | |
137 | fixup_version "final" | |
138 | ;; | |
139 | ||
140 | # SWITCHING TO THE NEXT MINOR RELEASE #################### | |
141 | ||
142 | *+minor ) | |
143 | TYPE=dev | |
144 | RELEASE_DATE= | |
145 | fixup_version "minor" | |
146 | ;; | |
147 | ||
148 | # MAKING DEFAULT RELEASES ################################ | |
149 | ||
150 | # If we're coming from a non-dev, simply switch to dev. | |
151 | # fixup_version() should trip up the PATCH number. | |
152 | + ) | |
153 | TYPE=dev | |
154 | fixup_version "" | |
155 | ;; | |
156 | ||
157 | # If we're coming from development, switch to non-dev, unless | |
158 | # the PATCH number is zero. If it is, we force the caller to | |
159 | # go through the alpha and beta release process. | |
160 | dev+ ) | |
161 | if [ "$PATCH" = "0" ]; then | |
162 | echo >&2 "Can't update PATCH version number from 0" | |
163 | echo >&2 "Please use --alpha or --beta" | |
164 | exit 1 | |
165 | fi | |
166 | TYPE= | |
167 | RELEASE_DATE="$today" | |
168 | fixup_version "" | |
169 | ;; | |
170 | ||
171 | # If we're currently in alpha, we continue with alpha, as if | |
172 | # the user had specified --alpha | |
173 | alpha*+ ) | |
174 | next=alpha | |
175 | retry=true | |
176 | ;; | |
177 | ||
178 | # If we're currently in beta, we continue with beta, as if | |
179 | # the user had specified --beta | |
180 | beta*+ ) | |
181 | next=beta | |
182 | retry=true | |
183 | ;; | |
184 | ||
185 | *) | |
186 | echo >&2 "Invalid combination of options" | |
187 | exit 1 | |
188 | ;; | |
189 | esac | |
190 | ||
191 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$before=$before" | |
192 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$next=$next" | |
193 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$MAJOR=$MAJOR" | |
194 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$MINOR=$MINOR" | |
195 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$PATCH=$PATCH" | |
196 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$TYPE=$TYPE" | |
197 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$PRE_LABEL=$PRE_LABEL" | |
198 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$PRE_NUM=$PRE_NUM" | |
199 | $DEBUG >&2 "DEBUG[next_release_state]: END: \$RELEASE_DATE=$RELEASE_DATE" | |
200 | done | |
201 | } |