跳转至
Apache Sedona 1.9.0 已正式发布,新增 Spark 4.1 支持、proj4sedona 坐标系转换、Bing Tile 函数等众多特性!

发布 Sedona 版本

本页面面向 Sedona PMC,用于发布 Sedona 版本。

Warning

本页所有脚本都应在本地 Sedona Git 仓库 master 分支下,通过单一脚本文件运行。

0. 准备一个空脚本文件

  1. 在本地 Sedona Git 仓库 master 分支下运行:
echo '#!/bin/bash' > create-release.sh
chmod 777 create-release.sh
  1. 用您喜欢的 GUI 文本编辑器打开 create-release.sh
  2. 不断把本页上的脚本复制粘贴到该文件中,覆盖原有内容。
  3. 不要直接将脚本复制粘贴到终端,因为 clipboard.js 的一个 bug 会在这种情形下产生换行符问题。
  4. 每次更新该脚本后运行 ./create-release.sh 来执行。

1. 检查所有文件头中的 ASF 版权声明

  1. 运行以下脚本:
#!/bin/bash
wget -q https://archive.apache.org/dist/creadur/apache-rat-0.15/apache-rat-0.15-bin.tar.gz
tar -xvf  apache-rat-0.15-bin.tar.gz
git clone --shared --branch master https://github.com/apache/sedona.git sedona-src
java -jar apache-rat-0.15/apache-rat-0.15.jar -d sedona-src > report.txt
  1. 阅读生成的 report.txt 文件,确保所有源代码文件都包含 ASF 版权声明。
  2. 删除生成的报告与克隆的源码:
#!/bin/bash
rm -rf apache-rat-0.15
rm -rf sedona-src
rm report.txt

2. 更新 Sedona Python、R 与 Zeppelin 的版本号

请确认以下文件中的 Sedona 版本均为 1.9.0:

  1. https://github.com/apache/sedona/blob/master/python/sedona/version.py
  2. https://github.com/apache/sedona/blob/master/python/pyproject.toml[project] 下的 version 字段)
  3. https://github.com/apache/sedona/blob/master/R/DESCRIPTION
  4. https://github.com/apache/sedona/blob/99239524f17389fc4ae9548ea88756f8ea538bb9/R/R/dependencies.R#L42
  5. https://github.com/apache/sedona/blob/master/zeppelin/package.json

Warning

python/pyproject.toml 中的 version 字段是 setuptools 在构建 Python sdist 与 wheel 时使用的版本号。如果该字段未更新,即便 python/sedona/version.py 已更新,发布到 PyPI 的 artifact 仍会带有旧版本号。

3. 更新发布说明

在 cut release candidate 之前,请确保 docs/setup/release-notes.md 已包含 1.9.0 的条目,总结自上一版本以来的所有变更。该文件会被投票邮件与公告邮件直接引用,因此必须出现在发布 tag 中。

4. 更新 mkdocs.yml

  • mkdocs.yml 中的以下变量改为本次要发布的版本:
    • sedona_create_release.current_version
    • sedona_create_release.current_rc
    • sedona_create_release.current_git_tag
    • sedona_create_release.current_snapshot
  • 然后通过 mkdocs serve 编译网站,本地浏览器中即可看到本页生成的脚本。
  • 如有需要,也可以发布该网站,发布步骤见本文末尾。

5. 暂存并上传 release candidate

#!/bin/bash

git checkout master
git pull

rm -f release.*
rm -f pom.xml.*

echo "*****Step 1. Stage the Release Candidate to GitHub."

mvn -B clean release:prepare -Dtag=sedona-1.9.0-rc1 -DreleaseVersion=1.9.0 -DdevelopmentVersion=1.9.1-SNAPSHOT -Dresume=false -Penable-all-submodules -Darguments="-DskipTests"
mvn -B release:clean -Penable-all-submodules

echo "*****Step 2: Upload the Release Candidate to https://repository.apache.org."

