[TC Fixed] Remove the TC for dotnet-nui-loader
[platform/core/dotnet/launcher.git] / tests / Apps / BuildTPK.py
1 #!/usr/bin/env python3
2 import argparse, os, subprocess
3 from pathlib import Path
4
5 # Get the solution list
6 sln_lists = []
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:
12             continue
13         if os.path.isdir(full_filename):
14             get_sln_list(full_filename, rebuild)
15         else:
16             ext = os.path.splitext(full_filename)[-1]
17             if ext == ".sln":
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
21     return sln_lists
22
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:
29             continue
30         if os.path.isdir(full_filename):
31             get_sln_path(full_filename, slnname)
32         else:
33             ext = os.path.splitext(full_filename)[-1]
34             if ext == ".sln" and f"{slnname}" in full_filename:
35                 sln_lists.append(full_filename)
36     return sln_lists
37
38 # Build the app to generated .tpk
39 tpk_lists=[]
40 def build_tpk(sln_lists):
41     apps_path = os.path.dirname(__file__)
42     for sln in sln_lists:
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]
46         if not len(lines):
47             print(f"Build fail : {sln}          ")
48             continue
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
57
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
62     return new_filepath
63
64 # Main entry point
65 def main():
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()
70
71     if args.SLN_PATH:
72         for sln_path in args.SLN_PATH:
73             sln_lists = get_sln_path("./", f"{sln_path}")
74     else:
75         sln_lists = get_sln_list("./", args.rebuild)
76
77     build_tpk(sorted(sln_lists))
78
79
80 if __name__ == "__main__":
81     main()