Add Snapcraft metadata and install/maintenance hooks (#666)

* Add Snapcraft metadata and install/maintenance hooks

* Move set-environment script into snap/local

* snap: Remove diesel-cli part.

This *was* necessary as of 0.3.0, but now `plm migrations run` does the job.

* snap: Add an actual description

* snap: Add an 'enabled' config item.

Don't try to run until enabled is set, and automatically run the
migrations when we are enabled
This commit is contained in:
Christopher James Halse Rogers 2019-09-16 12:33:25 +02:00 committed by Igor Galić
parent 309e1200d0
commit b5eecbf2e7
5 changed files with 141 additions and 0 deletions

48
snap/hooks/configure vendored Normal file
View file

@ -0,0 +1,48 @@
#!/bin/sh
db_type="$(snapctl get db.type)"
db_url="$(snapctl get db.url)"
if [ "${db_type}" = "sqlite" ]
then
if [ -n "${db_url}" ]
then
echo "sqlite backend does not use db.url key"
exit 1
fi
elif [ "${db_type}" = "postgres" ]
then
if [ -z "${db_url}" ]
then
echo "postgres backend requires db.url to be set"
exit 1
fi
elif [ -n "${db_type}" ]
then
echo "Invalid db.type: " ${db_type}
exit 1
fi
base_url="$(snapctl get base-url)"
enabled="$(snapctl get enabled)"
if [ -n ${enabled} -a \( "${enabled}" != "true" -a "${enabled}" != "false" \) ]
then
echo "Invalid 'enabled' setting: ${enabled}. Valid values are 'true' or 'false'"
exit 1
fi
if [ -n ${base_url} -a \( -z "${enabled}" -o "${enabled}" = "false" \) ]
then
echo "All required configuration available."
echo "Plume can now be enabled by setting 'snap set plume enabled=true' and restarting the service \
with 'snap restart plume'"
fi
if [ "${enabled}" = "true" -a ! -e ${SNAP_COMMON}/initial-migrations-run ]
then
cd ${SNAP}
exec ./set-environment bin/plm migration run --path ${SNAP_DATA}
touch ${SNAP_COMMON}/initial-migrations-run
fi
exit 0

3
snap/hooks/install Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
openssl rand -base64 32 > ${SNAP_COMMON}/rocket-secret-key

11
snap/hooks/post-refresh Normal file
View file

@ -0,0 +1,11 @@
#!/bin/sh
db_type=$(snapctl get db.type)
if [ -z "${db_type}" ]
then
exit 0
fi
cd ${SNAP}
exec ./set-environment bin/plm migration run --path ${SNAP_DATA}

29
snap/local/set-environment Executable file
View file

@ -0,0 +1,29 @@
#!/bin/sh
enabled="$(snapctl get enabled)"
if [ -z "${enabled}" -o "${enabled}" != "true" ]
then
echo "Plume not yet enabled"
exit 1
fi
export BASE_URL="$(snapctl get base-url)"
database_type="$(snapctl get db.type)"
if [ z"${database_type}" = z"sqlite" ]
then
export DATABASE_URL=${SNAP_DATA}/plume.db
export MIGRATION_DIR=migrations/sqlite
else
# Must be postgres, so must have set db.url
export DATABASE_URL="$(snapctl get db.url)"
export MIGRATION_DIRECTORY=migrations/postgres
fi
ROCKET_ADDRESS="$(snapctl get listen.address)"
ROCKET_PORT="$(snapctl get listen.port)"
export ROCKET_SECRET_KEY="$(cat ${SNAP_COMMON}/rocket-secret-key)"
export SEARCH_INDEX="${SNAP_DATA}/search_index"
cd ${SNAP}
exec $@

50
snap/snapcraft.yaml Normal file
View file

@ -0,0 +1,50 @@
name: plume
base: core18
version: '0.3.0' # just for humans, typically '1.2+git' or '1.3.2'
summary: Multi-user blogging platform, federated over ActivityPub
description: |
Plume is a federated blogging platform, featuring:
* A blog-centric approach: you can create as much blogs as you want with your account, to keep your different publications separated.
* Media management: you can upload pictures to illustrate your articles, but also audio files if you host a podcast, and manage them all from Plume.
* Federation: Plume is part of a network of interconnected websites called the Fediverse. Each of these websites (often called instances) have their own rules and thematics, but they can all communicate with each other.
* Collaborative writing: invite other people to your blogs, and write articles together.
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict
apps:
plume:
daemon: simple
command: set-environment bin/plume
plugs:
- network
- network-bind
plm:
command: set-environment bin/plm
parts:
plume:
plugin: rust
source: .
rust-revision: nightly-2019-03-23
build-packages:
- libssl-dev
- pkg-config
- libsqlite3-dev
- gettext
after:
- cargo-web
override-build: |
export PATH=$PATH:$SNAPCRAFT_PROJECT_DIR/../.cargo/bin
cargo web deploy -p plume-front --release
cargo install --force --no-default-features --features sqlite --path . --root ${SNAPCRAFT_PART_INSTALL}
cargo install --force --no-default-features --features sqlite --path plume-cli --root ${SNAPCRAFT_PART_INSTALL}
cp -a assets migrations static target translations ${SNAPCRAFT_PART_INSTALL}
cp snap/local/set-environment ${SNAPCRAFT_PART_INSTALL}
stage-packages:
- openssl
- libsqlite3-0
cargo-web:
plugin: rust
source: https://github.com/koute/cargo-web.git
source-tag: 0.6.26