Overlay directory is not removed on a clean
Metadata
Current evaluation
Fixed in merged PR #1208 (commit bea8d2dc), which removes executor overlay directories during cleanup.
Resolution: closed resolved
Reason: PR #1208 was merged as commit bea8d2dc and explicitly fixes #1207 by cleaning executor overlay directories; all CI checks passed.
Evaluated by: mr-cal-bot
No scores available.
Issue body
### Bug Description
The overlay directory isn't being removed on a clean. See: https://github.com/canonical/craft-application/actions/runs/16998219062/job/48193970471?pr=860#step:4:124
### To Reproduce
Run the craft-application `test_run_and_clean_all_parts` integration test.
### part yaml
```shell
```
### Relevant log output
```shell
DEBUG craft_parts.executor.executor:executor.py:289 verify plugin environment for part 'my-part'
DEBUG craft_parts.executor.executor:executor.py:289 verify plugin environment for part 'your-part'
DEBUG craft_parts.executor.executor:executor.py:207 execute action my-part:Action(part_name='my-part', step=Step.PULL, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.executor:executor.py:207 execute action your-part:Action(part_name='your-part', step=Step.PULL, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.executor:executor.py:207 execute action my-part:Action(part_name='my-part', step=Step.BUILD, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/state/pull
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/build
DEBUG craft_parts.executor.step_handler:step_handler.py:562 Executing PosixPath('/tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/run/build.sh')
DEBUG craft_parts.executor.executor:executor.py:207 execute action your-part:Action(part_name='your-part', step=Step.BUILD, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/pull
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/build
DEBUG craft_parts.executor.step_handler:step_handler.py:562 Executing PosixPath('/tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/run/build.sh')
DEBUG craft_parts.executor.executor:executor.py:207 execute action my-part:Action(part_name='my-part', step=Step.STAGE, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.executor:executor.py:207 execute action your-part:Action(part_name='your-part', step=Step.STAGE, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.executor:executor.py:207 execute action my-part:Action(part_name='my-part', step=Step.PRIME, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.executor:executor.py:207 execute action your-part:Action(part_name='your-part', step=Step.PRIME, action_type=ActionType.RUN, reason=None, project_vars=None, properties=ActionProperties(changed_files=None, changed_dirs=None))
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean my-part:5
DEBUG craft_parts.executor.part_handler:part_handler.py:1111 clean shared dir: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/prime for step: 5 for partition None
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/state/prime
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/prime
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean my-part:4
DEBUG craft_parts.executor.part_handler:part_handler.py:1111 clean shared dir: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/stage for step: 4 for partition None
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/state/stage
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/stage
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/state/stage
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/stage
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean my-part:3
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/build
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/install
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/export
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean my-part:1
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/my-part/src
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean your-part:5
DEBUG craft_parts.executor.part_handler:part_handler.py:1111 clean shared dir: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/prime for step: 5 for partition None
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/prime
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean your-part:4
DEBUG craft_parts.executor.part_handler:part_handler.py:1111 clean shared dir: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/stage for step: 4 for partition None
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/stage
DEBUG craft_parts.state_manager.states:states.py:53 load state file: /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/state/stage
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean your-part:3
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/build
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/install
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/export
DEBUG craft_parts.executor.part_handler:part_handler.py:1034 clean your-part:1
DEBUG craft_parts.executor.part_handler:part_handler.py:1305 remove directory /tmp/pytest-of-runner/pytest-0/test_run_and_clean_all_parts_t0/work/parts/your-part/src
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha | — | closed resolved | Fixed in merged PR #1208 (commit bea8d2dc), which removes executor overlay directories during cleanup. | |
| stealth/space-bunny-alpha | — | closed resolved | Overlay cleanup was fixed by merged PR canonical/craft-parts#1208 (commit bea8d2dc), which now removes overlay directories during executor cleanup. | |
| stealth/space-bunny-alpha | — | closed resolved | Overlay cleanup was fixed by merged PR canonical/craft-parts#1208 (commit bea8d2dc), which removes overlay directories during executor cleanup. | |
| stealth/space-bunny-alpha | — | closed resolved | Fixed by merged PR #1208 (commit bea8d2dc), which now removes overlay directories during executor cleanup. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed without a documented fix. The report was synced to internal Jira ticket CRAFT-4697, indicating it was moved for internal tracking rather than resolved on GitHub. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed and synced to internal Jira ticket CRAFT-4697. No public fix or pull request was merged to resolve the overlay directory cleanup bug. | |
| qwen/qwen3.6-35b-a3b | — | — | Overlay directory not removed on clean was not fixed. The report was closed without a merge. An internal Jira ticket (CRAFT-4697) was created to track the bug. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed and synced to internal Jira ticket CRAFT-4697. No fix or pull request was merged on GitHub. The bug was triaged and moved to internal tracking. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Abandoned in the repository and synced to internal Jira ticket CRAFT-4697 for tracking. No fix or pull request was merged to resolve the overlay directory cleanup bug. |
Update history
No update history recorded yet.
Related work
-
Likely Fixed By:
canonical/craft-parts#1208
(confidence 100%)
Merged fix titled "fix(executor): clean overlay directories".
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1208 fix(executor): clean overlay directories | craft-parts | merged | Merged into main as commit bea8d2dc, fixing #1207/CRAFT-4697 by removing overlay directories during executor cleanup; all CI checks passed. | |
| #1222 Clean doesn't remove the overlay directory | craft-parts | closed | Fixed in 2.20.1 by merged PR #1208 (bea8d2dc); PR #1223 merged the release branch into main (30ea3701), restoring overlay-directory cleanup. | |
| #345 executor: fix directory cleaning | craft-parts | merged | Merged PR #345 fixed executor cleanup logic in commit b0086bbe, preventing lifecycle directories from unexpectedly remaining and resolving #329. |