GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

GH-47632: [CI][C++] Add a CI job for JNI on Linux - #47746

Merged
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux
Oct 12, 2025
Merged

GH-47632: [CI][C++] Add a CI job for JNI on Linux#47746
kou merged 23 commits into
apache:mainfrom
kou:ci-java-jni-linux

Conversation

@kou

@koukou commented Oct 8, 2025

Copy link
Copy Markdown
Member

Rationale for this change

This is for preventing to break Apache Arrow Java JNI use case on Linux.

What changes are included in this PR?

  • Add a CI job that uses build options for JNI use case
  • Install more packages in manylinux image that is also used by JNI build

Are these changes tested?

Yes.

Are there any user-facing changes?

No.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47632has been automatically assigned in GitHub to PR creator.

@@ -89,7 +89,9 @@ RUN --mount=type=secret,id=github_repository_owner \
--x-install-root=${VCPKG_ROOT}/installed \
--x-manifest-root=/arrow/ci/vcpkg \
--x-feature=azure \
--x-feature=dev \

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for ARROW_BUILD_TESTS=ON.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to enable this for Python wheels?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, to reuse this image for build configuration for JNI.

I think that reusing this image reduces maintenance cost but you don't want to increase this image size, right?

I'll create a new image for build configuration for JNI.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main concern is that it makes vcpkg build times even larger when the cache isn't fresh or there is no cache.

Comment on lines +177 to +181
elif [ -n "${CMAKE_PRESET}" ]; then
cmake \
--preset="${CMAKE_PRESET}" \
${ARROW_CMAKE_ARGS} \
${source_dir}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to provide preset for JNI build to share build options in apache/arrow and apache/arrow-java.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass --preset to the existing cmake call below?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use it, all variables by --preset are overridden because it specify most variables explicitly. Explicit variables are used instead of variables set by --preset.

if [ -x "$(command -v sudo)" ]; then
SUDO=sudo
else
if [ "$(id --user)" -eq 0 ]; then

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to use sudo with the root user.

manylinux image doesn't provide /usr/bin/sudo but /opt/rh/gcc-toolset-12/root/usr/bin/sudo exists.

Comment on lines +50 to +55
if ! type storage-testbench >/dev/null 2>&1; then
exclude_tests+=("arrow-gcsfs-test")
fi
if ! type minio >/dev/null 2>&1; then
exclude_tests+=("arrow-s3fs-test")
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't exist in manylinux image.

