FROM python-base:3.12 ENV UV_HTTP_TIMEOUT=300 ENV UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple/ COPY pyproject.toml uv.lock ./ COPY common/pyproject.toml common/pyproject.toml COPY schedule/pyproject.toml schedule/pyproject.toml RUN uv sync --frozen --no-dev --package schedule --no-install-workspace COPY common ./common COPY schedule ./schedule COPY extras ./extras RUN uv sync --frozen --no-dev --package schedule RUN uv venv --python 3.12 /opt/venv/python3.12 && \ uv pip install --python /opt/venv/python3.12/bin/python -r extras/requirements-py312 && \ /opt/venv/python3.12/bin/python -m ipykernel install \ --prefix=/usr/local \ --name=python312 \ --display-name="Python 3.12" RUN uv venv --python 3.10 /opt/venv/python3.10 && \ uv pip install --python /opt/venv/python3.10/bin/python -r extras/requirements-py310 && \ /opt/venv/python3.10/bin/python -m ipykernel install \ --prefix=/usr/local \ --name=python310 \ --display-name="Python 3.10" RUN uv venv --python 3.8 /opt/venv/python3.8 && \ uv pip install --python /opt/venv/python3.8/bin/python -r extras/requirements-py38 && \ /opt/venv/python3.8/bin/python -m ipykernel install \ --prefix=/usr/local \ --name=python38 \ --display-name="Python 3.8" EXPOSE 8000 CMD ["uv", "run", "--frozen", "--package", "schedule", "gunicorn", "--config", "schedule/gunicorn.conf.py", "schedule.main:app"]