Skip to content

Commit 7726843

Browse files
committed
πŸ› Write all supported versions to version.json to avoid flapping
1 parent a8d8f84 commit 7726843

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

β€Žsrc/docker_python_nodejs/cli.pyβ€Ž

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,21 @@ def run_build_matrix(args: CLIArgs) -> None:
4444

4545

4646
def run_release(args: CLIArgs) -> None:
47-
versions = load_build_contexts(args.builds_dir)
47+
"""Release new/updated version by updating versions.json and README.md.
48+
49+
Note: We fetch supported and available versions again here and update with the actual built digests"""
50+
51+
supported_python_versions, supported_nodejs_versions = supported_versions()
52+
versions = decide_version_combinations(args.distros, supported_python_versions, supported_nodejs_versions)
53+
# Update versions with build digests to allow pinning
54+
built_versions = load_build_contexts(args.builds_dir)
4855
current_versions = load_versions()
56+
for version in versions:
57+
if version.key in built_versions:
58+
version.digest = built_versions[version.key].digest
59+
elif version.key in current_versions:
60+
version.digest = current_versions[version.key].digest
61+
4962
new_or_updated = find_new_or_updated(versions, current_versions, args.force)
5063
supported_python_versions, supported_nodejs_versions = supported_versions()
5164
if not new_or_updated:

β€Žsrc/docker_python_nodejs/versions.pyβ€Ž

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,47 +262,46 @@ def persist_versions(versions: list[BuildVersion], dry_run: bool = False) -> Non
262262
json.dump({"versions": version_dicts}, fp, indent=2)
263263

264264

265-
def load_versions() -> list[BuildVersion]:
265+
def load_versions() -> dict[str, BuildVersion]:
266266
with VERSIONS_PATH.open() as fp:
267-
version_dicts = json.load(fp)["versions"]
268-
return [BuildVersion(**version) for version in version_dicts]
267+
versions = json.load(fp)["versions"]
268+
return {version["key"]: BuildVersion(**version) for version in versions}
269269

270270

271271
def find_new_or_updated(
272272
versions: list[BuildVersion],
273-
current_versions: list[BuildVersion],
273+
current_versions: dict[str, BuildVersion],
274274
force: bool = False,
275275
) -> list[BuildVersion]:
276276
if force:
277277
logger.warning("Generating full build matrix because --force is set")
278278

279-
current_versions_dict = {ver.key: ver for ver in current_versions}
280279
versions_dict = {ver.key: ver for ver in versions}
281280
new_or_updated: list[BuildVersion] = []
282281

283282
for key, ver in versions_dict.items():
284-
current_ver = current_versions_dict.get(key)
283+
current_ver = current_versions.get(key)
285284
if current_ver is not None:
286285
current_ver.digest = "" # Ignore digest when comparing
287286

288287
# does key exist and are version dicts equal?
289288
updated = current_ver and ver != current_ver
290-
new = key not in current_versions_dict
289+
new = key not in current_versions
291290
if new or updated or force:
292291
new_or_updated.append(ver)
293292

294293
return new_or_updated
295294

296295

297-
def load_build_contexts(builds_dir: Path) -> list[BuildVersion]:
296+
def load_build_contexts(builds_dir: Path) -> dict[str, BuildVersion]:
298297
"""Find JSON files with build contexts and return the corresponding BuildVersion list"""
299298
logger.info(f"Loading builds metadata from {builds_dir.as_posix()}")
300-
versions: list[BuildVersion] = []
299+
versions: dict[str, BuildVersion] = {}
301300

302301
for build_file in builds_dir.glob("*.json"):
303302
with build_file.open() as fp:
304303
build_data = json.load(fp)
305304
version = BuildVersion(**build_data)
306-
versions.append(version)
305+
versions[build_data["key"]] = version
307306

308-
return sorted_versions(versions)
307+
return versions

β€Žtests/test_all.pyβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ def test_load_build_contexts(build_version: BuildVersion, tmp_path: Path) -> Non
265265

266266
versions = load_build_contexts(tmp_path)
267267
assert len(versions) == 1
268-
assert versions[0].key == ver.key
268+
assert next(iter(versions.values())).key == ver.key
269269

270270

271271
def test_find_new_or_updated_with_digest() -> None:
@@ -285,6 +285,6 @@ def test_find_new_or_updated_with_digest() -> None:
285285
existing = copy.deepcopy(new)
286286
existing.digest = "sha256:abcdef1234567890"
287287

288-
res = find_new_or_updated([new], [existing])
288+
res = find_new_or_updated([new], {existing.key: existing})
289289

290290
assert len(res) == 0

0 commit comments

Comments
Β (0)