name: PyPI Publish on: push: tags: - 'python-v*' jobs: linux: name: Python ${{ matrix.config.platform }} manylinux${{ matrix.config.manylinux }} timeout-minutes: 60 strategy: matrix: config: - platform: x86_64 manylinux: "2_17" extra_args: "" - platform: x86_64 manylinux: "2_28" extra_args: "--features fp16kernels" - platform: aarch64 manylinux: "2_24" extra_args: "" # We don't build fp16 kernels for aarch64, because it uses # cross compilation image, which doesn't have a new enough compiler. runs-on: "ubuntu-22.04" steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.8 - uses: ./.github/workflows/build_linux_wheel with: python-minor-version: 8 args: "--release --strip ${{ matrix.config.extra_args }}" arm-build: ${{ matrix.config.platform == 'aarch64' }} manylinux: ${{ matrix.config.manylinux }} - uses: ./.github/workflows/upload_wheel with: pypi_token: ${{ secrets.LANCEDB_PYPI_API_TOKEN }} fury_token: ${{ secrets.FURY_TOKEN }} mac: timeout-minutes: 60 runs-on: ${{ matrix.config.runner }} strategy: matrix: config: - target: x86_64-apple-darwin runner: macos-13 - target: aarch64-apple-darwin runner: macos-14 env: MACOSX_DEPLOYMENT_TARGET: 10.15 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.12 - uses: ./.github/workflows/build_mac_wheel with: python-minor-version: 8 args: "--release --strip --target ${{ matrix.config.target }} --features fp16kernels" - uses: ./.github/workflows/upload_wheel with: pypi_token: ${{ secrets.LANCEDB_PYPI_API_TOKEN }} fury_token: ${{ secrets.FURY_TOKEN }} windows: timeout-minutes: 60 runs-on: windows-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.8 - uses: ./.github/workflows/build_windows_wheel with: python-minor-version: 8 args: "--release --strip" vcpkg_token: ${{ secrets.VCPKG_GITHUB_PACKAGES }} - uses: ./.github/workflows/upload_wheel with: pypi_token: ${{ secrets.LANCEDB_PYPI_API_TOKEN }} fury_token: ${{ secrets.FURY_TOKEN }} gh-release: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - name: Extract version id: extract_version env: GITHUB_REF: ${{ github.ref }} run: | set -e echo "Extracting tag and version from $GITHUB_REF" if [[ $GITHUB_REF =~ refs/tags/python-v(.*) ]]; then VERSION=${BASH_REMATCH[1]} TAG=python-v$VERSION echo "tag=$TAG" >> $GITHUB_OUTPUT echo "version=$VERSION" >> $GITHUB_OUTPUT else echo "Failed to extract version from $GITHUB_REF" exit 1 fi echo "Extracted version $VERSION from $GITHUB_REF" if [[ $VERSION =~ beta ]]; then echo "This is a beta release" # Get last release (that is not this one) FROM_TAG=$(git tag --sort='version:refname' \ | grep ^python-v \ | grep -vF "$TAG" \ | python ci/semver_sort.py python-v \ | tail -n 1) else echo "This is a stable release" # Get last stable tag (ignore betas) FROM_TAG=$(git tag --sort='version:refname' \ | grep ^python-v \ | grep -vF "$TAG" \ | grep -v beta \ | python ci/semver_sort.py python-v \ | tail -n 1) fi echo "Found from tag $FROM_TAG" echo "from_tag=$FROM_TAG" >> $GITHUB_OUTPUT - name: Create Python Release Notes id: python_release_notes uses: mikepenz/release-changelog-builder-action@v4 with: configuration: .github/release_notes.json toTag: ${{ steps.extract_version.outputs.tag }} fromTag: ${{ steps.extract_version.outputs.from_tag }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create Python GH release uses: softprops/action-gh-release@v2 with: prerelease: ${{ contains('beta', github.ref) }} tag_name: ${{ steps.extract_version.outputs.tag }} token: ${{ secrets.GITHUB_TOKEN }} generate_release_notes: false name: Python LanceDB v${{ steps.extract_version.outputs.version }} body: ${{ steps.python_release_notes.outputs.changelog }}