1#!/usr/bin/env python3 2# 3# Copyright (c) 2021 Nordic Semiconductor ASA 4# 5# SPDX-License-Identifier: Apache-2.0 6 7from sys import version 8from unittest import TestCase, main 9from pathlib import Path 10from subprocess import Popen, PIPE 11from datetime import date, timedelta 12from re import escape 13 14p_script_dir = Path(__file__).absolute().parents[0] 15p_root = p_script_dir.parents[1] 16p_VERSION = p_root / "zcbor" / "VERSION" 17p_release_notes = p_root / "RELEASE_NOTES.md" 18p_migration_guide = p_root / "MIGRATION_GUIDE.md" 19p_HEAD_REF = p_script_dir / "HEAD_REF" 20 21 22class VersionTest(TestCase): 23 def test_version_num(self): 24 """For release branches - Test that all version numbers have been updated.""" 25 current_branch = Popen(['git', 'branch', '--show-current'], 26 stdout=PIPE).communicate()[0].decode("utf-8").strip() 27 if not current_branch: 28 current_branch = p_HEAD_REF.read_text(encoding="utf-8") 29 self.assertRegex( 30 current_branch, r"release/\d+\.\d+\.\d+", 31 "This test is meant to be run on a release branch on the form 'release/x.y.z'.") 32 33 version_number = current_branch.replace("release/", "") 34 version_number_no_bugfix = ".".join(version_number.split(".")[:-1]) 35 self.assertRegex( 36 version_number, r'\d+\.\d+\.(?!99)\d+', 37 "Releases cannot have the x.y.99 development bugfix release number.") 38 self.assertEqual( 39 version_number, p_VERSION.read_text(encoding="utf-8"), 40 f"{p_VERSION} has not been updated to the correct version number.") 41 tomorrow = date.today() + timedelta(days=1) 42 self.assertRegex( 43 p_release_notes.read_text(encoding="utf-8").splitlines()[0], 44 escape(r"# zcbor v. " + version_number) 45 + fr" \(({date.today():%Y-%m-%d}|{tomorrow:%Y-%m-%d})\)", 46 f"{p_release_notes} has not been updated with the correct version number or date.") 47 self.assertRegex( 48 p_migration_guide.read_text(encoding="utf-8").splitlines()[0], 49 escape(r"# zcbor v. " + version_number_no_bugfix) + r"\.\d", 50 f"{p_migration_guide} has not been updated with the correct minor/major version num.") 51 52 tags_stdout, _ = Popen(['git', 'tag'], stdout=PIPE).communicate() 53 tags = tags_stdout.decode("utf-8").strip().splitlines() 54 self.assertNotIn( 55 version_number, tags, 56 "Version number already exists as a tag. Has the version number been updated?") 57 58 59if __name__ == "__main__": 60 main() 61