diff --git a/tools/build_patch.gd b/tools/build_patch.gd new file mode 100644 index 0000000..5dc813f --- /dev/null +++ b/tools/build_patch.gd @@ -0,0 +1,53 @@ +#!/usr/bin/env -S godot --headless -s +extends MainLoop + +func _initialize(): + print("--- Starting Automated Patch Build ---") + + var output_file = "patch.pck" + var changed_files_txt = "changed_files.txt" + + if not FileAccess.file_exists(changed_files_txt): + print("ERROR: missing changed_files.txt. Cannot build patch.") + return + + var pck_packer = PCKPacker.new() + var err = pck_packer.pck_start(output_file) + if err != OK: + print("ERROR: Could not start PCK file: ", output_file) + return + + var file = FileAccess.open(changed_files_txt, FileAccess.READ) + var count = 0 + + while not file.eof_reached(): + var line = file.get_line().strip_edges() + if line.is_empty(): continue + + var res_path = "res://" + line + # Include automatically compiled scripts for GDScript + if line.ends_with(".gd"): + var remap_path = res_path.replace(".gd", ".gdc") + if FileAccess.file_exists(remap_path): + pck_packer.add_file(res_path, remap_path) + else: + pck_packer.add_file(res_path, res_path) + count += 1 + print("Adding (Script): ", res_path) + elif FileAccess.file_exists(res_path): + print("Adding to patch: ", res_path) + pck_packer.add_file(res_path, res_path) + count += 1 + else: + print("Warning: Changed file not found or Is Directory, skipping: ", res_path) + + # Always package our version/changelog list so clients see the new changelog + var version_manifest = "res://assets/data/version.json" + pck_packer.add_file(version_manifest, version_manifest) + print("Adding Version Manifest: ", version_manifest) + + pck_packer.flush(true) + print("--- Patch Build Complete! Packed %d files into %s ---" % [count + 1, output_file]) + +func _process(_delta: float) -> bool: + return true # True tells Godot to gracefully shut down the engine now!