release-tools/release.sh et al: introduce RELEASE_FILES and use it
authorRichard Levitte <levitte@openssl.org>
Tue, 28 Mar 2023 05:46:32 +0000 (07:46 +0200)
committerRichard Levitte <levitte@openssl.org>
Tue, 16 May 2023 03:54:35 +0000 (05:54 +0200)
This is a variable that holds a list of files other than the version file,
that need to be touched up with release information.  This variable is set
by the version functions, as the files are varied, depending on the versio
scheme and series.

We also add the fixup files for all possible release files.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/tools/pull/140)

release-tools/release-aux/fixup-CHANGES-postrelease.pl [new file with mode: 0644]
release-tools/release-aux/fixup-CHANGES-release.pl [new file with mode: 0644]
release-tools/release-aux/fixup-NEWS-postrelease.pl [new file with mode: 0644]
release-tools/release-aux/fixup-NEWS-release.pl [new file with mode: 0644]
release-tools/release-aux/fixup-README-postrelease.pl [new file with mode: 0644]
release-tools/release-aux/fixup-README-release.pl [new file with mode: 0644]
release-tools/release-aux/fixup-openssl.spec-postrelease.pl [new file with mode: 0644]
release-tools/release-aux/fixup-openssl.spec-release.pl [new file with mode: 0644]
release-tools/release-aux/release-version-fn.sh
release-tools/release-aux/test_suite.sh
release-tools/release.sh

diff --git a/release-tools/release-aux/fixup-CHANGES-postrelease.pl b/release-tools/release-aux/fixup-CHANGES-postrelease.pl
new file mode 100644 (file)
index 0000000..f7ec8d8
--- /dev/null
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl -pi
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+    our $PREV_RELEASE_DATE = $ENV{PREV_RELEASE_DATE} || 'xx XXX xxxx';
+    our $PREV_RELEASE_TEXT = $ENV{PREV_RELEASE_TEXT};
+}
+
+if (/^ Changes between (\S+) and (\S+) \[xx XXX xxxx\]/
+    && $count-- > 0) {
+    my $v1 = $1;
+    my $v2 = $PREV_RELEASE_TEXT || $2;
+
+    $_ = <<_____
+ Changes between $v2 and $RELEASE_TEXT [xx XXX xxxx]
+
+ *)
+
+ Changes between $v1 and $v2 [$PREV_RELEASE_DATE]
+_____
+}
diff --git a/release-tools/release-aux/fixup-CHANGES-release.pl b/release-tools/release-aux/fixup-CHANGES-release.pl
new file mode 100644 (file)
index 0000000..9bee525
--- /dev/null
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+    our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^ Changes between (\S+) and (\S+) \[xx XXX xxxx\]/
+    && $count-- > 0) {
+    $_ = " Changes between $1 and $RELEASE_TEXT [$RELEASE_DATE]$'";
+}
diff --git a/release-tools/release-aux/fixup-NEWS-postrelease.pl b/release-tools/release-aux/fixup-NEWS-postrelease.pl
new file mode 100644 (file)
index 0000000..1048c25
--- /dev/null
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl -pi
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+    our $PREV_RELEASE_DATE = $ENV{PREV_RELEASE_DATE} || 'under development';
+    our $PREV_RELEASE_TEXT = $ENV{PREV_RELEASE_TEXT};
+}
+
+if (/^  Major changes between OpenSSL (\S+) and OpenSSL (\S+) \[under development\]/
+    && $count-- > 0) {
+    my $v1 = $1;
+    my $v2 = $PREV_RELEASE_TEXT || $2;
+
+    $_ = <<_____
+  Major changes between OpenSSL $v2 and OpenSSL $RELEASE_TEXT [under development]
+
+      o
+
+  Major changes between OpenSSL $v1 and OpenSSL $v2 [$PREV_RELEASE_DATE]
+_____
+}
diff --git a/release-tools/release-aux/fixup-NEWS-release.pl b/release-tools/release-aux/fixup-NEWS-release.pl
new file mode 100644 (file)
index 0000000..4d19160
--- /dev/null
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+    our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^  Major changes between OpenSSL (\S+) and OpenSSL (\S+) \[under development\]/
+    && $count-- > 0) {
+    $_ = "  Major changes between OpenSSL $1 and OpenSSL $RELEASE_TEXT [$RELEASE_DATE]$'";
+}
diff --git a/release-tools/release-aux/fixup-README-postrelease.pl b/release-tools/release-aux/fixup-README-postrelease.pl
new file mode 100644 (file)
index 0000000..9ed4d70
--- /dev/null
@@ -0,0 +1,10 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE = $ENV{RELEASE};
+}
+
+if (/^ OpenSSL.*$/ && $count-- > 0) {
+    $_ = " OpenSSL $RELEASE$'";
+}
diff --git a/release-tools/release-aux/fixup-README-release.pl b/release-tools/release-aux/fixup-README-release.pl
new file mode 100644 (file)
index 0000000..5a6f9e7
--- /dev/null
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE = $ENV{RELEASE};
+    our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+    our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^ OpenSSL.*$/ && $count-- > 0) {
+    $_ = " OpenSSL $RELEASE $RELEASE_DATE$'";
+}
diff --git a/release-tools/release-aux/fixup-openssl.spec-postrelease.pl b/release-tools/release-aux/fixup-openssl.spec-postrelease.pl
new file mode 100644 (file)
index 0000000..8c567b3
--- /dev/null
@@ -0,0 +1,13 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE = $ENV{RELEASE};
+    our $ispre = $RELEASE =~ /-pre/;
+
+    $RELEASE =~ s/-dev$//;
+}
+
+if (!$ispre && /^Version:\s+(\S+)$/ && $count-- > 0) {
+    $_ = "Version: $RELEASE$'";
+}
diff --git a/release-tools/release-aux/fixup-openssl.spec-release.pl b/release-tools/release-aux/fixup-openssl.spec-release.pl
new file mode 100644 (file)
index 0000000..8c567b3
--- /dev/null
@@ -0,0 +1,13 @@
+#! /usr/bin/env perl -p
+
+BEGIN {
+    our $count = 1;              # Only the first one
+    our $RELEASE = $ENV{RELEASE};
+    our $ispre = $RELEASE =~ /-pre/;
+
+    $RELEASE =~ s/-dev$//;
+}
+
+if (!$ispre && /^Version:\s+(\S+)$/ && $count-- > 0) {
+    $_ = "Version: $RELEASE$'";
+}
index ed856abafd9420d32d7f551fe9e55db05707b353..78730a107ac8e4b092dc689927b54291669444eb 100644 (file)
@@ -13,6 +13,9 @@
 #                       is found and should be stored.  If this is empty,
 #                       no version information was found, and the release
 #                       should be aborted.
