Skip to content

Commit 184617e

Browse files
authored
Check to ensure major version matches current year. (#20601)
Fixes #20466
1 parent 328e511 commit 184617e

File tree

2 files changed

+60
-31
lines changed

2 files changed

+60
-31
lines changed

build/test_update_ext_version.py

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4+
import datetime
45
import json
56

67
import freezegun
78
import pytest
89
import update_ext_version
910

10-
TEST_DATETIME = "2022-03-14 01:23:45"
11+
12+
CURRENT_YEAR = datetime.datetime.now().year
13+
TEST_DATETIME = f"{CURRENT_YEAR}-03-14 01:23:45"
1114

1215
# The build ID is calculated via:
1316
# "1" + datetime.datetime.strptime(TEST_DATETIME,"%Y-%m-%d %H:%M:%S").strftime('%j%H%M')
@@ -31,14 +34,21 @@ def run_test(tmp_path, version, args, expected):
3134
@pytest.mark.parametrize(
3235
"version, args",
3336
[
34-
("1.0.0-rc", []),
35-
("1.1.0-rc", ["--release"]),
36-
("1.0.0-rc", ["--release", "--build-id", "-1"]),
37-
("1.0.0-rc", ["--release", "--for-publishing", "--build-id", "-1"]),
38-
("1.0.0-rc", ["--release", "--for-publishing", "--build-id", "999999999999"]),
39-
("1.1.0-rc", ["--build-id", "-1"]),
40-
("1.1.0-rc", ["--for-publishing", "--build-id", "-1"]),
41-
("1.1.0-rc", ["--for-publishing", "--build-id", "999999999999"]),
37+
("2000.1.0", []), # Wrong year for CalVer
38+
(f"{CURRENT_YEAR}.0.0-rc", []),
39+
(f"{CURRENT_YEAR}.1.0-rc", ["--release"]),
40+
(f"{CURRENT_YEAR}.0.0-rc", ["--release", "--build-id", "-1"]),
41+
(
42+
f"{CURRENT_YEAR}.0.0-rc",
43+
["--release", "--for-publishing", "--build-id", "-1"],
44+
),
45+
(
46+
f"{CURRENT_YEAR}.0.0-rc",
47+
["--release", "--for-publishing", "--build-id", "999999999999"],
48+
),
49+
(f"{CURRENT_YEAR}.1.0-rc", ["--build-id", "-1"]),
50+
(f"{CURRENT_YEAR}.1.0-rc", ["--for-publishing", "--build-id", "-1"]),
51+
(f"{CURRENT_YEAR}.1.0-rc", ["--for-publishing", "--build-id", "999999999999"]),
4252
],
4353
)
4454
def test_invalid_args(tmp_path, version, args):
@@ -49,56 +59,68 @@ def test_invalid_args(tmp_path, version, args):
4959
@pytest.mark.parametrize(
5060
"version, args, expected",
5161
[
52-
("1.1.0-rc", ["--build-id", "12345"], ("1", "1", "12345", "rc")),
53-
("1.0.0-rc", ["--release", "--build-id", "12345"], ("1", "0", "12345", "")),
5462
(
55-
"1.1.0-rc",
63+
f"{CURRENT_YEAR}.1.0-rc",
64+
["--build-id", "12345"],
65+
(f"{CURRENT_YEAR}", "1", "12345", "rc"),
66+
),
67+
(
68+
f"{CURRENT_YEAR}.0.0-rc",
69+
["--release", "--build-id", "12345"],
70+
(f"{CURRENT_YEAR}", "0", "12345", ""),
71+
),
72+
(
73+
f"{CURRENT_YEAR}.1.0-rc",
5674
["--for-publishing", "--build-id", "12345"],
57-
("1", "1", "12345", ""),
75+
(f"{CURRENT_YEAR}", "1", "12345", ""),
5876
),
5977
(
60-
"1.0.0-rc",
78+
f"{CURRENT_YEAR}.0.0-rc",
6179
["--release", "--for-publishing", "--build-id", "12345"],
62-
("1", "0", "12345", ""),
80+
(f"{CURRENT_YEAR}", "0", "12345", ""),
6381
),
6482
(
65-
"1.0.0-rc",
83+
f"{CURRENT_YEAR}.0.0-rc",
6684
["--release", "--build-id", "999999999999"],
67-
("1", "0", "999999999999", ""),
85+
(f"{CURRENT_YEAR}", "0", "999999999999", ""),
6886
),
6987
(
70-
"1.1.0-rc",
88+
f"{CURRENT_YEAR}.1.0-rc",
7189
["--build-id", "999999999999"],
72-
("1", "1", "999999999999", "rc"),
90+
(f"{CURRENT_YEAR}", "1", "999999999999", "rc"),
91+
),
92+
(
93+
f"{CURRENT_YEAR}.1.0-rc",
94+
[],
95+
(f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, "rc"),
7396
),
74-
("1.1.0-rc", [], ("1", "1", EXPECTED_BUILD_ID, "rc")),
7597
(
76-
"1.0.0-rc",
98+
f"{CURRENT_YEAR}.0.0-rc",
7799
["--release"],
78-
("1", "0", "0", ""),
100+
(f"{CURRENT_YEAR}", "0", "0", ""),
79101
),
80102
(
81-
"1.1.0-rc",
103+
f"{CURRENT_YEAR}.1.0-rc",
82104
["--for-publishing"],
83-
("1", "1", EXPECTED_BUILD_ID, ""),
105+
(f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, ""),
84106
),
85107
(
86-
"1.0.0-rc",
108+
f"{CURRENT_YEAR}.0.0-rc",
87109
["--release", "--for-publishing"],
88-
("1", "0", "0", ""),
110+
(f"{CURRENT_YEAR}", "0", "0", ""),
89111
),
90112
(
91-
"1.0.0-rc",
113+
f"{CURRENT_YEAR}.0.0-rc",
92114
["--release"],
93-
("1", "0", "0", ""),
115+
(f"{CURRENT_YEAR}", "0", "0", ""),
94116
),
95117
(
96-
"1.1.0-rc",
118+
f"{CURRENT_YEAR}.1.0-rc",
97119
[],
98-
("1", "1", EXPECTED_BUILD_ID, "rc"),
120+
(f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, "rc"),
99121
),
100122
],
101123
)
102-
@freezegun.freeze_time("2022-03-14 01:23:45")
124+
@freezegun.freeze_time(f"{CURRENT_YEAR}-03-14 01:23:45")
103125
def test_update_ext_version(tmp_path, version, args, expected):
104126
run_test(tmp_path, version, args, expected)

build/update_ext_version.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ def main(package_json: pathlib.Path, argv: Sequence[str]) -> None:
6969

7070
major, minor, micro, suffix = parse_version(package["version"])
7171

72+
current_year = datetime.datetime.now().year
73+
if int(major) != current_year:
74+
raise ValueError(
75+
f"Major version [{major}] must be the current year [{current_year}].",
76+
f"If changing major version after new year's, change to {current_year}.1.0",
77+
)
78+
7279
if args.release and not is_even(minor):
7380
raise ValueError(
7481
f"Release version should have EVEN numbered minor version: {package['version']}"

0 commit comments

Comments
 (0)