forked from raulsntos/godot-dotnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.py
111 lines (84 loc) · 3.51 KB
/
build.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/python3
"""
This is the main entry-point for the build script, the build.sh and build.ps1
scripts are just wrappers that call this script. The reason is to avoid code
duplication for the different platforms.
The build.sh and build.ps1 are still kept as separate scripts because I wanted
to keep the same argument parsing behavior that matches the Arcade SDK and
I couldn't find a way to achieve the same behavior with Python directly.
"""
import os
import sys
import signal
import argparse
from argparse import Namespace
from typing import List
from typing import Tuple
import tools
# Silence traceback on Ctrl-C.
signal.signal(signal.SIGINT, lambda x, y: sys.exit(1))
def _parse_args() -> Tuple[Namespace, List[str]]:
parser = argparse.ArgumentParser(add_help=False)
# Common settings.
parser.add_argument("--configuration", "-c")
if os.name == "nt":
parser.add_argument("--platform")
parser.add_argument("--verbosity", "-v")
parser.add_argument("--binaryLog", "-bl", action="store_true", default=None)
parser.add_argument("--help", "-h", action="store_true", default=None)
# Actions.
parser.add_argument("--restore", "-r", action="store_true", default=None)
parser.add_argument("--build", "-b", action="store_true", default=None)
parser.add_argument("--rebuild", action="store_true", default=None)
parser.add_argument("--test", "-t", action="store_true", default=None)
parser.add_argument("--pack", action="store_true", default=None)
parser.add_argument("--publish", action="store_true", default=None)
parser.add_argument("--clean", action="store_true", default=None)
parser.add_argument("--productBuild", "-pb", action="store_true", default=None)
parser.add_argument("--pushNupkgsLocal")
# Advanced settings.
parser.add_argument("--projects")
parser.add_argument("--ci", action="store_true", default=None)
parser.add_argument("--excludeCIBinarylog", "-nobl", action="store_true", default=None)
parser.add_argument("--nodeReuse", type=lambda x: (str(x).lower() == "true"))
parser.add_argument("--warnAsError", type=lambda x: (str(x).lower() == "true"))
if os.name == "nt":
parser.add_argument("--msbuildEngine")
parser.add_argument("--excludePrereleaseVS")
return parser.parse_known_args()
def build(unknown_args: List[str]):
toolset = tools.initialize_toolset()
build_args = []
if tools.projects:
# Resolve relative project paths into full paths.
projects = tools.projects
projects = list(map(os.path.abspath, projects))
projects_str = ";".join(projects)
build_args.append(f"/p:Projects={projects_str}")
if tools.binary_log:
build_args.append(f'/bl:"{tools.log_dir}/Build.binlog"')
build_args += [
f"/p:Configuration={tools.configuration}",
f"/p:RepoRoot={tools.repo_root}",
f"/p:Restore={tools.restore}",
f"/p:Build={tools.build}",
f"/p:Rebuild={tools.rebuild}",
f"/p:Test={tools.test}",
f"/p:Pack={tools.pack}",
f"/p:Publish={tools.publish}",
f"/p:ProductBuild={tools.product_build}",
]
tools.msbuild([toolset, *build_args, *unknown_args])
def clean():
if os.path.exists(tools.artifacts_dir):
os.remove(tools.artifacts_dir)
print("Artifacts directory deleted.", flush=True)
exit(0)
def main():
args, unknown_args = _parse_args()
tools.init(args)
if args.clean:
clean()
build(unknown_args)
if __name__ == "__main__":
main()