Skip to content

build-on is/isn't mandatory/optional? #5531

Open
@waveform80

Description

@waveform80

Bug Description

Snapcraft is complaining that the build-on key under platforms must be specified. This is strange as I've successfully built this snap with (presumably) older versions of snapcraft successfully, and the snapcraft documentation still clearly states:

If the platform name is a valid debian architecture, then build-on and build-for can be omitted

I'm guessing either the docs are wrong, or snapcraft's behaviour is ...

To Reproduce

Attempt to run snapcraft pack locally on the rpi-imager snapcraft.yaml

Environment

Snapcraft 8.9.2 running under Ubuntu 24.04.2 on an arm64 system, with LXD

snapcraft.yaml

name: rpi-imager
base: core24
adopt-info: imagewriter
summary: Raspberry Pi Imager
website: https://www.raspberrypi.com/software/
source-code: https://github.com/r41k0u/rpi-imager
issues: https://github.com/waveform80/imager-snap
icon: images/rpi-imager.png
license: Apache-2.0
description: |
  Raspberry Pi Imager is an easy to use application for installing Raspberry Pi
  OS, or other operating systems, to an SD card ready to use with your
  Raspberry Pi.

  Usage is as simple as:

  1. Pick the Raspberry Pi board you want to use.

  2. Pick the operating system you want to write.

  3. Pick the storage you want to write it to (SD card, hard drive, SSD, etc.)

  4. Click "NEXT", confirm you wish to overwrite your storage and wait!

  The application also verifies that the operating system has been written
  correctly after writing has finished. With certain operating system images,
  the imager also supports customizing the first boot configuration (you will
  be prompted for more information after selecting "NEXT" in this case).
compression: lzo
grade: stable
confinement: strict
platforms:
  amd64: {}
  arm64: {}
  armhf: {}
  # This isn't going to work until the gnome content snap supports it
  #riscv64: {}
  # Can't build ppc64el anymore as gnome content snap stopped supporting it
  # in Core 24
  #ppc64el: {}
  # Can't build s390x as upstream is little-endian specific
  #s390x: {}

apps:
  rpi-imager:
    command: usr/local/bin/rpi-imager
    command-chain:
      - bin/desktop-launch
    desktop: usr/local/share/applications/org.raspberrypi.rpi-imager.desktop
    environment:
      DISABLE_WAYLAND: 1
    extensions: [gnome]
    plugs:
      - x11
      - opengl
      - network
      - desktop
      - desktop-legacy
      - home
      - removable-media  # required to re-write first-boot configuration
      - mount-observe    # required to report mounts on target media
      - network-manager  # required to grab image
      - network-control
      - cifs-mount
      - udisks2          # required for writing to sd card
      - hardware-observe # required to find card with lsblk
      - wayland          # required for theming on wayland
      - gsettings        # required for theming on wayland

parts:
  desktop-qt6:
    source: https://github.com/r41k0u/snapcraft-desktop-helpers.git
    source-subdir: qt
    plugin: make
    make-parameters: ["FLAVOR=qt6"]
    build-packages:
      - build-essential
      - qt6-base-dev
      - dpkg-dev
    stage-packages:
      - dmz-cursor-theme
      - light-themes
      - adwaita-icon-theme
      - gnome-themes-extra
      - shared-mime-info
      - libqt6gui6t64
      - libgtk2.0-0t64
      - libgdk-pixbuf2.0-0
      - libqt6svg6 # for loading icon themes which are svg
      - locales-all
      - xdg-user-dirs
      - fcitx-frontend-qt6
  qt6-gtk-platform:
    plugin: nil
    stage-packages:
      - qt6-gtk-platformtheme
    build-packages:
      - libglib2.0-bin
    override-prime: |
      craftctl default
      glib-compile-schemas "$CRAFT_PRIME"/usr/share/glib-2.0/schemas
      if [ "$CRAFT_ARCH_BUILD_FOR" == "amd64" ]; then
        ARCH="x86_64-linux-gnu"
      elif [ "$CRAFT_ARCH_BUILD_FOR" == "armhf" ]; then
        ARCH="arm-linux-gnueabihf"
      elif [ "$CRAFT_ARCH_BUILD_FOR" == "arm64" ]; then
        ARCH="aarch64-linux-gnu"
      #elif [ "$CRAFT_ARCH_BUILD_FOR" == "ppc64el" ]; then
      #  ARCH="powerpc64le-linux-gnu"
      else
        ARCH="${CRAFT_ARCH_BUILD_FOR}-linux-gnu"
      fi
      mv usr/lib/${ARCH}/libproxy/libpxbackend-1.0.so usr/lib/${ARCH}
      rm -r usr/lib/${ARCH}/libproxy
  imagewriter:
    plugin: cmake
    cmake-parameters:
      - -DENABLE_CHECK_VERSION=OFF
      - -DQt6_ROOT=
    source: https://github.com/raspberrypi/rpi-imager.git
    source-subdir: src
    source-type: git
    override-pull: |
      craftctl default
      # Upstream no longer tag releases; manually set version and checkout
      craftctl set version="1.9.3"
      git fetch
      git checkout ebd2a01c66237ce4a8c4ce3a5cdae6dcc307cc0f
      # Strip out the embedded source
      if [ -d "$CRAFT_PART_SRC"/embedded ]; then
        rm -fr "$CRAFT_PART_SRC"/embedded
      fi
      # Patch the required Qt version
      patch -p1 < "$CRAFT_PROJECT_DIR"/qt-6.4.patch
      # Point the icon to the right place
      sed -i -e \
        's|^Icon=rpi-imager|Icon=/usr/local/share/icons/hicolor/128x128/apps/rpi-imager.png|' \
        "$CRAFT_PART_SRC"/src/linux/org.raspberrypi.rpi-imager.desktop
    stage-packages:
      - util-linux
      - qml6-module-qtquick
      - qml6-module-qtquick-controls
      - qml6-module-qtquick-layouts
      - qml6-module-qtquick-templates
      - qml6-module-qtquick-window
      - qml6-module-qtqml-workerscript
      - dosfstools
      - fdisk
      - libqt6widgets6t64
    build-packages:
      - cmake
      - pkg-config
      - devscripts
      - libgnutls28-dev
      - libdrm-dev
      - qt6-base-dev
      - qt6-base-dev-tools
      - qt6-declarative-dev
      - qt6-tools-dev-tools
      - qt6-tools-dev
      - libqt6svg6-dev

Relevant log output

Bad snapcraft.yaml content:
- field 'build-on' required in 'platforms.amd64' configuration
- field 'build-on' required in 'platforms.arm64' configuration
- field 'build-on' required in 'platforms.armhf' configuration

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions