1+ # Build OpenKNX Release Overviews for Integration in Pages, Wiki and Toolbox
2+ # 2025 CK (OpenKNX)
3+
14import requests
25import json
36import os
@@ -43,12 +46,36 @@ def fetch_release_details(filtered_releases):
4346 }
4447 with open ('releases.json' , 'w' ) as outfile :
4548 json .dump (releases_data , outfile , indent = 4 )
49+ return releases_data
50+
51+ def create_html_for_repo (repo_name , details ):
52+ os .makedirs ('releases' , exist_ok = True )
53+ with open (f'releases/{ repo_name } .html' , 'w' ) as outfile :
54+ outfile .write ('<ul>\n ' )
55+ latest_release = None
56+ latest_prerelease = None
57+ for release in details ["releases" ]:
58+ if not release ["prerelease" ]:
59+ if latest_release is None or release ["published_at" ] > latest_release ["published_at" ]:
60+ latest_release = release
61+ else :
62+ if latest_prerelease is None or release ["published_at" ] > latest_prerelease ["published_at" ]:
63+ latest_prerelease = release
64+
65+ if latest_release :
66+ outfile .write (f'<li><a href="{ latest_release ["html_url" ]} ">Latest Release: { latest_release ["name" ]} ({ latest_release ["tag_name" ]} )</a></li>\n ' )
67+
68+ if latest_prerelease :
69+ outfile .write (f'<li><a href="{ latest_prerelease ["html_url" ]} ">Latest Prerelease: { latest_prerelease ["name" ]} ({ latest_prerelease ["tag_name" ]} )</a></li>\n ' )
70+
71+ outfile .write ('</ul>\n ' )
4672
4773def update_html ():
4874 with open ('releases.json' , 'r' ) as infile , open ('releases_list.html' , 'w' ) as outfile :
4975 data = json .load (infile )
5076 outfile .write ('<ul>\n ' )
5177 for repo , details in data .items ():
78+ create_html_for_repo (repo , details )
5279 outfile .write (f'<li><strong>{ repo } </strong><ul>\n ' )
5380 for release in details ["releases" ]:
5481 outfile .write (f'<li><a href="{ release ["html_url" ]} ">{ release ["name" ]} ({ release ["tag_name" ]} )</a></li>\n ' )
@@ -57,7 +84,7 @@ def update_html():
5784
5885def main ():
5986 filtered_releases = fetch_and_filter_releases ()
60- fetch_release_details (filtered_releases )
87+ releases_data = fetch_release_details (filtered_releases )
6188 update_html ()
6289
6390if __name__ == "__main__" :
0 commit comments