Skip to content

Commit 90edd6d

Browse files
committed
feat: Added bundler and install scripts (for dev)
1 parent 6a3bf29 commit 90edd6d

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

justfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,9 @@ check:
1313

1414
serve:
1515
uv run --frozen python3 -m server.main
16+
17+
bundle:
18+
./scripts/bundler.sh
19+
20+
install:
21+
./scripts/install.sh

scripts/bundler.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
BINARY_NAME="tiles"
5+
DIST_DIR="dist"
6+
SERVER_DIR="server"
7+
TARGET="release"
8+
9+
VERSION=$(grep '^version' Cargo.toml | head -1 | awk -F'"' '{print $2}')
10+
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
11+
ARCH=$(uname -m)
12+
OUT_NAME="${BINARY_NAME}-v${VERSION}-${ARCH}-${OS}"
13+
14+
echo "🚀 Building ${BINARY_NAME} (${TARGET} mode)..."
15+
cargo build --${TARGET}
16+
17+
mkdir -p "${DIST_DIR}/tmp"
18+
cp "target/${TARGET}/${BINARY_NAME}" "${DIST_DIR}/tmp/"
19+
cp -r "${SERVER_DIR}" "${DIST_DIR}/tmp/"
20+
21+
rm -rf "${DIST_DIR}/tmp/server/__pycache__"
22+
rm -rf "${DIST_DIR}/tmp/server/.venv"
23+
24+
echo "📦 Creating ${OUT_NAME}.tar.gz..."
25+
tar -czf "${DIST_DIR}/${OUT_NAME}.tar.gz" -C "${DIST_DIR}/tmp" .
26+
27+
rm -rf "${DIST_DIR}/tmp"
28+
29+
echo "✅ Bundle created: ${DIST_DIR}/${OUT_NAME}.tar.gz"

scripts/install.sh

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
ENV="dev" # prod is another env, try taking it from github env
5+
REPO="tilesprivacy/tilekit"
6+
# VERSION="${TILES_VERSION:-latest}"
7+
VERSION="0.1.0"
8+
INSTALL_DIR="$HOME/.local/bin" # CLI install location
9+
SERVER_DIR="$HOME/.local/share/tiles/server" # Python server folder
10+
TMPDIR="$(mktemp -d)"
11+
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
12+
ARCH=$(uname -m)
13+
14+
15+
log() { echo -e "\033[1;36m$*\033[0m"; }
16+
err() { echo -e "\033[1;31m$*\033[0m" >&2; exit 1; }
17+
18+
echo "🔍 Checking Python..."
19+
if ! command -v python3 >/dev/null 2>&1; then
20+
log "⚠️ Python 3.10+ not found."
21+
if [[ "$OS" == "darwin" ]]; then
22+
log "Installing via Homebrew..."
23+
brew install python || err "Could not install Python automatically. Please install manually."
24+
elif [[ -f /etc/debian_version ]]; then
25+
log "Installing via apt..."
26+
sudo apt-get update -y && sudo apt-get install -y python3 python3-venv
27+
else
28+
err "Please install Python manually: https://www.python.org/downloads/"
29+
fi
30+
fi
31+
32+
echo "🔍 Checking uv..."
33+
if ! command -v uv >/dev/null 2>&1; then
34+
log "⬇️ Installing uv..."
35+
curl -LsSf https://astral.sh/uv/install.sh | sh
36+
export PATH="$HOME/.local/bin:$PATH"
37+
fi
38+
39+
log "⬇️ Downloading Tiles (${VERSION}) for ${ARCH}-${OS}..."
40+
41+
42+
43+
if [[ "$ENV" == "prod" ]]; then
44+
TAR_URL="https://github.com/${REPO}/releases/download/${VERSION}/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz"
45+
curl -fsSL -o "${TMPDIR}/tiles.tar.gz" "$TAR_URL"
46+
else
47+
# Installer suppose to ran from tilekit root folder after running the bundler
48+
mv "dist/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz" "${TMPDIR}/tiles.tar.gz"
49+
fi
50+
51+
echo "⬇️ Installing tiles..."
52+
# Lets point to tile repo
53+
tar -xzf "${TMPDIR}/tiles.tar.gz" -C "${TMPDIR}"
54+
55+
log "📦 Installing tiles binary to ${INSTALL_DIR}..."
56+
mkdir -p "${INSTALL_DIR}"
57+
install -m 755 "${TMPDIR}/tiles" "${INSTALL_DIR}/tiles"
58+
59+
log "📦 Installing Python server to ${SERVER_DIR}..."
60+
mkdir -p "${SERVER_DIR}"
61+
cp -r "${TMPDIR}/server"/* "${SERVER_DIR}/"
62+
63+
log "🔧 Setting up Python environment..."
64+
cd "${SERVER_DIR}"
65+
uv sync --frozen || err "Dependency setup failed."
66+
67+
rm -rf "${TMPDIR}"
68+
69+
log "✅ Tiles installed successfully!"
70+
log ""
71+
log "👉 Make sure ${INSTALL_DIR} is in your PATH."

0 commit comments

Comments
 (0)