## 注意:这里使用 maven-release-plugin 2.3.2 而非更新的版本(如 3.0.1),是为了规避一个会阻止我们使用 -Dtag=<tag> clone Git 仓库的 bug。
## 详细信息见 https://issues.apache.org/jira/browse/MRELEASE-933 与 https://issues.apache.org/jira/browse/SCM-729。
##
## 同时请注意:系统属性 `-Dspark` 与 `-Dscala` 必须同时传给 release:perform 与 `-Darguments` 中的实际构建参数,
## 因为 release:perform 任务激活的 build profile 会同时影响实际构建任务。最稳妥的做法是两处都明确指定。

# 仓库信息
REPO_URL="https://github.com/apache/sedona.git"
RC_VERSION="1.9.0-rc1"
SEDONA_VERSION="1.9.0"
TAG="sedona-${RC_VERSION}"
LOCAL_DIR="sedona-release"

# 如果已存在则先删除,然后克隆仓库
rm -rf $LOCAL_DIR && git clone --depth 1 --branch $TAG $REPO_URL $LOCAL_DIR && cd $LOCAL_DIR

# Maven release 插件版本
MAVEN_PLUGIN_VERSION="2.3.2"

# Spark 与 Scala 版本
declare -a SPARK_VERSIONS=("3.4" "3.5" "4.0" "4.1")
declare -a SCALA_VERSIONS=("2.12" "2.13")

# 根据 Spark 版本确定所需 Java 版本
get_java_version() {
  local spark_version=$1
  if [[ "$spark_version" == "4."* ]]; then
    echo "17"
  else
    echo "11"
  fi
}

# 查找 Maven 安装路径
find_maven_path() {
  # 通过多种方式定位 Maven
  local mvn_path=""

  # 方法 1:检查 mvn 是否在 PATH 中
  if command -v mvn >/dev/null 2>&1; then
    mvn_path=$(command -v mvn)
  fi

  # 方法 2:检查常见的 Homebrew 路径
  if [[ -z "$mvn_path" ]]; then
    for version_dir in /opt/homebrew/Cellar/maven/*/libexec/bin/mvn; do
      if [[ -x "$version_dir" ]]; then
        mvn_path="$version_dir"
        break
      fi
    done
  fi

  # 方法 3:检查 /usr/local(旧版本 Homebrew)
  if [[ -z "$mvn_path" ]]; then
    for version_dir in /usr/local/Cellar/maven/*/libexec/bin/mvn; do
      if [[ -x "$version_dir" ]]; then
        mvn_path="$version_dir"
        break
      fi
    done
  fi

  # 方法 4:检查系统路径
  if [[ -z "$mvn_path" ]]; then
    for path in /usr/bin/mvn /usr/local/bin/mvn; do
      if [[ -x "$path" ]]; then
        mvn_path="$path"
        break
      fi
    done
  fi

  if [[ -z "$mvn_path" ]]; then
    echo "ERROR: Could not find Maven installation" >&2
    echo "Please ensure Maven is installed and available in PATH or in standard locations" >&2
    exit 1
  fi

  echo "$mvn_path"
}

# 创建一个使用指定 Java 版本的 Maven 包装脚本
create_mvn_wrapper() {
  local java_version=$1
  local mvn_wrapper="/tmp/mvn-java${java_version}"
  local mvn_path=$(find_maven_path)

  echo "Using Maven at: $mvn_path" >&2

  # 创建包装脚本:先设置 JAVA_HOME 再执行 Maven
  cat > "$mvn_wrapper" << EOF
#!/bin/bash
JAVA_HOME="\${JAVA_HOME:-\$(/usr/libexec/java_home -v ${java_version})}" exec "${mvn_path}" "\$@"
EOF

  chmod +x "$mvn_wrapper"
  echo "$mvn_wrapper"
}

# 校验 Maven 包装脚本所用的 Java 版本
verify_java_version() {
  local mvn_wrapper=$1
  local expected_java_version=$2

  echo "Verifying Java version with Maven wrapper..."
  local mvn_java_version=$($mvn_wrapper --version | grep "Java version" | sed 's/.*Java version: \([0-9]*\).*/\1/')
  if [[ "$mvn_java_version" != "$expected_java_version" ]]; then
    echo "ERROR: Maven wrapper is using Java $mvn_java_version, but expected Java $expected_java_version"
    echo "Please ensure the correct Java version is installed"
    exit 1
  fi
  echo "✓ Verified: Maven wrapper is using Java $mvn_java_version"
}

# 遍历 Spark 与 Scala 版本组合
for SPARK in "${SPARK_VERSIONS[@]}"; do
  for SCALA in "${SCALA_VERSIONS[@]}"; do
    # Spark 4.0+ 与 Scala 2.12 不兼容,跳过
    if [[ "$SPARK" == "4."* && "$SCALA" == "2.12" ]]; then
      echo "Skipping Spark $SPARK with Scala $SCALA (not supported)"
      continue
    fi

    JAVA_VERSION=$(get_java_version $SPARK)
    echo "Running release:perform for Spark $SPARK and Scala $SCALA with Java $JAVA_VERSION..."

    # 用合适的 Java 版本创建 Maven 包装脚本
    MVN_WRAPPER=$(create_mvn_wrapper $JAVA_VERSION)
    echo "Created Maven wrapper: $MVN_WRAPPER"

    # 校验 Java 版本
    verify_java_version $MVN_WRAPPER $JAVA_VERSION

    # 通过包装脚本执行 Maven
    $MVN_WRAPPER org.apache.maven.plugins:maven-release-plugin:$MAVEN_PLUGIN_VERSION:perform \
      -DconnectionUrl=scm:git:file://$(pwd) \
      -Dtag=$TAG \
      -Dresume=false \
      -Darguments="-DskipTests -Dspark=$SPARK -Dscala=$SCALA" \
      -Dspark=$SPARK \
      -Dscala=$SCALA

    # 清理包装脚本
    rm -f $MVN_WRAPPER
  done
done

echo "*****Step 3: Upload Release Candidate on ASF SVN: https://dist.apache.org/repos/dist/dev/sedona"

echo "Creating ${RC_VERSION} folder on SVN..."

svn mkdir -m "Adding folder" https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}

echo "Creating release files locally..."

# 回到上层目录进行后续文件操作
cd ../..

echo "Downloading source code..."

wget https://github.com/apache/sedona/archive/refs/tags/sedona-${RC_VERSION}.tar.gz
tar -xvf sedona-${RC_VERSION}.tar.gz
mkdir apache-sedona-${SEDONA_VERSION}-src
cp -r sedona-sedona-${RC_VERSION}/* apache-sedona-${SEDONA_VERSION}-src/
tar czf apache-sedona-${SEDONA_VERSION}-src.tar.gz apache-sedona-${SEDONA_VERSION}-src
rm sedona-${RC_VERSION}.tar.gz
rm -rf sedona-sedona-${RC_VERSION}

# 为源码包生成校验和与签名
shasum -a 512 apache-sedona-${SEDONA_VERSION}-src.tar.gz > apache-sedona-${SEDONA_VERSION}-src.tar.gz.sha512
gpg -ab apache-sedona-${SEDONA_VERSION}-src.tar.gz

echo "Uploading source files..."

# 先上传源码相关文件
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-src.tar.gz https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-src.tar.gz
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-src.tar.gz.asc https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-src.tar.gz.asc
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-src.tar.gz.sha512 https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-src.tar.gz.sha512

echo "Compiling the source code..."

mkdir apache-sedona-${SEDONA_VERSION}-bin

# 根据 Spark 版本确定所需 Java 版本
get_java_version() {
  local spark_version=$1
  if [[ "$spark_version" == "4."* ]]; then
    echo "17"
  else
    echo "11"
  fi
}

# 查找 Maven 安装路径
find_maven_path() {
  # 通过多种方式定位 Maven
  local mvn_path=""

  # 方法 1:检查 mvn 是否在 PATH 中
  if command -v mvn >/dev/null 2>&1; then
    mvn_path=$(command -v mvn)
  fi

  # 方法 2:检查常见的 Homebrew 路径
  if [[ -z "$mvn_path" ]]; then
    for version_dir in /opt/homebrew/Cellar/maven/*/libexec/bin/mvn; do
      if [[ -x "$version_dir" ]]; then
        mvn_path="$version_dir"
        break
      fi
    done
  fi

  # 方法 3:检查 /usr/local(旧版本 Homebrew)
  if [[ -z "$mvn_path" ]]; then
    for version_dir in /usr/local/Cellar/maven/*/libexec/bin/mvn; do
      if [[ -x "$version_dir" ]]; then
        mvn_path="$version_dir"
        break
      fi
    done
  fi

  # 方法 4:检查系统路径
  if [[ -z "$mvn_path" ]]; then
    for path in /usr/bin/mvn /usr/local/bin/mvn; do
      if [[ -x "$path" ]]; then
        mvn_path="$path"
        break
      fi
    done
  fi

  if [[ -z "$mvn_path" ]]; then
    echo "ERROR: Could not find Maven installation" >&2
    echo "Please ensure Maven is installed and available in PATH or in standard locations" >&2
    exit 1
  fi

  echo "$mvn_path"
}

# 创建一个使用指定 Java 版本的 Maven 包装脚本
create_mvn_wrapper() {
  local java_version=$1
  local mvn_wrapper="/tmp/mvn-java${java_version}"
  local mvn_path=$(find_maven_path)

  echo "Using Maven at: $mvn_path" >&2

  # 创建包装脚本:先设置 JAVA_HOME 再执行 Maven
  cat > "$mvn_wrapper" << EOF
#!/bin/bash
JAVA_HOME="\${JAVA_HOME:-\$(/usr/libexec/java_home -v ${java_version})}" exec "${mvn_path}" "\$@"
EOF

  chmod +x "$mvn_wrapper"
  echo "$mvn_wrapper"
}

# 校验 Maven 包装脚本所用的 Java 版本
verify_java_version() {
  local mvn_wrapper=$1
  local expected_java_version=$2

  echo "Verifying Java version with Maven wrapper..."
  local mvn_java_version=$($mvn_wrapper --version | grep "Java version" | sed 's/.*Java version: \([0-9]*\).*/\1/')
  if [[ "$mvn_java_version" != "$expected_java_version" ]]; then
    echo "ERROR: Maven wrapper is using Java $mvn_java_version, but expected Java $expected_java_version"
    echo "Please ensure the correct Java version is installed"
    exit 1
  fi
  echo "✓ Verified: Maven wrapper is using Java $mvn_java_version"
}

