.PHONY: build test fmt clippy release-check 1.0-check reconnect-check hostile-network-check persistence-check package-check install package-release package-release-linux package-release-windows publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness

build:
	cargo build --release

test:
	cargo test --all-targets

fmt:
	cargo fmt

clippy:
	cargo clippy --all-targets -- -D warnings

release-check:
	cargo fmt --check
	sh -n install.sh scripts/*.sh
	cargo clippy --all-targets -- -D warnings
	cargo test --all-targets
	$(MAKE) tui-harness

1.0-check: release-check reconnect-check hostile-network-check persistence-check package-check

reconnect-check:
	cargo test --test integration_smoke resume_updates_udp_endpoint_for_roaming -- --nocapture
	DOSH_SOAK_SECONDS=$${DOSH_SOAK_SECONDS:-1800} cargo test --test integration_smoke sleep_roaming_soak_30m -- --ignored --nocapture

hostile-network-check:
	cargo test --test hostile_network -- --nocapture
	DOSH_BADNET_SOAK_SECONDS=$${DOSH_BADNET_SOAK_SECONDS:-1800} cargo test --test hostile_network bad_network_tui_work_soak_30m -- --ignored --nocapture

persistence-check:
	cargo test --test integration_smoke session_survives_server_restart_same_shell_and_screen -- --nocapture
	cargo test --test integration_smoke multiple_persistent_named_sessions_survive_restart_independently -- --nocapture

package-check:
	$(MAKE) package-release-linux
	$(MAKE) package-release-windows
	sh scripts/verify-release-artifacts.sh \
		target/dosh-release/dosh-linux-x86_64.tar.gz \
		target/dosh-release/dosh-windows-x86_64.zip

install:
	sh install.sh --from-current

package-release:
	sh scripts/package-release.sh

package-release-linux:
	DOSH_PACKAGE_OS=linux DOSH_PACKAGE_ARCH=x86_64 sh scripts/package-release.sh

package-release-windows:
	DOSH_PACKAGE_OS=windows DOSH_PACKAGE_ARCH=x86_64 DOSH_PACKAGE_TARGET=x86_64-pc-windows-gnu sh scripts/package-release.sh

publish-release:
	sh scripts/publish-gitea-release.sh

bench-report:
	sh scripts/bench-report.sh

# Safe, self-contained local benchmark matrix (native cold auth, cached attach
# ticket, local-auth) on a throwaway server bound to 127.0.0.1 on a free port in
# a temp HOME. Never touches the production server or UDP port 50000.
bench-local:
	sh scripts/bench-local.sh

# Same matrix, machine-readable JSON output (one object per metric with raw
# samples). Useful for publishing or regression tracking.
bench-local-json:
	DOSH_BENCH_JSON=1 sh scripts/bench-local.sh

bench-docker-ssh:
	sh scripts/ci-docker-ssh-bench.sh

bench-docker-mosh:
	DOSH_BENCH_INCLUDE_MOSH=1 sh scripts/ci-docker-ssh-bench.sh

fuzz-smoke:
	sh scripts/fuzz-run.sh 20

# Longer pre-launch fuzz pass. Override with DOSH_FUZZ_SECONDS=NN.
fuzz-deep:
	DOSH_FUZZ_SECONDS=$${DOSH_FUZZ_SECONDS:-300} sh scripts/fuzz-run.sh

tui-harness:
	sh scripts/tui-harness.sh

# 30-minute launch soak by default. Override with DOSH_SOAK_SECONDS=NN.
soak-local:
	DOSH_SOAK_SECONDS=$${DOSH_SOAK_SECONDS:-1800} cargo test --test integration_smoke sleep_roaming_soak_30m -- --ignored --nocapture
