← Back to issue list

Chisel integration test failing on ppc64el

View original Github issue

Metadata

Project
craft-parts
Number
#1301
Type
issue
State
open
Author
lengau
Labels
Type: Bug
Created
Updated
Closed

Current evaluation

Chisel lifecycle test fails on ppc64el with a digest mismatch cutting the ca-certificates_data slice. Test is now skipped on ppc64el (workaround in #1279); the underlying upstream chisel problem remains unresolved. Open ~11 months, no comments.

Suggested action: keep open

Reason: The test failure was worked around rather than fixed: commit 4193bd04 (PR #1279) added a ppc64el skipif to test_chisel_lifecycle that explicitly cites this issue as the reason, and no ppc64el/chisel fix appears in the repo history. The root cause is an upstream chisel digest mismatch on ppc64el that craft-parts cannot fix, so the issue remains a valid tracking item for removing the skip once chisel is fixed.

Impact: 25 Quick Win: 11.25 Staleness: 65 Complexity: 55 Confidence: 80 Support Request: 0

Issue body

### Bug Description When running on `ppc64el`, `tests/integration/lifecycle/test_chisel_lifecycle.py::test_chisel_lifecycle` fails with an unspecified chisel error: ``` E craft_parts.packages.errors.ChiselError: Failed to cut requested chisel slices: ca-certificates_data ``` ### To Reproduce `pytest tests/integration/lifecycle/test_chisel_lifecycle.py::test_chisel_lifecycle` on a ppc64el machine ### part yaml ```shell ``` ### Relevant log output ```shell ____________________________ test_chisel_lifecycle _____________________________ cls = <class 'craft_parts.packages.deb.Ubuntu'> @classmethod def _unpack_stage_slices( cls, *, stage_packages: list[str], install_path: pathlib.Path ) -> None: """Cut Chisel slices into a destination path. :param stage_packages: The list of names of slices to cut. :param install_path: The destination directory. """ output_stream = StringIO() handler = logging.StreamHandler(stream=output_stream) logger.addHandler(handler) try: > process_run(["chisel", "cut", "--root", str(install_path), *stage_packages]) /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/packages/deb.py:781: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/packages/deb.py:832: in process_run os_utils.process_run(command, logger.debug, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ command = ['chisel', 'cut', '--root', '/home/ubuntu/craft-parts-testsjc4gcm6b/parts/foo/install', 'ca-certificates_data'] log_func = <bound method Logger.debug of <Logger craft_parts.packages.deb (WARNING)>> kwargs = {} proc = <Popen: returncode: 1 args: ['chisel', 'cut', '--root', '/home/ubuntu/craft-...> line = 'error: cannot fetch from archive: expected digest fc67ac93c642684a569235b5ff363a49ee5e7dfe59902dcddd7f1e2ab1cb6884, got 7544888e59d096f651a0d64901796b109985fce2a437abdce297b3d17662022b\n' ret = 1 def process_run( command: list[str], log_func: Callable[[str], None], **kwargs: Any ) -> None: """Run a command and handle its output.""" with subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, **kwargs, ) as proc: if not proc.stdout: return for line in iter(proc.stdout.readline, ""): log_func(":: " + line.strip()) ret = proc.wait() if ret: > raise subprocess.CalledProcessError(ret, command) E subprocess.CalledProcessError: Command '['chisel', 'cut', '--root', '/home/ubuntu/craft-parts-testsjc4gcm6b/parts/foo/install', 'ca-certificates_data']' returned non-zero exit status 1. /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/utils/os_utils.py:345: CalledProcessError The above exception was the direct cause of the following exception: new_homedir_path = PosixPath('/home/ubuntu/craft-parts-testsjc4gcm6b') partitions = None @pytest.mark.skipif( not _current_release_supported(), reason="Test needs Chisel support" ) def test_chisel_lifecycle(new_homedir_path, partitions): """Integrated test for Chisel support. Note that since this test needs the "chisel" binary. """ _parts_yaml = textwrap.dedent( """\ parts: foo: plugin: nil stage-packages: [ca-certificates_data] """ ) parts = yaml.safe_load(_parts_yaml) lf = craft_parts.LifecycleManager( parts, application_name="test_slice", cache_dir=new_homedir_path, work_dir=new_homedir_path, partitions=partitions, ) actions = lf.plan(Step.PRIME) with lf.action_executor() as ctx: > ctx.execute(actions) /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/tests/integration/lifecycle/test_chisel_lifecycle.py:74: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/executor.py:359: in execute self._executor.execute(actions, stdout=stdout, stderr=stderr) /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/executor.py:153: in execute self._run_action(act, stdout=stdout, stderr=stderr) /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/executor.py:246: in _run_action handler.run_action(action, stdout=stdout, stderr=stderr) /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:313: in run_action state = handler(step_info, stdout=stdout, stderr=stderr) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:442: in _run_build self._unpack_stage_packages() /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:1313: in _unpack_stage_packages packages.Repository.unpack_stage_packages( /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/packages/deb.py:730: in unpack_stage_packages cls._unpack_stage_slices( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = <class 'craft_parts.packages.deb.Ubuntu'> @classmethod def _unpack_stage_slices( cls, *, stage_packages: list[str], install_path: pathlib.Path ) -> None: """Cut Chisel slices into a destination path. :param stage_packages: The list of names of slices to cut. :param install_path: The destination directory. """ output_stream = StringIO() handler = logging.StreamHandler(stream=output_stream) logger.addHandler(handler) try: process_run(["chisel", "cut", "--root", str(install_path), *stage_packages]) except subprocess.CalledProcessError as err: command_output = output_stream.getvalue() > raise errors.ChiselError( slices=stage_packages, output=command_output ) from err E craft_parts.packages.errors.ChiselError: Failed to cut requested chisel slices: ca-certificates_data /home/ubuntu/actions-runner/_work/craft-parts/craft-parts/craft_parts/packages/deb.py:784: ChiselError ```

Evaluation history

Date Model Scores Action Summary
qwen/qwen3.8-27b
Impact: 25
Quick Win: 11.25
Staleness: 65
Complexity: 55
Confidence: 80
Support Request: 0
keep open Chisel lifecycle test fails on ppc64el with a digest mismatch cutting the ca-certificates_data slice. Test is now skipped on ppc64el (workaround in #1279); the underlying upstream chisel problem remains unresolved. Open ~11 months, no comments.
qwen/qwen3.6-35b-a3b
Staleness: 85
Complexity: 40
Confidence: 80
Support Request: 5
needs triage Integration test for chisel lifecycle fails on ppc64el due to a digest mismatch error when cutting slices. Open for 10 months with no maintainer comments or updates.
qwen3.6-35b-a3b-mtp-q6
Staleness: 90
Complexity: 35
Confidence: 80
Support Request: 10
needs triage Integration test for Chisel lifecycle fails on ppc64el due to a digest mismatch error when cutting ca-certificates_data slices. Unaddressed for nearly a year.
qwen3.6-35b-a3b-mtp-q6
Staleness: 75
Complexity: 40
Confidence: 75
Support Request: 0
needs triage ppc64el integration test fails due to chisel digest mismatch when cutting ca-certificates_data slices. Open, unassigned, and inactive for 276 days. Needs triage and fix.

Update history

No update history recorded yet.

Related work

  • Related To: craft-parts#1279 (confidence 90%)

    PR #1279 (commit 4193bd04) added the ppc64el skipif to test_chisel_lifecycle with this issue's URL as the reason, mitigating but not fixing the reported failure.

Related issues

No related issues found above the similarity threshold.