diff --git a/DEVELOPERS.md b/DEVELOPERS.md index da5b8d6..1b79308 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -1,5 +1,8 @@ # TODO: link to here from sphinx docs +# Setting up precommit hooks +pre-commit install + # Fetching submodules git submodule update --recursive --init @@ -9,5 +12,7 @@ uv pip install -e .[dev] # Building documentation sphinx-build -M html source build -a -# Building installer package -TBD +# Building standalone DZGUI release binaries +1. Run `./scripts/dl_pyapp.sh` +2. Run `python3 scripts/release.py` +3. Generate a release and tag against the bundled `dzgui` executable diff --git a/LICENSE b/LICENSE index 89ad0bb..1ed2981 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,6 @@ -For additional licenses to submodules, see docs/licenses. +Additional licenses to git submodules not explicitly shipped with the source code: +python-a2s: https://raw.githubusercontent.com/Yepoleb/python-a2s/refs/heads/master/LICENSE +dayzquery: https://raw.githubusercontent.com/Yepoleb/dayzquery/refs/heads/master/LICENSE GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 969add7..95f9db0 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,22 @@ ## What this is -DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. +DZGUI is a turnkey browser and mod manager for DayZ on Linux. It allows you to connect to both official and modded/community DayZ servers on Linux via a graphical user interface (GUI). This overcomes certain limitations in the Linux client and helps prepare the game to launch by providing features like: -- Search for and display server metadata in a table (server name, player count, ping, queue size, current gametime, distance, IP) +- Search for and display global and LAN servers via an interactive table +- Supports official, third-party, and modded DayZ servers +- Automatically find and prepare mods being requested by servers - Add/delete/manage favorite servers by IP or ID - Quick-connect to favorite/recent servers -- Find and prepare mods being requested by servers (choose from manual or automatic installation) -- Bulk delete/update local mods -- Concatenate launch options to pass to Steam -- Connect to mod-enabled LAN servers +- Manage local mods and symlinks +- Prepare launch options to pass to Steam ## Setup and usage -Refer to the documentation for installation and setup instructions: +Please refer to the documentation for installation and setup instructions: - [GitHub](https://aclist.github.io/dzgui/index.html) -- [Mirror (Codeberg)](https://aclist.codeberg.page) +- [Codeberg (Mirror)](https://aclist.codeberg.page) ![A screenshot of DZGUI](/images/example.png) @@ -24,4 +24,14 @@ Refer to the documentation for installation and setup instructions: Geolocation records from [DB-IP](https://db-ip.com) under [CC 4.0 license](https://creativecommons.org/licenses/by/4.0/) -# TODO: mention third party libraries +This tool uses [python-a2s](https://github.com/Yepoleb/python-a2s) and [dayzquery](https://github.com/Yepoleb/dayzquery) as submodules; licenses for these submodules can be found in the LICENSES file +of the project root. + +Both the geolocation records and submodules listed above are not shipped with the source code, but are retrieved and assembled at runtime. + +Finally, executable versions of DZGUI shipped as release binaries are thin wrappers around the Python interpreter, and also retrieve and assemble the above dependencies at runtime on the end-user's +machine, rather than using pre-compiled source code. Users wishing to review these dependencies can inspect the 'pyproject.toml' manifest in the project root. + +## Disclaimer + +DZGUI is beta-quality software and is provided as-is. diff --git a/pyproject.toml b/pyproject.toml index cc2d4c8..44ace5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,11 @@ Issues = "https://github.com/aclist/dzgui/issues" Changelog = "https://github.com/aclist/dzgui/blob/main/CHANGELOG.md" [project.optional-dependencies] -docs = ["sphinx"] +docs = [ + "sphinx==9.0.4", + "sphinx-rtd_theme==3.1.0", + "sphinx-copybutton==0.5.2" +] test = [ "black==25.1.0", "pre-commit==4.4.0", @@ -55,6 +59,7 @@ lint = [ "types-psutil==7.2.2.20260508", ] build = [ + "pre-commit==4.4.0", "build==1.5.0", ] diff --git a/scripts/dl_pyapp.sh b/scripts/dl_pyapp.sh new file mode 100755 index 0000000..8117d64 --- /dev/null +++ b/scripts/dl_pyapp.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +echo "$PWD" +url="https://github.com/ofek/pyapp/releases/latest/download/source.tar.gz" +output="${PWD}/pyapp-source.tar.gz" +curl "$url" -Lo "$output" +tar -xzf "$output" +mv ${PWD}/pyapp-v* ${PWD}/pyapp-latest +rm "$output" diff --git a/scripts/release.py b/scripts/release.py new file mode 100644 index 0000000..5fff112 --- /dev/null +++ b/scripts/release.py @@ -0,0 +1,40 @@ +import build +import os +import subprocess + +from importlib import metadata +from pathlib import Path + +from dzgui.const.constants import APP_NAME_LOWER + +root = Path(__file__).resolve().parents[1] +output = root.joinpath("dist") + +pyapp_dir = root.joinpath("pyapp-latest") + +builder = build.ProjectBuilder(root) +builder.build("wheel", output_directory=output) + +interpreter = "py3" +arch = "none" +target = "any" +version = metadata.version(APP_NAME_LOWER) +filename = f"{APP_NAME_LOWER}-{version}-{interpreter}-{arch}-{target}.whl" + +wheel = str(output.joinpath(filename)) +entrypoint = "dzgui.main:main" + +env = os.environ +env["PYAPP_PROJECT_VERSION"] = version +env["PYAPP_PROJECT_NAME"] = APP_NAME_LOWER +env["PYAPP_EXEC_SPEC"] = entrypoint +env["PYAPP_PROJECT_PATH"] = wheel +env["PYAPP_DISTRIBUTION_EMBED"] = "1" +env["PYAPP_PYTHON_VERSION"] = "3.13" + +proc = subprocess.run(["cargo", "build", "--release"], env=env, cwd=pyapp_dir) +if proc.returncode == 0: + output_exe = root.joinpath("pyapp-latest/target/release/pyapp") + release_exe = output.joinpath("dzgui") + output_exe.rename(release_exe) + print(f"Wrote output to '{release_exe}'")