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

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new cc521cd65 chore(dev/release): add script to fix up milestone 
assignments (#3982)
cc521cd65 is described below

commit cc521cd656727aad7b2ed175ff77b36dc6589d7d
Author: David Li <[email protected]>
AuthorDate: Tue Feb 17 09:34:28 2026 +0900

    chore(dev/release): add script to fix up milestone assignments (#3982)
    
    Closes #3931.
---
 dev/release/assign-milestone.sh       | 99 +++++++++++++++++++++++++++++++++++
 docs/source/development/releasing.rst | 21 +++++---
 2 files changed, 113 insertions(+), 7 deletions(-)

diff --git a/dev/release/assign-milestone.sh b/dev/release/assign-milestone.sh
new file mode 100755
index 000000000..9ecdbd135
--- /dev/null
+++ b/dev/release/assign-milestone.sh
@@ -0,0 +1,99 @@
+#!/usr/bin/env 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.
+
+# Assign the milestone on PRs/issues.  This used to be done by CI, but since
+# we can no longer use pull_request_target workflows, do it manually instead.
+
+set -euo pipefail
+
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+
+main() {
+    # Scan the Git log for PRs since the last release
+    local -r commits=$(git log --abbrev-commit --pretty=oneline 
apache-arrow-adbc-${PREVIOUS_RELEASE}..)
+    local -r pr_numbers=$(echo "${commits}" | grep -E -o ' \(#[0-9]+\)$' | 
grep -E -o '[0-9]+')
+
+    local -r milestone=$(gh api graphql \
+                            --paginate \
+                            --jq ".data.repository.milestones.nodes.[]" \
+                            -f query="{
+  repository(owner: \"apache\", name: \"arrow-adbc\") {
+    milestones(states: [OPEN], first: 10, query: \"ADBC Libraries 
${RELEASE}\") {
+      nodes {
+        id
+        title
+      }
+    }
+  }
+}")
+    local -r milestone_title=$(echo "${milestone}" | jq -r '.title')
+
+    echo "Milestone to use: ${milestone_title}"
+    read -p "Press ENTER to continue..." ignored
+
+    for pr_number in ${pr_numbers}; do
+        local pr=$(gh api graphql \
+                      --paginate \
+                      --jq ".data.repository.pullRequest" \
+                      -f query="{
+  repository(owner: \"apache\", name: \"arrow-adbc\") {
+    pullRequest(number: ${pr_number}) {
+      title
+      milestone {
+        title
+      }
+      closingIssuesReferences(first: 10) {
+        nodes {
+          number
+          milestone {
+            title
+          }
+        }
+      }
+    }
+  }
+}")
+
+        local existing_milestone=$(echo "${pr}" | jq -r '.milestone.title')
+        if [[ "${existing_milestone}" != "null" ]]; then
+            echo "#${pr_number}: has milestone \`${existing_milestone}\`"
+        else
+            echo "#${pr_number}: assigning ${milestone_title}"
+            gh pr edit "${pr_number}" --milestone "${milestone_title}"
+            sleep 0.3
+        fi
+
+        echo "${pr}" | jq -c '.closingIssuesReferences.nodes.[]' | while read 
-r issue; do
+            local issue_number=$(echo "${issue}" | jq -r '.number')
+            local issue_milestone=$(echo "${issue}" | jq -r '.milestone.title')
+            if [[ "${issue_milestone}" != "null" ]]; then
+                echo "    linked issue #${issue_number}: has milestone 
\`${issue_milestone}\`"
+            else
+                echo "    linked issue #${issue_number}: assigning 
${milestone_title}"
+                gh issue edit "${issue_number}" --milestone 
"${milestone_title}"
+                sleep 0.3
+            fi
+        done
+
+        sleep 0.3
+    done
+}
+
+main "$@"
diff --git a/docs/source/development/releasing.rst 
b/docs/source/development/releasing.rst
index 0b6b4d8b4..6dd99b38d 100644
--- a/docs/source/development/releasing.rst
+++ b/docs/source/development/releasing.rst
@@ -70,16 +70,23 @@ Some steps of the release require being a committer or a 
PMC member.
 Before creating a Release Candidate
 ===================================
 
-Regenerate the LICENSE.txt (see CONTRIBUTING.md) and create a pull request if
-any changes were needed.
+1. Regenerate the LICENSE.txt (see CONTRIBUTING.md) and create a pull request 
if any changes were needed.
 
-.. code-block::
+2. Set up your shell environment:
+
+   .. code-block::
+
+      # Setup gpg agent for signing artifacts
+      source dev/release/setup-gpg-agent.sh
+
+      # Activate conda environment
+      mamba activate adbc
+
+3. Ensure merged pull requests and closed issues have their milestone set 
appropriately:
 
-   # Setup gpg agent for signing artifacts
-   source dev/release/setup-gpg-agent.sh
+   .. code-block::
 
-   # Activate conda environment
-   mamba activate adbc
+      ./dev/release/assign-milestone.sh
 
 Check Nightly Verification Job
 ------------------------------

Reply via email to