From 883ad0d1d2145502f220cc962cda4fb30dd79e83 Mon Sep 17 00:00:00 2001 From: Oli Evans Date: Thu, 9 Jul 2020 11:07:14 +0100 Subject: [PATCH] feat: add snap package configuration Simplify keeping the snap package up to date by including the snapcraft.yaml in the repo. We can then wire up the snapstore to autobuild the package for amd64,i386,arm* etc. Many thanks to @elopio for the work of getting ipfs into the snap store in the first place, and to @bertrandfalguiere and @mkg20001 for pushing it forwards. See: https://github.com/ipfs-shipyard/ipfs-snap for more info. Fixes #7250 WIP #3595 License: MIT Signed-off-by: Oli Evans --- .gitignore | 6 ++++++ Dockerfile | 3 ++- snap/snapcraft.yaml | 46 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 snap/snapcraft.yaml diff --git a/.gitignore b/.gitignore index 90109ade4..cb147456b 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,9 @@ vendor go-ipfs-source.tar.gz docs/examples/go-ipfs-as-a-library/example-folder/Qm* /test/sharness/t0054-dag-car-import-export-data/*.car + +# ignore build output from snapcraft +/ipfs_*.snap +/parts +/stage +/prime diff --git a/Dockerfile b/Dockerfile index ea28fbf8c..7e10ea753 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM golang:1.14.4-buster +# Note: when updating the go minor version here, also update the go-channel in snap/snapcraft.yml +FROM golang:1.14.4-buster LABEL maintainer="Steven Allen " # Install deps diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 000000000..c0ff8d2c3 --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,46 @@ +# This snap will build go-ipfs from source. +# See: https://github.com/ipfs-shipyard/ipfs-snap for more details +name: ipfs +summary: global, versioned, peer-to-peer filesystem # 79 char long summary +description: | + IPFS combines good ideas from Git, BitTorrent, Kademlia, SFS, and the Web. + It is like a single bittorrent swarm, exchanging git objects. IPFS provides + an interface as simple as the HTTP web, but with permanence built in. You + can also mount the world at /ipfs. + +# fetch the version number in the `ipfs` part rather than hardcode it here +# see: https://snapcraft.io/docs/using-external-metadata#heading--scriptlet +adopt-info: ipfs +base: core18 +grade: stable +confinement: strict + +apps: + ipfs: + command: ipfs + plugs: [network, network-bind, removable-media] + environment: + # Snaps versions are isolated by default. This keeps the same ipfs repo across upgrades. + IPFS_PATH: "$SNAP_USER_COMMON" + +parts: + ipfs: + source: '.' + # TODO: set this to master when porting this file to ipfs/go-ipfs. + # Setting it explicitly lets us build the missing versions 0.5 and 0.6 + source-tag: master + plugin: go + # keep me up to date with the go version that go-ipfs expects to be built with. + go-channel: 1.14/stable + go-importpath: github.com/ipfs/go-ipfs + build-packages: + - build-essential + + # use `make` to build and set the snap version from `ipfs version` output + override-build: | + export GOPATH=$SNAPCRAFT_PART_BUILD/go + make install + cp $SNAPCRAFT_PART_BUILD/go/bin/ipfs $SNAPCRAFT_PART_INSTALL + export IPFS_VERSION=$($SNAPCRAFT_PART_BUILD/go/bin/ipfs version --commit | cut -c 14-) + echo "found version $IPFS_VERSION" + snapcraftctl set-version $IPFS_VERSION