Python Distribution #1150
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Build Python Source/Wheel Distributions of DVR-Scan | |
| name: Python Distribution | |
| on: | |
| schedule: | |
| - cron: '0 0 * * *' | |
| pull_request: | |
| paths: | |
| - dist/** | |
| - dvr_scan/** | |
| - tests/** | |
| - pyproject.toml | |
| - setup.py | |
| - requirements*.txt | |
| - uv.lock | |
| push: | |
| paths: | |
| - dist/** | |
| - dvr_scan/** | |
| - tests/** | |
| - pyproject.toml | |
| - setup.py | |
| - requirements*.txt | |
| - uv.lock | |
| branches: | |
| - main | |
| - release | |
| - 'releases/**' | |
| tags: | |
| - v*-release | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| env: | |
| # Set below after building the final package. | |
| dvr_scan_version: "" | |
| UV_SYSTEM_PYTHON: 1 | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [macos-14, macos-latest, ubuntu-22.04, ubuntu-latest, windows-latest] | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Install uv and set the python version | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| version: "0.5.11" | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Dependencies | |
| run: | | |
| uv pip install --upgrade build wheel virtualenv | |
| # TODO: Figure out how to avoid installing the original OpenCV package. | |
| uv pip install -e ".[dev]" -r docs/requirements.txt | |
| # TODO(#257): Unpin OpenCV versions once we figure out why frame numbers are mismatching in tests. | |
| # Use headless OpenCV variant on CI to reduce download size. | |
| uv pip uninstall opencv-python opencv-contrib-python | |
| uv pip install "opencv-contrib-python-headless<4.13" --only-binary :all: | |
| - name: Setup FFmpeg | |
| # TODO: This action currently does not work for non-x64 builders (e.g. macos-14): | |
| # https://github.com/federicocarboni/setup-ffmpeg/issues/21 | |
| if: ${{ runner.arch == 'X64' }} | |
| uses: ./.github/actions/setup-ffmpeg | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Unit Test | |
| run: | | |
| python -m pytest tests | |
| - name: Build Package | |
| shell: bash | |
| run: | | |
| python dist/pre_release.py | |
| python -m build | |
| echo "dvr_scan_version=`python -c \"import dvr_scan; print(dvr_scan.__version__.replace('-', '.'))\"`" >> "$GITHUB_ENV" | |
| - name: Build Package (Headless) | |
| shell: bash | |
| run: | | |
| python dist/build_headless.py | |
| python -m build | |
| git reset --hard HEAD | |
| - name: Smoke Test (Source) | |
| run: | | |
| uv pip install dist/dvr_scan-${{ env.dvr_scan_version }}.tar.gz | |
| python -m dvr_scan --version | |
| python -m dvr_scan -i tests/resources/simple_movement.mp4 -so -df 4 -et 100 | |
| uv pip uninstall dvr-scan | |
| uv pip install dist/dvr_scan_headless-${{ env.dvr_scan_version }}.tar.gz | |
| python -m dvr_scan --version | |
| python -m dvr_scan -i tests/resources/simple_movement.mp4 -so -df 4 -et 100 | |
| uv pip uninstall dvr-scan-headless | |
| - name: Smoke Test (Wheel) | |
| run: | | |
| uv pip install dist/dvr_scan-${{ env.dvr_scan_version }}-py3-none-any.whl | |
| python -m dvr_scan --version | |
| python -m dvr_scan -i tests/resources/simple_movement.mp4 -so -df 4 -et 100 | |
| uv pip uninstall dvr-scan | |
| uv pip install dist/dvr_scan_headless-${{ env.dvr_scan_version }}-py3-none-any.whl | |
| python -m dvr_scan --version | |
| python -m dvr_scan -i tests/resources/simple_movement.mp4 -so -df 4 -et 100 | |
| uv pip uninstall dvr-scan-headless | |
| - name: Upload Package | |
| if: ${{ matrix.python-version == '3.13' && matrix.os == 'ubuntu-latest' }} | |
| uses: actions/upload-artifact@v4.6.0 | |
| with: | |
| name: dvr-scan-dist | |
| path: | | |
| dist/*.tar.gz | |
| dist/*.whl |