# This file is based on the examples at the following links: # https://snapcraft.io/docs/build-on-docker # https://github.com/canonical/snapcraft/issues/5079#issuecomment-2414199613 ARG UBUNTU=focal FROM ubuntu:$UBUNTU AS builder ARG UBUNTU RUN echo "Building snapcraft in ubuntu:$UBUNTU" # Grab dependencies RUN apt-get update RUN apt-get dist-upgrade --yes RUN apt-get install --yes \ curl \ jq \ squashfs-tools # Download and unpack the core22 snap RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core22' | jq '.download_url' -r) --output core22.snap RUN mkdir -p /snap/core22 RUN unsquashfs -d /snap/core22/current core22.snap # Download and unpack the core20 snap RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core20' | jq '.download_url' -r) --output core20.snap RUN mkdir -p /snap/core20 RUN unsquashfs -d /snap/core20/current core20.snap # Download and unpack the core24 snap RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core24' | jq '.download_url' -r) --output core24.snap RUN mkdir -p /snap/core24 RUN unsquashfs -d /snap/core24/current core24.snap # Download and unpack snapcraft RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/snapcraft' | jq '.download_url' -r) --output snapcraft.snap RUN mkdir -p /snap/snapcraft RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap # Fix Python3 installation: Make sure we use the interpreter from # the snapcraft snap: RUN unlink /snap/snapcraft/current/usr/bin/python3 RUN ln -s /snap/snapcraft/current/usr/bin/python3.* /snap/snapcraft/current/usr/bin/python3 RUN echo /snap/snapcraft/current/lib/python3.*/site-packages >> /snap/snapcraft/current/usr/lib/python3/dist-packages/site-packages.pth # Create a snapcraft runner RUN mkdir -p /snap/bin RUN echo "#!/bin/sh" > /snap/bin/snapcraft RUN snap_version="$(awk '/^version:/{print $2}' /snap/snapcraft/current/meta/snap.yaml | tr -d \')" && echo "export SNAP_VERSION=\"$snap_version\"" >> /snap/bin/snapcraft RUN echo 'exec "/snap/snapcraft/current/bin/python3" -m snapcraft "$@"' >> /snap/bin/snapcraft RUN chmod +x /snap/bin/snapcraft # Multi-stage build, only need the snaps from the builder. Copy them one at a # time so they can be cached. FROM ubuntu:$UBUNTU COPY --from=builder /snap/core20 /snap/core20 COPY --from=builder /snap/core22 /snap/core22 COPY --from=builder /snap/core24 /snap/core24 COPY --from=builder /snap/snapcraft /snap/snapcraft COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft # Generate locale and install dependencies. RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo apt-transport-https locales wget && locale-gen en_US.UTF-8 # Install CMake 3.21 for Qt 6 ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh RUN /opt/install-cmake.sh # Set the proper environment. ENV LANG="en_US.UTF-8" ENV LANGUAGE="en_US:en" ENV LC_ALL="en_US.UTF-8" ENV PATH="/snap/bin:/snap/snapcraft/current/usr/bin:/snap/snapcraft/current/libexec/snapcraft/:$PATH" ENV SNAP="/snap/snapcraft/current" ENV SNAP_NAME="snapcraft" ENV SNAP_ARCH="amd64" ADD extras/packaging/gnu-linux/scripts/build-package-snap.sh /opt/build-package-snap.sh CMD ["/opt/build-package-snap.sh"]