2 import argparse, os, subprocess
3 from pathlib import Path
5 # Get the solution list
7 def get_sln_list(dirname, rebuild=False):
8 filenames = os.listdir(dirname)
9 for filename in filenames:
10 full_filename = os.path.join(dirname, filename)
11 if "Managed.sln" in full_filename:
13 if os.path.isdir(full_filename):
14 get_sln_list(full_filename, rebuild)
16 ext = os.path.splitext(full_filename)[-1]
18 sln_lists.append(full_filename)
19 if rebuild and ext == ".tpk":
20 subprocess.run((f"rm {full_filename}").split(), encoding="utf-8", stdout=subprocess.PIPE).stdout
23 # Get the solution path
24 def get_sln_path(dirname, slnname):
25 filenames = os.listdir(dirname)
26 for filename in filenames:
27 full_filename = os.path.join(dirname, filename)
28 if "Managed.sln" in full_filename:
30 if os.path.isdir(full_filename):
31 get_sln_path(full_filename, slnname)
33 ext = os.path.splitext(full_filename)[-1]
34 if ext == ".sln" and f"{slnname}" in full_filename:
35 sln_lists.append(full_filename)
38 # Build the app to generated .tpk
40 def build_tpk(sln_lists):
41 apps_path = os.path.dirname(__file__)
43 print(f"Building : {sln}...", end="\r")
44 raw = subprocess.run((f"dotnet build {sln}").split(), encoding="utf-8", stdout=subprocess.PIPE).stdout
45 lines = [l for l in raw.splitlines() if ".tpk" in l]
47 print(f"Build fail : {sln} ")
49 slnname = lines[0].split("->")[0].strip()
50 filepath = lines[0].split("->")[1].strip()
51 filename = Path(filepath).name
52 if slnname not in filename:
53 filepath = rename_tpk(slnname, filepath)
54 filename = Path(filepath).name
55 print(f"Build complete : {filename} ")
56 subprocess.run((f"mv {filepath} {apps_path}").split(), encoding="utf-8", stdout=subprocess.PIPE).stdout
58 # Change the .tpk name of the application with the same PkgID because of update test
59 def rename_tpk(slnname, filepath):
60 new_filepath = filepath.replace(Path(filepath).name, f"org.tizen.example.{slnname}-1.0.0.tpk")
61 subprocess.run((f"mv {filepath} {new_filepath}").split(), encoding="utf-8", stdout=subprocess.PIPE).stdout
66 parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
67 parser.add_argument("-r", "--rebuild", help="Remove all existing tpk and rebuild", action="store_true")
68 parser.add_argument("SLN_PATH", type=str, nargs="*", help="Solution path")
69 args = parser.parse_args()
72 for sln_path in args.SLN_PATH:
73 sln_lists = get_sln_path("./", f"{sln_path}")
75 sln_lists = get_sln_list("./", args.rebuild)
77 build_tpk(sorted(sln_lists))
80 if __name__ == "__main__":