+ self._logger.verbose("charm {} built".format(src_folder))
+
+ def charmcraft_build(self, package_folder, charm_name):
+ """
+ Build the charms inside the package (new operator framework charms)
+ params: package_folder is the name of the folder where is the charms to compile.
+ build_name is the name of the layer or interface
+ """
+ self._logger.debug("Building charm {}".format(charm_name))
+ src_folder = f"{package_folder}/Scripts/charms/ops/{charm_name}"
+ current_directory = os.getcwd()
+ os.chdir(src_folder)
+ try:
+ result = subprocess.run(["charmcraft", "build"])
+ if result.returncode == 1:
+ raise ClientException(
+ "failed to build the charm: {}".format(src_folder)
+ )
+ subprocess.run(["rm", "-rf", f"../../{charm_name}"])
+ subprocess.run(["mv", "build", f"../../{charm_name}"])
+ self._logger.verbose("charm {} built".format(src_folder))
+ finally:
+ os.chdir(current_directory)
+
+ def build_compressed_file(self, package_folder, charm_list=None, sol004_007=True):
+ if sol004_007:
+ return self.build_zipfile(package_folder, charm_list)
+ else:
+ return self.build_tarfile(package_folder, charm_list)
+
+ def build_zipfile(self, package_folder, charm_list=None):
+ """
+ Creates a zip file given a package_folder
+ params: package_folder is the name of the folder to be packaged
+ returns: .zip name
+ """
+ self._logger.debug("")
+ cwd = None
+ try:
+ directory_name, package_name = self.create_temp_dir_sol004_007(
+ package_folder, charm_list
+ )
+ cwd = os.getcwd()
+ os.chdir(directory_name)
+ package_type = package_handling.get_package_type(package_folder)
+ print(package_type)
+
+ if (
+ package_handling.SOL007 == package_type
+ or package_handling.SOL007_TOSCA == package_type
+ ):
+ the_package = SOL007Package(package_folder)
+ elif (
+ package_handling.SOL004 == package_type
+ or package_handling.SOL004_TOSCA == package_type
+ ):
+ the_package = SOL004Package(package_folder)
+ else:
+ raise ClientException(f"Unknown package type: {package_type}")
+
+ the_package.create_or_update_metadata_file()
+
+ the_zip_package = shutil.make_archive(
+ os.path.join(cwd, package_name),
+ "zip",
+ os.path.join(directory_name, package_name),
+ )
+
+ print("Package created: {}".format(the_zip_package))
+
+ return the_zip_package
+
+ except Exception as exc:
+ raise ClientException(
+ "failure during build of zip file (create temp dir, calculate checksum, "
+ "zip file): {}".format(exc)
+ )
+ finally:
+ if cwd:
+ os.chdir(cwd)
+ shutil.rmtree(os.path.join(package_folder, "tmp"))