# Deploy Workflow This document describes the current Debian deployment workflow used on the VPS. ## Repositories And Responsibilities There are two separate repositories involved in a production deploy: - `m2dev-server-src`: source code, build system, smoke tests, login smoke utility - `m2dev-server`: runtime files, configs, quests, systemd deployment assets In practice: - source changes are built from `m2dev-server-src` - runtime files are synchronized from `m2dev-server` - the live instance runs from `~/metin/runtime/server` ## Current VPS Helper Scripts The current production VPS also has local host-side helper scripts under: ```text /home/mt2.jakubkadlec.dev/metin/deploy/ ``` Current helpers: - `build-server.sh` - `sync-runtime.sh` - `compile-quests.sh` - `install-runtime.sh` These are currently VPS-local operational wrappers. They are useful, but they are not yet versioned in this repository. ## Common Deploy Paths Source repository: ```text /home/mt2.jakubkadlec.dev/metin/repos/m2dev-server-src ``` Runtime repository: ```text /home/mt2.jakubkadlec.dev/metin/repos/m2dev-server ``` Build directory: ```text /home/mt2.jakubkadlec.dev/metin/build/server-src ``` Live runtime: ```text /home/mt2.jakubkadlec.dev/metin/runtime/server ``` ## Standard Deploy Sequence ### 1. Update repositories ```bash ssh mt2 sudo -iu mt2.jakubkadlec.dev git -C ~/metin/repos/m2dev-server-src pull --ff-only sudo -iu mt2.jakubkadlec.dev git -C ~/metin/repos/m2dev-server pull --ff-only ``` ### 2. Build source Equivalent manual build: ```bash sudo -iu mt2.jakubkadlec.dev \ cmake -S ~/metin/repos/m2dev-server-src \ -B ~/metin/build/server-src \ -G Ninja sudo -iu mt2.jakubkadlec.dev \ cmake --build ~/metin/build/server-src --parallel "$(nproc)" ``` Current VPS wrapper: ```bash sudo -iu mt2.jakubkadlec.dev ~/metin/deploy/build-server.sh ``` ### 3. Synchronize runtime files Equivalent manual sync: - copy runtime tree from `repos/m2dev-server` - exclude generated runtime state - install built `game`, `db`, `qc` into the live runtime Current VPS wrapper: ```bash sudo -iu mt2.jakubkadlec.dev ~/metin/deploy/sync-runtime.sh ``` ### 4. Compile quests ```bash sudo -iu mt2.jakubkadlec.dev ~/metin/deploy/compile-quests.sh ``` This runs: ```bash cd ~/metin/runtime/server/share/locale/english/quest python3 make.py ``` ### 5. Restart services ```bash systemctl restart metin-server.service ``` ### 6. Verify runtime Recommended checks: ```bash systemctl status metin-server.service --no-pager ss -ltnp | rg ':(9000|11000|11011|11012|11013|11991) ' /usr/local/sbin/metin-login-healthcheck ``` ## When A Full Rebuild Is Needed Rebuild `m2dev-server-src` when: - C++ code changed - CMake changed - smoke/login test utility changed Runtime sync only may be enough when: - configs changed - quest files changed - locale data changed - runtime assets changed ## When systemd Must Be Reinstalled Re-run the systemd installer when files under `deploy/systemd/` change: ```bash python3 deploy/systemd/install_systemd.py \ --user mt2.jakubkadlec.dev \ --group mt2.jakubkadlec.dev \ --runtime-root /home/mt2.jakubkadlec.dev/metin/runtime/server \ --channel 1 \ --channel 99 \ --restart ``` ## Recommended Future Improvement The current VPS-local helper scripts should eventually be moved into a versioned, reviewable deploy workflow in the repository, or replaced with a single documented deployment entrypoint.