Craft-parts cannot parse advanced grammar in `stage` and `prime` fields
Metadata
Current evaluation
No evaluation has been recorded for this issue yet.
Issue body
### Bug Description
Craft-parts assumes `prime` and `stage` entries are strings. This is not true if advanced grammar is used.
Craft-parts needs to be able to unmarshal parts with advanced grammar. The problematic code is [here](https://github.com/canonical/craft-parts/blob/836a4fb7fbba405fc06e4da4d51117cdb99982b9/craft_parts/constraints.py#L35)).
### To Reproduce
See a snapcraft reproducer in https://bugs.launchpad.net/snapcraft/+bug/2083964
### part yaml
```shell
parts:
my-part:
plugin: nil
prime:
- on amd64:
- usr/lib/*/libvpl.so.*
```
### Relevant log output
```shell
2024-10-09 09:12:00.397 Starting snapcraft, version 8.4.2
2024-10-09 09:12:00.397 Log verbosity level set to BRIEF
2024-10-09 09:12:00.397 Preparing application...
2024-10-09 09:12:00.397 Configuring application...
2024-10-09 09:12:00.398 Setting up ConfigService
2024-10-09 09:12:00.507 Build plan: platform=None, build_for=None
2024-10-09 09:12:00.507 Running snapcraft expand-extensions on host
2024-10-09 09:12:00.521 snapcraft internal error: AttributeError("'dict' object has no attribute 'startswith'")
2024-10-09 09:12:00.522 Traceback (most recent call last):
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_application/application.py", line 568, in run
2024-10-09 09:12:00.522 return_code = self._run_inner()
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/snapcraft/application.py", line 215, in _run_inner
2024-10-09 09:12:00.522 return_code = super()._run_inner()
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_application/application.py", line 549, in _run_inner
2024-10-09 09:12:00.522 return_code = dispatcher.run() or os.EX_OK
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 487, in run
2024-10-09 09:12:00.522 return self._loaded_command.run(self._parsed_command_args)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/snapcraft/commands/extensions.py", line 137, in run
2024-10-09 09:12:00.522 project_data = models.Project.unmarshal(yaml_data_for_arch)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_application/models/base.py", line 61, in unmarshal
2024-10-09 09:12:00.522 return cls.model_validate(data)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/pydantic/main.py", line 568, in model_validate
2024-10-09 09:12:00.522 return cls.__pydantic_validator__.validate_python(
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_application/models/project.py", line 250, in _validate_part
2024-10-09 09:12:00.522 craft_parts.validate_part(part)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_parts/parts.py", line 648, in validate_part
2024-10-09 09:12:00.522 _get_part_spec(data)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_parts/parts.py", line 679, in _get_part_spec
2024-10-09 09:12:00.522 return PartSpec(**part_spec)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/pydantic/main.py", line 193, in __init__
2024-10-09 09:12:00.522 self.__pydantic_validator__.validate_python(data, self_instance=self)
2024-10-09 09:12:00.522 File "/snap/snapcraft/12783/lib/python3.10/site-packages/craft_parts/constraints.py", line 44, in _validate_relative_path_str
2024-10-09 09:12:00.522 if path.startswith("/"):
2024-10-09 09:12:00.522 AttributeError: 'dict' object has no attribute 'startswith'
2024-10-09 09:12:00.522 Full execution log: '/home/developer/.local/state/snapcraft/log/snapcraft-20241009-091200.396666.log'
```
Evaluation history
No evaluation history available.