+# RELEASE_FILES         The set of files that must be manipulated during a
+#                       release, separated by semicolons.  Other scripts are
+#                       used to actually manipulate these files.
 #
 # MAJOR, MINOR, FIX, PATCH
 #                       The three or four parts of a version number, depending
@@ -73,6 +76,8 @@ get_version () {
     _PRE_RELEASE_TAG=
     _BUILD_METADATA=
 
+    RELEASE_FILES=
+
     # Detect possible version files.
     # OpenSSL 3.0 and on use VERSION.dat.
     # OpenSSL 1.1.y use include/openssl/opensslv.h
@@ -115,6 +120,7 @@ get_version () {
                                  -e 's|^dev$|0|' \
                                  -e 's|^alpha([0-9]+)(-(dev))?$|\1|' \
                                  -e 's|^beta([0-9]+)(-(dev))?$|\1|' )
+            RELEASE_FILES='CHANGES.md;NEWS.md'
             ;;
         */opensslv.h )
             # opensslv.h is a bit more difficult to get version data from,
@@ -180,13 +186,20 @@ if (m|^[[:space:]]*#[[:space:]]*define[[:space:]]+OPENSSL_VERSION_NUMBER[[:space
             TYPE=$PRE_RELEASE_TAG
             PRE_LABEL=
             PRE_NUM=0
+
+            if [ -n "$(git ls-files openssl.spec)" ]; then
+                # 1.0.x
+                RELEASE_FILES='README;CHANGES;NEWS;openssl.spec'
+            else
+                # 1.1.x
+                RELEASE_FILES='README;CHANGES;NEWS'
+            fi
             ;;
         * )
             ;;
     esac
 }
 
