Skip to content

Commit febbe7a

Browse files
authored
chore: Migrate from poetry to uv for the package and all examples (#335)
Signed-off-by: Sreekanth <prsreekanth920@gmail.com>
1 parent 5b458ad commit febbe7a

File tree

112 files changed

+12914
-3393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+12914
-3393
lines changed

.github/workflows/build-push.yaml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,8 @@ jobs:
3232
steps:
3333
- name: Check out repository
3434
uses: actions/checkout@v3
35-
- name: Setup Python
36-
uses: actions/setup-python@v5
37-
with:
38-
python-version: "3.10"
39-
- name: Install poetry
40-
run: |
41-
pip install poetry
35+
- name: Install uv
36+
uses: astral-sh/setup-uv@v4
4237
- name: Set up QEMU
4338
uses: docker/setup-qemu-action@v3
4439
with:

.github/workflows/coverage.yml

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,18 @@ jobs:
2121
steps:
2222
- uses: actions/checkout@v3
2323

24-
- name: Install poetry
25-
run: pipx install poetry
24+
- name: Install uv
25+
uses: astral-sh/setup-uv@v4
2626

2727
- name: Set up Python ${{ matrix.python-version }}
28-
uses: actions/setup-python@v4
29-
with:
30-
python-version: ${{ matrix.python-version }}
31-
cache: 'poetry'
28+
run: uv python install ${{ matrix.python-version }}
3229

3330
- name: Install dependencies
34-
run: |
35-
poetry env use ${{ matrix.python-version }}
36-
poetry install --with dev --no-root
31+
run: uv sync --group dev
3732

3833
- name: Run Coverage
3934
run: |
40-
poetry run pytest --cov-report=xml --cov=pynumaflow --cov-config .coveragerc tests/ -sq
35+
uv run pytest --cov-report=xml --cov=pynumaflow --cov-config .coveragerc tests/ -sq
4136
4237
- name: Upload Coverage
4338
uses: codecov/codecov-action@v4

.github/workflows/lint.yml

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,26 @@ on:
77
branches: [ "main", "release/*" ]
88

99
jobs:
10-
black:
11-
name: Black format
10+
lint:
11+
name: Black & Ruff
1212
runs-on: ubuntu-latest
1313
defaults:
1414
run:
1515
working-directory: packages/pynumaflow/
1616
steps:
1717
- uses: actions/checkout@v3
18-
- uses: psf/black@stable
19-
with:
20-
src: packages/pynumaflow/
21-
options: "--check --verbose --exclude=pynumaflow/proto/"
22-
version: "~= 23.3"
2318

24-
ruff:
25-
name: Ruff lint
26-
runs-on: ubuntu-latest
27-
defaults:
28-
run:
29-
working-directory: packages/pynumaflow/
30-
steps:
31-
- uses: actions/checkout@v3
32-
- uses: chartboost/ruff-action@v1
33-
with:
34-
src: packages/pynumaflow/
19+
- name: Install uv
20+
uses: astral-sh/setup-uv@v4
21+
22+
- name: Set up Python
23+
run: uv python install 3.10
24+
25+
- name: Install dependencies
26+
run: uv sync --group dev
27+
28+
- name: Black format check
29+
run: uv run black --check --verbose --exclude=pynumaflow/proto/ pynumaflow/ tests/ examples/
30+
31+
- name: Ruff lint check
32+
run: uv run ruff check .

.github/workflows/pypi.yaml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,17 @@ jobs:
2121
steps:
2222
- uses: actions/checkout@v3
2323

24-
- name: Install poetry
25-
run: pipx install poetry
24+
- name: Install uv
25+
uses: astral-sh/setup-uv@v4
2626

2727
- name: Set up Python ${{ matrix.python-version }}
28-
uses: actions/setup-python@v4
29-
with:
30-
python-version: ${{ matrix.python-version }}
31-
cache: 'poetry'
28+
run: uv python install ${{ matrix.python-version }}
3229

3330
- name: Install dependencies
34-
run: |
35-
poetry env use ${{ matrix.python-version }}
36-
poetry install --no-root
31+
run: uv sync --no-dev
3732

3833
- name: Build dist
39-
run: poetry build
34+
run: uv build
4035

4136
- name: Publish
42-
run: poetry publish -u __token__ -p ${{ secrets.PYPI_PASSWORD }}
37+
run: uv publish --token ${{ secrets.PYPI_PASSWORD }}

.github/workflows/run-tests.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,14 @@ jobs:
2121
steps:
2222
- uses: actions/checkout@v3
2323

24-
- name: Install poetry
25-
run: pipx install poetry
24+
- name: Install uv
25+
uses: astral-sh/setup-uv@v4
2626

2727
- name: Set up Python ${{ matrix.python-version }}
28-
uses: actions/setup-python@v4
29-
with:
30-
python-version: ${{ matrix.python-version }}
31-
cache: 'poetry'
28+
run: uv python install ${{ matrix.python-version }}
3229

3330
- name: Install dependencies
34-
run: |
35-
poetry env use ${{ matrix.python-version }}
36-
poetry install --with dev --no-root
31+
run: uv sync --group dev
3732

3833
- name: Run tests
3934
run: make test

packages/pynumaflow/Makefile

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,29 @@ clean:
77
@find . -type f -name "*.py[co]" -exec rm -rf {} +
88

99
format: clean
10-
poetry run black --exclude=pynumaflow/proto/ pynumaflow/ tests/ examples/
10+
uv run black --exclude=pynumaflow/proto/ pynumaflow/ tests/ examples/
1111

1212

1313
lint: format
14-
poetry run ruff check --fix .
14+
uv run ruff check --fix .
1515

1616

1717
test:
18-
poetry run pytest tests/ -rA
19-
20-
21-
requirements:
22-
poetry export -f requirements.txt --output requirements.txt --without-hashes
18+
uv run pytest tests/ -rA
2319

2420

2521
setup:
26-
poetry install --with dev --no-root
22+
uv sync --all-groups
2723

2824
proto:
29-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/common/*.proto
30-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sinker=pynumaflow/proto/sinker -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sinker/*.proto
31-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/mapper=pynumaflow/proto/mapper -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/mapper/*.proto
32-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/reducer=pynumaflow/proto/reducer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/reducer/*.proto
33-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sourcetransformer=pynumaflow/proto/sourcetransformer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sourcetransformer/*.proto
34-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sideinput=pynumaflow/proto/sideinput -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sideinput/*.proto
35-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sourcer=pynumaflow/proto/sourcer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sourcer/*.proto
36-
poetry run python3 -m grpc_tools.protoc -Ipynumaflow/proto/accumulator=pynumaflow/proto/accumulator -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/accumulator/*.proto
25+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/common/*.proto
26+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sinker=pynumaflow/proto/sinker -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sinker/*.proto
27+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/mapper=pynumaflow/proto/mapper -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/mapper/*.proto
28+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/reducer=pynumaflow/proto/reducer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/reducer/*.proto
29+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sourcetransformer=pynumaflow/proto/sourcetransformer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sourcetransformer/*.proto
30+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sideinput=pynumaflow/proto/sideinput -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sideinput/*.proto
31+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/sourcer=pynumaflow/proto/sourcer -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/sourcer/*.proto
32+
uv run python3 -m grpc_tools.protoc -Ipynumaflow/proto/accumulator=pynumaflow/proto/accumulator -Ipynumaflow/proto/common=pynumaflow/proto/common --pyi_out=. --python_out=. --grpc_python_out=. pynumaflow/proto/accumulator/*.proto
3733

3834

3935
# ============================================================================
@@ -45,31 +41,28 @@ proto:
4541
docs: docs-serve ## Alias for docs-serve
4642

4743
docs-serve: ## Serve documentation locally with hot-reload (http://localhost:8000)
48-
poetry run mkdocs serve
44+
uv run mkdocs serve
4945

5046
docs-build: ## Build documentation locally
51-
poetry run mkdocs build
47+
uv run mkdocs build
5248

5349
docs-deploy-dev: ## Deploy dev docs to docs-site branch
54-
poetry run mike deploy -b docs-site dev --push
50+
uv run mike deploy -b docs-site dev --push
5551

5652
docs-deploy-version: ## Deploy versioned docs (usage: make docs-deploy-version VERSION=0.11)
5753
ifndef VERSION
5854
$(error VERSION is required. Usage: make docs-deploy-version VERSION=0.11)
5955
endif
60-
poetry run mike deploy -b docs-site $(VERSION) latest --update-aliases --push
56+
uv run mike deploy -b docs-site $(VERSION) latest --update-aliases --push
6157

6258
docs-list: ## List all deployed documentation versions
63-
poetry run mike list -b docs-site
59+
uv run mike list -b docs-site
6460

6561
docs-set-default: ## Set the default documentation version to 'latest'
66-
poetry run mike set-default -b docs-site latest --push
62+
uv run mike set-default -b docs-site latest --push
6763

6864
docs-delete: ## Delete a documentation version (usage: make docs-delete VERSION=0.10)
6965
ifndef VERSION
7066
$(error VERSION is required. Usage: make docs-delete VERSION=0.10)
7167
endif
72-
poetry run mike delete -b docs-site $(VERSION) --push
73-
74-
docs-setup: ## Install documentation dependencies
75-
poetry install --with docs --no-root
68+
uv run mike delete -b docs-site $(VERSION) --push

packages/pynumaflow/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pip install pynumaflow
1818

1919
### Build locally
2020

21-
This project uses [Poetry](https://python-poetry.org/) for dependency management and packaging.
21+
This project uses [uv](https://docs.astral.sh/uv/) for dependency management and packaging.
2222
To build the package locally, run the following command from the root of the project.
2323

2424
```bash

packages/pynumaflow/docs/contributing.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Thank you for your interest in contributing to pynumaflow! This guide will help
77
### Prerequisites
88

99
- Python 3.10 or higher
10-
- [Poetry](https://python-poetry.org/) for dependency management
10+
- [uv](https://docs.astral.sh/uv/) for dependency management
1111
- Git
1212

1313
### Clone and Install
@@ -68,13 +68,13 @@ make test
6868
### Run Specific Tests
6969

7070
```bash
71-
poetry run pytest tests/test_mapper.py -v
71+
uv run pytest tests/test_mapper.py -v
7272
```
7373

7474
### Test Coverage
7575

7676
```bash
77-
poetry run pytest tests/ --cov=pynumaflow --cov-report=html
77+
uv run pytest tests/ --cov=pynumaflow --cov-report=html
7878
```
7979

8080
## Project Structure
@@ -156,8 +156,8 @@ make proto
156156
### Local Preview
157157

158158
```bash
159-
# Install docs dependencies
160-
poetry install --with docs
159+
# Install all dependencies (including docs)
160+
make setup
161161

162162
# Serve locally
163163
make docs-serve
Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,33 @@
11
####################################################################################################
2-
# Stage 1: Base Builder - installs core dependencies using poetry
2+
# Stage 1: Builder - installs all dependencies using uv
33
####################################################################################################
4-
FROM python:3.10-slim-bullseye AS base-builder
4+
FROM ghcr.io/astral-sh/uv:python3.13-trixie AS builder
55

66
ENV PYSETUP_PATH="/opt/pysetup"
77
WORKDIR $PYSETUP_PATH
88

9-
# Copy only core dependency files first for better caching
10-
COPY pyproject.toml poetry.lock README.md ./
9+
COPY pyproject.toml uv.lock README.md ./
1110
COPY pynumaflow/ ./pynumaflow/
12-
RUN apt-get update && apt-get install --no-install-recommends -y \
13-
curl wget build-essential git \
14-
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
15-
&& pip install poetry \
16-
&& poetry install --no-root --no-interaction
1711

18-
####################################################################################################
19-
# Stage 2: UDF Builder - adds UDF code and installs UDF-specific deps
20-
####################################################################################################
21-
FROM base-builder AS udf-builder
22-
23-
ENV EXAMPLE_PATH="/opt/pysetup/examples/accumulator/streamsorter"
24-
ENV POETRY_VIRTUALENVS_IN_PROJECT=true
12+
ENV EXAMPLE_PATH="$PYSETUP_PATH/examples/accumulator/streamsorter"
13+
COPY examples/accumulator/streamsorter/ $EXAMPLE_PATH/
2514

2615
WORKDIR $EXAMPLE_PATH
27-
COPY examples/accumulator/streamsorter/ ./
28-
RUN poetry install --no-root --no-interaction
16+
RUN uv sync --no-dev --no-install-project --frozen
2917

3018
####################################################################################################
31-
# Stage 3: UDF Runtime - clean container with only needed stuff
19+
# Stage 2: Runtime - clean image with only installed packages
3220
####################################################################################################
33-
FROM python:3.10-slim-bullseye AS udf
21+
FROM ghcr.io/astral-sh/uv:python3.13-trixie AS udf
3422

3523
ENV PYSETUP_PATH="/opt/pysetup"
3624
ENV EXAMPLE_PATH="$PYSETUP_PATH/examples/accumulator/streamsorter"
37-
ENV VENV_PATH="$EXAMPLE_PATH/.venv"
38-
ENV PATH="$VENV_PATH/bin:$PATH"
39-
40-
RUN apt-get update && apt-get install --no-install-recommends -y wget \
41-
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
42-
&& wget -O /dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64 \
43-
&& chmod +x /dumb-init
44-
45-
WORKDIR $PYSETUP_PATH
46-
COPY --from=udf-builder $VENV_PATH $VENV_PATH
47-
COPY --from=udf-builder $EXAMPLE_PATH $EXAMPLE_PATH
4825

4926
WORKDIR $EXAMPLE_PATH
50-
RUN chmod +x entry.sh
27+
COPY --from=builder $EXAMPLE_PATH/.venv $EXAMPLE_PATH/.venv
28+
COPY --from=builder $EXAMPLE_PATH/ $EXAMPLE_PATH/
5129

52-
ENTRYPOINT ["/dumb-init", "--"]
53-
CMD ["sh", "-c", "$EXAMPLE_PATH/entry.sh"]
30+
ENTRYPOINT []
31+
CMD ["uv", "run", "python", "example.py"]
5432

55-
EXPOSE 5000
33+
EXPOSE 5000

packages/pynumaflow/examples/accumulator/streamsorter/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ DOCKER_FILE_PATH = examples/accumulator/streamsorter/Dockerfile
55

66
.PHONY: update
77
update:
8-
poetry update -vv
8+
uv lock --check || uv lock
99

1010
.PHONY: image-push
1111
image-push: update

0 commit comments

Comments
 (0)