From 590f93795965c6db65b2cfaa514ac7977908e12a Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sun, 19 Apr 2026 13:32:26 -0700 Subject: [PATCH] add release script --- .gitignore | 13 +++- make_release.py | 67 +++++++++++++++++++ .../challenge-common-table-v1-v2.afs | 1 - 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100755 make_release.py delete mode 120000 system/item-tables/challenge-common-table-v1-v2.afs diff --git a/.gitignore b/.gitignore index 6091d74f..6efc4582 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Build products newserv +newserv.exe src/Revision.cc # CMake files @@ -37,12 +38,22 @@ system/teams/*.json # Files fuzziqersoftware uses that don't make sense to be committed to the main # repository *.dec +*.WIP-s files -make_release.py notes-private old-khyller old-newserv release release.zip +all-quests system/dol system/patch-bb/data +system/client-functions/Debug-Private +system/config.2.json +system/ep3/banners +system/ep3/cardtex +system/ep3/cardtex-trial +system/players +system/quests/includes +system/quests/private +.vscode diff --git a/make_release.py b/make_release.py new file mode 100755 index 00000000..aa4b50ae --- /dev/null +++ b/make_release.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +import os +import shutil +import subprocess +import sys +from typing import Callable + + +def filter_directory(dir: str, predicate: Callable[[str], bool]): + for filename in os.listdir(dir): + if not predicate(filename): + path = os.path.join(dir, filename) + if os.path.isfile(path): + os.remove(path) + else: + shutil.rmtree(path) + + +def main(): + print("Deleting existing release directory") + if os.path.exists("release"): + shutil.rmtree("release") + if os.path.exists("release.zip"): + os.remove("release.zip") + os.mkdir("release") + + print("Adding executables") + shutil.copy("newserv", "release/newserv-macos") + shutil.copy("newserv.exe", "release/newserv-windows.exe") + shutil.copy("README.md", "release/README.md") + + print("Adding system directory") + shutil.copytree("system", "release/system") + + print("Removing instance-based and temporary files") + filter_directory( + "release/system", + lambda filename: (not filename.endswith(".json")) + or filename == "config.example.json", + ) + filter_directory( + "release/system/ep3", lambda filename: not filename.startswith("cardtex") + ) + filter_directory( + "release/system/client-functions", + lambda filename: filename not in ("Debug-Private", "FastLoading", "notes.txt"), + ) + filter_directory("release/system/dol", lambda filename: False) + filter_directory("release/system/ep3/banners", lambda filename: False) + filter_directory("release/system/ep3/battle-records", lambda filename: False) + filter_directory("release/system/licenses", lambda filename: False) + filter_directory("release/system/players", lambda filename: False) + filter_directory( + "release/system/quests", + lambda filename: filename not in ("private", "includes"), + ) + filter_directory("release/system/teams", lambda filename: filename == "base.json") + subprocess.check_call(["find", "release", "-name", ".DS_Store", "-delete"]) + subprocess.check_call(["find", "release", "-name", "*.WIP-s", "-delete"]) + + print("Setting up configuration") + os.rename("release/system/config.example.json", "release/system/config.json") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/system/item-tables/challenge-common-table-v1-v2.afs b/system/item-tables/challenge-common-table-v1-v2.afs deleted file mode 120000 index e8a6fc3e..00000000 --- a/system/item-tables/challenge-common-table-v1-v2.afs +++ /dev/null @@ -1 +0,0 @@ -ItemCT-pc-v2.afs \ No newline at end of file