Skip to content

Commit 0cf7e77

Browse files
Make the simple package index compatible with Artifactory: (confluentinc#2)
1 parent 03e1333 commit 0cf7e77

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

.github/scripts/generate_index.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import os
22
import sys
3+
import re
34
from pathlib import Path
45
from github import Github
56
from typing import List, Dict
67
import itertools
78
import requests
9+
import hashlib
810

911
HTML_TEMPLATE = """<!DOCTYPE html>
1012
<html>
@@ -17,11 +19,21 @@
1719
</body>
1820
</html>
1921
"""
22+
23+
def normalize(name):
24+
"""Normalize package name according to PEP 503."""
25+
return re.sub(r"[-_.]+", "-", name).lower()
26+
27+
def calculate_sha256(file_path):
28+
with open(file_path, "rb") as f:
29+
digest = hashlib.file_digest(f, "sha256")
30+
31+
return digest.hexdigest()
2032

2133
class PackageIndexBuilder:
2234
def __init__(self, token: str, repo_name: str, output_dir: str):
2335
self.github = Github(token)
24-
self.repo_name = repo_name
36+
self.repo = self.github.get_repo(repo_name)
2537
self.output_dir = Path(output_dir)
2638
self.packages: Dict[str, List[Dict]] = {}
2739

@@ -35,12 +47,11 @@ def __init__(self, token: str, repo_name: str, output_dir: str):
3547
def collect_packages(self):
3648

3749
print ("Query release assets")
38-
repo = self.github.get_repo(self.repo_name)
39-
40-
for release in repo.get_releases():
50+
51+
for release in self.repo.get_releases():
4152
for asset in release.get_assets():
4253
if asset.name.endswith(('.whl', '.tar.gz')):
43-
package_name = asset.name.split('-')[0].replace('_', '-')
54+
package_name = normalize(asset.name.split('-')[0])
4455
if package_name not in self.packages:
4556
self.packages[package_name] = []
4657

@@ -71,7 +82,6 @@ def generate_index_html(self):
7182
file_links = []
7283
assets = sorted(assets, key=lambda x: x["filename"])
7384
for filename, items in itertools.groupby(assets, key=lambda x: x["filename"]):
74-
file_links.append(f'<a href="./{filename}">{filename}</a><br/>')
7585
url = next(items)['url']
7686

7787
# Download the file
@@ -83,8 +93,11 @@ def generate_index_html(self):
8393
if chunk:
8494
f.write(chunk)
8595

96+
sha256_hash = calculate_sha256(package_dir / filename)
97+
file_links.append(f'<a href="{filename}#sha256={sha256_hash}">{filename}</a><br/>')
98+
8699
package_index = HTML_TEMPLATE.format(
87-
package_name=package,
100+
package_name=f"Links for {package}",
88101
package_links="\n".join(file_links)
89102
)
90103

0 commit comments

Comments
 (0)