Skip to content

Commit 285ba41

Browse files
committed
refactor of the code
1 parent 2317dc5 commit 285ba41

16 files changed

+147
-130
lines changed

scripts/release/build/build_info.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import Dict
33

44
from scripts.release.build.build_scenario import BuildScenario
5+
from scripts.release.constants import DEFAULT_REPOSITORY_PATH
56

67

78
class ImageInfo(dict):
@@ -60,7 +61,9 @@ def to_json(self):
6061
}
6162

6263

63-
def load_build_info(scenario: BuildScenario, version: str) -> BuildInfo:
64+
def load_build_info(scenario: BuildScenario, repository_path: str = DEFAULT_REPOSITORY_PATH) -> BuildInfo:
65+
version = scenario.get_version(repository_path)
66+
6467
with open("build_info.json", "r") as f:
6568
build_info = json.load(f)
6669

scripts/release/build/build_info_test.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1+
import os
2+
13
from scripts.release.build.build_info import (
24
BinaryInfo,
35
BuildInfo,
46
HelmChartInfo,
57
ImageInfo,
68
load_build_info,
79
)
8-
from scripts.release.version import BuildScenario
10+
from git import Repo
11+
from scripts.release.build.build_scenario import BuildScenario
912

1013

11-
def test_load_build_info_patch():
14+
def test_load_build_info_patch(git_repo: Repo):
1215
build_id = "688364423f9b6c00072b3556"
16+
os.environ["BUILD_ID"] = build_id
1317

1418
expected_build_info = BuildInfo(
1519
images={
@@ -64,74 +68,78 @@ def test_load_build_info_patch():
6468
},
6569
)
6670

67-
build_info = load_build_info(BuildScenario.PATCH, build_id)
71+
build_info = load_build_info(BuildScenario.PATCH, git_repo.working_dir)
6872

6973
assert build_info.__dict__() == expected_build_info.__dict__()
7074

7175

72-
def test_load_build_info_staging():
73-
commit_sha = "05029e97"
76+
def test_load_build_info_staging(git_repo: Repo):
77+
initial_commit = list(git_repo.iter_commits(reverse=True))[4]
78+
git_repo.git.checkout(initial_commit)
79+
expecter_commit_sha = initial_commit.hexsha[:8]
7480

7581
expected_build_info = BuildInfo(
7682
images={
7783
"mongodbOperator": ImageInfo(
7884
repository="quay.io/mongodb/mongodb-kubernetes-stg",
7985
platforms=["linux/arm64", "linux/amd64"],
80-
version=commit_sha,
86+
version=expecter_commit_sha,
8187
),
8288
"initDatabase": ImageInfo(
8389
repository="quay.io/mongodb/mongodb-kubernetes-init-database-stg",
8490
platforms=["linux/arm64", "linux/amd64"],
85-
version=commit_sha,
91+
version=expecter_commit_sha,
8692
),
8793
"initAppDb": ImageInfo(
8894
repository="quay.io/mongodb/mongodb-kubernetes-init-appdb-stg",
8995
platforms=["linux/arm64", "linux/amd64"],
90-
version=commit_sha,
96+
version=expecter_commit_sha,
9197
),
9298
"initOpsManager": ImageInfo(
9399
repository="quay.io/mongodb/mongodb-kubernetes-init-ops-manager-stg",
94100
platforms=["linux/arm64", "linux/amd64"],
95-
version=commit_sha,
101+
version=expecter_commit_sha,
96102
),
97103
"database": ImageInfo(
98104
repository="quay.io/mongodb/mongodb-kubernetes-database-stg",
99105
platforms=["linux/arm64", "linux/amd64"],
100-
version=commit_sha,
106+
version=expecter_commit_sha,
101107
),
102108
"readinessprobe": ImageInfo(
103109
repository="quay.io/mongodb/mongodb-kubernetes-readinessprobe-stg",
104110
platforms=["linux/arm64", "linux/amd64"],
105-
version=commit_sha,
111+
version=expecter_commit_sha,
106112
),
107113
"operator-version-upgrade-post-start-hook": ImageInfo(
108114
repository="quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook-stg",
109115
platforms=["linux/arm64", "linux/amd64"],
110-
version=commit_sha,
116+
version=expecter_commit_sha,
111117
),
112118
},
113119
binaries={
114120
"kubectl-mongodb": BinaryInfo(
115121
s3_store="s3://kubectl-mongodb/staging",
116122
platforms=["darwin/amd64", "darwin/arm64", "linux/amd64", "linux/arm64"],
117-
version=commit_sha,
123+
version=expecter_commit_sha,
118124
)
119125
},
120126
helm_charts={
121127
"mongodb-kubernetes": HelmChartInfo(
122128
repository="quay.io/mongodb/helm-charts-stg",
123-
version=commit_sha,
129+
version=expecter_commit_sha,
124130
)
125131
},
126132
)
127133

