mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Adding snapcraft build support from source
Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>
This commit is contained in:
parent
60495e4765
commit
a538c14976
11 changed files with 385 additions and 0 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -9,3 +9,7 @@ node_modules/
|
||||||
packages/kadira-flow-router/
|
packages/kadira-flow-router/
|
||||||
packages/meteor-useraccounts-core/
|
packages/meteor-useraccounts-core/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
**/parts/
|
||||||
|
**/stage
|
||||||
|
**/prime
|
||||||
|
**/*.snap
|
||||||
|
|
|
||||||
44
snap-src/config
Executable file
44
snap-src/config
Executable 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
23
snap-src/mongodb-backup
Executable 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
31
snap-src/mongodb-control
Executable 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
16
snap-src/mongodb-restore
Executable 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
26
snap-src/wekan-control
Executable 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
48
snap-src/wekan-help
Executable 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
36
snap-src/wekan-read-settings
Executable 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
BIN
snap/gui/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
32
snap/hooks/configure
vendored
Executable file
32
snap/hooks/configure
vendored
Executable 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
125
snapcraft.yaml
Normal 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 you’re 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue