Skip to content

Commit fed9e9b

Browse files
committed
Fix dist missing issue for npm package installing
1 parent 6bea1bb commit fed9e9b

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

charon/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,5 @@
173173
PROD_INFO_SUFFIX = ".prodinfo"
174174
MANIFEST_SUFFIX = ".txt"
175175
DEFAULT_ERRORS_LOG = "errors.log"
176+
177+
NRRC_REGISTRY = "npm.registry.redhat.com"

charon/utils/archive.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
import tempfile
2222
import shutil
2323
from enum import Enum
24-
from json import load, JSONDecodeError
24+
from json import load, JSONDecodeError, dump
2525
from typing import Tuple
2626
from zipfile import ZipFile, is_zipfile
27+
from charon.constants import NRRC_REGISTRY
28+
from charon.utils.files import digest, HashType
2729

2830
logger = logging.getLogger(__name__)
2931

@@ -54,7 +56,7 @@ def extract_npm_tarball(path: str, target_dir: str, is_for_upload: bool) -> Tupl
5456
tgz.extractall()
5557
for f in tgz:
5658
if f.name.endswith("package.json"):
57-
parse_paths = __parse_npm_package_version_paths(f.path)
59+
version_data, parse_paths = __parse_npm_package_version_paths(f.path)
5860
package_name_path = parse_paths[0]
5961
os.makedirs(os.path.join(target_dir, parse_paths[0]))
6062
tarball_parent_path = os.path.join(target_dir, parse_paths[0], "-")
@@ -63,7 +65,11 @@ def extract_npm_tarball(path: str, target_dir: str, is_for_upload: bool) -> Tupl
6365
target_dir, parse_paths[0], parse_paths[1]
6466
)
6567
valid_paths.append(os.path.join(version_metadata_parent_path, "package.json"))
68+
6669
if is_for_upload:
70+
tgz_relative_path = "/".join([parse_paths[0], "-", _get_tgz_name(path)])
71+
__write_npm_version_dist(path, f.path, version_data, tgz_relative_path)
72+
6773
os.makedirs(tarball_parent_path)
6874
target = os.path.join(tarball_parent_path, os.path.basename(path))
6975
shutil.copyfile(path, target)
@@ -81,12 +87,33 @@ def _get_tgz_name(path: str):
8187
return ""
8288

8389

84-
def __parse_npm_package_version_paths(path: str) -> list:
90+
def _del_none(d):
91+
for key, value in list(d.items()):
92+
if value is None:
93+
del d[key]
94+
elif isinstance(value, dict):
95+
_del_none(value)
96+
return d
97+
98+
99+
def __write_npm_version_dist(path: str, version_meta_extract_path: str, version_data: dict,
100+
tgz_relative_path: str):
101+
tarball_link = "".join(["https://", NRRC_REGISTRY, "/", tgz_relative_path])
102+
shasum = digest(path, HashType.SHA1)
103+
dist = dict()
104+
dist["tarball"] = tarball_link
105+
dist["shasum"] = shasum
106+
version_data["dist"] = dist
107+
with open(version_meta_extract_path, mode='w', encoding='utf-8') as f:
108+
dump(_del_none(version_data), f)
109+
110+
111+
def __parse_npm_package_version_paths(path: str) -> Tuple[dict, list]:
85112
try:
86113
with open(path, encoding='utf-8') as version_package:
87114
data = load(version_package)
88115
package_version_paths = [data['name'], data['version']]
89-
return package_version_paths
116+
return data, package_version_paths
90117
except JSONDecodeError:
91118
logger.error('Error: Failed to parse json!')
92119

0 commit comments

Comments
 (0)