Skip to content

Commit 4f8f557

Browse files
authored
Merge pull request #51 from sarakthon/generate-community-checksums
ENT-13808: Improve release history generation and download handling
2 parents 7015551 + c3df853 commit 4f8f557

1 file changed

Lines changed: 36 additions & 40 deletions

File tree

src/cfengine_cli/masterfiles/generate_release_information.py

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import json
2+
import requests
3+
from functools import cache
24
from cfengine_cli.masterfiles.download import (
35
ENTERPRISE_RELEASES_URL,
46
COMMUNITY_RELEASES_URL,
@@ -29,6 +31,10 @@ def generate_release_information_impl(
2931
omit_download=False, check=False, min_version=None
3032
):
3133
if not omit_download:
34+
generate_release_history()
35+
36+
generate_git_tags_map()
37+
3238
print("Downloading masterfiles...")
3339

3440
downloaded_versions = download_all_versions(DOWNLOAD_PATH, min_version)
@@ -49,10 +55,6 @@ def generate_release_information_impl(
4955
)
5056
generate_vcf_download(DOWNLOAD_PATH, downloaded_versions)
5157

52-
generate_release_history()
53-
54-
generate_git_tags_map()
55-
5658
if check:
5759
print(
5860
"Downloading releases of masterfiles from git (github.com) and generating "
@@ -74,37 +76,12 @@ def generate_release_information_impl(
7476
)
7577

7678

77-
def download_enterprise_releasedata():
78-
# Downloading releases.json:
79-
try:
80-
releases_data = get_json(ENTERPRISE_RELEASES_URL)
81-
82-
except CFBSNetworkError:
83-
raise CFBSExitError(
84-
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
85-
)
86-
87-
return releases_data
88-
89-
90-
def download_community_releasedata():
91-
# Downloading community/releases.json
92-
try:
93-
releases_data = get_json(COMMUNITY_RELEASES_URL)
94-
95-
except CFBSNetworkError:
96-
raise CFBSExitError(
97-
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
98-
)
99-
100-
return releases_data
101-
102-
103-
def process_release_type(folder, download_func):
79+
def process_release_type(folder, url):
10480
# Function for processing either community or enterprise releases
105-
release_data = download_func()
106-
107-
write_json_pretty(f"./{folder}/releases.json", release_data)
81+
releases_path = f"./{folder}/releases.json"
82+
print(f"\nDownloading release data for {folder}...")
83+
# Save raw file to preserve exact format from website
84+
release_data = json_get_save_return(url, releases_path)
10885

10986
stable_releases = get_stable_releases(release_data)
11087

@@ -119,8 +96,8 @@ def process_release_type(folder, download_func):
11996

12097
def generate_release_history():
12198
print("Generating release history information...")
122-
process_release_type("cfengine-enterprise", download_enterprise_releasedata)
123-
process_release_type("cfengine-community", download_community_releasedata)
99+
process_release_type("cfengine-enterprise", ENTERPRISE_RELEASES_URL)
100+
process_release_type("cfengine-community", COMMUNITY_RELEASES_URL)
124101

125102

126103
def build_release_history(filtered_releases):
@@ -188,7 +165,26 @@ def write_version_files(stable_releases, folder):
188165
write_json(f"./{folder}/versions/{version}.json", version_data)
189166

190167

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)
168+
@cache
169+
def json_get_save_return(url: str, path: str) -> dict:
170+
try:
171+
r = requests.get(url)
172+
r.raise_for_status()
173+
except requests.exceptions.RequestException:
174+
raise CFBSNetworkError(
175+
f"Downloading of {url} failed - check your Wi-Fi / network settings."
176+
)
177+
content = r.content
178+
179+
try:
180+
with open(path, "wb") as f:
181+
f.write(content)
182+
except OSError:
183+
raise CFBSExitError(f"Failed to open and write content to {path}")
184+
185+
try:
186+
data = json.loads(content)
187+
except json.JSONDecodeError:
188+
raise CFBSExitError(f"Failed to parse JSON from {url}.")
189+
190+
return data

0 commit comments

Comments
 (0)