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/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new bfaf3ff8 chore(dev/release): Update release workflow instructions for 
undocumented release tasks (#800)
bfaf3ff8 is described below

commit bfaf3ff8405f92105674212b883adebc946f8512
Author: Dewey Dunnington <[email protected]>
AuthorDate: Sun Aug 10 22:09:32 2025 -0500

    chore(dev/release): Update release workflow instructions for undocumented 
release tasks (#800)
    
    Closes #660.
    
    This doesn't do any more automations but at least documents all the
    pieces for the next time!
---
 dev/release/README.md        | 93 ++++++++++++++++++++++++++++----------------
 dev/release/utils-prepare.sh | 29 +-------------
 2 files changed, 61 insertions(+), 61 deletions(-)

diff --git a/dev/release/README.md b/dev/release/README.md
index e0030e7f..01f07e9e 100644
--- a/dev/release/README.md
+++ b/dev/release/README.md
@@ -192,6 +192,11 @@ When these steps are complete, run
 dev/release/01-prepare.sh . 0.6.0 0.7.0 0.8.0 0
 ```
 
+A currently not automated part of this workflow is updating the R NEWS.md
+from the changelog: any changelog items for the `r/...` component can
+be copied to the R NEWS.md file. This is not essential (i.e., it does not
+affect the ability to release the R package).
+
 This will update version numbers, the changelong, and create the git tag
 `apache-arrow-nanoarrow-0.7.0-rc0`. Check to make sure that the changelog
 and versions are what you expect them to be before pushing the tag (you
@@ -311,44 +316,55 @@ dev/release/post-01-upload.sh 0.7.0 0
 
 ### Submit R package to CRAN
 
-The R package submission occurs from a separate branch to facilitate including
-any small changes requested by a member of the CRAN team; however, these
-updates are usually automatic and do not require additional changes.
-Before a release candidate is created, the first section of
-`usethis::use_release_issue()` should all be completed (i.e., any changes
-after release should be minor tweaks). The steps are:
-
-- Ensure you are on the release branch (i.e., `git switch maint-0.7.0`)
-- Run `usethis::pr_init("r-cran-maint-0.7.0")` and push the branch to your
-  fork.
-- Ensure `cran_comments.md` is up-to-date.
-- Run `devtools::check()` locally and verify that the package version is 
correct
-- Run `urlchecker::url_check()`
-- Run `devtools::check_win_devel()` and wait for the response
-- Run `devtools::submit_cran()`
-- Confirm submission email
-
-Any changes required at this stage should be made as a PR into `main` and
-cherry-picked into the `r-cran-maint-XXX` packaging branch. (i.e.,
-`git cherry-pick 01234abcdef`). If any changes
-to the source are required, bump the "tweak" version (e.g., `Version: 0.7.0.1`
-in `DESCRIPTION`).
+The R package can be updated directly from the release branch if no updates
+are required to pass CRAN checks. Because most updates are just updates of
+the underlying C library, most updates should not required special updates
+just to submit to CRAN. It is usually a good idea to check the package URLs
+and run a [WinBuilder](https://win-builder.r-project.org/) check before
+submitting, just to be sure. These can be run with:
+
+```r
+urlchecker::url_check()
+devtools::check_win_devel()
+```
+
+If there are no NOTEs, WARNINGs, or ERRORs on the winbuilder results
+(emailed to the package maintainer), the package can be submitted to CRAN with:
+
+```r
+devtools::submit_cran()
+```
+
+If changes *are* required, create a branch called `r-cran-maint-0.7.-0`,
+make any changes required, and resubmit to CRAN after bumping the "tweak"
+version (e.g., `Version: 0.7.0.1` in the `DESCRIPTION`). Ensure those changes
+are also reflected in the main branch after submission is successful.
 
 ### Submit Python package to PyPI
 
 The Python package source distribution and wheels are built using the [Build 
Python 
Wheels](https://github.com/apache/arrow-nanoarrow/actions/workflows/python-wheels.yaml)
 action on the `maint-0.7.0` branch after cutting the release candidate.
 
-To submit these to PyPI, download all assets from the run into a folder (e.g., 
`python/dist`) and run:
+To submit these to PyPI, download all assets from the run into a folder (e.g., 
`python/dist`) and run `twine upload`:
 
 ```shell
 # pip install twine
-twine upload python/dist/*.tar.gz python/dist/*.whl
+
+# Clear the dist directory
+rm -rf python/dist
+mkdir python/dist
+
+# Download assets from the latest `maint-x.x.x` branch run,
+# remove the pyodide wheels (which will be rejected by PyPI)
+pushd python/dist
+gh run download 15963020465
+rm -rf release-wheels-pyodide
+popd
+
+twine upload python/dist/**/*.tar.gz python/dist/**/*.whl
 ```
 
 You will need to enter a token with "upload packages" permissions for the 
[nanoarrow PyPI project](https://pypi.org/project/nanoarrow/).
 
-This can/should be automated for future releases using one or more GitHub API 
calls.
-
 ### Update Python package on conda-forge
 
 The [conda-forge 
feedstock](https://github.com/conda-forge/nanoarrow-feedstock) is updated 
automatically by a conda-forge bot after the source distribution has been 
uploaded to PyPI (typically this takes several hours). This will also start a 
CI run to ensure that the updated version will build on PyPI.
@@ -427,7 +443,8 @@ the release candidate.
 
 This email should be sent to `[email protected]` and 
`[email protected]`. It
 **must** be sent from your Apache email address and **must** be sent through
-the `mail-relay.apache.org` outgoing server.
+the `mail-relay.apache.org` outgoing server. It also must be in plain text
+or it will be rejected by the announce mailing list.
 
 Email template:
 
@@ -482,14 +499,13 @@ The Apache Arrow Community
 ### Remove old artifacts from SVN
 
 These artifacts include any release candidates that were uploaded to
-<https://dist.apache.org/repos/dist/dev/arrow/>. You can remove them
-using:
+<https://dist.apache.org/repos/dist/dev/arrow/> and old releases that
+were upload to
+<https://dist.apache.org/repos/dist/release/arrow/>. You can remove
+them using:
 
 ```
-# Once
-export APACHE_USERNAME=xxx
-# Once for every release candidate
-svn rm --username=$APACHE_USERNAME -m "Clean up svn artifacts" 
https://dist.apache.org/repos/dist/dev/arrow/apache-arrow-nanoarrow-0.7.0-rc0/
+dev/release/post-02-remove-old-artifacts.sh
 ```
 
 ### Bumped versions on main
@@ -500,3 +516,14 @@ This is handled by
 ```bash
 dev/release/post-03-bump-versions.sh . 0.7.0 0.8.0
 ```
+
+A currently not automated part of this workflow is also porting the R NEWS.md
+updates that occurred when updating the changelog. This is not essential but
+makes the next R NEWS.md update for the next release make a bit more sense.
+
+After this PR is merged, create the dev tag that is used to generate the 
changelog:
+
+```shell
+git tag -a apache-arrow-nanoarrow-0.8.0.dev -m "tag dev 0.8.0"
+git push upstream apache-arrow-nanoarrow-0.8.0.dev
+```
diff --git a/dev/release/utils-prepare.sh b/dev/release/utils-prepare.sh
index b12b8785..f0592704 100755
--- a/dev/release/utils-prepare.sh
+++ b/dev/release/utils-prepare.sh
@@ -42,7 +42,7 @@ update_versions() {
   sed -i.bak -E "s/set\(NANOARROW_VERSION \".+\"\)/set(NANOARROW_VERSION 
\"${version}\")/g" CMakeLists.txt
   rm CMakeLists.txt.bak
   git add CMakeLists.txt
-  sed -i.bak -E "s/version: '.+'/version: '${version}')/g" meson.build
+  sed -i.bak -E "s/ version: '.+'/ version: '${version}'/g" meson.build
   rm meson.build.bak
   git add meson.build
   popd
@@ -58,30 +58,3 @@ update_versions() {
   git add _static_version.py
   popd
 }
-
-set_resolved_issues() {
-    # TODO: this needs to work with open milestones
-    local -r version="${1}"
-    local -r milestone_info=$(gh api \
-                                 /repos/apache/arrow-nanoarrow/milestones \
-                                 -X GET \
-                                 -F state=all \
-                                 --jq ".[] | select(.title | test(\"nanoarrow 
${version}\$\"))")
-    local -r milestone_number=$(echo "${milestone_info}" | jq -r '.number')
-
-    local -r graphql_query="query {
-    repository(owner: \"apache\", name: \"arrow-nanoarrow\") {
-        milestone(number: ${milestone_number}) {
-            issues(states: CLOSED) {
-                totalCount
-            }
-        }
-    }
-}
-"
-
-    export MILESTONE_URL=$(echo "${milestone_info}" | jq -r '.html_url')
-    export RESOLVED_ISSUES=$(gh api graphql \
-                            -f query="${graphql_query}" \
-                            --jq 
'.data.repository.milestone.issues.totalCount')
-}

Reply via email to