-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathutils.py
More file actions
executable file
·146 lines (121 loc) · 5.58 KB
/
Copy pathutils.py
File metadata and controls
executable file
·146 lines (121 loc) · 5.58 KB
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env python3
import argparse
import os
import subprocess
import sys
def _sprun(cmd: list, *args, **kwargs):
print("+ " + " ".join(cmd))
subprocess.run(cmd, check=True, *args, **kwargs)
def _sprun_shell(cmd: str, *args, **kwargs):
print("+ " + cmd)
subprocess.run(cmd, check=True, shell=True, *args, **kwargs)
def _ci_before_deploy():
docs_json_file = open("docs.json", "w")
_sprun(["sourcekitten", "doc", "--spm", "--module-name", "SWCompression"], stdout=docs_json_file)
docs_json_file.close()
_sprun(["jazzy"])
def _ci_script_macos():
_sprun_shell("xcodebuild -version")
_sprun(["swift", "--version"])
xcodebuild_command_parts = ["xcodebuild", "-quiet", "-project", "SWCompression.xcodeproj", "-scheme", "SWCompression"]
destinations_actions = [(["-destination 'platform=macOS'"], ["clean", "test"]),
(["-destination 'platform=iOS Simulator,name=" + os.environ["IOS_SIMULATOR"] + "'"], ["clean", "test"]),
(["-destination 'platform=watchOS Simulator,name=" + os.environ["WATCHOS_SIMULATOR"] + "'"], ["clean", "test"]),
(["-destination 'platform=tvOS Simulator,name=Apple TV'"], ["clean", "test"])]
for destination, actions in destinations_actions:
xcodebuild_command = xcodebuild_command_parts + destination + actions
# If xcodebuild is not run inside shell, then destination parameters are ignored for some reason.
_sprun_shell(" ".join(xcodebuild_command))
def action_ci(args):
if args.cmd == "before-deploy":
_ci_before_deploy()
elif args.cmd == "script-macos":
_ci_script_macos()
else:
raise Exception("Unknown CI command")
def action_cw(args):
_sprun(["rm", "-rf", "build/"])
_sprun(["rm", "-rf", "docs/"])
_sprun(["rm", "-rf", ".build/"])
_sprun(["rm", "-f", "docs.json"])
_sprun(["rm", "-f", "Package.resolved"])
_sprun(["rm", "-f", "SWCompression.framework.zip"])
def action_pr(args):
_sprun(["agvtool", "next-version", "-all"])
_sprun(["agvtool", "new-marketing-version", args.version])
f = open(".jazzy.yaml", "r", encoding="utf-8")
lines = f.readlines()
f.close()
f = open(".jazzy.yaml", "w", encoding="utf-8")
for line in lines:
if line.startswith("module_version: "):
line = "module_version: " + args.version + "\n"
elif line.startswith("github_file_prefix: "):
line = "github_file_prefix: https://github.com/tsolomko/SWCompression/tree/" + args.version + "\n"
f.write(line)
f.close()
f = open("Sources/swcomp/main.swift", "r", encoding="utf-8")
lines = f.readlines()
f.close()
f = open("Sources/swcomp/main.swift", "w", encoding="utf-8")
for line in lines:
if line.startswith("let _SWC_VERSION = "):
line = "let _SWC_VERSION = \"" + args.version + "\"\n"
f.write(line)
f.close()
def action_gstt(args):
def process_sub_dir(dir: str):
files = []
for f in os.listdir(dir):
if os.path.isfile(os.path.join(dir, f)):
if f == ".DS_Store":
continue
files.append(os.path.join(dir, f))
else:
files += process_sub_dir(os.path.join(dir, f))
return files
test_root = "Tests/Test Files/"
test_dirs = list(os.walk(test_root))[0][1]
test_files = []
for subdir in test_dirs:
test_files += process_sub_dir(os.path.join(test_root, subdir))
out = ".testTarget(\n"
out += " name: \"TestSWCompression\",\n"
out += " dependencies: [\"SWCompression\"],\n"
out += " path: \"Tests\",\n"
out += " exclude: [\n"
for excluded_file in ["Results.md", "Test Files/gitattributes-copy", "Test Files/README.md"]:
out += " \"" + excluded_file + "\",\n"
out += " ],\n"
out += " sources: [\"TestSWCompression\"],\n"
out += " resources: [\n"
for test_file in test_files:
out += " .copy(\"" + test_file[6:] + "\"),\n"
out += " ]),"
print(out)
parser = argparse.ArgumentParser(description="A tool with useful commands for developing SWCompression")
subparsers = parser.add_subparsers(title="commands", help="a command to perform", metavar="CMD")
# Parser for 'ci' command.
parser_ci = subparsers.add_parser("ci", help="a subset of commands used by CI",
description="a subset of commands used by CI")
parser_ci.add_argument("cmd", choices=["before-deploy", "script-macos"],
help="a command to perform on CI", metavar="CI_CMD")
parser_ci.set_defaults(func=action_ci)
# Parser for 'cleanup-workspace' command.
parser_cw = subparsers.add_parser("cleanup-workspace", help="cleanup workspace",
description="cleans workspace from files produced by various build systems")
parser_cw.set_defaults(func=action_cw)
# Parser for 'prepare-release' command.
parser_pr = subparsers.add_parser("prepare-release", help="prepare next release",
description="prepare next release of SWCompression")
parser_pr.add_argument("version", metavar="VERSION", help="next version number")
parser_pr.set_defaults(func=action_pr)
# Parser for 'gen-spm-test-target' command.
parser_gstt = subparsers.add_parser("gen-spm-test-target", help="Generate SPM test target",
description="generates the declaration of the test target for inclusion in the Package.swift")
parser_gstt.set_defaults(func=action_gstt)
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
args = parser.parse_args()
args.func(args)