Workflow file for this run
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
| name: Build Test PyPi Wheels on Windows | |
| on: | |
| push: | |
| branches: [ "main", "feat/win-compilation-test" ] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build_wheels_linux_x64: | |
| name: Build wheels on ${{ matrix.platform }} (x64) for TestPyPi | |
| # uses: ./.github/workflows/_build_wheel_job.yml | |
| # with: | |
| # runner: ${{ matrix.os }} | |
| # pypi_repository_url: https://test.pypi.org/legacy/ | |
| # secrets: | |
| # PYPI_API_TOKEN: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 1 | |
| matrix: | |
| include: | |
| - os: windows-2022 | |
| - os: windows-2025 | |
| - os: windows-amd | |
| - os: windows-g9i | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Python (for cibuildwheel controller) | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.11' | |
| # architecture: x64 #default | |
| - name: Install cibuildwheel | |
| run: | | |
| pip install --upgrade pip | |
| pip install cibuildwheel==3.4.0 | |
| - name: Build wheels using cibuildwheel | |
| run: | | |
| python -m cibuildwheel --output-dir wheelhouse | |
| # Save list of built wheels for publishing | |
| ls wheelhouse/*.whl | tee $GITHUB_STEP_SUMMARY | |
| echo "wheels=$(ls wheelhouse/*.whl | tr '\n' ' ')" >> $GITHUB_ENV | |
| - name: Publish to PyPI | |
| if: success() && github.event_name == 'workflow_dispatch' | |
| env: | |
| TWINE_USERNAME: __token__ | |
| TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} | |
| TWINE_REPOSITORY_URL: ${{ inputs.pypi_repository_url }} | |
| run: | | |
| pip install twine | |
| twine upload --skip-existing --verbose wheelhouse/*.whl | |
| - name: Smoke test from PyPI | |
| if: success() && github.event_name == 'workflow_dispatch' | |
| shell: bash | |
| env: | |
| PYPI_REPOSITORY_URL: ${{ inputs.pypi_repository_url }} | |
| run: | | |
| # Extract version from wheel filename (e.g. zvec-0.2.1.dev24-cp311-...whl -> 0.2.1.dev24) | |
| WHEEL_FILE=$(ls wheelhouse/zvec-*.whl | head -1) | |
| ZVEC_VERSION=$(basename "$WHEEL_FILE" | sed 's/zvec-\([^-]*\)-.*/\1/') | |
| # Build index-url flags: use TestPyPI when repository URL is set, otherwise official PyPI | |
| if [ -n "$PYPI_REPOSITORY_URL" ]; then | |
| INDEX_FLAGS="--index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/" | |
| echo "Waiting for zvec==$ZVEC_VERSION to become available on TestPyPI..." | |
| else | |
| INDEX_FLAGS="" | |
| echo "Waiting for zvec==$ZVEC_VERSION to become available on PyPI..." | |
| fi | |
| # Poll until the version is available (max 5 minutes) | |
| FOUND=0 | |
| for i in $(seq 1 30); do | |
| if pip install $INDEX_FLAGS --dry-run "zvec==$ZVEC_VERSION" > /dev/null 2>&1; then | |
| echo "Version $ZVEC_VERSION is available." | |
| FOUND=1 | |
| break | |
| fi | |
| echo "Attempt $i/30: not yet available, retrying in 10s..." | |
| sleep 10 | |
| done | |
| if [ "$FOUND" -eq 0 ]; then | |
| echo "ERROR: Timed out (5 min) waiting for zvec==$ZVEC_VERSION on PyPI. Aborting smoke test." | |
| exit 1 | |
| fi | |
| # Create a clean venv and install | |
| python -m venv test_env | |
| source test_env/bin/activate | |
| pip install --upgrade pip | |
| pip install $INDEX_FLAGS "zvec==$ZVEC_VERSION" | |
| pip install --upgrade pip | |
| pip install $INDEX_FLAGS "zvec==$ZVEC_VERSION" | |
| # Run a simple smoke test | |
| python -c "import zvec; print('Import OK:', zvec.__version__)" | |