← 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 integration test fails on ppc64el with an archive digest mismatch. CI is only green because the test carries a skipif for ppc64el referencing #1301; the underlying chisel/manifest problem is still unaddressed.

Suggested action: keep open

Reason: A maintainer-filed, labelled bug with an exact reproducer and full traceback; the log shows the root failure `error: cannot fetch from archive: expected digest fc67ac93..., got 7544888e...`, i.e. the chisel manifest digest for ca-certificates_data does not match what the ppc64el archive serves, which would also break real ppc64el builds that cut slices. The only mitigation in-tree is a skip (tests/integration/lifecycle/test_chisel_lifecycle.py: `platform.machine() == "ppc64el"` with reason linking #1301), which hides rather than fixes the failure, and the sibling test test_chisel_normalize_paths is still run on ppc64el. Zero comments in 381 days suggests upstream ownership (chisel/manifests) rather than a craft-parts defect, so it should stay open pending confirmation, not be closed as resolved or stale.

Evaluated by: mr-cal-bot

Impact: 38 Quick Win: 9 Complexity: 62 Confidence: 78 Actionability: 65

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
stealth/space-bunny-alpha
Impact: 38
Quick Win: 9
Complexity: 62
Confidence: 78
Actionability: 65
keep open Chisel integration test fails on ppc64el with an archive digest mismatch. CI is only green because the test carries a skipif for ppc64el referencing #1301; the underlying chisel/manifest problem is still unaddressed.
qwen/qwen3.6-35b-a3b
Impact: 35
Quick Win: 4
Complexity: 75
Confidence: 70
Actionability: 40
keep open Chisel integration test fails on ppc64el with digest mismatch; test is now skipped via skipif marker referencing this issue, but the underlying upstream chisel problem remains unresolved.
qwen/qwen3.8-27b
Impact: 25
Quick Win: 11
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.

Update history

No update history recorded yet.

Related work

  • Related To: canonical/craft-parts#1308 (confidence 75%)

    ec02157c 'fix(test): mark chisel integration tests as flaky' added `flaky(reruns=3, only_rerun="ChiselError")` retries (closing #1306); that mitigates transient network errors only and does not cover the deterministic ppc64el digest mismatch.

  • Related To: canonical/craft-parts#1279 (confidence 60%)

    Commit 4193bd04 'ci: run non-plugin tests on more platforms' added ppc64el to the qa.yaml matrices and, together with it, the skipif on test_chisel_lifecycle that cites #1301 — the workaround came from the platform expansion, not a fix.

Related issues

No related issues found above the similarity threshold.