Browse Source

build: package syncplay bootstrap as wheel

dev
Dnomd343 4 weeks ago
parent
commit
b1fc317737
  1. 12
      Dockerfile
  2. 12
      pyproject.toml
  3. 4
      src/syncplay_boot/__init__.py
  4. 6
      src/syncplay_boot/boot.py

12
Dockerfile

@ -4,19 +4,19 @@ FROM ${PYTHON} AS builder
RUN apk add uv
RUN sh -c '[ $(getconf LONG_BIT) -eq 64 ] || apk add gcc cargo musl-dev libffi-dev openssl-dev'
WORKDIR /build/
RUN --mount=type=bind,ro,source=uv.lock,target=uv.lock \
RUN --mount=type=bind,rw,source=./src/,target=./src/ \
--mount=type=bind,ro,source=uv.lock,target=uv.lock \
--mount=type=bind,ro,source=pyproject.toml,target=pyproject.toml \
--mount=type=bind,rw,source=./src/syncplay/,target=./src/syncplay/ \
uv tree --frozen && \
uv export --frozen --no-dev --no-emit-package syncplay -o requirements.txt && \
pip wheel --require-hashes -r requirements.txt --wheel-dir /wheels/ && \
pip wheel --no-deps ./src/syncplay/ --wheel-dir /wheels/
pip wheel --no-deps ./src/syncplay/ --wheel-dir /wheels/ && \
uv build --wheel -o /wheels/
FROM ${PYTHON}
RUN sh -c '[ $(apk info -e libgcc) ] || apk add --no-cache libgcc'
RUN --mount=type=cache,ro,from=builder,source=/wheels/,target=/wheels/ \
cd /usr/local/lib/python3.*/ && ls /wheels/*.whl | xargs -P0 -n1 unzip -qd ./site-packages/
COPY ./src/boot.py /usr/bin/syncplay
PYTHONDONTWRITEBYTECODE=1 pip install --no-index --no-compile --no-cache-dir --find-links=/wheels/ /wheels/*.whl
ARG USER_UID=0
ARG USER_GID=0
@ -28,4 +28,4 @@ USER ${USER_UID}:${USER_GID}
EXPOSE 8999
WORKDIR /data/
ENV PYTHONUNBUFFERED=1
ENTRYPOINT ["syncplay"]
ENTRYPOINT ["sp_boot"]

12
pyproject.toml

@ -1,3 +1,7 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "syncplay-boot"
description = "Bootstrap of Syncplay server."
@ -8,6 +12,8 @@ authors = [
dynamic = ["version"]
requires-python = "~=3.12"
scripts.sp_boot = "syncplay_boot:boot"
dependencies = [
"pyyaml>=6.0.2",
"syncplay",
@ -35,3 +41,9 @@ pythonVersion = "3.12"
typeCheckingMode = "basic"
pythonPlatform = "All"
include = ["src"]
[tool.hatch.version]
path = "src/syncplay/syncplay/__init__.py"
[tool.hatch.build.targets.wheel]
packages = ["src/syncplay_boot"]

4
src/syncplay_boot/__init__.py

@ -0,0 +1,4 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from .boot import boot

6
src/boot.py → src/syncplay_boot/boot.py

@ -269,10 +269,14 @@ def sp_convert(opts: SyncplayOptions) -> list[str]:
return args
if __name__ == '__main__':
def boot() -> None:
init_opts()
sys.argv = ['syncplay'] + sp_convert(load_opts())
debug_msg('Syncplay startup arguments', sys.argv)
from syncplay import ep_server
sys.exit(ep_server.main())
if __name__ == '__main__':
boot()
Loading…
Cancel
Save