Show More
Commit Description:
Add missing component and message.
Commit Description:
Add missing component and message.
File last commit:
Show/Diff file:
Action:
scripts/package.py
187 lines | 6.9 KiB | text/x-python | PythonLexer
#!/bin/env python3
import zipfile
import sys
import shutil
import tempfile
import subprocess
import os
import pathlib
import datetime
template_directory = pathlib.Path("PackageTemplates/")
macos_template = template_directory / "isometric-park-template.app"
windows_template = template_directory / "isometric-park-windows-template"
linux_template = template_directory / "isometric-park-linux-template"
sourcedir = "isometric-park-fna/bin/Release"
destination_directory = pathlib.Path("isometric-park-fna/bin/")
start_date = datetime.datetime(2019, 1, 1)
def months_betweeen(start, end):
return ((end.year - start.year) * 12) + (end.month - start.month)
def create_version_string():
today = datetime.datetime.today()
months = months_betweeen(start_date, today) + 1
version_string = f"0.{months}.{today.strftime('%d')}"
print(f"Version string: {version_string}")
def make_linux(suffix="new"):
new_name = destination_directory / (linux_template.name[:-9] + "-" + suffix)
# shutil.rmtree(new_name)
shutil.copytree(linux_template, new_name)
for (dirpath, _dirname, files) in os.walk(sourcedir):
for file in files:
source = pathlib.Path(dirpath) / file
destination = pathlib.Path(new_name) / os.path.relpath(dirpath, sourcedir) / pathlib.Path(file)
print(source, destination)
os.makedirs(destination.parent, exist_ok=True)
if destination.parent.is_dir() and not destination.parent.exists():
os.mkdir(destination.parent)
elif source.is_dir() and not destination.exists():
print("Copying whole directory!")
shutil.copytree(source, destination)
else:
shutil.copy2(source, destination)
print(pathlib.Path(new_name) / "isometric-park-fna.exe",
pathlib.Path(new_name) / "isometric-park.exe")
shutil.move(pathlib.Path(new_name) / "isometric-park-fna.exe",
pathlib.Path(new_name) / "isometric-park.exe")
new_zip_name = new_name.parent / (new_name.name + ".zip")
with zipfile.ZipFile(new_zip_name, "w",
#May be able to use something better on Linux:
compression=zipfile.ZIP_DEFLATED) as f:
for (dirpath, _dirname, files) in os.walk(new_name):
for file in files:
source = pathlib.Path(dirpath) / file
f.write(source, pathlib.Path(os.path.relpath(sourcedir, dirpath)) / os.path.relpath(dirpath, sourcedir) / pathlib.Path(file))
# f.write(source, pathlib.Path(os.path.relpath(sourcedir, dirpath)) / os.path.relpath(dirpath, sourcedir) / pathlib.Path(file))
def make_windows(suffix="new"):
new_name = destination_directory / (windows_template.name[:-9] + "-" + suffix)
# shutil.rmtree(new_name)
shutil.copytree(windows_template, new_name)
for (dirpath, _dirname, files) in os.walk(sourcedir):
for file in files:
source = pathlib.Path(dirpath) / file
destination = pathlib.Path(new_name) / os.path.relpath(dirpath, sourcedir) / pathlib.Path(file)
print(source, destination)
os.makedirs(destination.parent, exist_ok=True)
if source.parent.is_dir() and not destination.parent.exists():
# shutil.copytree(source.parent, destination.parent)
os.mkdir(destination.parent)
elif source.is_dir() and not destination.exists():
shutil.copytree(source, destination)
else:
shutil.copy2(source, destination)
shutil.move(pathlib.Path(new_name) / "isometric-park-fna.exe",
pathlib.Path(new_name) / "isometric-park.exe")
new_zip_name = new_name.parent / (new_name.name + ".zip")
with zipfile.ZipFile(new_zip_name, "w",
#Windows doesn't natively support other formats
#(besides uncompressed) in my testing:
compression=zipfile.ZIP_DEFLATED) as f:
for (dirpath, _dirname, files) in os.walk(new_name):
for file in files:
source = pathlib.Path(dirpath) / file
f.write(source, pathlib.Path(os.path.relpath(sourcedir, dirpath)) / os.path.relpath(dirpath, sourcedir) / pathlib.Path(file))
def make_macos(suffix="new"):
new_name = destination_directory / (macos_template.name[:-13] + "-" + suffix + ".app" + "/")
# shutil.rmtree(new_name)
shutil.copytree(macos_template, new_name)
for (dirpath, _dirname, files) in os.walk(sourcedir):
for file in files:
source = pathlib.Path(dirpath) / file
destination = new_name / "Contents" / "Resources" / os.path.relpath(dirpath, sourcedir) / file
print(source, destination)
if source.parent.is_dir() and not destination.parent.exists():
# shutil.copytree(source.parent, destination.parent)
os.mkdir(destination.parent)
elif source.is_dir() and not destination.exists():
shutil.copytree(source, destination)
else:
shutil.copy2(source, destination)
shutil.move(pathlib.Path(new_name) / "Contents" / "Resources" / "isometric-park-fna.exe",
pathlib.Path(new_name) / "Contents" / "Resources" / "isometric-park.exe")
def make_source(suffix="new"):
new_name = destination_directory / ("isometric-park-source" + "-" + suffix
+ ".zip")
with tempfile.TemporaryDirectory() as temp:
print(subprocess.getoutput(f"hg clone . {temp}"))
with zipfile.ZipFile(new_name, "w",
#Windows doesn't natively support other formats
#(besides uncompressed) in my testing:
compression=zipfile.ZIP_DEFLATED) as f:
for (dirpath, _dirname, files) in os.walk(temp):
for file in files:
source = pathlib.Path(dirpath) / file
print(os.path.relpath(source, temp))
f.write(source, os.path.relpath(source, temp))
def main():
if len(sys.argv) > 1:
command = sys.argv[1]
if command.lower() == "macos":
if len(sys.argv) > 2:
make_macos(sys.argv[2])
else:
make_macos()
elif command.lower() in ("win", "windows"):
if len(sys.argv) > 2:
make_windows(sys.argv[2])
else:
make_windows()
elif command.lower() == "linux":
if len(sys.argv) > 2:
make_linux(sys.argv[2])
else:
make_linux()
elif command.lower() == "source":
if len(sys.argv) > 2:
make_source(sys.argv[2])
else:
make_source()
elif command.lower() == "version":
create_version_string()
else:
pass
if __name__ == '__main__':
main()