Chisel integration test failing on ppc64el
Metadata
Current evaluation
No evaluation has been recorded for this issue yet.
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
No evaluation history available.