I am trying to build a snapcraft for my application. It's my first time using snapcraft. The app contains three 'applications' and I can get the point of running the stage for an individual part i.e. snapcraft stage a --use-lxd
, but on when I try to run them combined i.e. snapcraft prime --use-lxd
the build get's stuck on some 2023-01-08 16:22:11.505 check if Part('websocket'):Step.PULL is outdated \ (31013.8s)
I've tried building the individual parts prior to running a snapcraft prime
command and they succeed without noticable errors, so I don't really understand why it doesn't just skip the stages.
I feel like whatever is trying to check if the pull is out of date is in some kind of infinite directory recursion because even after 31305.6s it still hasn't processed. Any thoughts where I can improve my snapcraft?
name: test
summary: ...
description: ...
confinement: strict
base: core22
grade: stable
version: "1"
architectures:
- build-on: amd64
apps:
a:
command: /usr/share/a/app
plugs:
- network
- home
b:
command: /usr/share/b/app
plugs:
- network
- home
c:
command: /usr/share/c/app
plugs:
- network
- home
parts:
source:
plugin: nil
source: https://github.com/flutter/flutter.git
source-type: "git"
source-depth: 1
source-branch: "master"
build-packages: [clang, cmake, git, ninja-build, pkg-config, libgtk-3-dev, liblzma-dev, curl, unzip]
stage-packages: [libgtk-3-0, libblkid1, liblzma5]
override-pull: |
craftctl default
git fetch --unshallow
PATH="$CRAFT_PART_SRC/bin:$PATH" flutter doctor
PATH="$CRAFT_PART_SRC/bin:$PATH" flutter channel master
PATH="$CRAFT_PART_SRC/bin:$PATH" flutter precache
override-build: |
set -eux
mkdir -p $CRAFT_PART_INSTALL/usr/bin
mkdir -p $CRAFT_PART_INSTALL/usr/libexec
cp -r $CRAFT_PART_SRC $CRAFT_PART_INSTALL/usr/libexec/flutter
ln -sf $CRAFT_PART_INSTALL/usr/libexec/flutter/bin/flutter $CRAFT_PART_INSTALL/usr/bin/flutter
ln -sf $CRAFT_PART_INSTALL/usr/libexec/flutter/bin/dart $CRAFT_PART_INSTALL/usr/bin/dart
export PATH="$CRAFT_PART_INSTALL/usr/bin:$PATH"
override-prime: ""
packages:
source: packages
source-type: local
plugin: nil
build-packages: [rsync]
override-pull: |
echo "$(pwd)"
rsync -r --exclude snap --exclude .git --exclude .vs --exclude .plugin_symlinks --exclude TestResults --exclude releases --exclude .dart_tool --exclude .vscode --exclude node_modules --exclude build $SNAPCRAFT_PROJECT_DIR/packages/* $SNAPCRAFT_PART_SRC/
override-build: |
rsync -r $SNAPCRAFT_PART_SRC/* $SNAPCRAFT_PART_INSTALL
override-stage: ""
override-prime: ""
websocket:
source: websocket
source-type: local
plugin: nil
build-packages: [rsync]
override-pull: |
rsync -r --exclude snap --exclude .git --exclude .vs --exclude .plugin_symlinks --exclude TestResults --exclude releases --exclude .dart_tool --exclude .vscode --exclude node_modules --exclude build $SNAPCRAFT_PROJECT_DIR/websocket/* $SNAPCRAFT_PART_SRC/
override-build: |
rsync -r $SNAPCRAFT_PART_SRC/* $SNAPCRAFT_PART_INSTALL
override-stage: ""
override-prime: ""
dummy:
plugin: nil
build-packages: [rsync]
build-snaps: [ yq ]
stage-packages: [dotnet-sdk-6.0, dotnet-runtime-6.0]
after: [source, packages, websocket]
override-pull: ""
override-build: ""
override-prime: ""
a:
source: a_src
source-type: local
plugin: nil
after: [dummy]
override-pull: |
mkdir -p packages
mkdir -p a_src
mkdir -p websocket
rsync -r ~/parts/websocket/install/* $SNAPCRAFT_PART_SRC/websocket
rsync -r ~/parts/packages/install/* $SNAPCRAFT_PART_SRC/packages
rsync -r --exclude snap --exclude .git --exclude .vs --exclude .plugin_symlinks --exclude TestResults --exclude releases --exclude .dart_tool --exclude .vscode --exclude node_modules --exclude build $SNAPCRAFT_PROJECT_DIR/a_src/* $SNAPCRAFT_PART_SRC/a_src
#craftctl default
cd a_src
flutter clean
flutter pub get
override-build: |
craftctl default
cd a_src
flutter build linux
rsync --mkpath -r build/linux/x64/release/bundle/* $SNAPCRAFT_PART_INSTALL/usr/share/a
override-stage: |
rsync –-ignore-existing -r $SNAPCRAFT_PART_INSTALL/* $SNAPCRAFT_STAGE
b:
source: b_src
source-type: local
plugin: nil
after: [dummy]
override-pull: |
mkdir -p packages
mkdir -p b_src
mkdir -p websocket
rsync -r ~/parts/websocket/install/* $SNAPCRAFT_PART_SRC/websocket
rsync -r ~/parts/packages/install/* $SNAPCRAFT_PART_SRC/packages
rsync -r --exclude snap --exclude .git --exclude .vs --exclude .plugin_symlinks --exclude TestResults --exclude releases --exclude .dart_tool --exclude .vscode --exclude node_modules --exclude build $SNAPCRAFT_PROJECT_DIR/b_src/* $SNAPCRAFT_PART_SRC/b_src
#craftctl default
cd b_src
flutter pub get
override-build: |
craftctl default
cd b_src
flutter build linux
rsync --mkpath -r build/linux/x64/release/bundle/* $SNAPCRAFT_PART_INSTALL/usr/share/b
override-stage: |
rsync –-ignore-existing -r $SNAPCRAFT_PART_INSTALL/* $SNAPCRAFT_STAGE
c:
source: c_src
source-type: local
plugin: nil
after: [dummy]
override-pull: |
mkdir -p packages
mkdir -p c_src
mkdir -p websocket
rsync -r ~/parts/websocket/install/* $SNAPCRAFT_PART_SRC/websocket
rsync -r ~/parts/packages/install/* $SNAPCRAFT_PART_SRC/packages
rsync -r --exclude snap --exclude .git --exclude .vs --exclude .plugin_symlinks --exclude TestResults --exclude releases --exclude .dart_tool --exclude .vscode --exclude node_modules --exclude build $SNAPCRAFT_PROJECT_DIR/c_src/* $SNAPCRAFT_PART_SRC/c_src
#craftctl default
cd c_src
flutter clean
flutter pub get
override-build: |
craftctl default
cd c_src
flutter build linux
rsync --mkpath -r build/linux/x64/release/bundle/* $SNAPCRAFT_PART_INSTALL/usr/share/c
override-stage: |
rsync –-ignore-existing -r $SNAPCRAFT_PART_INSTALL/* $SNAPCRAFT_STAGE
test:
after: [a, c, b]
plugin: nil
After getting in touch with some of the developers/volunteers through other channels and forum.snapcraft.com. This a bug was discovered that is already been fixed in the present-day upstream, starting starting version 7.2.11