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:
parent
309e1200d0
commit
b5eecbf2e7
48
snap/hooks/configure
vendored
Normal file
48
snap/hooks/configure
vendored
Normal 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
3
snap/hooks/install
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
openssl rand -base64 32 > ${SNAP_COMMON}/rocket-secret-key
|
11
snap/hooks/post-refresh
Normal file
11
snap/hooks/post-refresh
Normal 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
29
snap/local/set-environment
Executable 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
50
snap/snapcraft.yaml
Normal 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
|
Loading…
Reference in New Issue
Block a user