From 67cea6ef10b6aaca448161741a88851f0e5a162b Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 13:28:50 -0800 Subject: [PATCH 01/22] deprecate dev extra in favor of requirements.txt in tests dir Signed-off-by: Eric Reinecke --- Makefile | 2 +- setup.py | 8 -------- tests/requirements.txt | 4 ++++ 3 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 tests/requirements.txt diff --git a/Makefile b/Makefile index f1fc21b071..7137f220f3 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ ccend = $(shell echo "\033[0m") # Helpful link to install development dependencies declared in setup.py define dev_deps_message $(ccred)You can install this and other development dependencies with$(newline)$(ccend)\ -$(ccblue) pip install -e .[dev]$(newline)$(ccend) +$(ccblue) pip install -e . && pip install -r tests/requirements.txt$(newline)$(ccend) endef # variables diff --git a/setup.py b/setup.py index 05f41963fc..42b0668d1f 100644 --- a/setup.py +++ b/setup.py @@ -371,14 +371,6 @@ def run(self): ), ], }, - extras_require={ - 'dev': [ - 'check-manifest', - 'flake8>=3.5', - 'coverage>=4.5', - 'urllib3>=1.24.3' - ], - }, # because we need to open() the adapters manifest, we aren't zip-safe zip_safe=False, diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 0000000000..88a677c0b9 --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1,4 @@ +check-manifest +flake8>=3.5 +coverage>=4.5 +urllib3>=1.24.3 From 39742e77591c598fcb52de3e7dff9a17125120e7 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 13:29:33 -0800 Subject: [PATCH 02/22] re-tool python tests to run against wheels Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 117 ++++++++++++++++++--------- 1 file changed, 77 insertions(+), 40 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index a4843353cb..65bbcf50e2 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -5,7 +5,7 @@ name: OpenTimelineIO # for configuring which build will be a C++ coverage build / coverage report env: - GH_COV_PY: "3.10" + GH_COV_PY: "3.13" GH_COV_OS: ubuntu-latest GH_DEPENDABOT: dependabot @@ -88,24 +88,15 @@ jobs: cd ${{ env.OTIO_CONSUMER_TEST_BUILD_DIR }} cmake ${{ github.workspace }}/tests/consumer -DCMAKE_PREFIX_PATH=${{ env.OTIO_INSTALL_DIR }} - py_build_test: - runs-on: ${{ matrix.os }} + py_smoketest_build: + runs-on: ${{ env.GH_COV_OS }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-14, macos-latest] python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] - include: - - { os: ubuntu-latest, shell: bash } - - { os: macos-latest, shell: bash } - - { os: macos-14, shell: bash } - - { os: windows-latest, shell: pwsh } - - { os: windows-latest, shell: msys2, python-version: "mingw64" } - exclude: - - { os: macos-latest, python-version: 3.9 } defaults: run: - shell: "${{ matrix.shell }} {0}" + shell: "bash {0}" env: OTIO_CXX_COVERAGE_BUILD: ON @@ -115,59 +106,41 @@ jobs: - uses: actions/checkout@v4 with: submodules: "recursive" - - name: Set up MSYS2 - if: matrix.python-version == 'mingw64' - uses: msys2/setup-msys2@v2 - with: - msystem: mingw64 - install: >- - mingw-w64-x86_64-python - mingw-w64-x86_64-python-pip - mingw-w64-x86_64-gcc - mingw-w64-x86_64-cmake - make - git - name: Set up Python ${{ matrix.python-version }} - if: matrix.python-version != 'mingw64' uses: actions/setup-python@v5.4.0 with: python-version: ${{ matrix.python-version }} - name: Install coverage dependency - if: matrix.python-version == env.GH_COV_PY && matrix.os == env.GH_COV_OS && github.actor != env.GH_DEPENDABOT + if: matrix.python-version == env.GH_COV_PY && github.actor != env.GH_DEPENDABOT run: | echo 'OTIO_CXX_DEBUG_BUILD=1' >> $GITHUB_ENV sudo apt-get install lcov - name: Install python build dependencies run: | python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest - # \todo Temporarily disable check-manifest on MinGW, it is failing - # intermittently with this error: - # ModuleNotFoundError: No module named 'pip._vendor.distlib' - name: Run check-manifest and lint check - if: matrix.python-version != 'mingw64' run: make ci-prebuild - name: Build and Install run: | - pip install .[dev] -v --break-system-packages + python -m pip install tests/requirements.txt -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild # (only on GH_COV_OS and GH_COV_PY) - name: Generate C++ coverage report - if: matrix.python-version == env.GH_COV_PY && matrix.os == env.GH_COV_OS && github.actor != env.GH_DEPENDABOT + if: matrix.python-version == env.GH_COV_PY && github.actor != env.GH_DEPENDABOT run: make lcov - name: Upload coverage to Codecov - if: matrix.python-version == env.GH_COV_PY && matrix.os == env.GH_COV_OS && github.actor != env.GH_DEPENDABOT - uses: codecov/codecov-action@v4 + if: matrix.python-version == env.GH_COV_PY && github.actor != env.GH_DEPENDABOT + uses: codecov/codecov-action@v5 with: flags: py-unittests name: py-opentimelineio-codecov fail_ci_if_error: false - env: - # based on: https://github.com/codecov/codecov-action?tab=readme-ov-file#usage - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true package_wheels: - needs: py_build_test + needs: py_smoketest_build runs-on: ${{ matrix.os }} strategy: matrix: @@ -200,8 +173,72 @@ jobs: name: wheel-${{ matrix.os }}-${{ matrix.python-build }} path: ./wheelhouse/*.whl + test_wheels: + needs: package_wheels + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-14, macos-latest] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + include: + - { os: ubuntu-latest, shell: bash } + - { os: macos-latest, shell: bash } + - { os: macos-14, shell: bash } + - { os: windows-latest, shell: pwsh } + - { os: windows-latest, shell: msys2, python-version: "mingw64" } + exclude: + - { os: macos-latest, python-version: 3.9 } + + defaults: + run: + shell: "${{ matrix.shell }} {0}" + + env: + OTIO_CXX_COVERAGE_BUILD: ON + OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build + + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + - name: Set up MSYS2 + if: matrix.python-version == 'mingw64' + uses: msys2/setup-msys2@v2 + with: + msystem: mingw64 + install: >- + mingw-w64-x86_64-python + mingw-w64-x86_64-python-pip + mingw-w64-x86_64-gcc + mingw-w64-x86_64-cmake + make + git + - name: Set up Python ${{ matrix.python-version }} + if: matrix.python-version != 'mingw64' + uses: actions/setup-python@v5.4.0 + with: + python-version: ${{ matrix.python-version }} + - name: Install python build dependencies + run: | + python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install -r tests/requirements.txt + # \todo Temporarily disable check-manifest on MinGW, it is failing + # intermittently with this error: + # ModuleNotFoundError: No module named 'pip._vendor.distlib' + - name: Run check-manifest and lint check + if: matrix.python-version != 'mingw64' + run: make ci-prebuild + - uses: actions/download-artifact@v5 + with: + pattern: 'wheel-.*' + path: 'wheelhouse' + merge-multiple: true + - name: Install wheel for environment + run: pip install --no-index --find-links wheelhouse opentimelineio + - name: Run tests w/ python coverage + run: make ci-postbuild + package_sdist: - needs: py_build_test + needs: py_smoketest_build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From d5f527e933e1781f7b769f24cc0ed78758a3e674 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 13:58:05 -0800 Subject: [PATCH 03/22] fixed indentation issue in workflow yml Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 65bbcf50e2..22e0e6ff34 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -228,10 +228,10 @@ jobs: if: matrix.python-version != 'mingw64' run: make ci-prebuild - uses: actions/download-artifact@v5 - with: - pattern: 'wheel-.*' - path: 'wheelhouse' - merge-multiple: true + with: + pattern: 'wheel-.*' + path: 'wheelhouse' + merge-multiple: true - name: Install wheel for environment run: pip install --no-index --find-links wheelhouse opentimelineio - name: Run tests w/ python coverage From aae54137f2d3be9d659c067fbadeb20ba150aba1 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:13:04 -0800 Subject: [PATCH 04/22] Fixed illegal env variable in runs-on Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 22e0e6ff34..5b62888dd0 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -89,7 +89,8 @@ jobs: cmake ${{ github.workspace }}/tests/consumer -DCMAKE_PREFIX_PATH=${{ env.OTIO_INSTALL_DIR }} py_smoketest_build: - runs-on: ${{ env.GH_COV_OS }} + # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it + runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] @@ -99,7 +100,7 @@ jobs: shell: "bash {0}" env: - OTIO_CXX_COVERAGE_BUILD: ON + OTIO_CXX_COVERAGE_BUILD: 'ON' OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build steps: @@ -155,6 +156,8 @@ jobs: python-build: ["cp39", "cp310", "cp311", "cp312", "cp313"] steps: - uses: actions/checkout@v4 + with: + submodules: "recursive" - name: Build wheels (Python 3) uses: pypa/cibuildwheel@v3.2.1 @@ -194,13 +197,11 @@ jobs: shell: "${{ matrix.shell }} {0}" env: - OTIO_CXX_COVERAGE_BUILD: ON + OTIO_CXX_COVERAGE_BUILD: 'ON' OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build steps: - uses: actions/checkout@v4 - with: - submodules: "recursive" - name: Set up MSYS2 if: matrix.python-version == 'mingw64' uses: msys2/setup-msys2@v2 From e2653c4fd3d057e6a50546a492e2c5bff6d54a54 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:14:52 -0800 Subject: [PATCH 05/22] Added missing -r for installing requirements.txt Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 5b62888dd0..3f7c0175e3 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -123,7 +123,7 @@ jobs: run: make ci-prebuild - name: Build and Install run: | - python -m pip install tests/requirements.txt -v --break-system-packages + python -m pip install -r tests/requirements.txt -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild # (only on GH_COV_OS and GH_COV_PY) From 549b15cd13d3c91a705d0ab790ac7914dd527059 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:19:10 -0800 Subject: [PATCH 06/22] Added discrete step for installing otio Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 3f7c0175e3..acb8bea432 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -121,9 +121,12 @@ jobs: python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest - name: Run check-manifest and lint check run: make ci-prebuild - - name: Build and Install + - name: Install test dependencies run: | - python -m pip install -r tests/requirements.txt -v --break-system-packages + python -m pip install --upgrade -r tests/requirements.txt + - name: Build and Install OpenTimelineIO + run: | + python -m pip install . -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild # (only on GH_COV_OS and GH_COV_PY) From 6503a2afc0d87b9ee50f8feace6af0bbadccba57 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:29:03 -0800 Subject: [PATCH 07/22] removed erroneous redundant lint check from wheel test Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index acb8bea432..cdb21a5c3e 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -225,12 +225,6 @@ jobs: - name: Install python build dependencies run: | python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install -r tests/requirements.txt - # \todo Temporarily disable check-manifest on MinGW, it is failing - # intermittently with this error: - # ModuleNotFoundError: No module named 'pip._vendor.distlib' - - name: Run check-manifest and lint check - if: matrix.python-version != 'mingw64' - run: make ci-prebuild - uses: actions/download-artifact@v5 with: pattern: 'wheel-.*' From 021f5745a8c847af755b4c0352ed8e3b0217fc9a Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:39:04 -0800 Subject: [PATCH 08/22] fixed download artifact pattern to be glob instead of regex Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index cdb21a5c3e..707d276059 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -227,7 +227,7 @@ jobs: python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install -r tests/requirements.txt - uses: actions/download-artifact@v5 with: - pattern: 'wheel-.*' + pattern: 'wheel-*' path: 'wheelhouse' merge-multiple: true - name: Install wheel for environment From dcac21123521adefc3602c069bfdc83c6f295296 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 14:57:15 -0800 Subject: [PATCH 09/22] filter wheel downloads to only pull for the OS version Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 707d276059..ef30903176 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -227,7 +227,7 @@ jobs: python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install -r tests/requirements.txt - uses: actions/download-artifact@v5 with: - pattern: 'wheel-*' + pattern: wheel-${{ matrix.os }}-* path: 'wheelhouse' merge-multiple: true - name: Install wheel for environment From 19fd51f3c2a8a1045f36846015e8f13e337fa7cf Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 15:14:22 -0800 Subject: [PATCH 10/22] add --break-system-packages to test requirements for mingw Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index ef30903176..966c9214c6 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -213,10 +213,6 @@ jobs: install: >- mingw-w64-x86_64-python mingw-w64-x86_64-python-pip - mingw-w64-x86_64-gcc - mingw-w64-x86_64-cmake - make - git - name: Set up Python ${{ matrix.python-version }} if: matrix.python-version != 'mingw64' uses: actions/setup-python@v5.4.0 @@ -224,7 +220,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install python build dependencies run: | - python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install -r tests/requirements.txt + python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install --upgrade --break-system-packages -r tests/requirements.txt - uses: actions/download-artifact@v5 with: pattern: wheel-${{ matrix.os }}-* From 8154a0ca024ae0562c3ee34e187517217e25072a Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 15:24:35 -0800 Subject: [PATCH 11/22] add --break-system-packages to test wheel install for mingw Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 966c9214c6..3b7e067ae4 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -227,7 +227,7 @@ jobs: path: 'wheelhouse' merge-multiple: true - name: Install wheel for environment - run: pip install --no-index --find-links wheelhouse opentimelineio + run: pip install --no-cache-dir --break-system-packages --no-index --find-links wheelhouse opentimelineio - name: Run tests w/ python coverage run: make ci-postbuild From af7508e6fc8724a72f8ceb3f0f8989fe61bc6a42 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 15:49:44 -0800 Subject: [PATCH 12/22] created anindependent build and test task for platforms with no wheel distro (mingw) Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 65 +++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 3b7e067ae4..2adcd9f0ac 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -143,6 +143,58 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} verbose: true + # This is for platforms where we build and test, but don't make wheels + py_testonly_build: + # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it + runs-on: ${{ matrix.os }} + os: [windows-latest] + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + include: + - { os: windows-latest, shell: msys2, python-version: "mingw64" } + + defaults: + run: + shell: "${{ matrix.shell }} {0}" + + env: + OTIO_CXX_COVERAGE_BUILD: 'ON' + OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build + + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + - name: Set up MSYS2 + if: matrix.python-version == 'mingw64' + uses: msys2/setup-msys2@v2 + with: + msystem: mingw64 + install: >- + mingw-w64-x86_64-python + mingw-w64-x86_64-python-pip + mingw-w64-x86_64-gcc + mingw-w64-x86_64-cmake + make + git + - name: Set up Python ${{ matrix.python-version }} + if: matrix.python-version != 'mingw64' + uses: actions/setup-python@v5.4.0 + with: + python-version: ${{ matrix.python-version }} + - name: Install python build dependencies + run: | + python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest + - name: Install test dependencies + run: | + python -m pip install --upgrade -r tests/requirements.txt + - name: Build and Install OpenTimelineIO + run: | + python -m pip install . -v --break-system-packages + - name: Run tests w/ python coverage + run: make ci-postbuild + package_wheels: needs: py_smoketest_build runs-on: ${{ matrix.os }} @@ -191,7 +243,6 @@ jobs: - { os: macos-latest, shell: bash } - { os: macos-14, shell: bash } - { os: windows-latest, shell: pwsh } - - { os: windows-latest, shell: msys2, python-version: "mingw64" } exclude: - { os: macos-latest, python-version: 3.9 } @@ -205,14 +256,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up MSYS2 - if: matrix.python-version == 'mingw64' - uses: msys2/setup-msys2@v2 - with: - msystem: mingw64 - install: >- - mingw-w64-x86_64-python - mingw-w64-x86_64-python-pip - name: Set up Python ${{ matrix.python-version }} if: matrix.python-version != 'mingw64' uses: actions/setup-python@v5.4.0 @@ -220,14 +263,14 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install python build dependencies run: | - python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install --upgrade --break-system-packages -r tests/requirements.txt + python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest && python -m pip install --upgrade -r tests/requirements.txt - uses: actions/download-artifact@v5 with: pattern: wheel-${{ matrix.os }}-* path: 'wheelhouse' merge-multiple: true - name: Install wheel for environment - run: pip install --no-cache-dir --break-system-packages --no-index --find-links wheelhouse opentimelineio + run: pip install --no-cache-dir --no-index --find-links wheelhouse opentimelineio - name: Run tests w/ python coverage run: make ci-postbuild From f22fe5bb5afe35844069bd5a63e89474523d7452 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 15:51:24 -0800 Subject: [PATCH 13/22] fixed misplaced yaml object Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 2adcd9f0ac..bc19dbabe1 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -147,9 +147,9 @@ jobs: py_testonly_build: # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it runs-on: ${{ matrix.os }} - os: [windows-latest] strategy: matrix: + os: [windows-latest] python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] include: - { os: windows-latest, shell: msys2, python-version: "mingw64" } From f96bb261c4b802a88c1031b4ffabfc25c18cb58f Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 15:54:55 -0800 Subject: [PATCH 14/22] restricted test only python to mingw Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index bc19dbabe1..4030dbee48 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -150,7 +150,7 @@ jobs: strategy: matrix: os: [windows-latest] - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["mingw64"] include: - { os: windows-latest, shell: msys2, python-version: "mingw64" } From 1af7f5e4af4ba826f7e48c52546c8a866530c409 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 16:01:13 -0800 Subject: [PATCH 15/22] added --break-system-packages for mingw Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 4030dbee48..8a68e8618e 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -188,7 +188,7 @@ jobs: python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest - name: Install test dependencies run: | - python -m pip install --upgrade -r tests/requirements.txt + python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | python -m pip install . -v --break-system-packages From e713155d1878ca44e704c00f1a0cca02dfb3aa98 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 16:40:49 -0800 Subject: [PATCH 16/22] updated smoketest and testonly targets to build off sdist Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 8a68e8618e..c37edfa386 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -89,6 +89,7 @@ jobs: cmake ${{ github.workspace }}/tests/consumer -DCMAKE_PREFIX_PATH=${{ env.OTIO_INSTALL_DIR }} py_smoketest_build: + needs: package_sdist # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it runs-on: ubuntu-latest strategy: @@ -104,9 +105,13 @@ jobs: OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build steps: - - uses: actions/checkout@v4 + - name: Get tests and requirements from source + uses: actions/checkout@v4 + - name: Get sdist source + uses: actions/download-artifact@v5 with: - submodules: "recursive" + name: sdist + path: 'sdist' - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5.4.0 with: @@ -126,7 +131,7 @@ jobs: python -m pip install --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install . -v --break-system-packages + python -m pip install sdist/opentimelineio-*.tar.gz -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild # (only on GH_COV_OS and GH_COV_PY) @@ -145,6 +150,7 @@ jobs: # This is for platforms where we build and test, but don't make wheels py_testonly_build: + needs: package_sdist # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it runs-on: ${{ matrix.os }} strategy: @@ -163,9 +169,11 @@ jobs: OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build steps: - - uses: actions/checkout@v4 + - name: Get sdist source + uses: actions/download-artifact@v5 with: - submodules: "recursive" + name: sdist + path: 'sdist' - name: Set up MSYS2 if: matrix.python-version == 'mingw64' uses: msys2/setup-msys2@v2 @@ -186,12 +194,14 @@ jobs: - name: Install python build dependencies run: | python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest + - name: Get source + uses: actions/checkout@v4 - name: Install test dependencies run: | python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install . -v --break-system-packages + python -m pip install sdist/opentimelineio-*.tar.gz -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild @@ -275,7 +285,6 @@ jobs: run: make ci-postbuild package_sdist: - needs: py_smoketest_build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From f323137f52a9bb41f526ceee17242bfd260cb8e6 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 16:48:48 -0800 Subject: [PATCH 17/22] reverted smoketest to use source checkout, fixed test only targets sdist resolution, made wheels no longer depend on smoketest Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index c37edfa386..6ed5f46cd2 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -89,7 +89,6 @@ jobs: cmake ${{ github.workspace }}/tests/consumer -DCMAKE_PREFIX_PATH=${{ env.OTIO_INSTALL_DIR }} py_smoketest_build: - needs: package_sdist # Ideally this would be ${{ env.GH_COV_OS }} - but github doens't allow it runs-on: ubuntu-latest strategy: @@ -107,11 +106,8 @@ jobs: steps: - name: Get tests and requirements from source uses: actions/checkout@v4 - - name: Get sdist source - uses: actions/download-artifact@v5 with: - name: sdist - path: 'sdist' + submodules: "recursive" - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5.4.0 with: @@ -131,7 +127,7 @@ jobs: python -m pip install --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install sdist/opentimelineio-*.tar.gz -v --break-system-packages + python -m pip install . -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild # (only on GH_COV_OS and GH_COV_PY) @@ -201,12 +197,11 @@ jobs: python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install sdist/opentimelineio-*.tar.gz -v --break-system-packages + python -m pip install --no-cache-dir --find-links sdist opentimelineio -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild package_wheels: - needs: py_smoketest_build runs-on: ${{ matrix.os }} strategy: matrix: From a76e051e0c27cb5a09d5ad8d1ca5c42056a14562 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Sun, 9 Nov 2025 17:13:53 -0800 Subject: [PATCH 18/22] one more attempt to make sdist install work Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 6ed5f46cd2..7c94ae5f22 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -169,7 +169,7 @@ jobs: uses: actions/download-artifact@v5 with: name: sdist - path: 'sdist' + path: ./sdist - name: Set up MSYS2 if: matrix.python-version == 'mingw64' uses: msys2/setup-msys2@v2 @@ -197,7 +197,7 @@ jobs: python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install --no-cache-dir --find-links sdist opentimelineio -v --break-system-packages + python -m pip install ./sdist/opentimelineio-*.tar.gz -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild From 61a8b424ccbdf2c90786e68ef52b4976265395af Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Wed, 12 Nov 2025 13:54:09 -0800 Subject: [PATCH 19/22] Trying using an intermediate variable to address sdist wildcard matching in mingw build Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 7c94ae5f22..995141147e 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -197,7 +197,7 @@ jobs: python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - python -m pip install ./sdist/opentimelineio-*.tar.gz -v --break-system-packages + pkg=`ls -1 sdist/opentimelineio-*.tar.gz` python -m pip install $pkg -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild From 742dc6ca7334406ca6d6f47caefeafff74107bcf Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Wed, 12 Nov 2025 14:03:54 -0800 Subject: [PATCH 20/22] adding a debugging ls Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 995141147e..7fa7a31efb 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -197,6 +197,7 @@ jobs: python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | + ls -1 sdist/ pkg=`ls -1 sdist/opentimelineio-*.tar.gz` python -m pip install $pkg -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild From 5e0ce4dc88bfeca49b2e0fb44082869000b16a8b Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Wed, 12 Nov 2025 14:11:28 -0800 Subject: [PATCH 21/22] more debugging ls Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 7fa7a31efb..a3ae6a07f4 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -197,7 +197,7 @@ jobs: python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - name: Build and Install OpenTimelineIO run: | - ls -1 sdist/ + ls -1 pkg=`ls -1 sdist/opentimelineio-*.tar.gz` python -m pip install $pkg -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild From 9ef39954d97ecc49738bdc4b8611ccadde014a46 Mon Sep 17 00:00:00 2001 From: Eric Reinecke Date: Wed, 12 Nov 2025 14:24:34 -0800 Subject: [PATCH 22/22] reshuffle build step order in build only to make sure the sdist artifact is available for install and the repo is subsequently used for testing Signed-off-by: Eric Reinecke --- .github/workflows/python-package.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index a3ae6a07f4..a1178d9568 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -165,11 +165,6 @@ jobs: OTIO_CXX_BUILD_TMP_DIR: ${{ github.workspace }}/build steps: - - name: Get sdist source - uses: actions/download-artifact@v5 - with: - name: sdist - path: ./sdist - name: Set up MSYS2 if: matrix.python-version == 'mingw64' uses: msys2/setup-msys2@v2 @@ -187,7 +182,15 @@ jobs: uses: actions/setup-python@v5.4.0 with: python-version: ${{ matrix.python-version }} - - name: Install python build dependencies + - name: Get sdist source + uses: actions/download-artifact@v5 + with: + name: sdist + path: ./sdist + - name: Build and Install OpenTimelineIO + run: | + python -m pip install sdist/opentimelineio-*.tar.gz -v --break-system-packages + - name: Install python dev dependencies run: | python -m pip install --upgrade pip setuptools wheel "flake8>=3.5" check-manifest - name: Get source @@ -195,10 +198,6 @@ jobs: - name: Install test dependencies run: | python -m pip install --break-system-packages --upgrade -r tests/requirements.txt - - name: Build and Install OpenTimelineIO - run: | - ls -1 - pkg=`ls -1 sdist/opentimelineio-*.tar.gz` python -m pip install $pkg -v --break-system-packages - name: Run tests w/ python coverage run: make ci-postbuild