GH-44071: [C++] Leak S3 structures if finalization happens too late #92784
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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. | |
name: Comment Bot | |
on: | |
# TODO(kszucs): support pull_request_review_comment | |
issue_comment: | |
types: | |
- created | |
- edited | |
permissions: | |
contents: read | |
pull-requests: write | |
jobs: | |
crossbow: | |
name: Listen! | |
if: startsWith(github.event.comment.body, '@github-actions crossbow') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Arrow | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
with: | |
path: arrow | |
# fetch the tags for version number generation | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 | |
with: | |
python-version: 3.12 | |
- name: Install Archery and Crossbow dependencies | |
run: pip install -e arrow/dev/archery[bot] | |
- name: Handle GitHub comment event | |
env: | |
ARROW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
CROSSBOW_GITHUB_TOKEN: ${{ secrets.CROSSBOW_GITHUB_TOKEN }} | |
run: | | |
archery --debug trigger-bot \ | |
--event-name ${{ github.event_name }} \ | |
--event-payload ${{ github.event_path }} | |
autotune: | |
name: "Fix all the things" | |
if: startsWith(github.event.comment.body, '@github-actions autotune') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- uses: r-lib/actions/pr-fetch@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: See what is different | |
run: | | |
set -ex | |
DEFAULT_BRANCH=${{ github.event.repository.default_branch }} | |
git remote add upstream https://github.com/apache/arrow | |
git fetch upstream | |
changed() { | |
git diff --name-only upstream/$DEFAULT_BRANCH... | grep -e "$1" >/dev/null 2>&1 | |
} | |
if changed '^r/.*\.R$'; then | |
echo "R_DOCS=true" >> $GITHUB_ENV | |
echo "R_CODE=true" >> $GITHUB_ENV | |
fi | |
if changed 'cmake' || changed 'CMake'; then | |
echo "CMAKE_FORMAT=true" >> $GITHUB_ENV | |
fi | |
if changed '^cpp/src'; then | |
echo "CLANG_FORMAT_CPP=true" >> $GITHUB_ENV | |
fi | |
if changed '^r/src'; then | |
echo "CLANG_FORMAT_R=true" >> $GITHUB_ENV | |
fi | |
- name: Ensure clang-format has the appropriate version | |
if: env.CMAKE_FORMAT == 'true' || | |
env.CLANG_FORMAT_CPP == 'true' || | |
env.CLANG_FORMAT_R == 'true' || | |
endsWith(github.event.comment.body, 'everything') | |
run: | | |
set -e | |
. .env # To get the clang version we use | |
sudo apt update | |
sudo apt install -y clang-format-${CLANG_TOOLS} | |
- name: Run cmake_format | |
if: env.CMAKE_FORMAT == 'true' || endsWith(github.event.comment.body, 'everything') | |
run: | | |
set -ex | |
export PATH=/home/runner/.local/bin:$PATH | |
python3 -m pip install --upgrade pip setuptools wheel | |
python3 -m pip install -e dev/archery[lint] | |
archery lint --cmake-format --fix | |
- name: Run clang-format on cpp | |
if: env.CLANG_FORMAT_CPP == 'true' || endsWith(github.event.comment.body, 'everything') | |
run: | | |
. .env # To get the clang version we use | |
cpp/build-support/run_clang_format.py \ | |
--clang_format_binary=clang-format-${CLANG_TOOLS} \ | |
--exclude_glob=cpp/build-support/lint_exclusions.txt \ | |
--source_dir=cpp/src --quiet --fix | |
- name: Run clang-format on r | |
if: env.CLANG_FORMAT_R == 'true' || endsWith(github.event.comment.body, 'everything') | |
run: | | |
. .env # To get the clang version we use | |
cpp/build-support/run_clang_format.py \ | |
--clang_format_binary=clang-format-${CLANG_TOOLS} \ | |
--exclude_glob=cpp/build-support/lint_exclusions.txt \ | |
--source_dir=r/src --quiet --fix | |
- uses: r-lib/actions/setup-r@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 | |
if: env.R_DOCS == 'true' || env.R_CODE == 'true' || endsWith(github.event.comment.body, 'everything') | |
- name: Update R docs | |
if: env.R_DOCS == 'true' || endsWith(github.event.comment.body, 'everything') | |
shell: Rscript {0} | |
run: | | |
source("ci/etc/rprofile") | |
install.packages(c("remotes", "roxygen2")) | |
remotes::install_deps("r") | |
roxygen2::roxygenize("r") | |
- name: Style R code | |
if: env.R_CODE == 'true' || endsWith(github.event.comment.body, 'everything') | |
shell: Rscript {0} | |
run: | | |
changed_files <- system("git diff --name-only upstream/${{ github.event.repository.default_branch }}... 2>&1", intern = TRUE) | |
# only grab the .R files under r/ | |
changed_files <- grep('^r/.*\\.R$', changed_files, value = TRUE) | |
# remove codegen.R and other possible exclusions | |
changed_files <- changed_files[!changed_files %in% file.path("r", source("r/.styler_excludes.R")$value)] | |
source("ci/etc/rprofile") | |
install.packages(c("remotes", "styler")) | |
remotes::install_deps("r") | |
styler::style_file(changed_files) | |
- name: Commit results | |
run: | | |
git config user.name "$(git log -1 --pretty=format:%an)" | |
git config user.email "$(git log -1 --pretty=format:%ae)" | |
git commit -a -m 'Autoformat/render all the things [automated commit]' || echo "No changes to commit" | |
- uses: r-lib/actions/pr-push@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
rebase: | |
name: "Rebase" | |
if: startsWith(github.event.comment.body, '@github-actions rebase') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- uses: r-lib/actions/pr-fetch@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Rebase on ${{ github.repository }} default branch | |
run: | | |
set -ex | |
git config user.name "$(git log -1 --pretty=format:%an)" | |
git config user.email "$(git log -1 --pretty=format:%ae)" | |
git remote add upstream https://github.com/${{ github.repository }} | |
git fetch --unshallow upstream ${{ github.event.repository.default_branch }} | |
git rebase upstream/${{ github.event.repository.default_branch }} | |
- uses: r-lib/actions/pr-push@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
args: "--force" | |
issue_assign: | |
name: "Assign issue" | |
permissions: | |
issues: write | |
if: github.event.comment.body == 'take' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
github.rest.issues.addAssignees({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: context.payload.issue.number, | |
assignees: context.payload.comment.user.login | |
}); |