128-
build_info = load_build_info(BuildScenario.STAGING, commit_sha)
134+
build_info = load_build_info(BuildScenario.STAGING, git_repo.working_dir)
129135

130136
assert build_info.__dict__() == expected_build_info.__dict__()
131137

132138

133-
def test_load_build_info_release(readinessprobe_version, operator_version_upgrade_post_start_hook_version):
134-
version = "1.2.3"
139+
def test_load_build_info_release(git_repo: Repo, readinessprobe_version: str,
140+
operator_version_upgrade_post_start_hook_version: str):
141+
version = "1.2.0"
142+
git_repo.git.checkout(version)
135143

136144
expected_build_info = BuildInfo(
137145
images={
@@ -175,7 +183,7 @@ def test_load_build_info_release(readinessprobe_version, operator_version_upgrad
175183
"kubectl-mongodb": BinaryInfo(
176184
s3_store="s3://kubectl-mongodb/prod",
177185
platforms=["darwin/amd64", "darwin/arm64", "linux/amd64", "linux/arm64"],
178-
version="1.2.3",
186+
version=version,
179187
)
180188
},
181189
helm_charts={
@@ -186,6 +194,6 @@ def test_load_build_info_release(readinessprobe_version, operator_version_upgrad
186194
},
187195
)
188196

189-
build_info = load_build_info(BuildScenario.RELEASE, version)
197+
build_info = load_build_info(BuildScenario.RELEASE, git_repo.working_dir)
190198

191199
assert build_info.__dict__() == expected_build_info.__dict__()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,33 @@
1+
import os
12
from enum import StrEnum
3+
from git import Repo
4+
5+
from scripts.release.constants import get_initial_commit_sha, get_initial_version, DEFAULT_CHANGELOG_PATH, \
6+
DEFAULT_REPOSITORY_PATH
7+
from scripts.release.version import calculate_next_version
8+
9+
COMMIT_SHA_LENGTH = 8
210

311

412
class BuildScenario(StrEnum):
513
RELEASE = "release" # Official release triggered by a git tag
614
PATCH = "patch" # CI build for a patch/pull request
715
STAGING = "staging" # CI build from a merge to the master
16+
17+
def get_version(self, repository_path: str) -> str:
18+
match self:
19+
case BuildScenario.PATCH:
20+
build_id = os.environ["BUILD_ID"]
21+
if not build_id:
22+
raise ValueError(f"BUILD_ID environment variable is not set for `{self}` build scenario")
23+
return build_id
24+
case BuildScenario.STAGING:
25+
repo = Repo(repository_path)
26+
return repo.head.object.hexsha[:COMMIT_SHA_LENGTH]
27+
case BuildScenario.RELEASE:
28+
repo = Repo(repository_path)
29+
initial_commit_sha = get_initial_commit_sha()
30+
initial_version = get_initial_version()
31+
return calculate_next_version(repo, DEFAULT_CHANGELOG_PATH, initial_commit_sha, initial_version)
32+
33+
raise ValueError(f"Unknown build scenario: {self}")
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import os
2+
3+
from git import Repo
4+
5+
from scripts.release.build.build_scenario import BuildScenario
6+
7+
8+
class TestGetVersionForBuildScenario:
9+
10+
def test_patch_build_scenario(self, git_repo: Repo):
11+
os.environ["BUILD_ID"] = "688364423f9b6c00072b3556"
12+
expected_version = os.environ["BUILD_ID"]
13+
14+
version = BuildScenario.PATCH.get_version(repository_path=git_repo.working_dir)
15+
16+
assert version == expected_version
17+
18+
def test_staging_build_scenario(self, git_repo: Repo):
19+
initial_commit = list(git_repo.iter_commits(reverse=True))[4]
20+
git_repo.git.checkout(initial_commit)
21+
expected_version = initial_commit.hexsha[:8]
22+
23+
version = BuildScenario.STAGING.get_version(repository_path=git_repo.working_dir)
24+
25+
assert version == expected_version
26+
27+
def test_release_build_scenario(self, git_repo: Repo):
28+
git_repo.git.checkout("1.2.0")
29+
30+
version = BuildScenario.RELEASE.get_version(repository_path=git_repo.working_dir)
31+
32+
assert version == "1.2.0"

scripts/release/build/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ def get_manually_upgradable_versions() -> Dict[str, str]:
99
build_info = json.load(f)
1010

1111
return {
12-
"readinessprobe": build_info["images"]["readinessprobe"]["prod"]["version"],
12+
"readinessprobe": build_info["images"]["readinessprobe"]["release"]["version"],
1313
"operator_version_upgrade_post_start_hook": build_info["images"]["operator-version-upgrade-post-start-hook"][
14-
"prod"
14+
"release"
1515
]["version"],
1616
}
1717

scripts/release/calculate_next_version.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33

44
from git import Repo
55

6-
from scripts.release.changelog import (
6+
from scripts.release.constants import (
77
DEFAULT_CHANGELOG_PATH,
8-
DEFAULT_INITIAL_GIT_TAG_VERSION,
8+
DEFAULT_RELEASE_INITIAL_VERSION,
9+
DEFAULT_REPOSITORY_PATH,
910
)
1011
from scripts.release.version import calculate_next_version
1112

@@ -17,7 +18,7 @@
1718
parser.add_argument(
1819
"-p",
1920
"--path",
20-
default=".",
21+
default=DEFAULT_REPOSITORY_PATH,
2122
metavar="",
2223
action="store",
2324
type=pathlib.Path,
@@ -43,11 +44,11 @@
4344
parser.add_argument(
4445
"-v",
4546
"--initial-version",
46-
default=DEFAULT_INITIAL_GIT_TAG_VERSION,
47+
default=DEFAULT_RELEASE_INITIAL_VERSION,
4748
metavar="",
4849
action="store",
4950
type=str,
50-
help=f"Version to use if no previous version tag is found. Default is '{DEFAULT_INITIAL_GIT_TAG_VERSION}'",
51+
help=f"Version to use if no previous version tag is found. Default is '{DEFAULT_RELEASE_INITIAL_VERSION}'",
5152
)
5253
args = parser.parse_args()
5354

scripts/release/changelog.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import frontmatter
77
from git import Commit, Repo
88

9-
DEFAULT_CHANGELOG_PATH = "changelog/"
10-
DEFAULT_INITIAL_GIT_TAG_VERSION = "1.0.0"
119
FILENAME_DATE_FORMAT = "%Y%m%d"
1210
FRONTMATTER_DATE_FORMAT = "%Y-%m-%d"
1311
MAX_TITLE_LENGTH = 50

scripts/release/check_changelog.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from git import Repo
55

6-
from scripts.release.changelog import DEFAULT_CHANGELOG_PATH, get_changelog_entries
6+
from scripts.release.changelog import get_changelog_entries
7+
from scripts.release.constants import DEFAULT_CHANGELOG_PATH, DEFAULT_REPOSITORY_PATH
78

89

910
def str2bool(v):
@@ -25,7 +26,7 @@ def str2bool(v):
2526
parser.add_argument(
2627
"-p",
2728
"--path",
28-
default=".",
29+
default=DEFAULT_REPOSITORY_PATH,
2930
metavar="",
3031
action="store",
3132
type=pathlib.Path,

scripts/release/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from _pytest.fixtures import fixture
66
from git import Repo
77

8-
from scripts.release.changelog import DEFAULT_CHANGELOG_PATH
8+
from scripts.release.constants import DEFAULT_CHANGELOG_PATH
99

1010

1111
@fixture(scope="session")

scripts/release/constants.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import os
2+
3+
RELEASE_INITIAL_VERSION_ENV_VAR = "RELEASE_INITIAL_VERSION"
4+
RELEASE_INITIAL_COMMIT_SHA_ENV_VAR = "RELEASE_INITIAL_COMMIT_SHA"
5+
6+
DEFAULT_RELEASE_INITIAL_VERSION = "1.0.0"
7+
DEFAULT_RELEASE_INITIAL_COMMIT_SHA = "9ed5f98fc70c5b3442f633d2393265fb8a2aba0c"
8+
DEFAULT_CHANGELOG_PATH = "changelog/"
9+
DEFAULT_REPOSITORY_PATH = "."
10+
11+
12+
def get_initial_version() -> str:
13+
return os.getenv(RELEASE_INITIAL_VERSION_ENV_VAR, DEFAULT_RELEASE_INITIAL_VERSION)
14+
15+
16+
def get_initial_commit_sha() -> str:
17+
return os.getenv(RELEASE_INITIAL_COMMIT_SHA_ENV_VAR, DEFAULT_RELEASE_INITIAL_COMMIT_SHA)

0 commit comments

Comments
 (0)