| FROM ubuntu:jammy as builder |
| |
| # Grab dependencies. |
| RUN apt-get update |
| RUN apt-get dist-upgrade --yes |
| RUN apt-get install --yes \ |
| curl \ |
| jq \ |
| squashfs-tools |
| |
| # Grab the core snap (for backwards compatibility) from the stable channel and |
| # unpack it in the proper place. |
| RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' -H "X-Ubuntu-Architecture: amd64" 'https://api.snapcraft.io/api/v1/snaps/details/core' | jq '.download_url' -r) --output core.snap |
| RUN mkdir -p /snap/core |
| RUN unsquashfs -d /snap/core/current core.snap |
| |
| # Grab the core18 snap (which snapcraft uses as a base) from the stable channel |
| # and unpack it in the proper place. |
| RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' -H "X-Ubuntu-Architecture: amd64" 'https://api.snapcraft.io/api/v1/snaps/details/core18' | jq '.download_url' -r) --output core18.snap |
| RUN mkdir -p /snap/core18 |
| RUN unsquashfs -d /snap/core18/current core18.snap |
| |
| # Grab the core22 snapfrom the stable channel |
| # and unpack it in the proper place. |
| RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' -H "X-Ubuntu-Architecture: amd64" '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 |
| |
| # Grab the snapcraft snap from the targeted channel and unpack it in the proper |
| # place. |
| # RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/snapcraft?channel=stable' | jq '.download_url' -r) --output snapcraft.snap |
| # Current snapcraft snap is broken upstream again: |
| # https://forum.snapcraft.io/t/snapcraft-docker-images-broken-again/27942 |
| # Temporary workaround: pin to an older, non-broken version for now. |
| # TODO: restore to the above once issue is fixed upstream. |
| RUN curl -L https://api.snapcraft.io/api/v1/snaps/download/vMTKRaLjnOJQetI78HjntT37VuoyssFE_6751.snap --output snapcraft.snap |
| RUN mkdir -p /snap/snapcraft |
| RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap |
| |
| # Create a snapcraft runner (TODO: move version detection to the core of |
| # snapcraft). |
| 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)" && echo "export SNAP_VERSION=\"$snap_version\"" >> /snap/bin/snapcraft |
| RUN echo 'exec "$SNAP/usr/bin/python3" "$SNAP/bin/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:jammy |
| COPY --from=builder /snap/core /snap/core |
| COPY --from=builder /snap/core18 /snap/core18 |
| COPY --from=builder /snap/core22 /snap/core22 |
| 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 locales && locale-gen en_US.UTF-8 |
| |
| # 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:$PATH" |
| ENV SNAP="/snap/snapcraft/current" |
| ENV SNAP_NAME="snapcraft" |
| |
| ENV SNAP_ARCH="amd64" |
| |
| ADD scripts/build-package-snap.sh /opt/build-package-snap.sh |
| CMD ["/opt/build-package-snap.sh"] |