# HG changeset patch
# User Georges Racinet <georges.racinet@octobus.net>
# Date 1642066687 -3600
#      Thu Jan 13 10:38:07 2022 +0100
# Node ID 436badcbc7bfacfda26c65c9f8c028f0ec04a78c
# Parent  7dc88f9ae50270bf97e6b5e18a8e72eacb500dc5
push-release: option for non-tag builds

diff --git a/push-release b/push-release
--- a/push-release
+++ b/push-release
@@ -30,6 +30,10 @@
 parser.add_argument('-s', '--simulate', action='store_true')
 parser.add_argument('-y', '--no-confirmation', action='store_true')
 parser.add_argument('-l', '--logging-level', default='info')
+parser.add_argument('--arbitrary-build-number', action='store_true',
+                    help="Accept any build number, not only numeric ones. "
+                    "(useful if a tag has not been interpreted but it doesn't "
+                    "matter much, such as for a release candidate.")
 parser.add_argument('series', type=series,
                     help="Used to derive the appropriate Docker rolling "
                     "tags (latest and testing). "
@@ -54,7 +58,7 @@
     return '%s-py%d' % (default, py_version)
 
 
-def read_check_version(stable_series):
+def read_check_version(stable_series, validate_build_number=True):
     """Read version files and check consistency."""
     img = testing_img(stable_series, py_version=None)
     logger.info("Reading version metadata from image %r", img)
@@ -73,10 +77,11 @@
     assert release[0].rstrip() == "RELEASE_PACKAGE=heptapod"
     release_version, build_number = release[1].rstrip().rsplit('-', 1)
     assert release_version.replace('~', '') == "RELEASE_VERSION=" + version
-    try:
-        build_number = int(build_number)
-    except TypeError:
-        raise InvalidBuildNumber(release[1])
+    if validate_build_number:
+        try:
+            int(build_number)
+        except TypeError:
+            raise InvalidBuildNumber(release[1])
 
     return archival, version, build_number
 
@@ -106,7 +111,8 @@
 
 try:
     archival, version, build_nr = read_check_version(
-        stable_series=stable_series)
+        stable_series=stable_series,
+        validate_build_number=not parsed_args.arbitrary_build_number)
 except InvalidBuildNumber as exc:
     logger.error("Invalid build number in /RELEASE file: %r. "
                  "Bailing", **exc.args)