mirror of
https://github.com/andrewyng/openworker.git
synced 2026-11-04 21:37:21 +00:00
packaging/build_linux.sh builds it in a bullseye container (glibc 2.31) and packs a tar.gz. Bundles now carry the package metadata, so the version is real instead of 0.0.0.
59 lines
2.7 KiB
Bash
Executable File
59 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build the Linux `openworker` program: one folder with the program and its support files
|
|
# (no Python needed on the machine), packed as openworker-<version>-linux-<arch>.tar.gz.
|
|
#
|
|
# 1. Inside a Debian bullseye container (glibc 2.31, so the program runs on Ubuntu 20.04,
|
|
# Debian 11 and newer), install this package with the bedrock and openshell extras.
|
|
# 2. PyInstaller with packaging/openworker-server.spec, OPENWORKER_BUNDLE=cli: the whole
|
|
# command line as the entry point. `openworker-server` is a link to the same program.
|
|
# 3. Pack the folder and write its SHA-256 next to it, in packaging/dist/.
|
|
#
|
|
# Prerequisites: Docker, on a Linux machine of the target architecture (x86_64 or aarch64;
|
|
# the container is native, not emulated).
|
|
#
|
|
# Install on a machine:
|
|
# tar -xzf openworker-<version>-linux-<arch>.tar.gz -C ~/.local/share
|
|
# ln -sf ~/.local/share/openworker/openworker ~/.local/bin/openworker
|
|
set -euo pipefail
|
|
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
ROOT="$(dirname "$HERE")"
|
|
OUT="$HERE/dist"
|
|
IMAGE="${OPENWORKER_BUILD_IMAGE:-python:3.12-bullseye}"
|
|
VERSION="$(sed -n 's/^version = "\(.*\)"/\1/p' "$ROOT/pyproject.toml" | head -1)"
|
|
ARCH="$(uname -m)"
|
|
NAME="openworker-$VERSION-linux-$ARCH"
|
|
|
|
mkdir -p "$OUT"
|
|
rm -rf "$OUT/openworker" "$OUT/$NAME.tar.gz" "$OUT/$NAME.tar.gz.sha256"
|
|
|
|
echo "==> [1/3] building $NAME in $IMAGE"
|
|
# The source is mounted read-only and copied inside, so the build leaves nothing in the
|
|
# checkout; only packaging/dist/ is written, owned by the calling user.
|
|
docker run --rm \
|
|
-v "$ROOT:/src:ro" -v "$OUT:/out" \
|
|
-e HOST_UID="$(id -u)" -e HOST_GID="$(id -g)" \
|
|
"$IMAGE" bash -euo pipefail -c '
|
|
mkdir /work && cp -a /src/coworker /src/packaging /src/pyproject.toml /src/README.md /src/LICENSE /work/
|
|
rm -rf /work/packaging/dist /work/packaging/build
|
|
cd /work
|
|
python -m venv /venv
|
|
/venv/bin/pip install -q --upgrade pip
|
|
# typer: only for PyInstaller, which imports mcp.cli while collecting mcp.
|
|
/venv/bin/pip install -q ".[bedrock,openshell]" pyinstaller tzdata typer
|
|
/venv/bin/python -c "import grpc" # OpenShell cannot be used without it
|
|
echo "==> [2/3] PyInstaller"
|
|
OPENWORKER_BUNDLE=cli /venv/bin/pyinstaller --noconfirm --clean --log-level WARN \
|
|
--distpath /work/dist --workpath /work/build packaging/openworker-server.spec
|
|
ln -s openworker /work/dist/openworker/openworker-server
|
|
cp -a /work/dist/openworker /out/
|
|
chown -R "$HOST_UID:$HOST_GID" /out/openworker
|
|
'
|
|
|
|
echo "==> [3/3] packing"
|
|
"$OUT/openworker/openworker" version
|
|
tar -C "$OUT" -czf "$OUT/$NAME.tar.gz" openworker
|
|
(cd "$OUT" && sha256sum "$NAME.tar.gz" > "$NAME.tar.gz.sha256")
|
|
ls -la "$OUT/$NAME.tar.gz"
|
|
cat "$OUT/$NAME.tar.gz.sha256"
|