-
Notifications
You must be signed in to change notification settings - Fork 2
/
dist.py
110 lines (80 loc) · 2.65 KB
/
dist.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
"""Create distributions of pyblish-shell
Platforms:
- zip
- windows (requires InnoSetup)
Example:
$ python dist.py windows --clean
$ python dist.py zip
"""
import os
import sys
import shutil
import zipfile
import argparse
import subprocess
from pyblish_shell import version
build = (os.environ.get("APPVEYOR_BUILD_NUMBER") or
os.environ.get("TRAVIS_BUILD_NUMBER") or
0)
def build_inno_exe(src, dst):
"""Create Windows installer using Inno Setup
Arguments:
src (str): Path to bundle, e.g. build
dst (str): Output directory in which to compile installer, e.g. dist
"""
print("Creating installer..")
try:
iscc = subprocess.check_output(["where", "iscc"]).strip()
except subprocess.CalledProcessError:
sys.stderr.write("Could not find Inno Setup\n")
exit(1)
setup = os.path.join(os.getcwd(), "setup.iss")
print("Compiling \"%s\" using \"%s\"" % (setup, iscc))
subprocess.call([iscc,
"/dMyVersion=%s-build%s" % (version, build),
"/dMyOutputDir=%s" % dst,
setup])
print("Successfully created installer")
def build_zip(src, dst, platform):
"""Create zip archive
Arguments:
src (str): Path to bundle, e.g. build
dst (str): Output directory in which to compile installer, e.g. dist
"""
dst = os.path.join(
dst, "pyblish-shell-{version}-build{build}-{platform}-x64.zip".format(
version=version,
build=build,
platform=platform)
)
print("Creating archive %s" % dst)
with zipfile.ZipFile(dst, "w") as zf:
for base, dirs, fnames in os.walk(src):
for fname in fnames:
abspath = os.path.join(base, fname)
print("Adding %s" % abspath)
zf.write(abspath,
os.path.relpath(abspath, src),
compress_type=zipfile.ZIP_DEFLATED)
print("%s created" % dst)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("platform")
parser.add_argument("--clean", action="store_true")
args = parser.parse_args()
src = os.path.abspath("build")
dst = os.path.abspath("dist")
if args.clean and os.path.exists(dst):
print("Cleaning dist directory..")
try:
shutil.rmtree(dst)
except:
sys.stderr.write("Could not remove dist directory")
exit(1)
try:
os.makedirs(dst)
except:
pass # Already exists
build_zip(src, dst, args.platform)
if args.platform == "windows":
build_inno_exe(src, dst)