Snapcraft indefinitely hangs on pull step

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 recurssion 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

try using three backticks ``` above and below code snippets (or snapcraft.yaml’s) you paste, then it becomes actually readable for all of us :wink:

You have a lot of lines like this. Instead of setting overrides to blank string just use a comment (#) and see if that helps.