diff --git a/justfile b/justfile index e3be8f2..c9c89ef 100644 --- a/justfile +++ b/justfile @@ -13,3 +13,9 @@ check: serve: uv run --frozen python3 -m server.main + +bundle: + ./scripts/bundler.sh + +install: + ./scripts/install.sh diff --git a/scripts/bundler.sh b/scripts/bundler.sh new file mode 100755 index 0000000..d31dd87 --- /dev/null +++ b/scripts/bundler.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -euo pipefail + +BINARY_NAME="tiles" +DIST_DIR="dist" +SERVER_DIR="server" +TARGET="release" + +VERSION=$(grep '^version' Cargo.toml | head -1 | awk -F'"' '{print $2}') +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m) +OUT_NAME="${BINARY_NAME}-v${VERSION}-${ARCH}-${OS}" + +echo "🚀 Building ${BINARY_NAME} (${TARGET} mode)..." +cargo build --${TARGET} + +mkdir -p "${DIST_DIR}/tmp" +cp "target/${TARGET}/${BINARY_NAME}" "${DIST_DIR}/tmp/" +cp -r "${SERVER_DIR}" "${DIST_DIR}/tmp/" + +rm -rf "${DIST_DIR}/tmp/server/__pycache__" +rm -rf "${DIST_DIR}/tmp/server/.venv" + +echo "📦 Creating ${OUT_NAME}.tar.gz..." +tar -czf "${DIST_DIR}/${OUT_NAME}.tar.gz" -C "${DIST_DIR}/tmp" . + +rm -rf "${DIST_DIR}/tmp" + +echo "✅ Bundle created: ${DIST_DIR}/${OUT_NAME}.tar.gz" diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..8477783 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +set -euo pipefail + +ENV="dev" # prod is another env, try taking it from github env +REPO="tilesprivacy/tilekit" +# VERSION="${TILES_VERSION:-latest}" +VERSION="0.1.0" +INSTALL_DIR="$HOME/.local/bin" # CLI install location +SERVER_DIR="$HOME/.local/share/tiles/server" # Python server folder +TMPDIR="$(mktemp -d)" +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m) + + +log() { echo -e "\033[1;36m$*\033[0m"; } +err() { echo -e "\033[1;31m$*\033[0m" >&2; exit 1; } + +echo "🔍 Checking Python..." +if ! command -v python3 >/dev/null 2>&1; then + log "⚠️ Python 3.10+ not found." + if [[ "$OS" == "darwin" ]]; then + log "Installing via Homebrew..." + brew install python || err "Could not install Python automatically. Please install manually." + elif [[ -f /etc/debian_version ]]; then + log "Installing via apt..." + sudo apt-get update -y && sudo apt-get install -y python3 python3-venv + else + err "Please install Python manually: https://www.python.org/downloads/" + fi +fi + +echo "🔍 Checking uv..." +if ! command -v uv >/dev/null 2>&1; then + log "⬇️ Installing uv..." + curl -LsSf https://astral.sh/uv/install.sh | sh + export PATH="$HOME/.local/bin:$PATH" +fi + +log "⬇️ Downloading Tiles (${VERSION}) for ${ARCH}-${OS}..." + + + +if [[ "$ENV" == "prod" ]]; then + TAR_URL="https://github.com/${REPO}/releases/download/${VERSION}/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz" + curl -fsSL -o "${TMPDIR}/tiles.tar.gz" "$TAR_URL" +else + # Installer suppose to ran from tilekit root folder after running the bundler + mv "dist/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz" "${TMPDIR}/tiles.tar.gz" +fi + +echo "⬇️ Installing tiles..." +# Lets point to tile repo +tar -xzf "${TMPDIR}/tiles.tar.gz" -C "${TMPDIR}" + +log "📦 Installing tiles binary to ${INSTALL_DIR}..." +mkdir -p "${INSTALL_DIR}" +install -m 755 "${TMPDIR}/tiles" "${INSTALL_DIR}/tiles" + +log "📦 Installing Python server to ${SERVER_DIR}..." +mkdir -p "${SERVER_DIR}" +cp -r "${TMPDIR}/server"/* "${SERVER_DIR}/" + +log "🔧 Setting up Python environment..." +cd "${SERVER_DIR}" +uv sync --frozen || err "Dependency setup failed." + +rm -rf "${TMPDIR}" + +log "✅ Tiles installed successfully!" +log "" +log "👉 Make sure ${INSTALL_DIR} is in your PATH."