Merge branch 'kubiko-devel' into devel

Add snapcraft build support from source. Thanks to kubiko !

This can be used together with launchpad build system for
continuous integration. Intention is to push snaps build from
devel branch to edge channel, which can be installed by calling:

$ snap install -edge wekan

device will keep automatically updating to revisions as they
are released to edge channel.
This commit is contained in:
Lauri Ojansivu 2017-06-27 17:19:04 +03:00
commit 0fe247070a
12 changed files with 391 additions and 2 deletions

4
.gitignore vendored
View file

@ -9,3 +9,7 @@ node_modules/
packages/kadira-flow-router/
packages/meteor-useraccounts-core/
package-lock.json
**/parts/
**/stage
**/prime
**/*.snap

View file

@ -1,11 +1,15 @@
# Upcoming Wekan release
This release fixes the following bugs:
This release adds the following new features:
* [Snapcraft build support from source](https://github.com/wekan/wekan/pull/1091).
and fixes the following bugs:
* [Fix incorrect attachment link with subfolder in the url](https://github.com/wekan/wekan/pull/1086);
* [Fix link to card](https://github.com/wekan/wekan/pull/1087).
Thanks to GitHub user nztqa for contributions.
Thanks to GitHub users kubiko and nztqa for their contributions.
# v0.26 2017-06-26 Wekan release

44
snap-src/config Executable file
View file

@ -0,0 +1,44 @@
#!/bin/sh
# store here all configuration options for wekan snap
# read configured settings first
SETTINGS_FILE="$SNAP_COMMON/wekan_settings.sh"
[ -f $SETTINGS_FILE ] && . $SETTINGS_FILE
# list of supported keys
keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB"
# default values
DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\
"\t\t\t Default behaviour will preffer binding over unix socket, to disable unix socket binding set value to 'nill' string\n"\
"\t\t\t To bind to instance of mongo provided through contect interface set to relative path to the socket inside shared directory"
DEFAULT_MONGODB_BIND_UNIX_SOCKET="$SNAP_DATA/share"
KEY_MONGODB_BIND_UNIX_SOCKET="mongodb-bind-unix-socket"
DESCRIPTION_MONGODB_PORT="mongodb binding port: eg 27017 when using localhost"
DEFAULT_MONGODB_PORT="27019"
KEY_MONGODB_PORT='mongodb-port'
DESCRIPTION_MONGODB_BIND_IP="mongodb binding ip address: eg 127.0.0.1 for localhost\n\t\tIf not defined default unix socket is used instead"
DEFAULT_MONGODB_BIND_IP=""
KEY_MONGODB_BIND_IP="mongodb-bind-ip"
DESCRIPTION_MAIL_URL="wekan mail binding"
DEFAULT_MAIL_URL="smtp://user:pass@mailserver.examples.com:25/"
KEY_MAIL_URL="mail-url"
DESCRIPTION_MAIL_FROM="wekan's admin mail from name email address"
DEFAULT_MAIL_FROM="wekan-admin@example.com"
KEY_MAIL_FROM="mail-from"
DESCRIPTION_ROOT_URL="wekan's root url, eg http://127.0.0.1, https://example.com, https://wekan.example.com, http://example.com/wekan"
DEFAULT_ROOT_URL="http://127.0.0.1"
KEY_ROOT_URL="root-url"
DESCRIPTION_PORT="port wekan is exposed at"
DEFAULT_PORT="8080"
KEY_PORT="port"
DESCRIPTION_DISABLE_MONGODB="Disable mongodb service: use only if binding to database outside of the snap. Valid values: [true,false]"
DEFAULT_DISABLE_MONGODB="false"
KEY_DISABLE_MONGODB="disable-mongodb"

23
snap-src/mongodb-backup Executable file
View file

@ -0,0 +1,23 @@
#!/bin/bash
# get wekan/mongo settings
source $SNAP/bin/wekan-read-settings
# make sure we have set minimum env variables for locale
if [ -z "$LANG" ]; then
export LANG=en_US.UTF-8
fi
export LC_ALL=C
if [ -z $1 ]; then
DATE=`/bin/date +%Y%m%dT%H%M%S`
mkdir -p $SNAP_COMMON/db-backups/
ARCHIVE=$SNAP_COMMON/db-backups/wekan-$DATE.backup
else
ARCHIVE=$1
fi
# start mongodb backup
[ "x" == "x${MONGODB_BIND_IP}" ] && MONGODB_BIND_IP="127.0.0.1"
echo "using bind ip"
mongodump --host $MONGODB_BIND_IP --port $MONGODB_PORT -d wekan --gzip --archive=${ARCHIVE}

31
snap-src/mongodb-control Executable file
View file

@ -0,0 +1,31 @@
#!/bin/bash
# get wekan/mongo settings
source $SNAP/bin/wekan-read-settings
if [ "true" == "${DISABLE_MONGODB}" ]; then
echo "mongodb is disabled. Not starting it"
exit 0
fi
# make sure we have set minimum env variables for locale
if [ -z "$LANG" ]; then
export LANG=en_US.UTF-8
fi
export LC_ALL=C
# start mongo deamon
BIND_OPTIONS=""
if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x${MONGODB_BIND_UNIX_SOCKET}" ]; then
BIND_OPTIONS+=" --unixSocketPrefix $MONGODB_BIND_UNIX_SOCKET"
fi
if [ "x" != "x${MONGODB_BIND_IP}" ]; then
BIND_OPTIONS+=" --bind_ip $MONGODB_BIND_IP"
fi
if [ "x" != "x${MONGODB_PORT}" ]; then
BIND_OPTIONS+=" --port $MONGODB_PORT"
fi
echo "mongodb bind options: $BIND_OPTIONS"
mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS

16
snap-src/mongodb-restore Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
# get wekan/mongo settings
source $SNAP/bin/wekan-read-settings
# make sure we have set minimum env variables for locale
if [ -z "$LANG" ]; then
export LANG=en_US.UTF-8
fi
export LC_ALL=C
# start mongodb backup
[ "x" == "x${MONGODB_BIND_IP}" ] && MONGODB_BIND_IP="127.0.0.1"
echo "using bind ip"
mongorestore --host $MONGODB_BIND_IP --port $MONGODB_PORT -d wekan --gzip --archive=$1

26
snap-src/wekan-control Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
SYSTEMD_WEKAN_SERVICE="snap.${SNAP_NAME}.wekan"
SYSTEMD_MONGODB_SERVICE="snap.${SNAP_NAME}.mongodb"
# get wekan/mongo settings
source $SNAP/bin/wekan-read-settings
export NODE_PATH=$SNAP/bin
# if possible we prefer to bind over unix socket
if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x$MONGODB_BIND_UNIX_SOCKET" ]; then
if [ -d $MONGODB_BIND_UNIX_SOCKET ]; then
export MONGO_URL="mongodb://$MONGODB_BIND_UNIX_SOCKET/mongodb-${MONGODB_PORT}.sock/wekan"
else
export MONGO_URL="mongodb://$SNAP_DATA/shared/$MONGODB_BIND_UNIX_SOCKET/wekan"
fi
else
[ "x" == "x$MONGODB_BIND_IP" ] && MONGODB_BIND_IP="127.0.0.1"
export MONGO_URL="mongodb://$MONGODB_BIND_IP:$MONGODB_PORT/wekan"
fi
echo -e "MONGO_URL=$MONGO_URL"
APPLICATION_DIRECTORY=$SNAP
APPLICATION_START=main.js
cd $APPLICATION_DIRECTORY
$NODE_PATH/node $APPLICATION_START

48
snap-src/wekan-help Executable file
View file

@ -0,0 +1,48 @@
#!/bin/bash
source $SNAP/bin/config &>/dev/null
echo -e "Wekan: The open-source Trello-like kanban.\n"
echo -e "Make sure you have connected all interfaces, check more by calling $ snap interfaces"
echo -e "\n"
echo -e "${SNAP_NAME} has two services, to check status/restart/stop use systemd commands"
echo -e "mongodb service:"
echo -e "\t$ sudo systemctl status/start/stop/restart snap.$SNAP_NAME.mongodb"
echo -e "wekan service"
echo -e "\t$ sudo systemctl status/start/stop/restart snap.$SNAP_NAME.wekan"
echo -e "\n"
echo -e "To make backup of wekan's database use: $ ${SNAP_NAME}.database-backup [backup file]"
echo -e "\t backup file is optional parameter, if not passed backup is created in directory:"
echo -e "\t\t${SNAP_COMMON}/db-backups"
echo -e "To list existing backups in default directory: $ ${SNAP_NAME}.database-list-backups"
echo -e "To restore wekan's database use: ${SNAP_NAME}.database-restore <path to backup>"
echo -e "\n"
echo -e "wekan can be configured to share mongodb with other services using content interface"
echo -e "\t-sharing mongodb from $SNAP_NAME to other snap(s):"
echo -e "\t\t-connect mongodb-slot with plug from corresponding snap(s)"
echo -e "\t\t-configure corresponding service to use mongodb unix socket in shared directory, socket file name is: mongodb-$MONGODB_PORT.sock"
echo -e "\t-sharing mongodb from other snap to $SNAP_NAME:"
echo -e "\t\t-connect mongodb-plug with slot from snap providing mongodb"
echo -e "\t\t-disable mongodb in $SNAP_NAME by calling: $ snap set $SNAP_NAME set disable-mongodb='true'"
echo -e "\t\t-set mongodb-bind-unix-socket to point to serving mongodb. Use relative path inside shared directory, e.g run/mongodb-27017.sock"
echo -e "\n"
# parse config file for supported settings keys
echo -e "wekan supports settings keys"
echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'"
echo -e "list of supported keys:"
for key in ${keys[@]}
do
default_value="DEFAULT_$key"
description="DESCRIPTION_$key"
snappy_key="KEY_$key"
echo -e "\t${!snappy_key}: ${!description}"
if [ "x" == "x${!key}" ]; then
echo -e "\t\tNo value set, using default value: '${!default_value}'"
else
echo -e "\t\tCurrent value set to: '${!key}', (default value: '${!default_value}')"
fi
done
echo -e "\nFor changes to take effect restart wekan service,"
echo -e "if mongodb key was change also restart mongodb service, before restarting wekan"
echo -e "to restart mongodb: $ sudo systemctl restart snap.$SNAP_NAME.mongodb"
echo -e "to restart wekan: $ sudo systemctl restart snap.$SNAP_NAME.wekan"

36
snap-src/wekan-read-settings Executable file
View file

@ -0,0 +1,36 @@
#!/bin/sh
# read wekan config
source $SNAP/bin/config
# TODO: uncomment following, once snapctl can be called from outside the hooks
# for key in ${keys[@]}
# do
# # snappy is picky about key syntax, using mapping
# MAP_KEY="KEY_$key"
# SNAPPY_KEY=
# if value=$(snapctl get ${!MAP_KEY}); then
# echo "$key='$value'"
# export $key=$value
# else
# # use default value
# default_value="DEFAULT_$key"
# echo "using default value: $key='${!default_value}'"
# export $key=${!default_value}
# fi
# done
# TODO: get rid of this workaround once above can be used
# loop through all values, and if not defined, use default value
for key in ${keys[@]}
do
if [ "x" == "x${!key}" ]; then
# use default value
default_value="DEFAULT_$key"
echo "using default value: $key='${!default_value}'"
export $key=${!default_value}
# echo "export $key='${!def_value}'" >> $SETTINGS_FILE
else
echo "$key='${!key}'"
fi
done

BIN
snap/gui/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

32
snap/hooks/configure vendored Executable file
View file

@ -0,0 +1,32 @@
#!/bin/bash
# read wekan config
. $SNAP/bin/config
# create run dir, we're going to use it for unix socket
mkdir -p $SNAP_DATA/share
mkdir -p $SNAP_DATA/shared
# settings were altered by user, safest way to get them applied is to restart service
# TODO: remove this workaround once it's not needed
# for the moment we can't read settings outside of the hook,
# so store all settings in helpper script which is then picked by main wrapper
echo -e "#!/bin/sh\n" > $SETTINGS_FILE
for key in ${keys[@]}
do
# snappy is picky about key syntax, using mapping
MAP_KEY="KEY_$key"
if value=$(snapctl get ${!MAP_KEY}); then
echo "export $key='$value'" >> $SETTINGS_FILE
elif [ -d "${!key}" ]; then
# store back value from SETTINGS_FILE
echo "export $key='${!key}'" >> $SETTINGS_FILE
fi
done
# set file executable
chmod 755 $SETTINGS_FILE
# we can't use snapctl to restart service, may be one day ....
echo "Setting has been updated, restart service."

125
snapcraft.yaml Normal file
View file

@ -0,0 +1,125 @@
name: wekan
version: "0.26-SNAPSHOT"
summary: The open-source Trello-like kanban
description: |
Wekan is an open-source and collaborative kanban board application.
Whether youre maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
For full list of configuration options call:
$ wekan.help
confinement: strict
grade: stable
architectures:
- amd64
plugs:
mongodb-plug:
interface: content
target: $SNAP_DATA/shared
slots:
mongodb-slot:
interface: content
write:
- $SNAP_DATA/share
apps:
wekan:
command: wekan-control
daemon: simple
plugs: [network, network-bind]
mongodb:
command: mongodb-control
daemon: simple
plugs: [network, network-bind]
help:
command: wekan-help
database-backup:
command: mongodb-backup
plugs: [network, network-bind]
database-list-backups:
command: ls -ald $SNAP_COMMON/db-backups/*
database-restore:
command: mongodb-restore
plugs: [network, network-bind]
parts:
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.14.tgz
plugin: dump
stage-packages: [libssl1.0.0]
filesets:
mongo:
- usr
- bin
- lib
stage:
- $mongo
prime:
- $mongo
wekan:
source: .
plugin: nodejs
node-engine: 4.8.1
node-packages:
- npm@4.6.1
- node-gyp
- node-pre-gyp
- fibers@1.0.15
build-packages:
- python
- g++
- capnproto
- nodejs
- nodejs-legacy
- curl
prepare: |
echo "Cleaning environment first"
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
echo "installing meteor first"
curl https://install.meteor.com/ -o install_meteor.sh
sed -i "s|RELEASE=.*|RELEASE=\"1.4.4.1\"|g" install_meteor.sh
chmod +x install_meteor.sh
sh install_meteor.sh
rm install_meteor.sh
mkdir -p packages
git clone https://github.com/wekan/flow-router.git packages/kadira-flow-router
git clone https://github.com/meteor-useraccounts/core.git packages/meteor-useraccounts-core
build: |
rm -rf package-lock.json .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
meteor build .build --directory --allow-superuser
cp fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
sed -i "s|build\/Release\/bson|browser_build\/bson|g" .build/bundle/programs/server/npm/node_modules/meteor/cfs_gridfs/node_modules/mongodb/node_modules/bson/ext/index.js
cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
rm -rf node_modules/bcrypt
npm install bcrypt
cd ../../../../
npm install
install: |
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
organize:
README: README.wekan
helpers:
source: snap-src
plugin: dump
organize:
wekan-control: bin/wekan-control
mongodb-control: bin/mongodb-control
wekan-read-settings: bin/wekan-read-settings
wekan-help: bin/wekan-help
mongodb-backup: bin/mongodb-backup
mongodb-restore: bin/mongodb-restore
config: bin/config