Gradle plugin integration test fails on non-amd64/arm64 architectures (s390x). The specific test (test_gradle_plugin_gradlew) has since been refactored into test_gradle_plugin with different assertions, and CI was expanded to more platforms, but no maintainer has confirmed resolution.
Suggested action: needs triage
Reason: The issue is 356 days old with zero comments and no maintainer response. The originally failing test (test_gradle_plugin_gradlew) no longer exists in that form; it was refactored into test_gradle_plugin with a use_gradlew parameter and a corrected assertion path (build/build/test.txt per #1320). CI was expanded to more platforms in #1303. A maintainer needs to verify whether the current test suite passes on s390x to determine if this is resolved or still open.
### Bug Description
The gradle plugin's [gradlew test](https://github.com/canonical/craft-parts/blob/6d8383c8eb079329628cd7bbf245754a70cf8018/tests/integration/plugins/test_gradle.py#L70) fails on architectures other than amd64 and arm64
### To Reproduce
https://github.com/canonical/craft-parts/actions/runs/17601539374/job/50004294034?pr=1278
### part yaml
```shell
```
### Relevant log output
```shell
=================================== FAILURES ===================================
__________________________ test_gradle_plugin_gradlew __________________________
new_dir = local('/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0')
testing_source_dir = local('/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0')
partitions = None, local_proxy_url = 'http://localhost:8888'
@pytest.mark.java
def test_gradle_plugin_gradlew(
new_dir, testing_source_dir, partitions, local_proxy_url
):
part_name = "foo"
parts_yaml = textwrap.dedent(
f"""
parts:
{part_name}:
plugin: gradle
gradle-task: testWrite build
gradle-init-script: init.gradle
source: {testing_source_dir}
build-packages: [gradle, openjdk-21-jdk]
build-environment:
# This is just because the test environment has multiple java versions and will
# use default-jre if unspecified.
- JAVA_HOME: /usr/lib/jvm/java-21-openjdk-${{CRAFT_ARCH_BUILD_FOR}}
- http_proxy: {local_proxy_url}
- https_proxy: {local_proxy_url}
# Set GRADLE_USER_HOME dir to the according part's build .gradle dir to avoid
# interfering with other tests.
- GRADLE_USER_HOME: {new_dir}/parts/{part_name}/build/.gradle
stage-packages: [openjdk-21-jdk]
"""
)
parts = yaml.safe_load(parts_yaml)
lf = LifecycleManager(
parts,
application_name="test_ant",
cache_dir=new_dir,
work_dir=new_dir,
partitions=partitions,
)
actions = lf.plan(Step.PRIME)
with lf.action_executor() as ctx:
ctx.execute(actions)
_test_core_gradle_plugin_build_output(project_info=lf.project_info)
# generated by the init.gradle testWrite task
> assert (lf.project_info.dirs.parts_dir / f"{part_name}/build" / "test.txt").exists()
E AssertionError: assert False
E + where False = exists()
E + where exists = ((PosixPath('/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts') / 'foo/build') / 'test.txt').exists
E + where PosixPath('/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts') = <craft_parts.dirs.ProjectDirs object at 0x3ffaaf1e480>.parts_dir
E + where <craft_parts.dirs.ProjectDirs object at 0x3ffaaf1e480> = <craft_parts.infos.ProjectInfo object at 0x3ffab8a10d0>.dirs
E + where <craft_parts.infos.ProjectInfo object at 0x3ffab8a10d0> = <craft_parts.lifecycle_manager.LifecycleManager object at 0x3ffaa4e32c0>.project_info
/home/ubuntu/actions-runner/_work/craft-parts/craft-parts/tests/integration/plugins/test_gradle.py:111: AssertionError
----------------------------- Captured stdout call -----------------------------
Downloading https://services.gradle.org/distributions/gradle-8.13-bin.zip
..................................................................................................................................
Unzipping /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/.gradle/wrapper/dists/gradle-8.13-bin/5xuhj0ry160q40clulazy9h7d/gradle-8.13-bin.zip to /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/.gradle/wrapper/dists/gradle-8.13-bin/5xuhj0ry160q40clulazy9h7d
Set executable permissions for: /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/.gradle/wrapper/dists/gradle-8.13-bin/5xuhj0ry160q40clulazy9h7d/gradle-8.13/bin/gradle
Welcome to Gradle 8.13!
Here are the highlights of this release:
- Daemon JVM auto-provisioning
- Enhancements for Scala plugin and JUnit testing
- Improvements for build authors and plugin developers
For more details see https://docs.gradle.org/8.13/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :testWrite
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build
[Incubating] Problems report is available at: file:///tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/build/reports/problems/problems-report.html
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.13/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD SUCCESSFUL in 6s
3 actionable tasks: 3 executed
----------------------------- Captured stderr call -----------------------------
tinyproxy: Could not create listening sockets.
+ /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/gradlew testWrite build --init-script init.gradle
openjdk version "21.0.8" 2025-07-15
OpenJDK Runtime Environment (build 21.0.8+9-Ubuntu-0ubuntu124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.8+9-Ubuntu-0ubuntu124.04.1, mixed mode, sharing)
+ find /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build -name gradle-wrapper.jar -type f -delete
+ mkdir -p /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/bin
++ find /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install -name java -type f -executable
+ java_bin=/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/lib/jvm/java-21-openjdk-s390x/bin/java
+ ln -s --relative /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/lib/jvm/java-21-openjdk-s390x/bin/java /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/bin/java
+ mkdir -p /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/jar
+ find /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/ -iname '*.jar' -not -path '/tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/build/.parts/*' -exec ln '{}' /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/jar ';'
------------------------------ Captured log call -------------------------------
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/sbin/pam_extrausers_chkpwd
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/sbin/unix_chkpwd
WARNING craft_parts.packages.normalize:normalize.py:151 Copying needed target link from the system: /dev/null
WARNING craft_parts.packages.normalize:normalize.py:151 Copying needed target link from the system: /etc/ssl/certs/ca-certificates.crt
WARNING craft_parts.packages.normalize:normalize.py:151 Copying needed target link from the system: /etc/environment
WARNING craft_parts.packages.normalize:normalize.py:151 Copying needed target link from the system: /etc/ssl/certs/java/cacerts
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/chfn
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/chsh
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/umount
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/su
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/mount
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/passwd
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/chage
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/gpasswd
WARNING craft_parts.packages.normalize:normalize.py:229 Removing suid/guid from /tmp/pytest-of-ubuntu/pytest-0/test_gradle_plugin_gradlew0/parts/foo/install/usr/bin/expiry
===== 1 failed, 19 passed, 1 skipped, 4548 deselected in 697.93s (0:11:37) =====
```
Evaluation history
Date
Model
Scores
Action
Summary
qwen/qwen3.8-27b
Impact:
30
Quick Win:
18.0
Staleness:
75
Complexity:
40
Confidence:
60
Support Request:
5
needs triage
Gradle plugin integration test fails on non-amd64/arm64 architectures (s390x). The specific test (test_gradle_plugin_gradlew) has since been refactored into test_gradle_plugin with different assertions, and CI was expanded to more platforms, but no maintainer has confirmed resolution.
qwen/qwen3.6-35b-a3b
Staleness:
80
Complexity:
50
Confidence:
85
Support Request:
10
keep open
Gradle plugin test fails on non-amd64/arm64 architectures (e.g., s390x). Clear reproduction steps and logs provided, but issue has been inactive for ~10 months with no maintainer response.
qwen3.6-35b-a3b-mtp-q6
Staleness:
88
Complexity:
40
Confidence:
75
Support Request:
10
needs triage
Gradle plugin integration test fails on non-amd64/arm64 architectures. The test expects a generated output file that is missing, pointing to an architecture-specific build or environment issue. Unaddressed for over 10 months.
qwen3.6-35b-a3b-mtp-q6
Staleness:
75
Complexity:
40
Confidence:
85
Support Request:
0
needs triage
Gradle plugin gradlew test fails on architectures other than amd64 and arm64. Open bug with zero comments and 282 days of inactivity. Needs triage and a fix for cross-architecture compatibility.
Fixed the test assertion to explicitly use the build output directory (build/build/test.txt), which may have resolved the path mismatch causing the s390x failure.
Gradle integration tests failed on s390x and ppc64el due to inconsistent build output paths. The issue was closed after PR #1320 standardized the Gradle directory configuration, resolving the architecture-specific failures.