Skip to content

Commit 2b6c535

Browse files
committed
Convert npm version-level package.json as metadata partially
1 parent 5945ce8 commit 2b6c535

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

charon/pkgs/npm.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def handle_npm_uploading(
102102

103103
logger.info("Start uploading files to s3 buckets: %s", bucket_)
104104
failed_files = client.upload_files(
105-
file_paths=valid_paths,
105+
file_paths=[valid_paths[0]],
106106
targets=[(bucket_, prefix__)],
107107
product=product,
108108
root=target_dir
@@ -126,6 +126,21 @@ def handle_npm_uploading(
126126
)
127127
logger.info("Manifest uploading is done\n")
128128

129+
logger.info(
130+
"Start generating version-level package.json for package: %s in s3 bucket %s",
131+
package_metadata.name, bucket_
132+
)
133+
failed_metas = []
134+
_version_metadata_path = valid_paths[1]
135+
_failed_metas = client.upload_metadatas(
136+
meta_file_paths=[_version_metadata_path],
137+
target=(bucket_, prefix__),
138+
product=product,
139+
root=target_dir
140+
)
141+
failed_metas.extend(_failed_metas)
142+
logger.info("version-level package.json uploading done")
143+
129144
logger.info(
130145
"Start generating package.json for package: %s in s3 bucket %s",
131146
package_metadata.name, bucket_
@@ -135,7 +150,6 @@ def handle_npm_uploading(
135150
)
136151
logger.info("package.json generation done\n")
137152

138-
failed_metas = []
139153
if META_FILE_GEN_KEY in meta_files:
140154
_failed_metas = client.upload_metadatas(
141155
meta_file_paths=[meta_files[META_FILE_GEN_KEY]],

charon/storage.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -383,15 +383,18 @@ async def path_upload_handler(
383383
# NOTE: This should not happen for most cases, as most
384384
# of the metadata file does not have product info. Just
385385
# leave for requirement change in future
386-
(prods, no_error) = await self.__run_async(
387-
self.__get_prod_info,
388-
path_key, bucket_name
389-
)
390-
if not no_error:
391-
failed.append(full_file_path)
392-
return
393-
if no_error and product not in prods:
394-
prods.append(product)
386+
# This is now used for npm version-level package.json
387+
prods = [product]
388+
if existed:
389+
(prods, no_error) = await self.__run_async(
390+
self.__get_prod_info,
391+
path_key, bucket_name
392+
)
393+
if not no_error:
394+
failed.append(full_file_path)
395+
return
396+
if no_error and product not in prods:
397+
prods.append(product)
395398
updated = await self.__update_prod_info(
396399
path_key, bucket_name, prods
397400
)

tests/test_npm_dist_gen.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,46 @@ def test_dist_gen_in_multi_targets(self):
109109
self.assertIn("\"dist\"", merged_meta_content_client)
110110
self.assertIn("\"tarball\": \"https://npm2.registry.redhat.com/@babel/code-frame/-/code"
111111
"-frame-7.14.5.tgz\"", merged_meta_content_client)
112+
113+
def test_overlapping_registry_dist_gen(self):
114+
targets_ = [(None, TEST_BUCKET, None, "npm1.registry.redhat.com")]
115+
test_tgz = os.path.join(os.getcwd(), "tests/input/code-frame-7.14.5.tgz")
116+
product_7_14_5 = "code-frame-7.14.5"
117+
handle_npm_uploading(
118+
test_tgz, product_7_14_5,
119+
targets=targets_,
120+
dir_=self.tempdir, do_index=False
121+
)
122+
test_bucket = self.mock_s3.Bucket(TEST_BUCKET)
123+
meta_obj_client_7_14_5 = test_bucket.Object(CODE_FRAME_7_14_5_META)
124+
meta_content_client_7_14_5 = str(meta_obj_client_7_14_5.get()["Body"].read(), "utf-8")
125+
self.assertIn("\"dist\"", meta_content_client_7_14_5)
126+
self.assertIn("\"tarball\": \"https://npm1.registry.redhat.com/@babel/code-frame/-/code"
127+
"-frame-7.14.5.tgz\"", meta_content_client_7_14_5)
128+
129+
merged_meta_obj_client = test_bucket.Object(CODE_FRAME_META)
130+
merged_meta_content_client = str(merged_meta_obj_client.get()["Body"].read(), "utf-8")
131+
self.assertIn("\"dist\"", merged_meta_content_client)
132+
self.assertIn("\"tarball\": \"https://npm1.registry.redhat.com/@babel/code-frame/-/code"
133+
"-frame-7.14.5.tgz\"", merged_meta_content_client)
134+
135+
targets_overlapping_ = [(None, TEST_BUCKET, None, "npm1.overlapping.registry.redhat.com")]
136+
test_tgz = os.path.join(os.getcwd(), "tests/input/code-frame-7.14.5.tgz")
137+
product_7_14_5 = "code-frame-7.14.5"
138+
handle_npm_uploading(
139+
test_tgz, product_7_14_5,
140+
targets=targets_overlapping_,
141+
dir_=self.tempdir, do_index=False
142+
)
143+
144+
meta_obj_client_7_14_5 = test_bucket.Object(CODE_FRAME_7_14_5_META)
145+
meta_content_client_7_14_5 = str(meta_obj_client_7_14_5.get()["Body"].read(), "utf-8")
146+
self.assertIn("\"dist\"", meta_content_client_7_14_5)
147+
self.assertIn("\"tarball\": \"https://npm1.overlapping.registry.redhat.com/@babel/code"
148+
"-frame/-/code-frame-7.14.5.tgz\"", meta_content_client_7_14_5)
149+
150+
merged_meta_obj_client = test_bucket.Object(CODE_FRAME_META)
151+
merged_meta_content_client = str(merged_meta_obj_client.get()["Body"].read(), "utf-8")
152+
self.assertIn("\"dist\"", merged_meta_content_client)
153+
self.assertIn("\"tarball\": \"https://npm1.overlapping.registry.redhat.com/@babel/code"
154+
"-frame/-/code-frame-7.14.5.tgz\"", merged_meta_content_client)

0 commit comments

Comments
 (0)