fix(release): every snap packed without --output, into its project, then moved

snapcraft builds in LXD with the project mounted at /root/project and refuses
any --output naming a folder of this machine: the root's own build/release/
for Learn's snap (found releasing Learn 0.23.0) as the clone itself for Todo's
and Train's (Todo 0.1.0, both 3 Nov 2026). Every snap now packs into its
project and is moved into the release's folder from there, checked with
snapcraft 9.2.1 at the root. A failure after none of several apps was done
now says "none" rather than nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-03 18:59:40 +01:00
commit 8565db3d89
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -152,31 +152,22 @@ void main() {
);
});
test(
"Learn's snap is the root's; Todo's and Train's are built in clones of "
'their own, outside the repository, and packed without --output, as '
"snapcraft takes the clone's own path for a file outside the project",
() {
expect(learnRelease.snap!.atRoot, isTrue);
test("Learn's snap is the root's; Todo's and Train's are built in clones of "
'their own, outside the repository', () {
expect(learnRelease.snap!.atRoot, isTrue);
for (final (app, name) in [
(todoRelease, 'halkyon-todo'),
(trainRelease, 'halkyon-train'),
]) {
final snap = app.snap!;
expect(snap.atRoot, isFalse, reason: app.id);
expect(
learnRelease.snap!.packOutput(root: '/repo', out: 'build/x'),
'/repo/build/x',
snap.projectPath('/home/someone'),
'/home/someone/.cache/halkyon-release/snap/$name',
);
for (final (app, name) in [
(todoRelease, 'halkyon-todo'),
(trainRelease, 'halkyon-train'),
]) {
final snap = app.snap!;
expect(snap.atRoot, isFalse, reason: app.id);
expect(
snap.projectPath('/home/someone'),
'/home/someone/.cache/halkyon-release/snap/$name',
);
expect(snap.packOutput(root: '/repo', out: 'build/x'), isNull);
expect(snap.storeChannel, 'edge', reason: app.id);
}
},
);
expect(snap.storeChannel, 'edge', reason: app.id);
}
});
for (final app in [todoRelease, trainRelease]) {
group("${app.name}'s snap, built in a clone of its own with its folder in "