# 使用 Java 11 编译 Spark 3.4
JAVA_VERSION=$(get_java_version "3.4")
MVN_WRAPPER=$(create_mvn_wrapper $JAVA_VERSION)
verify_java_version $MVN_WRAPPER $JAVA_VERSION

echo "Compiling for Spark 3.4 with Scala 2.12 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=3.4 -Dscala=2.12 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

echo "Compiling for Spark 3.4 with Scala 2.13 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=3.4 -Dscala=2.13 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

# 使用 Java 11 编译 Spark 3.5
JAVA_VERSION=$(get_java_version "3.5")
MVN_WRAPPER=$(create_mvn_wrapper $JAVA_VERSION)
verify_java_version $MVN_WRAPPER $JAVA_VERSION

echo "Compiling for Spark 3.5 with Scala 2.12 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=3.5 -Dscala=2.12 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

echo "Compiling for Spark 3.5 with Scala 2.13 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=3.5 -Dscala=2.13 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

# 使用 Java 17 编译 Spark 4.0
JAVA_VERSION=$(get_java_version "4.0")
MVN_WRAPPER=$(create_mvn_wrapper $JAVA_VERSION)
verify_java_version $MVN_WRAPPER $JAVA_VERSION

echo "Compiling for Spark 4.0 with Scala 2.13 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=4.0 -Dscala=2.13 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

# 使用 Java 17 编译 Spark 4.1
JAVA_VERSION=$(get_java_version "4.1")
MVN_WRAPPER=$(create_mvn_wrapper $JAVA_VERSION)
verify_java_version $MVN_WRAPPER $JAVA_VERSION

echo "Compiling for Spark 4.1 with Scala 2.13 using Java $JAVA_VERSION..."
cd apache-sedona-${SEDONA_VERSION}-src && $MVN_WRAPPER clean && $MVN_WRAPPER install -DskipTests -Dspark=4.1 -Dscala=2.13 && cd ..
cp apache-sedona-${SEDONA_VERSION}-src/spark-shaded/target/sedona-*${SEDONA_VERSION}.jar apache-sedona-${SEDONA_VERSION}-bin/

# 清理 Maven 包装脚本
rm -f /tmp/mvn-java11 /tmp/mvn-java17

tar czf apache-sedona-${SEDONA_VERSION}-bin.tar.gz apache-sedona-${SEDONA_VERSION}-bin

# 为二进制包生成校验和与签名
shasum -a 512 apache-sedona-${SEDONA_VERSION}-bin.tar.gz > apache-sedona-${SEDONA_VERSION}-bin.tar.gz.sha512
gpg -ab apache-sedona-${SEDONA_VERSION}-bin.tar.gz

echo "Uploading binary files..."

# 上传二进制相关文件
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-bin.tar.gz https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-bin.tar.gz
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-bin.tar.gz.asc https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-bin.tar.gz.asc
svn import -m "Adding file" apache-sedona-${SEDONA_VERSION}-bin.tar.gz.sha512 https://dist.apache.org/repos/dist/dev/sedona/${RC_VERSION}/apache-sedona-${SEDONA_VERSION}-bin.tar.gz.sha512

echo "Removing local release files..."

rm apache-sedona-${SEDONA_VERSION}-src.tar.gz
rm apache-sedona-${SEDONA_VERSION}-src.tar.gz.asc
rm apache-sedona-${SEDONA_VERSION}-src.tar.gz.sha512
rm apache-sedona-${SEDONA_VERSION}-bin.tar.gz
rm apache-sedona-${SEDONA_VERSION}-bin.tar.gz.asc
rm apache-sedona-${SEDONA_VERSION}-bin.tar.gz.sha512
rm -rf apache-sedona-${SEDONA_VERSION}-src
rm -rf apache-sedona-${SEDONA_VERSION}-bin

6. 在 dev sedona.apache.org 邮件列表上投票

投票邮件

如有需要,请在邮件末尾追加变更说明:

Subject: [VOTE] Release Apache Sedona 1.9.0-rc1

Hi all,

This is a call for vote on Apache Sedona 1.9.0-rc1. Please refer to the changes listed at the bottom of this email.

Release notes:
https://github.com/apache/sedona/blob/sedona-1.9.0-rc1/docs/setup/release-notes.md

Build instructions:
https://github.com/apache/sedona/blob/sedona-1.9.0-rc1/docs/setup/compile.md

GitHub tag:
https://github.com/apache/sedona/releases/tag/sedona-1.9.0-rc1

GPG public key to verify the Release:
https://downloads.apache.org/sedona/KEYS

Source code and binaries:
https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/

The vote will be open for at least 72 hours or until at least 3 "+1" PMC votes are cast

Instruction for checking items on the checklist: https://sedona.apache.org/latest/community/vote/

We recommend you use this Jupyter notebook on MyBinder to perform this task: https://mybinder.org/v2/gh/jiayuasu/sedona-tools/HEAD?labpath=binder%2Fverify-release.ipynb

**Please vote accordingly and you must provide your checklist for your vote**.


[ ] +1 approve

[ ] +0 no opinion

[ ] -1 disapprove with the reason

Checklist:

[ ] Download links are valid.

[ ] Checksums and PGP signatures are valid.

[ ] Source code artifacts have correct names matching the current release.

For a detailed checklist  please refer to:
https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist

------------

Changes according to the comments on the previous release
Original comment (Permalink from https://lists.apache.org/list.html):

投票通过邮件

请统计票数,并在邮件末尾加上投票邮件的 Permalink:

Subject: [RESULT][VOTE] Release Apache Sedona 1.9.0-rc1

Dear all,

The vote closes now as 72hr have passed. The vote PASSES with

+? (binding): NAME1, NAME2, NAME3
+? (non-binding): NAME4
No -1 votes

The vote thread (Permalink from https://lists.apache.org/list.html):

I will make an announcement soon.

公告邮件

  1. 该邮件应发送至 dev@sedona.apache.org
  2. 请加上投票邮件的 permalink。
  3. 请加上投票结果邮件的 permalink。
Subject: [ANNOUNCE] Apache Sedona 1.9.0 released

Dear all,

We are happy to report that we have released Apache Sedona 1.9.0. Thank you again for your help.

Apache Sedona is a cluster computing system for processing large-scale spatial data.


Vote thread (Permalink from https://lists.apache.org/list.html):


Vote result thread (Permalink from https://lists.apache.org/list.html):


Website:
https://sedona.apache.org/

Release notes:
https://github.com/apache/sedona/blob/sedona-1.9.0/docs/setup/release-notes.md

Download links:
https://github.com/apache/sedona/releases/tag/sedona-1.9.0

Additional resources:
Mailing list: dev@sedona.apache.org
Twitter: https://twitter.com/ApacheSedona
Gitter: https://gitter.im/apache/sedona

Regards,
Apache Sedona Team

7. 投票失败

如果投票未通过:

  1. 在投票邮件中说明我们将创建另一个 release candidate。
  2. 从第 4 步 更新 mkdocs.yml 重新开始。请把 release candidate ID 递增(如 1.9.0-rc2),并相应更新 mkdocs.yml 中的 sedona_create_release.current_rcsedona_create_release.current_git_tag 来生成本页脚本。

8. 发布源码与 Maven 包

上传发布版本

#!/bin/bash

echo "Move all files in https://dist.apache.org/repos/dist/dev/sedona to https://dist.apache.org/repos/dist/release/sedona, using svn"
svn mkdir -m "Adding folder" https://dist.apache.org/repos/dist/release/sedona/1.9.0
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-src.tar.gz
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-src.tar.gz.asc
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-src.tar.gz.sha512
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-bin.tar.gz
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-bin.tar.gz.asc
wget https://dist.apache.org/repos/dist/dev/sedona/1.9.0-rc1/apache-sedona-1.9.0-bin.tar.gz.sha512
svn import -m "Adding file" apache-sedona-1.9.0-src.tar.gz https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz
svn import -m "Adding file" apache-sedona-1.9.0-src.tar.gz.asc https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz.asc
svn import -m "Adding file" apache-sedona-1.9.0-src.tar.gz.sha512 https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz.sha512
svn import -m "Adding file" apache-sedona-1.9.0-bin.tar.gz https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz
svn import -m "Adding file" apache-sedona-1.9.0-bin.tar.gz.asc https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz.asc
svn import -m "Adding file" apache-sedona-1.9.0-bin.tar.gz.sha512 https://dist.apache.org/repos/dist/release/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz.sha512
rm apache-sedona-1.9.0-src.tar.gz
rm apache-sedona-1.9.0-src.tar.gz.asc
rm apache-sedona-1.9.0-src.tar.gz.sha512
rm apache-sedona-1.9.0-bin.tar.gz
rm apache-sedona-1.9.0-bin.tar.gz.asc
rm apache-sedona-1.9.0-bin.tar.gz.sha512

手动 close 并 release Maven 包

  1. https://repository.apache.orgstaging repository 中找到 Sedona 暂存仓库,点击 Close
  2. staging repo close 完成后,再点击 Release

9. 发布 Sedona Python

创建 GitHub release 后,Sedona GitHub CI 会自动把 wheel 文件发布到 PyPI。

10. 发布 Sedona Zeppelin

#!/bin/bash

wget https://github.com/apache/sedona/archive/refs/tags/sedona-1.9.0-rc1.tar.gz
tar -xvf sedona-1.9.0-rc1.tar.gz
mkdir apache-sedona-1.9.0-src
cp -r sedona-sedona-1.9.0-rc1/* apache-sedona-1.9.0-src/

rm -rf apache-sedona-1.9.0-rc1

cd apache-sedona-1.9.0-src/zeppelin && npm publish && cd ..
rm -rf apache-sedona-1.9.0-src

11. 将 Sedona R 发布到 CRAN

#!/bin/bash
R CMD build .
R CMD check --as-cran apache.sedona_*.tar.gz

然后通过 此网页表单 提交到 CRAN。

12. 发布文档网站

  1. 在本地仓库中把 1.9.0 的 Git tag check out 到名为 branch-1.9.0 的分支。
  2. 把下载链接添加到 Download 页面
  3. 把新闻添加到 docs/index.md
  4. 将该分支的更改推送到 GitHub。
  5. GitHub CI 会自动捕捉这些更改并部署到 website 分支。
  6. 通常 此仓库 会按日自动发布该网站。