Comment threadci/scripts/cpp_test.sh Outdated
Comment on lines +123 to +136
if [ "${ARROW_USE_MESON:-OFF}" = "OFF" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then
CMAKE_PREFIX_PATH="${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}}"
if [ -n "${VCPKG_ROOT}" ] && [ -n "${VCPKG_TARGET_TRIPLET}" ]; then
CMAKE_PREFIX_PATH+=";${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}"
fi
cmake \
-S ${source_dir}/examples/minimal_build \
-B ${build_dir}/examples/minimal_build \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
cmake --build ${build_dir}/examples/minimal_build
pushd ${source_dir}/examples/minimal_build
${build_dir}/examples/minimal_build/arrow-example
popd
fi

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test for our CMake packages. If find_package(Arrow) doesn't work, this will detect it.

JNI build uses find_package(Arrow).

Comment threadci/vcpkg/vcpkg.json
@@ -19,6 +19,7 @@
"re2",
"snappy",
"utf8proc",
"xsimd",

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add this again because we have #47221 and vcpkg provides xsimd 13.2.0 since #47627.

@@ -176,7 +176,7 @@ class Process::Impl {
for (const auto& kv : process::environment::current()) {
env[kv.key()] = process::environment::value(kv.value());
}
env["PATH"] = process::environment::value(current_exe.parent_path());
env["PATH"] = process::environment::value(current_exe.parent_path().string());

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recent Boost or old g++ (12.2.1) don't accept std::filesystem::path:

/arrow/cpp/src/arrow/testing/process.cc: In member function ‘arrow::Status arrow::util::Process::Impl::SetExecutable(const std::string&)’:
/arrow/cpp/src/arrow/testing/process.cc:179:74: error: call of overloaded ‘value(std::filesystem::__cxx11::path)’ is ambiguous
179 | env["PATH"] = process::environment::value(current_exe.parent_path());
| ^
In file included from /arrow/cpp/src/arrow/testing/process.cc:44:
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:727:14: note: candidate: ‘boost::process::v2::environment::value::value(boost::process::v2::environment::value_view)’
727 | explicit value(value_view kv) : value_(kv.c_str()) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:723:5: note: candidate: ‘boost::process::v2::environment::value::value(string_type&&)’
723 | value( string_type&& source ) : value_(std::move(source)) {}
| ^~~~~
/opt/vcpkg/installed/amd64-linux-static-release/include/boost/process/v2/environment.hpp:722:5: note: candidate: ‘boost::process::v2::environment::value::value(const string_type&)’
722 | value( const string_type& source ) : value_(source) {}
| ^~~~~

We need to convert std::filesystem::path to std::string explicitly.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 8, 2025
@kou
kouforce-pushed the ci-java-jni-linux branch from 21f73d5 to 651e4f2CompareOctober 8, 2025 00:42
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 8, 2025
Comment thread.github/workflows/cpp_extra.yml Outdated

permissions:
contents: read
packages: write

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for using GitHub Packages as vcpkg cache.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment about this?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done and moved to steps.jni-linux.permissions from the top-level permissions to reduce scope.

@github-actionsgithub-actionsBot removed the awaiting change review Awaiting change review label Oct 9, 2025
@github-actionsgithub-actionsBot added Component: Gandiva awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 10, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 10, 2025
@kou

kou commented Oct 10, 2025

Copy link
Copy Markdown
MemberAuthor

This is ready.

This is a blocker of new Apache Arrow Java release. So this is needed for 22.0.0 C++ release.

@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
MemberAuthor

@raulcd Can we merge this for 22.0.0?

@raulcd

Copy link
Copy Markdown
Member

@raulcd Can we merge this for 22.0.0?

Yes, I'll cherry-pick it on the maintenance branch once we merge it.

@kou

kou commented Oct 12, 2025

Copy link
Copy Markdown
MemberAuthor

Thanks. Let's merge this.

@kou
kou merged commit 0c8ce5f into apache:mainOct 12, 2025
48 checks passed
@kou
kou deleted the ci-java-jni-linux branch October 12, 2025 14:57
@koukou removed the awaiting change review Awaiting change review label Oct 12, 2025
@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 0c8ce5f.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

raulcd pushed a commit that referenced this pull request Oct 13, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: #47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
@kou

kou commented Oct 13, 2025

Copy link
Copy Markdown
MemberAuthor

docker compose push failed: #47795

This is also a blocker of 22.0.0.

@raulcd

Copy link
Copy Markdown
Member

This is also a blocker of 22.0.0.

Thanks for pointing that out!

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Oct 15, 2025
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Comment on lines +123 to +126
# This is for testing find_package(Arrow).
#
# Note that this is not a perfect solution. We should improve this
# later.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this new check is breaking some C++ builds (CUDA, Thread Sanitizer). @kou

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, sorry. I missed these failures: #47840

@github-actionsgithub-actionsBot added the awaiting committer review Awaiting committer review label Oct 15, 2025
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Oct 17, 2025
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
### Rationale for this change
This is for preventing to break Apache Arrow Java JNI use case on Linux.
### What changes are included in this PR?
* Add a CI job that uses build options for JNI use case
* Install more packages in manylinux image that is also used by JNI build ### Are these changes tested?
Yes.
### Are there any user-facing changes?
No.
* GitHub Issue: apache#47632
Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@raulcd@pitrou