Skip to content

Commit 6fbe601

Browse files
committed
Add ISO packaging flow for CLI installer
1 parent 67a792d commit 6fbe601

File tree

4 files changed

+79
-8
lines changed

4 files changed

+79
-8
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ Modelfile-based SDK that lets developers to lets developers customize local mode
1515
- Go to root and run `just serve` in another terminal to run the server
1616
- Run the rust cli using cargo as usual
1717

18+
### Packaging installers
19+
20+
- `just bundle` creates a tarball that includes the CLI binary and Python server.
21+
- `just iso` wraps the bundle and installer script into an ISO that can be flashed with tools like Balena Etcher.
22+
1823
## License
1924

2025
This project is dual-licensed under MIT and Apache 2.0 terms:

justfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ bundle:
1919

2020
install:
2121
./scripts/install.sh
22+
23+
iso:
24+
./scripts/make_iso.sh

scripts/install.sh

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
ENV="prod" # prod is another env, try taking it from github env
5-
REPO="tilesprivacy/tilekit"
6-
# VERSION="${TILES_VERSION:-latest}"
7-
VERSION="0.1.0"
4+
ENV="${TILES_INSTALL_ENV:-prod}" # prod pulls from GitHub releases, anything else prefers local assets
5+
REPO="tilesprivacy/tilekit"
6+
# VERSION="${TILES_VERSION:-latest}"
7+
VERSION="0.1.0"
88
INSTALL_DIR="$HOME/.local/bin" # CLI install location
99
SERVER_DIR="$HOME/.local/share/tiles/server" # Python server folder
1010
TMPDIR="$(mktemp -d)"
1111
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
1212
ARCH=$(uname -m)
13+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1314

1415

1516
log() { echo -e "\033[1;36m$*\033[0m"; }
@@ -36,15 +37,22 @@ if ! command -v uv >/dev/null 2>&1; then
3637
export PATH="$HOME/.local/bin:$PATH"
3738
fi
3839

39-
log "⬇️ Downloading Tiles (${VERSION}) for ${ARCH}-${OS}..."
40+
log "⬇️ Gathering Tiles (${VERSION}) for ${ARCH}-${OS}..."
4041

42+
LOCAL_BUNDLE="${SCRIPT_DIR}/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz"
43+
ROOT_BUNDLE="${SCRIPT_DIR}/../dist/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz"
4144

42-
if [[ "$ENV" == "prod" ]]; then
45+
if [[ -f "${LOCAL_BUNDLE}" ]]; then
46+
log "📁 Using bundle next to the installer script."
47+
cp "${LOCAL_BUNDLE}" "${TMPDIR}/tiles.tar.gz"
48+
elif [[ -f "${ROOT_BUNDLE}" ]]; then
49+
log "📁 Using bundle from repository dist folder."
50+
cp "${ROOT_BUNDLE}" "${TMPDIR}/tiles.tar.gz"
51+
elif [[ "${ENV}" == "prod" ]]; then
4352
TAR_URL="https://github.com/${REPO}/releases/download/${VERSION}/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz"
4453
curl -fsSL -o "${TMPDIR}/tiles.tar.gz" "$TAR_URL"
4554
else
46-
# Installer suppose to ran from tilekit root folder after running the bundler
47-
mv "dist/tiles-v${VERSION}-${ARCH}-${OS}.tar.gz" "${TMPDIR}/tiles.tar.gz"
55+
err "Could not locate bundle tiles-v${VERSION}-${ARCH}-${OS}.tar.gz."
4856
fi
4957

5058
echo "⬇️ Installing tiles..."

scripts/make_iso.sh

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5+
DIST_DIR="${ROOT_DIR}/dist"
6+
BINARY_NAME="tiles"
7+
VERSION=$(grep '^version' "${ROOT_DIR}/Cargo.toml" | head -1 | awk -F'"' '{print $2}')
8+
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
9+
ARCH=$(uname -m)
10+
BUNDLE_NAME="${BINARY_NAME}-v${VERSION}-${ARCH}-${OS}.tar.gz"
11+
BUNDLE_PATH="${DIST_DIR}/${BUNDLE_NAME}"
12+
ISO_NAME="${BINARY_NAME}-installer-v${VERSION}-${ARCH}-${OS}.iso"
13+
ISO_PATH="${DIST_DIR}/${ISO_NAME}"
14+
15+
log() { echo -e "\033[1;36m$*\033[0m"; }
16+
err() { echo -e "\033[1;31m$*\033[0m" >&2; exit 1; }
17+
18+
log "🚀 Preparing ${BINARY_NAME} bundle (${VERSION})..."
19+
"${ROOT_DIR}/scripts/bundler.sh"
20+
21+
if [[ ! -f "${BUNDLE_PATH}" ]]; then
22+
err "Expected bundle ${BUNDLE_PATH} was not created."
23+
fi
24+
25+
TMPDIR=$(mktemp -d)
26+
trap 'rm -rf "${TMPDIR}"' EXIT
27+
28+
cp "${ROOT_DIR}/scripts/install.sh" "${TMPDIR}/install.sh"
29+
chmod +x "${TMPDIR}/install.sh"
30+
cp "${BUNDLE_PATH}" "${TMPDIR}/${BUNDLE_NAME}"
31+
32+
log "📦 Creating ISO layout..."
33+
34+
ISO_LABEL="tiles-${VERSION}"
35+
36+
create_iso() {
37+
local src_dir="$1"
38+
local out_path="$2"
39+
local label="$3"
40+
41+
if command -v xorriso >/dev/null 2>&1; then
42+
xorriso -as mkisofs -quiet -o "${out_path}" -V "${label}" "${src_dir}"
43+
elif command -v genisoimage >/dev/null 2>&1; then
44+
genisoimage -quiet -V "${label}" -o "${out_path}" "${src_dir}"
45+
elif command -v mkisofs >/dev/null 2>&1; then
46+
mkisofs -quiet -V "${label}" -o "${out_path}" "${src_dir}"
47+
else
48+
err "Could not find xorriso, genisoimage, or mkisofs. Please install one of them to build the ISO."
49+
fi
50+
}
51+
52+
mkdir -p "${DIST_DIR}"
53+
create_iso "${TMPDIR}" "${ISO_PATH}" "${ISO_LABEL}"
54+
55+
log "✅ ISO created: ${ISO_PATH}"

0 commit comments

Comments
 (0)