This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/sedona-db.git


The following commit(s) were added to refs/heads/main by this push:
     new f3ec0fa1 chore(dev/release) Add publish scripts to crate.io and update 
rust dependency (#413)
f3ec0fa1 is described below

commit f3ec0fa144cc84ce3c1f9e1d8cc976e9045594e4
Author: Feng Zhang <[email protected]>
AuthorDate: Thu Dec 11 09:58:07 2025 -0800

    chore(dev/release) Add publish scripts to crate.io and update rust 
dependency (#413)
    
    Co-authored-by: Dewey Dunnington <[email protected]>
    Co-authored-by: Dewey Dunnington <[email protected]>
    Co-authored-by: Peter Nguyen <[email protected]>
    Co-authored-by: Copilot <[email protected]>
    Co-authored-by: Matthew Powers <[email protected]>
---
 Cargo.toml                              |   4 +-
 c/sedona-geoarrow-c/Cargo.toml          |   6 +-
 c/sedona-geos/Cargo.toml                |   6 +-
 c/sedona-proj/Cargo.toml                |   6 +-
 c/sedona-s2geography/Cargo.toml         |   6 +-
 c/sedona-tg/Cargo.toml                  |   6 +-
 dev/release/publish-crates.sh           | 397 ++++++++++++++++++++++++++++++++
 python/sedonadb/Cargo.toml              |   1 +
 r/sedonadb/src/rust/Cargo.toml          |   1 +
 rust/sedona-adbc/Cargo.toml             |   3 +
 rust/sedona-common/Cargo.toml           |   3 +
 rust/sedona-datasource/Cargo.toml       |   3 +
 rust/sedona-expr/Cargo.toml             |   5 +-
 rust/sedona-functions/Cargo.toml        |   5 +-
 rust/sedona-geo-generic-alg/Cargo.toml  |   5 +-
 rust/sedona-geo-traits-ext/Cargo.toml   |   3 +
 rust/sedona-geo/Cargo.toml              |   5 +-
 rust/sedona-geometry/Cargo.toml         |   5 +-
 rust/sedona-geoparquet/Cargo.toml       |   5 +-
 rust/sedona-raster-functions/Cargo.toml |   5 +-
 rust/sedona-raster/Cargo.toml           |   5 +-
 rust/sedona-schema/Cargo.toml           |   3 +
 rust/sedona-spatial-join/Cargo.toml     |   5 +-
 rust/sedona-testing/Cargo.toml          |   4 +-
 rust/sedona/Cargo.toml                  |   5 +-
 25 files changed, 480 insertions(+), 22 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 76314a12..3d24a86c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -57,6 +57,8 @@ edition = "2021"
 # Same rust-version, arrow, and datafusion dependencies as datafusion-comet
 # https://github.com/apache/datafusion-comet/blob/main/native/Cargo.toml
 rust-version = "1.86"
+keywords = ["geospatial", "gis", "spatial", "datafusion", "arrow"]
+categories = ["science::geo", "database"]
 
 [workspace.dependencies]
 approx = "0.5"
@@ -142,7 +144,7 @@ sedona-raster = { version = "0.3.0", path = 
"rust/sedona-raster" }
 sedona-raster-functions = { version = "0.3.0", path = 
"rust/sedona-raster-functions" }
 sedona-schema = { version = "0.3.0", path = "rust/sedona-schema" }
 sedona-spatial-join = { version = "0.3.0", path = "rust/sedona-spatial-join" }
-# sedona-testing is not published to crates.io, so it uses path-only in 
individual crates
+sedona-testing = { version = "0.3.0", path = "rust/sedona-testing" }
 
 # C wrapper crates
 sedona-geoarrow-c = { version = "0.3.0", path = "c/sedona-geoarrow-c" }
diff --git a/c/sedona-geoarrow-c/Cargo.toml b/c/sedona-geoarrow-c/Cargo.toml
index b9348387..d95df443 100644
--- a/c/sedona-geoarrow-c/Cargo.toml
+++ b/c/sedona-geoarrow-c/Cargo.toml
@@ -17,8 +17,10 @@
 [package]
 name = "sedona-geoarrow-c"
 version.workspace = true
-authors.workspace = true
 license.workspace = true
+keywords.workspace = true
+categories.workspace = true
+authors.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -33,7 +35,7 @@ cc = { version = "1" }
 criterion = { workspace = true }
 rstest = { workspace = true }
 sedona = { workspace = true }
-sedona-testing = { path = "../../rust/sedona-testing", features = 
["criterion"] }
+sedona-testing = { workspace = true }
 
 [dependencies]
 arrow-schema = { workspace = true }
diff --git a/c/sedona-geos/Cargo.toml b/c/sedona-geos/Cargo.toml
index 260f3de1..c6c64ef0 100644
--- a/c/sedona-geos/Cargo.toml
+++ b/c/sedona-geos/Cargo.toml
@@ -17,8 +17,10 @@
 [package]
 name = "sedona-geos"
 version.workspace = true
-authors.workspace = true
 license.workspace = true
+keywords.workspace = true
+categories.workspace = true
+authors.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -29,7 +31,7 @@ rust-version.workspace = true
 [dev-dependencies]
 criterion = { workspace = true }
 sedona = { workspace = true }
-sedona-testing = { path = "../../rust/sedona-testing", features = 
["criterion"] }
+sedona-testing = { workspace = true }
 rstest = { workspace = true }
 geo-types = { workspace = true }
 
diff --git a/c/sedona-proj/Cargo.toml b/c/sedona-proj/Cargo.toml
index 556e9575..4368a112 100644
--- a/c/sedona-proj/Cargo.toml
+++ b/c/sedona-proj/Cargo.toml
@@ -17,8 +17,10 @@
 [package]
 name = "sedona-proj"
 version.workspace = true
-authors.workspace = true
 license.workspace = true
+keywords.workspace = true
+categories.workspace = true
+authors.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -34,7 +36,7 @@ approx = { workspace = true }
 geo-types = { workspace = true }
 rstest = { workspace = true }
 wkb = { workspace = true }
-sedona-testing = { path = "../../rust/sedona-testing", features = 
["criterion"] }
+sedona-testing = { workspace = true, features = ["criterion"] }
 criterion = { workspace = true}
 
 [features]
diff --git a/c/sedona-s2geography/Cargo.toml b/c/sedona-s2geography/Cargo.toml
index 603ac080..db073194 100644
--- a/c/sedona-s2geography/Cargo.toml
+++ b/c/sedona-s2geography/Cargo.toml
@@ -17,8 +17,10 @@
 [package]
 name = "sedona-s2geography"
 version.workspace = true
-authors.workspace = true
 license.workspace = true
+keywords.workspace = true
+categories.workspace = true
+authors.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -34,7 +36,7 @@ regex = { workspace = true }
 criterion = { workspace = true }
 rstest = { workspace = true }
 sedona = { workspace = true }
-sedona-testing = { path = "../../rust/sedona-testing", features = 
["criterion"] }
+sedona-testing = { workspace = true }
 
 [dependencies]
 arrow-schema = { workspace = true }
diff --git a/c/sedona-tg/Cargo.toml b/c/sedona-tg/Cargo.toml
index fe5a1d98..a7ea58b9 100644
--- a/c/sedona-tg/Cargo.toml
+++ b/c/sedona-tg/Cargo.toml
@@ -17,8 +17,10 @@
 [package]
 name = "sedona-tg"
 version.workspace = true
-authors.workspace = true
 license.workspace = true
+keywords.workspace = true
+categories.workspace = true
+authors.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -33,7 +35,7 @@ cc = { version = "1" }
 criterion = { workspace = true }
 rstest = { workspace = true }
 sedona = { workspace = true }
-sedona-testing = { path = "../../rust/sedona-testing", features = 
["criterion"] }
+sedona-testing = { workspace = true }
 wkb = { workspace = true }
 geo = { workspace = true }
 
diff --git a/dev/release/publish-crates.sh b/dev/release/publish-crates.sh
new file mode 100755
index 00000000..b9da294b
--- /dev/null
+++ b/dev/release/publish-crates.sh
@@ -0,0 +1,397 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# SedonaDB Crates.io Publishing Script
+#
+# This script publishes all SedonaDB crates to crates.io in the correct 
dependency order.
+# Run with --dry-run first to validate everything before actual publishing.
+#
+# Usage:
+#   ./scripts/publish-crates.sh --dry-run    # Validate only (recommended 
first)
+#   ./scripts/publish-crates.sh --publish    # Actually publish to crates.io
+#
+# Prerequisites:
+#   1. Create account at https://crates.io (via GitHub login)
+#   2. Verify your email address
+#   3. Generate API token at https://crates.io/settings/tokens
+#   4. Run: cargo login <your-api-token>
+#
+
+set -e
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Script directory and workspace root
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+WORKSPACE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
+
+# Parse arguments
+DRY_RUN=true
+DRY_RUN_LOCAL=false
+SKIP_TESTS=false
+SKIP_VALIDATION=false
+START_FROM=""
+
+print_usage() {
+    echo "Usage: $0 [OPTIONS]"
+    echo ""
+    echo "Options:"
+    echo "  --dry-run         Validate packages without publishing (default)"
+    echo "  --dry-run-local   Validate packages using local dependencies (more 
useful)"
+    echo "  --publish         Actually publish to crates.io"
+    echo "  --skip-tests      Skip running tests"
+    echo "  --skip-validation Skip pre-publish validation"
+    echo "  --start-from PKG  Start publishing from a specific package"
+    echo "  --help            Show this help message"
+    echo ""
+    echo "Note: --dry-run will fail for crates with unpublished dependencies."
+    echo "      Use --dry-run-local for validating the entire workspace first."
+}
+
+while [[ $# -gt 0 ]]; do
+    case $1 in
+        --dry-run)
+            DRY_RUN=true
+            DRY_RUN_LOCAL=false
+            shift
+            ;;
+        --dry-run-local)
+            DRY_RUN=true
+            DRY_RUN_LOCAL=true
+            shift
+            ;;
+        --publish)
+            DRY_RUN=false
+            DRY_RUN_LOCAL=false
+            shift
+            ;;
+        --skip-tests)
+            SKIP_TESTS=true
+            shift
+            ;;
+        --skip-validation)
+            SKIP_VALIDATION=true
+            shift
+            ;;
+        --start-from)
+            START_FROM="$2"
+            shift 2
+            ;;
+        --help)
+            print_usage
+            exit 0
+            ;;
+        *)
+            echo -e "${RED}Unknown option: $1${NC}"
+            print_usage
+            exit 1
+            ;;
+    esac
+done
+
+# Crates in dependency order (leaf crates first)
+# This order ensures that when publishing a crate, all its dependencies are 
already published
+CRATES=(
+    # Tier 1 - Foundation crates (no internal dependencies)
+    "rust/sedona-geo-traits-ext"
+    "rust/sedona-geo-generic-alg"
+
+    # Tier 2 - Core types (no internal deps)
+    "rust/sedona-geometry"
+    "rust/sedona-common"
+
+    # Tier 3 - Schema (depends on common)
+    "rust/sedona-schema"
+
+    # Tier 4 - Expression (depends on common, geometry, schema)
+    "rust/sedona-expr"
+
+    # Tier 5 - Functions (depends on expr, geometry, schema, common)
+    "rust/sedona-functions"
+
+    # Tier 6 - C wrappers and sedona-geo (all depend on functions)
+    "c/sedona-tg"
+    "c/sedona-geos"
+    "c/sedona-proj"
+    "c/sedona-s2geography"
+    "c/sedona-geoarrow-c"
+    "rust/sedona-geo"
+
+    # Tier 7 - Higher-level features
+    "rust/sedona-geoparquet"
+    "rust/sedona-raster"
+    "rust/sedona-raster-functions"
+    "rust/sedona-spatial-join"
+    "rust/sedona-datasource"
+
+    # Tier 8 - Testing utilities (depends on expr, geometry, schema, raster)
+    "rust/sedona-testing"
+
+    # Tier 9 - Main library (depends on most crates including sedona-testing)
+    "rust/sedona"
+
+    # Tier 10 - Crates that depend on main library
+    "rust/sedona-adbc"
+    "sedona-cli"
+)
+
+# Crates that should NOT be published
+EXCLUDED_CRATES=(
+    "python/sedonadb"      # Python bindings - use PyPI
+    "r/sedonadb/src/rust"  # R bindings - use CRAN
+    "rust/sedona-testing"  # Test utilities only
+)
+
+echo -e "${BLUE}============================================${NC}"
+echo -e "${BLUE}  SedonaDB Crates.io Publishing Script${NC}"
+echo -e "${BLUE}============================================${NC}"
+echo ""
+
+if [ "$DRY_RUN" = true ]; then
+    if [ "$DRY_RUN_LOCAL" = true ]; then
+        echo -e "${YELLOW}Mode: DRY RUN LOCAL (package validation only)${NC}"
+    else
+        echo -e "${YELLOW}Mode: DRY RUN (full crates.io validation)${NC}"
+    fi
+else
+    echo -e "${RED}Mode: PUBLISH (will upload to crates.io)${NC}"
+fi
+echo ""
+
+cd "$WORKSPACE_ROOT"
+
+# ============================================
+# Step 1: Pre-flight checks
+# ============================================
+echo -e "${BLUE}Step 1: Pre-flight checks${NC}"
+echo "----------------------------------------"
+
+# Check if logged in to crates.io
+if ! cargo login --help &>/dev/null; then
+    echo -e "${RED}Error: cargo is not installed${NC}"
+    exit 1
+fi
+
+# Check for uncommitted changes
+if [ -n "$(git status --porcelain)" ]; then
+    echo -e "${YELLOW}Warning: You have uncommitted changes${NC}"
+    git status --short
+    echo ""
+    if [ "$DRY_RUN" = false ]; then
+        read -p "Continue anyway? (y/N) " -n 1 -r
+        echo
+        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+            exit 1
+        fi
+    fi
+fi
+
+# Check current branch
+CURRENT_BRANCH=$(git branch --show-current)
+echo -e "Current branch: ${GREEN}$CURRENT_BRANCH${NC}"
+
+# Check git tag
+CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = 
"\(.*\)"/\1/')
+echo -e "Workspace version: ${GREEN}$CURRENT_VERSION${NC}"
+echo ""
+
+# ============================================
+# Step 2: Run tests (optional)
+# ============================================
+if [ "$SKIP_TESTS" = false ]; then
+    echo -e "${BLUE}Step 2: Running tests${NC}"
+    echo "----------------------------------------"
+
+    echo "Running: cargo test --workspace --exclude sedonadb --exclude 
sedonadbr"
+    if ! cargo test --workspace --exclude sedonadb --exclude sedonadbr 
--all-targets --all-features; then
+        echo -e "${RED}Tests failed! Fix issues before publishing.${NC}"
+        exit 1
+    fi
+    echo -e "${GREEN}All tests passed!${NC}"
+    echo ""
+else
+    echo -e "${YELLOW}Step 2: Skipping tests (--skip-tests)${NC}"
+    echo ""
+fi
+
+# ============================================
+# Step 3: Build release
+# ============================================
+if [ "$SKIP_VALIDATION" = false ]; then
+    echo -e "${BLUE}Step 3: Building release${NC}"
+    echo "----------------------------------------"
+
+    echo "Running: cargo build --workspace --exclude sedonadb --exclude 
sedonadbr --release"
+    if ! cargo build --workspace --exclude sedonadb --exclude sedonadbr 
--release; then
+        echo -e "${RED}Build failed!${NC}"
+        exit 1
+    fi
+    echo -e "${GREEN}Release build successful!${NC}"
+    echo ""
+else
+    echo -e "${YELLOW}Step 3: Skipping build (--skip-validation)${NC}"
+    echo ""
+fi
+
+# ============================================
+# Step 4: Validate/Publish each crate
+# ============================================
+if [ "$DRY_RUN" = true ]; then
+    echo -e "${BLUE}Step 4: Validating packages (dry-run)${NC}"
+else
+    echo -e "${BLUE}Step 4: Publishing packages${NC}"
+fi
+echo "----------------------------------------"
+
+STARTED=false
+if [ -z "$START_FROM" ]; then
+    STARTED=true
+fi
+
+FAILED_CRATES=()
+PUBLISHED_CRATES=()
+SKIPPED_CRATES=()
+
+for crate_path in "${CRATES[@]}"; do
+    crate_name=$(basename "$crate_path")
+
+    # Handle --start-from
+    if [ "$STARTED" = false ]; then
+        if [ "$crate_name" = "$START_FROM" ] || [ "$crate_path" = 
"$START_FROM" ]; then
+            STARTED=true
+        else
+            echo -e "${YELLOW}Skipping $crate_name (before --start-from)${NC}"
+            SKIPPED_CRATES+=("$crate_name")
+            continue
+        fi
+    fi
+
+    # Get actual package name from Cargo.toml
+    if [ -f "$WORKSPACE_ROOT/$crate_path/Cargo.toml" ]; then
+        pkg_name=$(grep '^name = ' "$WORKSPACE_ROOT/$crate_path/Cargo.toml" | 
head -1 | sed 's/name = "\(.*\)"/\1/')
+    else
+        echo -e "${RED}Cargo.toml not found: $crate_path${NC}"
+        FAILED_CRATES+=("$crate_path")
+        continue
+    fi
+
+    echo ""
+    echo -e "${BLUE}>>> Processing: $pkg_name ($crate_path)${NC}"
+
+    cd "$WORKSPACE_ROOT/$crate_path"
+
+    if [ "$DRY_RUN" = true ]; then
+        if [ "$DRY_RUN_LOCAL" = true ]; then
+            # Local dry run - use cargo check (compiles with local deps, no 
crates.io lookup)
+            echo "    Running: cargo check --all-features"
+            if cargo check --all-features 2>&1; then
+                echo -e "    ${GREEN}Check passed${NC}"
+                PUBLISHED_CRATES+=("$pkg_name")
+            else
+                echo -e "    ${RED}Check failed${NC}"
+                FAILED_CRATES+=("$pkg_name")
+            fi
+        else
+            # Full dry run - validates against crates.io
+            echo "    Running: cargo publish --dry-run"
+            if cargo publish --dry-run 2>&1; then
+                echo -e "    ${GREEN}Validation passed${NC}"
+                PUBLISHED_CRATES+=("$pkg_name")
+            else
+                echo -e "    ${RED}Validation failed${NC}"
+                FAILED_CRATES+=("$pkg_name")
+            fi
+        fi
+    else
+        # Actual publish
+        echo "    Running: cargo publish"
+        if cargo publish 2>&1; then
+            echo -e "    ${GREEN}Published successfully${NC}"
+            PUBLISHED_CRATES+=("$pkg_name")
+
+            # Wait for crates.io to index the new crate
+            echo "    Waiting 120 seconds for crates.io to index..."
+            sleep 120
+        else
+            echo -e "    ${RED}Publish failed${NC}"
+            FAILED_CRATES+=("$pkg_name")
+
+            # Ask whether to continue
+            read -p "    Continue with remaining crates? (y/N) " -n 1 -r
+            echo
+            if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+                break
+            fi
+        fi
+    fi
+
+    cd "$WORKSPACE_ROOT"
+done
+
+# ============================================
+# Summary
+# ============================================
+echo ""
+echo -e "${BLUE}============================================${NC}"
+echo -e "${BLUE}  Summary${NC}"
+echo -e "${BLUE}============================================${NC}"
+echo ""
+
+if [ ${#PUBLISHED_CRATES[@]} -gt 0 ]; then
+    if [ "$DRY_RUN" = true ]; then
+        echo -e "${GREEN}Validated successfully (${#PUBLISHED_CRATES[@]} 
crates):${NC}"
+    else
+        echo -e "${GREEN}Published successfully (${#PUBLISHED_CRATES[@]} 
crates):${NC}"
+    fi
+    for crate in "${PUBLISHED_CRATES[@]}"; do
+        echo "  - $crate"
+    done
+    echo ""
+fi
+
+if [ ${#SKIPPED_CRATES[@]} -gt 0 ]; then
+    echo -e "${YELLOW}Skipped (${#SKIPPED_CRATES[@]} crates):${NC}"
+    for crate in "${SKIPPED_CRATES[@]}"; do
+        echo "  - $crate"
+    done
+    echo ""
+fi
+
+if [ ${#FAILED_CRATES[@]} -gt 0 ]; then
+    echo -e "${RED}Failed (${#FAILED_CRATES[@]} crates):${NC}"
+    for crate in "${FAILED_CRATES[@]}"; do
+        echo "  - $crate"
+    done
+    echo ""
+    exit 1
+fi
+
+if [ "$DRY_RUN" = true ]; then
+    echo -e "${GREEN}Dry run completed successfully!${NC}"
+    echo ""
+    echo "To actually publish, run:"
+    echo "  $0 --publish"
+else
+    echo -e "${GREEN}All crates published successfully!${NC}"
+fi
diff --git a/python/sedonadb/Cargo.toml b/python/sedonadb/Cargo.toml
index 67a21e07..426bed90 100644
--- a/python/sedonadb/Cargo.toml
+++ b/python/sedonadb/Cargo.toml
@@ -18,6 +18,7 @@
 [package]
 name = "sedonadb"
 version = { workspace = true }
+publish = false
 edition = "2021"
 
 [lib]
diff --git a/r/sedonadb/src/rust/Cargo.toml b/r/sedonadb/src/rust/Cargo.toml
index 19b4edc7..2ce10cfd 100644
--- a/r/sedonadb/src/rust/Cargo.toml
+++ b/r/sedonadb/src/rust/Cargo.toml
@@ -18,6 +18,7 @@
 [package]
 name = "sedonadbr"
 version = { workspace = true }
+publish = false
 edition = "2021"
 
 [lib]
diff --git a/rust/sedona-adbc/Cargo.toml b/rust/sedona-adbc/Cargo.toml
index 1abf600e..2ebdac2f 100644
--- a/rust/sedona-adbc/Cargo.toml
+++ b/rust/sedona-adbc/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-adbc"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
diff --git a/rust/sedona-common/Cargo.toml b/rust/sedona-common/Cargo.toml
index 005593b3..cb8a9e59 100644
--- a/rust/sedona-common/Cargo.toml
+++ b/rust/sedona-common/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-common"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
diff --git a/rust/sedona-datasource/Cargo.toml 
b/rust/sedona-datasource/Cargo.toml
index c7273de8..fe4b9b02 100644
--- a/rust/sedona-datasource/Cargo.toml
+++ b/rust/sedona-datasource/Cargo.toml
@@ -18,6 +18,9 @@
 [package]
 name = "sedona-datasource"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
diff --git a/rust/sedona-expr/Cargo.toml b/rust/sedona-expr/Cargo.toml
index b911b509..8bfcbcf1 100644
--- a/rust/sedona-expr/Cargo.toml
+++ b/rust/sedona-expr/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-expr"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -29,7 +32,7 @@ result_large_err = "allow"
 
 [dev-dependencies]
 rstest = { workspace = true }
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 
 [dependencies]
 arrow-schema = { workspace = true }
diff --git a/rust/sedona-functions/Cargo.toml b/rust/sedona-functions/Cargo.toml
index 5a39a2d3..57afd240 100644
--- a/rust/sedona-functions/Cargo.toml
+++ b/rust/sedona-functions/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-functions"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -31,7 +34,7 @@ result_large_err = "allow"
 arrow-json = { workspace = true }
 criterion = { workspace = true }
 rstest = { workspace = true }
-sedona-testing = { path = "../sedona-testing", features = ["criterion"] }
+sedona-testing = { workspace = true, features = ["criterion"] }
 datafusion = { workspace = true }
 tokio = { workspace = true, features = ["rt", "macros"] }
 
diff --git a/rust/sedona-geo-generic-alg/Cargo.toml 
b/rust/sedona-geo-generic-alg/Cargo.toml
index 350096d2..41e1bf61 100644
--- a/rust/sedona-geo-generic-alg/Cargo.toml
+++ b/rust/sedona-geo-generic-alg/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-geo-generic-alg"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -36,7 +39,7 @@ rstar = "0.12.0"
 i_overlay = { version = "4.0.0, < 4.1.0", default-features = false }
 
 [dev-dependencies]
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 approx = { workspace = true }
 criterion = { workspace = true }
 pretty_env_logger = "0.4"
diff --git a/rust/sedona-geo-traits-ext/Cargo.toml 
b/rust/sedona-geo-traits-ext/Cargo.toml
index fb9a4950..78b229d3 100644
--- a/rust/sedona-geo-traits-ext/Cargo.toml
+++ b/rust/sedona-geo-traits-ext/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-geo-traits-ext"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
diff --git a/rust/sedona-geo/Cargo.toml b/rust/sedona-geo/Cargo.toml
index 7fa02d73..c0940010 100644
--- a/rust/sedona-geo/Cargo.toml
+++ b/rust/sedona-geo/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-geo"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -32,7 +35,7 @@ criterion = { workspace = true }
 rstest = { workspace = true }
 sedona-geometry = { workspace = true }
 sedona-schema = { workspace = true }
-sedona-testing = { path = "../sedona-testing", features = ["criterion", "geo"] 
}
+sedona-testing = { workspace = true, features = ["criterion", "geo"] }
 wkt = { workspace = true }
 
 [dependencies]
diff --git a/rust/sedona-geometry/Cargo.toml b/rust/sedona-geometry/Cargo.toml
index 7d3a45c1..3a4abb1e 100644
--- a/rust/sedona-geometry/Cargo.toml
+++ b/rust/sedona-geometry/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-geometry"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -30,7 +33,7 @@ result_large_err = "allow"
 [dev-dependencies]
 geo-types = { workspace = true }
 rstest = { workspace = true }
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 serde_json = { workspace = true }
 wkt = { workspace = true }
 
diff --git a/rust/sedona-geoparquet/Cargo.toml 
b/rust/sedona-geoparquet/Cargo.toml
index b14beef5..3e63c236 100644
--- a/rust/sedona-geoparquet/Cargo.toml
+++ b/rust/sedona-geoparquet/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-geoparquet"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -31,7 +34,7 @@ result_large_err = "allow"
 default = []
 
 [dev-dependencies]
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 url = { workspace = true }
 rstest = { workspace = true }
 tempfile = { workspace = true }
diff --git a/rust/sedona-raster-functions/Cargo.toml 
b/rust/sedona-raster-functions/Cargo.toml
index 6c681f8a..6d3eaa4b 100644
--- a/rust/sedona-raster-functions/Cargo.toml
+++ b/rust/sedona-raster-functions/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-raster-functions"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -40,7 +43,7 @@ sedona-schema = { workspace = true }
 
 [dev-dependencies]
 criterion = { workspace = true }
-sedona-testing = { path = "../sedona-testing", features = ["criterion"] }
+sedona-testing = { workspace = true, features = ["criterion"] }
 rstest = { workspace = true }
 
 [[bench]]
diff --git a/rust/sedona-raster/Cargo.toml b/rust/sedona-raster/Cargo.toml
index f2757739..7407a050 100644
--- a/rust/sedona-raster/Cargo.toml
+++ b/rust/sedona-raster/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-raster"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -35,5 +38,5 @@ sedona-common = { workspace = true }
 sedona-schema = { workspace = true }
 
 [dev-dependencies]
+sedona-testing = { workspace = true }
 approx = { workspace = true }
-sedona-testing = { path = "../sedona-testing" }
diff --git a/rust/sedona-schema/Cargo.toml b/rust/sedona-schema/Cargo.toml
index 48b4fd80..85399e68 100644
--- a/rust/sedona-schema/Cargo.toml
+++ b/rust/sedona-schema/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-schema"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
diff --git a/rust/sedona-spatial-join/Cargo.toml 
b/rust/sedona-spatial-join/Cargo.toml
index 046a8be6..d1231c64 100644
--- a/rust/sedona-spatial-join/Cargo.toml
+++ b/rust/sedona-spatial-join/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona-spatial-join"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -65,7 +68,7 @@ float_next_after = { workspace = true }
 [dev-dependencies]
 criterion = { workspace = true }
 rstest = { workspace = true }
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 wkt = { workspace = true }
 tokio = { workspace = true, features = ["macros"] }
 rand = { workspace = true }
diff --git a/rust/sedona-testing/Cargo.toml b/rust/sedona-testing/Cargo.toml
index f0a96b94..f5ed3443 100644
--- a/rust/sedona-testing/Cargo.toml
+++ b/rust/sedona-testing/Cargo.toml
@@ -17,13 +17,15 @@
 [package]
 name = "sedona-testing"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
 readme.workspace = true
 edition.workspace = true
 rust-version.workspace = true
-publish = false  # This crate is for testing only and not published to 
crates.io
 
 [lints.clippy]
 result_large_err = "allow"
diff --git a/rust/sedona/Cargo.toml b/rust/sedona/Cargo.toml
index 4119280d..9e031a93 100644
--- a/rust/sedona/Cargo.toml
+++ b/rust/sedona/Cargo.toml
@@ -17,6 +17,9 @@
 [package]
 name = "sedona"
 version.workspace = true
+license.workspace = true
+keywords.workspace = true
+categories.workspace = true
 homepage.workspace = true
 repository.workspace = true
 description.workspace = true
@@ -75,7 +78,7 @@ sedona-raster-functions = { workspace = true }
 sedona-schema = { workspace = true }
 sedona-spatial-join = { workspace = true, optional = true }
 sedona-s2geography = { workspace = true, optional = true }
-sedona-testing = { path = "../sedona-testing" }
+sedona-testing = { workspace = true }
 sedona-tg = { workspace = true, optional = true }
 serde = { workspace = true }
 serde_json = { workspace = true }

Reply via email to