|
@@ -0,0 +1,77 @@
|
|
|
+import os
|
|
|
+import shutil
|
|
|
+import zipfile
|
|
|
+
|
|
|
+
|
|
|
+class ReleaseMaker:
|
|
|
+ def __init__(self):
|
|
|
+ self.script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
+ self.base_dir = os.path.join(self.script_dir, "client", "release")
|
|
|
+ self.__ensure_directory_exists(self.base_dir)
|
|
|
+ self.version = self.__find_latest_version()
|
|
|
+ self.release_dir = None
|
|
|
+
|
|
|
+ def __find_latest_version(self):
|
|
|
+ versions = [dir_name for dir_name in os.listdir(self.base_dir) if
|
|
|
+ os.path.isdir(os.path.join(self.base_dir, dir_name))]
|
|
|
+ return max(versions, key=lambda v: list(map(int, v.split('.'))))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def __ensure_directory_exists(dir_path):
|
|
|
+ if not os.path.exists(dir_path):
|
|
|
+ os.makedirs(dir_path)
|
|
|
+
|
|
|
+ def __unzip_files(self):
|
|
|
+ zip_dir = os.path.join(self.base_dir, self.version)
|
|
|
+ self.__ensure_directory_exists(zip_dir)
|
|
|
+ for item in os.listdir(zip_dir):
|
|
|
+ if item.endswith('.zip'):
|
|
|
+ with zipfile.ZipFile(os.path.join(zip_dir, item), 'r') as zip_ref:
|
|
|
+ zip_ref.extractall(self.release_dir)
|
|
|
+
|
|
|
+ def __copy_files(self):
|
|
|
+ # Copy ./server/dist/server to ./release/PLC_SIM v{version}/server
|
|
|
+ server_source = os.path.join(self.script_dir, "server", "dist", "server")
|
|
|
+ server_dest = os.path.join(self.release_dir, "server")
|
|
|
+ self.__ensure_directory_exists(server_dest)
|
|
|
+ shutil.copytree(server_source, server_dest, dirs_exist_ok=True)
|
|
|
+
|
|
|
+ # Copy ./source to ./release/PLC_SIM v{version}/server/source
|
|
|
+ source_source = os.path.join(self.script_dir, "source")
|
|
|
+ source_dest = os.path.join(self.release_dir, "server", "source")
|
|
|
+ self.__ensure_directory_exists(source_dest)
|
|
|
+ shutil.copytree(source_source, source_dest, dirs_exist_ok=True)
|
|
|
+
|
|
|
+ # Copy README.md
|
|
|
+ shutil.copy2(os.path.join(self.script_dir, "README.md"), self.release_dir)
|
|
|
+
|
|
|
+ # Copy ./instrument_setting.ini
|
|
|
+ shutil.copy2(os.path.join(self.script_dir, "instrument_setting.ini"), self.release_dir)
|
|
|
+
|
|
|
+ # Copy everything from ./dist/launcher/ to ./release/PLC_SIM v{version}/
|
|
|
+ launcher_source = os.path.join(self.script_dir, "dist", "launcher")
|
|
|
+ for item in os.listdir(launcher_source):
|
|
|
+ item_path = os.path.join(launcher_source, item)
|
|
|
+ if os.path.isdir(item_path):
|
|
|
+ shutil.copytree(item_path, os.path.join(self.release_dir, item), dirs_exist_ok=True)
|
|
|
+ else:
|
|
|
+ shutil.copy2(item_path, self.release_dir)
|
|
|
+
|
|
|
+ def make_release(self):
|
|
|
+ self.release_dir = os.path.join(self.script_dir, f"release/PLC_SIM v{self.version}")
|
|
|
+ self.__ensure_directory_exists(self.release_dir)
|
|
|
+
|
|
|
+ self.__unzip_files()
|
|
|
+ self.__copy_files()
|
|
|
+
|
|
|
+ # Create export directory
|
|
|
+ export_dir = os.path.join(self.release_dir, "server", "export")
|
|
|
+ self.__ensure_directory_exists(export_dir)
|
|
|
+
|
|
|
+ print(f"Release for PLC_SIM v{self.version} has been successfully created!")
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ # Create an instance and run the release process
|
|
|
+ maker = ReleaseMaker()
|
|
|
+ maker.make_release()
|