diff --git a/.gitignore b/.gitignore index 2d397fc..9e2b23a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /target +*.zip # files generated by running servers steam_appid.txt diff --git a/auth/build_arm64.sh b/auth/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/auth/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/build_arm64.sh b/build_arm64.sh new file mode 100755 index 0000000..ce9f5f8 --- /dev/null +++ b/build_arm64.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# requires cargo cross (cargo install cross) +cross build --release --all --target aarch64-unknown-linux-musl + +./utils/package_release.py ./target/aarch64-unknown-linux-musl/release/ --output openjam_servers_linux_arm64.zip diff --git a/cdn/build_arm64.sh b/cdn/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/cdn/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/cdn/src/main.rs b/cdn/src/main.rs index d4abb6c..8f545fb 100644 --- a/cdn/src/main.rs +++ b/cdn/src/main.rs @@ -11,7 +11,7 @@ async fn index() -> impl Responder { let authors = env!("CARGO_PKG_AUTHORS"); let license = env!("CARGO_PKG_LICENSE"); let repo = env!("CARGO_PKG_REPOSITORY"); - format!("{} {}{} by [{}]\n{}\n{}", name, version, git_version, authors, license, repo) + format!("{} {}:{} by [{}]\n{}\n{}", name, version, git_version, authors, license, repo) } #[actix_web::main] diff --git a/rc_chat/build_arm64.sh b/rc_chat/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_chat/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_chat_room/build_arm64.sh b/rc_chat_room/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_chat_room/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_microtransactions/build_arm64.sh b/rc_microtransactions/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_microtransactions/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_services/build_arm64.sh b/rc_services/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_services/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_services_room/build_arm64.sh b/rc_services_room/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_services_room/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_singleplayer/build_arm64.sh b/rc_singleplayer/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_singleplayer/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_singleplayer_room/build_arm64.sh b/rc_singleplayer_room/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_singleplayer_room/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_social/build_arm64.sh b/rc_social/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_social/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/rc_social_room/build_arm64.sh b/rc_social_room/build_arm64.sh deleted file mode 100755 index 7010ff6..0000000 --- a/rc_social_room/build_arm64.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -cargo build --release --target aarch64-unknown-linux-musl diff --git a/utils/cube_gen.py b/utils/cube_gen.py index 4aa4b5e..92e794d 100755 --- a/utils/cube_gen.py +++ b/utils/cube_gen.py @@ -1,5 +1,7 @@ #!/bin/env python3 +# it is assumed this is run from ./utils/ + import sys import json import argparse diff --git a/utils/package_release.py b/utils/package_release.py new file mode 100755 index 0000000..1dd667c --- /dev/null +++ b/utils/package_release.py @@ -0,0 +1,92 @@ +#!/bin/env python3 + +# it is assumed this is run from the root of the project + +import argparse +import zipfile +import os + +def generate_ip_script(binary_name: str) -> str: + return f"""#!/bin/bash +export RUST_LOG=info + +./{binary_name} --ip "0.0.0.0" +""" + +def generate_plain_script(binary_name: str) -> str: + return f"""#!/bin/bash +export RUST_LOG=info + +./{binary_name} +""" + +BINARIES_TO_INCLUDE = { + "oj_auth": generate_plain_script, + "oj_cdn": generate_ip_script, + "oj_rc_chat": generate_ip_script, "oj_rc_chat_room": generate_ip_script, + "oj_rc_microtransactions": generate_plain_script, + "oj_rc_services": generate_ip_script, "oj_rc_services_room": generate_ip_script, + "oj_rc_singleplayer": generate_ip_script, "oj_rc_singleplayer_room": generate_ip_script, + "oj_rc_social": generate_ip_script, "oj_rc_social_room": generate_ip_script, +} + +PROJECT_FOLDERS_TO_INCLUDE = [ + "assets", +] + +# extra assets; not ones in one of the listed folders +PROJECT_ASSETS_TO_INCLUDE = [ + "auth/Rocket.toml", + "rc_microtransactions/Rocket.toml" +] + +BLANK_FOLDERS_TO_CREATE = [ + "data/robocraft", + "data/robocraft/brawldata", + "data/robocraft/campaigndata", + "data/robocraft/clanavatar", + "data/robocraft/customavatars", +] + +def add_folder_to_zip(archive: zipfile.ZipFile, root_dir: str): + archive.mkdir(root_dir) + for (root, dirs, files) in os.walk(root_dir): + for f in files: + archive.write(os.path.join(root, f)) + for d in dirs: + archive.mkdir(os.path.join(root, d)) + +def main(build_root: str, outfile: str): + print("Packaging binaries in", build_root) + archive = zipfile.ZipFile(outfile, mode="w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) + # handle release binaries + print("Adding", len(BINARIES_TO_INCLUDE), "binaries") + for binary_file in BINARIES_TO_INCLUDE.keys(): + fp = os.path.join(build_root, binary_file) + folder_name = binary_file.replace("oj_", "") + archive.write(fp, arcname=os.path.join(folder_name, binary_file)) + script_generator = BINARIES_TO_INCLUDE[binary_file] + if script_generator is not None: + script = BINARIES_TO_INCLUDE[binary_file](binary_file) + info = zipfile.ZipInfo(os.path.join(folder_name, "run.sh")) + info.external_attr = 0o0755 << 16 # unix file permissions + archive.writestr(info, script) + # handle release assets + print("Adding", len(PROJECT_FOLDERS_TO_INCLUDE), "project folders") + for folder in PROJECT_FOLDERS_TO_INCLUDE: + add_folder_to_zip(archive, folder) + for asset in PROJECT_ASSETS_TO_INCLUDE: + archive.write(asset) + # handle project setup niceties + print("Creating", len(BLANK_FOLDERS_TO_CREATE), "folders") + for folder in BLANK_FOLDERS_TO_CREATE: + archive.mkdir(folder) + archive.close() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("build_dir") + parser.add_argument("--output", default="package.zip") + args = parser.parse_args() + main(args.build_dir, args.output)