1+ import json
12from cfengine_cli .masterfiles .download import (
23 ENTERPRISE_RELEASES_URL ,
4+ COMMUNITY_RELEASES_URL ,
35 download_all_versions ,
46)
57from 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
79from cfengine_cli .masterfiles .generate_vcf_git_checkout import generate_vcf_git_checkout
810from 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+
102126def 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