name: GitHub Release # All SDKs share one version, so a single `vX.Y.Z` tag produces a single GitHub # release covering all of them. The per-package publish workflows (PyPI, NPM, # Cargo, Maven) trigger off the same tag independently. on: push: tags: - "v*" permissions: contents: read jobs: gh-release: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v6 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/v(.*) ]]; then VERSION=${BASH_REMATCH[1]} TAG=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" echo "prerelease=true" >> $GITHUB_OUTPUT # Get last release (that is not this one) FROM_TAG=$(git tag --sort='version:refname' \ | grep ^v \ | grep -vF "$TAG" \ | python ci/semver_sort.py v \ | tail -n 1) else echo "This is a stable release" echo "prerelease=false" >> $GITHUB_OUTPUT # Get last stable tag (ignore betas) FROM_TAG=$(git tag --sort='version:refname' \ | grep ^v \ | grep -vF "$TAG" \ | grep -v beta \ | python ci/semver_sort.py v \ | tail -n 1) fi echo "Found from tag $FROM_TAG" echo "from_tag=$FROM_TAG" >> $GITHUB_OUTPUT - name: Create Release Notes id: 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 GH release uses: softprops/action-gh-release@v2 with: # Marking betas as pre-releases keeps them from taking the "Latest" # badge on the releases page. prerelease: ${{ steps.extract_version.outputs.prerelease }} make_latest: ${{ steps.extract_version.outputs.prerelease == 'false' }} tag_name: ${{ steps.extract_version.outputs.tag }} token: ${{ secrets.GITHUB_TOKEN }} generate_release_notes: false name: LanceDB v${{ steps.extract_version.outputs.version }} body: ${{ steps.release_notes.outputs.changelog }}