From db98945eab67947222fd32eb3dc86e1251306318 Mon Sep 17 00:00:00 2001 From: Jonathan Hope Date: Wed, 3 Jan 2024 19:17:21 -0800 Subject: [PATCH] feat: trying to publish snaps from CI again --- .goreleaser.yaml | 2 +- Dockerfile.snapcraft | 74 ++++++++++++++++++++++++++++++++++++++++++++ tools/snapcraft | 2 +- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 Dockerfile.snapcraft diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 1c1f62b..e8c3aa4 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -224,7 +224,7 @@ snapcrafts: name: armaria title: Armaria icon: ./art/icon-light.svg - # publish: true + publish: true summary: Armaria is a fast, open, and local first bookmarks manager. description: Armaria is a FOSS bookmarks manager that keeps all of your local bookmarks in a SQLite database. You can use many different frontends to manage your bookmarks including browsers, and back them up and/or sync them however you see fit. confinement: strict diff --git a/Dockerfile.snapcraft b/Dockerfile.snapcraft new file mode 100644 index 0000000..f21c72a --- /dev/null +++ b/Dockerfile.snapcraft @@ -0,0 +1,74 @@ +ARG RISK=stable +ARG UBUNTU=bionic + +FROM ubuntu:$UBUNTU as builder +ARG RISK +ARG UBUNTU +RUN echo "Building snapcraft:$RISK in ubuntu:$UBUNTU" + +# 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' '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' '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 core20 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' '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 + +# Grab the snapcraft snap from the $RISK 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='$RISK | 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 (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 | tr -d \')" && 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:$UBUNTU +COPY --from=builder /snap/core /snap/core +COPY --from=builder /snap/core18 /snap/core18 +COPY --from=builder /snap/core20 /snap/core20 +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:/snap/snapcraft/current/usr/bin:$PATH" +ENV SNAP="/snap/snapcraft/current" +ENV SNAP_NAME="snapcraft" +ENV SNAP_ARCH="amd64" diff --git a/tools/snapcraft b/tools/snapcraft index 0ce3129..5720a59 100755 --- a/tools/snapcraft +++ b/tools/snapcraft @@ -1,3 +1,3 @@ #!/usr/bin/env bash -docker run --env SNAPCRAFT_STORE_CREDENTIALS -v $PWD:/build -w /build snapcore/snapcraft:stable snapcraft $@ +docker run --env SNAPCRAFT_STORE_CREDENTIALS -v $PWD:/build -w /build jhope/snapcraft snapcraft $@