snapcraft indiscriminately removes *.snap files
Metadata
Current evaluation
Closed as a snap pack issue rather than a snapcraft bug. Developers confirmed the stripping occurs upstream, redirecting the fix to snapd.
Suggested action: —
No scores available.
Issue body
### Bug Description
After performing a build, snapcraft will prune any files with a `.snap` extension regardless of what the file actually is, and not provide any warning that such a pruning is happening.
### To Reproduce
Using the provided `snapcraft.yaml`, build with `snapcraft --use-lxd --verbose`
### Environment
Ubuntu 23.10 with snapcraft 8.x with `--use-lxd`
### snapcraft.yaml
```shell
name: my-snap-name # you probably want to 'snapcraft register <name>'
base: core24 # the base snap is the execution environment for this snap
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: |
This is my-snap's description. You have a paragraph or two to tell the
most important story about your snap. Keep it under 100 words though,
we live in tweetspace and your description wants to look good in the snap
store.
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: devmode # use 'strict' once you have the right plugs and slots
parts:
my-part:
# See 'snapcraft plugins'
plugin: nil
override-build: |
touch foo
install -Dm 644 "${CRAFT_PART_BUILD}/foo" "${CRAFT_PART_INSTALL}/foo.snap"
```
### Relevant log output
```shell
dilyn@Ares:~/test -> snapcraft --verbose
Starting snapcraft, version 8.2.11.post61+git14dbf54c
Logging execution to '/home/dilyn/.local/state/snapcraft/log/snapcraft-20240625-003754.386495.log'
Starting snapcraft, version 8.2.11.post61+git14dbf54c
Logging execution to '/home/dilyn/.local/state/snapcraft/log/snapcraft-20240625-003754.386495.log'
Launching managed ubuntu 24.04 instance...
Creating instance from base instance
Starting instance
Starting snapcraft, version 8.2.11.post61+git14dbf54c
Logging execution to '/tmp/snapcraft.log'
Starting snapcraft, version 8.2.11.post61+git14dbf54c
Logging execution to '/tmp/snapcraft.log'
Initialising lifecycle
Installing build-packages
Installing build-snaps
Pulling my-part
Building my-part
:: + touch foo
:: + install -Dm 644 /root/parts/my-part/build/foo /root/parts/my-part/install/foo.snap
Staging my-part
Priming my-part
Packing...
Reading snap metadata...
Running linters...
Running linter: classic
Running linter: library
Creating snap package...
Packed my-snap-name_0.1_amd64.snap
dilyn@Ares:~/test -> unsquashfs my-snap-name_0.1_amd64.snap
Parallel unsquashfs: Using 24 processors
3 inodes (3 blocks) to write
[===================================================================================================================================================|] 6/6 100%
created 3 files
created 4 directories
created 0 symlinks
created 0 devices
created 0 fifos
created 0 sockets
created 0 hardlinks
dilyn@Ares:~/test -> tree squashfs-root/
squashfs-root/
├── meta
│ ├── gui
│ └── snap.yaml
└── snap
├── manifest.yaml
└── snapcraft.yaml
4 directories, 3 files
```
### Additional context
Originally discovered because my convention for licenses is to use `license.foo` as the filename; in this case, I wanted to copy the license of the snap which is named `license.snap`.
This removal happens regardless of what level the `license.snap` is at.
At the very least I would like a message telling me a file has been removed that I explicitly said to include. An ideal solution is that snapcraft uses a more intelligent way of determining if the file is a snap or not. At least `file foo.snap` (which will return squashfs info if it's at least a snap), if not the better option of `snap info foo.snap` (which returns 1 if it isn't a snap and 0 if it is).
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b | — | — | Closed as a snap pack issue rather than a snapcraft bug. Developers confirmed the stripping occurs upstream, redirecting the fix to snapd. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed. Developers identified the incorrect removal of .snap files as a snap pack bug within snapd, not a snapcraft issue. The report was redirected to the snapd repository for investigation and resolution. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed as a snapd issue. Maintainers traced the bug to snap pack, which incorrectly strips all .snap files. The reporter redirected the issue to the snapd repository for resolution. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Closed and redirected to snapd maintainers after developers identified the root cause as a snap pack bug. No fix was applied here. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Closed as upstream. Developers identified the bug as a snapd snap pack issue, not a snapcraft defect. Since file stripping occurs during packing, the report was redirected to the snapd repository for resolution. |
Update history
No update history recorded yet.
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #4870 snapcraft pack error obtuse on snapd errors | snapcraft | closed | Closed as a duplicate of issue #4548. The snapcraft pack error handling regression affecting core22 and core24 is superseded by the referenced tracking issue. | |
| #1615060 snapcraft clean is incomplete | snapcraft (launchpad) | closed | Reporting that snapcraft clean skips local .snap files was closed without comments or resolution, indicating the report was abandoned or left unresolved. |