|
|
#!/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()
|
|
|
|