diff --git a/charon/cmd/cmd_upload.py b/charon/cmd/cmd_upload.py index d56a644d..2ad294f5 100644 --- a/charon/cmd/cmd_upload.py +++ b/charon/cmd/cmd_upload.py @@ -161,7 +161,7 @@ def upload( debug=False, quiet=False, dryrun=False, - sign_result_loc="/tmp/sign" + sign_result_file=None, ): """Upload all files from a released product REPO to Ronda Service. The REPO points to a product released tarball which @@ -233,7 +233,7 @@ def upload( dry_run=dryrun, manifest_bucket_name=manifest_bucket_name, config=config, - sign_result_loc=sign_result_loc + sign_result_file=sign_result_file ) if not succeeded: sys.exit(1) diff --git a/charon/pkgs/maven.py b/charon/pkgs/maven.py index 2f525ce3..5ccee694 100644 --- a/charon/pkgs/maven.py +++ b/charon/pkgs/maven.py @@ -276,7 +276,7 @@ def handle_maven_uploading( dry_run=False, manifest_bucket_name=None, config=None, - sign_result_loc="/tmp/sign" + sign_result_file=None ) -> Tuple[str, bool]: """ Handle the maven product release tarball uploading process. * repo is the location of the tarball in filesystem @@ -416,10 +416,10 @@ def handle_maven_uploading( if not conf: sys.exit(1) - if conf.is_radas_enabled(): + if conf.is_radas_enabled() and sign_result_file and os.path.isfile(sign_result_file): logger.info("Start generating radas signature files for s3 bucket %s\n", bucket_name) (_failed_metas, _generated_signs) = radas_signature.generate_radas_sign( - top_level=top_level, sign_result_loc=sign_result_loc + top_level=top_level, sign_result_file=sign_result_file ) if not _generated_signs: logger.error( diff --git a/charon/pkgs/radas_sign.py b/charon/pkgs/radas_sign.py index 7ac4e3dc..cd229425 100644 --- a/charon/pkgs/radas_sign.py +++ b/charon/pkgs/radas_sign.py @@ -276,31 +276,17 @@ def _handle_failed_delivery(self, reason: str): self.close() -def generate_radas_sign(top_level: str, sign_result_loc: str) -> Tuple[List[str], List[str]]: +def generate_radas_sign(top_level: str, sign_result_file: str) -> Tuple[List[str], List[str]]: """ Generate .asc files based on RADAS sign result json file """ - if not os.path.isdir(sign_result_loc): - logger.error("Sign result loc dir does not exist: %s", sign_result_loc) - return [], [] - - files = [ - os.path.join(sign_result_loc, f) - for f in os.listdir(sign_result_loc) - if os.path.isfile(os.path.join(sign_result_loc, f)) - ] - - if not files: - return [], [] - - if len(files) > 1: - logger.error("Multiple files found in %s. Expected only one file.", sign_result_loc) + if not sign_result_file or not os.path.isfile(sign_result_file): + logger.error("Sign result file does not exist: %s", sign_result_file) return [], [] # should only have the single sign result json file from the radas registry - json_file_path = files[0] try: - with open(json_file_path, "r") as f: + with open(sign_result_file, "r") as f: data = json.load(f) except Exception as e: logger.error("Failed to read or parse the JSON file: %s", e) diff --git a/tests/test_radas_sign_generation.py b/tests/test_radas_sign_generation.py index 33c3d695..ccc448a2 100644 --- a/tests/test_radas_sign_generation.py +++ b/tests/test_radas_sign_generation.py @@ -39,7 +39,7 @@ def tearDown(self) -> None: def test_multi_sign_files_generation(self): self.__prepare_artifacts() - failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_loc) + failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_file) self.assertEqual(failed, []) expected_asc1 = os.path.join(self.__repo_dir, "foo/bar/1.0/foo-bar-1.0.jar.asc") expected_asc2 = os.path.join(self.__repo_dir, "foo/bar/2.0/foo-bar-2.0.jar.asc") @@ -55,7 +55,7 @@ def test_multi_sign_files_generation(self): self.assertIn("signature2@hash", content2) def test_sign_files_generation_with_missing_artifacts(self): - failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_loc) + failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_file) self.assertEqual(failed, []) expected_asc1 = os.path.join(self.__repo_dir, "foo/bar/1.0/foo-bar-1.0.jar.asc") expected_asc2 = os.path.join(self.__repo_dir, "foo/bar/2.0/foo-bar-2.0.jar.asc") @@ -82,7 +82,7 @@ def side_effect(path, *args, **kwargs): raise IOError("mock write error") return real_open(path, *args, **kwargs) mock_open.side_effect = side_effect - failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_loc) + failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_file) self.assertEqual(len(failed), 1) self.assertNotIn(expected_asc1, generated) @@ -93,20 +93,7 @@ def test_sign_files_generation_with_missing_result(self): # simulate missing pull result by removing the sign result file loc shutil.rmtree(self.__sign_result_loc) - failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_loc) - self.assertEqual(failed, []) - expected_asc1 = os.path.join(self.__repo_dir, "foo/bar/1.0/foo-bar-1.0.jar.asc") - expected_asc2 = os.path.join(self.__repo_dir, "foo/bar/2.0/foo-bar-2.0.jar.asc") - self.assertEqual(generated, []) - self.assertFalse(os.path.exists(expected_asc1)) - self.assertFalse(os.path.exists(expected_asc2)) - - def test_sign_files_generation_with_not_single_results(self): - self.__prepare_artifacts() - another_result_file = os.path.join(self.__sign_result_loc, "result2.json") - overwrite_file(another_result_file, "test_json") - - failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_loc) + failed, generated = generate_radas_sign(self.__repo_dir, self.__sign_result_file) self.assertEqual(failed, []) expected_asc1 = os.path.join(self.__repo_dir, "foo/bar/1.0/foo-bar-1.0.jar.asc") expected_asc2 = os.path.join(self.__repo_dir, "foo/bar/2.0/foo-bar-2.0.jar.asc")