33 lines
1.4 KiB
Bash
Executable File
33 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build current sources, then start one native process. Rust reads .env as data.
|
|
set -euo pipefail
|
|
umask 077
|
|
project_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$project_dir"
|
|
# Kept for compatibility: native starts always build now.
|
|
if [[ "${1:-}" == "--build" ]]; then shift; fi
|
|
if [[ "${1:-}" == "--docker" ]]; then
|
|
shift
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "Docker is required for --docker. Install Docker Engine with Compose, or run ./start.sh natively." >&2
|
|
exit 1
|
|
fi
|
|
exec docker compose -f compose.yaml up -d --build "$@"
|
|
fi
|
|
if ! command -v cargo >/dev/null 2>&1; then
|
|
echo "Install Rust via https://rustup.rs and the build dependencies listed in README.md, or use ./start.sh --docker." >&2
|
|
exit 1
|
|
fi
|
|
# Use the same explicit directory for Cargo and the executable. Relative custom
|
|
# paths are resolved from the project, including when invoked from elsewhere.
|
|
build_dir="${CARGO_TARGET_DIR:-$project_dir/target}"
|
|
if [[ "$build_dir" != /* ]]; then build_dir="$project_dir/$build_dir"; fi
|
|
CARGO_TARGET_DIR="$build_dir" cargo build --release --locked
|
|
binary="$build_dir/release/mikrotik-backup"
|
|
if [[ ! -x "$binary" ]]; then
|
|
echo "Cargo did not produce the native executable at $binary. Check your Cargo target configuration." >&2
|
|
exit 1
|
|
fi
|
|
if [[ $# -eq 0 ]]; then set -- serve; fi
|
|
exec "$binary" "$@"
|