You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When remote-build is run multiple times, the success message lists
the same artifact filenames multiple times.
Root cause
artifact_downloads is a dict[url → path]. Different build runs
produce different URLs but the same filenames. Since deduplication
keys on URL, duplicate paths end up in .values(), causing the same
snap name to appear multiple times in the output.
Craft-application is downloading the same artifacts multiple times and overwriting it.
This only happens when there are no changes to the project source between builds. Theoretically, the artifacts would be identical, except for timestamps.
One possible solution would be filtering at retrieval time. Theoretically, launchpad returns builds ordered by date built, so craft-application could trust this ordering and only download the first (newest) copy of each build artifact.
The other possible solution would be to retrieve artifacts based on the build id. I think this is unique per build, so we could pass the id as a filter when getting the artifacts.
I haven't tested either solution, so I have no idea if they'd work. I like the latter solution, but I wonder if it's possible to do with asynchronous builds. We may have to cache the build id locally, if we're not already doing that.
Activity
steinbro commentedon Jun 25, 2026
This is possibly related to #249 regarding cleaning up old remote builds.
mr-cal commentedon Jul 1, 2026
I did some research and have a few takeaways.
One possible solution would be filtering at retrieval time. Theoretically, launchpad returns builds ordered by date built, so craft-application could trust this ordering and only download the first (newest) copy of each build artifact.
The other possible solution would be to retrieve artifacts based on the build id. I think this is unique per build, so we could pass the id as a filter when getting the artifacts.
I haven't tested either solution, so I have no idea if they'd work. I like the latter solution, but I wonder if it's possible to do with asynchronous builds. We may have to cache the build id locally, if we're not already doing that.
I'd like to hear @lengau's opinion too.