Skip to content

Commit 96e1ae3

Browse files
committed
ENT-13808: Expand release-information with release files and checksums from community/releases.json
1 parent 0e94a6f commit 96e1ae3

3 files changed

Lines changed: 66 additions & 32 deletions

File tree

src/cfengine_cli/masterfiles/analyze.py

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -93,31 +93,25 @@ def finalize_vcf(versions_dict, checksums_dict, files_dict):
9393
return versions_dict, checksums_dict, files_dict
9494

9595

96-
def filter_unstable_releases(data):
96+
def get_stable_releases(data):
9797
# Filter the data to only include stable releases (not debug, alpha, or beta releases):
98-
filtered_data = []
99-
100-
for release_data in data.get("releases", []):
101-
if release_data.get("debug") is True:
102-
continue
103-
if release_data.get("alpha") is True:
104-
continue
105-
if release_data.get("beta") is True:
106-
continue
107-
108-
filtered_data.append(release_data)
109-
110-
return filtered_data
98+
return [
99+
r
100+
for r in data.get("releases", [])
101+
if not (r.get("debug") or r.get("alpha") or r.get("beta"))
102+
]
111103

112104

113105
def sort_release_data(file_checksums_dict):
114106
# Newest versions first, and files sorted alphabetically within each version
115-
for v in file_checksums_dict.keys():
116-
file_checksums_dict[v] = dict_sorted_by_key(file_checksums_dict[v])
107+
# Work on copy to avoid mutating original dict
108+
file_checksums_dict_copy = file_checksums_dict
109+
for v in file_checksums_dict_copy.keys():
110+
file_checksums_dict_copy[v] = dict_sorted_by_key(file_checksums_dict_copy[v])
117111

118112
sorted_dict = OrderedDict(
119113
sorted(
120-
file_checksums_dict.items(),
114+
file_checksums_dict_copy.items(),
121115
key=lambda p: version_as_comparable_list(p[0]),
122116
reverse=True,
123117
)

src/cfengine_cli/masterfiles/download.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
)
1212

1313
ENTERPRISE_RELEASES_URL = "https://cfengine.com/release-data/enterprise/releases.json"
14-
14+
COMMUNITY_RELEASES_URL = "https://cfengine.com/release-data/community/releases.json"
1515

1616
COMMUNITY_ONLY_VERSIONS = ["3.12.0b1", "3.10.0b1"]
1717
"""Masterfiles versions which do not appear in Enterprise releases but appear in Community releases."""

src/cfengine_cli/masterfiles/generate_release_information.py

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import json
12
from cfengine_cli.masterfiles.download import (
23
ENTERPRISE_RELEASES_URL,
4+
COMMUNITY_RELEASES_URL,
35
download_all_versions,
46
)
57
from cfengine_cli.masterfiles.generate_vcf_download import generate_vcf_download
6-
from cfengine_cli.masterfiles.analyze import filter_unstable_releases, sort_release_data
8+
from cfengine_cli.masterfiles.analyze import get_stable_releases, sort_release_data
79
from cfengine_cli.masterfiles.generate_vcf_git_checkout import generate_vcf_git_checkout
810
from cfengine_cli.masterfiles.check_download_matches_git import (
911
check_download_matches_git,
@@ -72,24 +74,23 @@ def generate_release_information_impl(
7274
)
7375

7476

75-
def generate_release_history():
76-
print("Generating release history information...")
77-
78-
releases_data = download_releasedata()
79-
80-
stable_releases = filter_unstable_releases(releases_data)
81-
82-
file_checksums_dict = build_release_history(stable_releases)
77+
def download_enterprise_releasedata():
78+
# Downloading releases.json:
79+
try:
80+
releases_data = get_json(ENTERPRISE_RELEASES_URL)
8381

84-
sorted_releases = sort_release_data(file_checksums_dict)
82+
except CFBSNetworkError:
83+
raise CFBSExitError(
84+
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
85+
)
8586

86-
write_json("./cfengine-enterprise/checksums.json", sorted_releases)
87+
return releases_data
8788

8889

89-
def download_releasedata():
90-
# Downloading releases.json:
90+
def download_community_releasedata():
91+
# Downloading community/releases.json
9192
try:
92-
releases_data = get_json(ENTERPRISE_RELEASES_URL)
93+
releases_data = get_json(COMMUNITY_RELEASES_URL)
9394

9495
except CFBSNetworkError:
9596
raise CFBSExitError(
@@ -99,6 +100,29 @@ def download_releasedata():
99100
return releases_data
100101

101102

103+
def process_release_type(folder, download_func):
104+
# Function for processing either community or enterprise releases
105+
release_data = download_func()
106+
107+
write_json_pretty(f"./{folder}/releases.json", release_data)
108+
109+
stable_releases = get_stable_releases(release_data)
110+
111+
file_checksums_dict = build_release_history(stable_releases)
112+
113+
write_version_files(stable_releases, folder)
114+
115+
sorted_releases = sort_release_data(file_checksums_dict)
116+
117+
write_json(f"./{folder}/checksums.json", sorted_releases)
118+
119+
120+
def generate_release_history():
121+
print("Generating release history information...")
122+
process_release_type("cfengine-enterprise", download_enterprise_releasedata)
123+
process_release_type("cfengine-community", download_community_releasedata)
124+
125+
102126
def build_release_history(filtered_releases):
103127
release_history = {}
104128

@@ -152,3 +176,19 @@ def extract_file_info(asset_data):
152176
return filename, checksum
153177

154178
return None, None
179+
180+
181+
def write_version_files(stable_releases, folder):
182+
# Writes versionfiles for each version
183+
for release_data in stable_releases:
184+
version = release_data.get("version")
185+
if not version:
186+
continue
187+
version_data, _ = download_release_version_data(release_data)
188+
write_json(f"./{folder}/versions/{version}.json", version_data)
189+
190+
191+
def write_json_pretty(path, data):
192+
# Writes release information in same format as on cfengine.com
193+
with open(path, "w", encoding="utf-8") as f:
194+
json.dump(data, f, indent=2, ensure_ascii=False)

0 commit comments

Comments
 (0)