-# $1 is one of "alpha", "beta", "final", "", or "minor"
 fixup_version () {
     local new_label="$1"
 
index a7d5c0574caab930ca779dc213e18a8c64e6e98b..42862c47bfe33278935f1b23c710e28017c522bd 100755 (executable)
@@ -71,6 +71,7 @@ expected=(
     [FULL_VERSION]=3.2.0-dev
     [PRE_RELEASE_TAG]=dev
     [SHLIB_VERSION]=3
+    [RELEASE_FILES]='CHANGES.md;NEWS.md'
 )
 get_version
 check
@@ -216,6 +217,7 @@ expected=(
     [FULL_VERSION]=1.0.2zh-dev
     [PRE_RELEASE_TAG]=dev
     [SHLIB_VERSION]=1.0.0
+    [RELEASE_FILES]='README;CHANGES;NEWS;openssl.spec'
 )
 get_version
 check
index 06307cf65c4a3a263ef442229435d2045948de66..e848341c79bb86be3d6885c3ff8aef209a0aaf6b 100755 (executable)
@@ -247,6 +247,26 @@ else
 fi
 orig_HEAD=$(git rev-parse HEAD)
 
+# Make sure that we have fixup scripts for all the files that need
+# to be modified for a release.  We trust this, because we're not
+# going to change versioning scheme in the middle of a release.
+save_IFS=$IFS
+IFS=';'
+found=true
+for fn in $RELEASE_FILES; do
+    for file in "$RELEASE_AUX/fixup-$fn-release.pl" \
+                "$RELEASE_AUX/fixup-$fn-postrelease.pl"; do
+        if ! [ -f "$file" ]; then
+            echo >&2 "'$file' is missing"
+            found=false
+        fi
+    done
+done
+IFS=$save_IFS
+if ! $found; then
+    exit 1
+fi
+
 # Initialize #########################################################
 
 echo "== Initializing work tree"
@@ -377,12 +397,15 @@ tag="$(std_tag_name)"
 $VERBOSE "== Updated version information to $release"
 
 $VERBOSE "== Updating files with release date for $release : $RELEASE_DATE"
-for fixup in "$RELEASE_AUX"/fixup-*-release.pl; do
-    file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-release\.pl$||')"
-    $VERBOSE "> $file"
-    RELEASE="$release" RELEASE_TEXT="$release_text" RELEASE_DATE="$RELEASE_DATE" \
-        perl -pi $fixup $file
-done
+(
+    IFS=';'
+    for file in $RELEASE_FILES; do
+        fixup="$RELEASE_AUX/fixup-$(basename "$file")-release.pl"
+        $VERBOSE "> $file"
+        RELEASE="$release" RELEASE_TEXT="$release_text" RELEASE_DATE="$RELEASE_DATE" \
+               perl -pi $fixup $file
+    done
+)
 
 $VERBOSE "== Committing updates and tagging"
 git add -u
@@ -477,14 +500,17 @@ fi
 $VERBOSE "== Updated version information to $release"
 
 $VERBOSE "== Updating files for $release :"
-for fixup in "$RELEASE_AUX"/fixup-*-postrelease.pl; do
-    file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-postrelease\.pl$||')"
-    $VERBOSE "> $file"
-    RELEASE="$release" RELEASE_TEXT="$release_text" \
-        PREV_RELEASE_TEXT="$prev_release_text" \
-        PREV_RELEASE_DATE="$prev_release_date" \
-        perl -pi $fixup $file
-done
+(
+    IFS=';'
+    for file in $RELEASE_FILES; do
+        fixup="$RELEASE_AUX/fixup-$(basename "$file")-postrelease.pl"
+        $VERBOSE "> $file"
+        RELEASE="$release" RELEASE_TEXT="$release_text" \
+               PREV_RELEASE_TEXT="$prev_release_text" \
+               PREV_RELEASE_DATE="$prev_release_date" \
+               perl -pi $fixup $file
+    done
+)
 
 $VERBOSE "== Committing updates"
 git add -u
@@ -510,12 +536,15 @@ if $do_branch; then
     $VERBOSE "== Updated version information to $release"
 
     $VERBOSE "== Updating files for $release :"
-    for fixup in "$RELEASE_AUX"/fixup-*-postrelease.pl; do
-        file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-postrelease\.pl$||')"
-        $VERBOSE "> $file"
-        RELEASE="$release" RELEASE_TEXT="$release_text" \
-            perl -pi $fixup $file
-    done
+    (
+        IFS=';'
+        for file in $RELEASE_FILES; do
+            fixup="$RELEASE_AUX/fixup-$(basename "$file")-postrelease.pl"
+            $VERBOSE "> $file"
+            RELEASE="$release" RELEASE_TEXT="$release_text" \
+                   perl -pi $fixup $file
+        done
+    )
 
     $VERBOSE "== Committing updates"
     git add -u