diff options
| author | Jan T <jan@jantuomi.fi> | 2026-07-23 19:24:22 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-07-23 19:26:00 +0300 |
| commit | d57b5cd7830a5b4ed1437b1b648dca62a9b6eea3 (patch) | |
| tree | 85c5e69424dd2fe4c07be9dbb1b4267ee1503c3d /www/diddle | |
*/*: initial commit
Diffstat (limited to 'www/diddle')
| -rw-r--r-- | www/diddle/Makefile | 58 | ||||
| -rw-r--r-- | www/diddle/files/diddle.in | 71 | ||||
| -rw-r--r-- | www/diddle/files/pkg-message.in | 31 | ||||
| -rw-r--r-- | www/diddle/pkg-descr | 1 |
4 files changed, 161 insertions, 0 deletions
diff --git a/www/diddle/Makefile b/www/diddle/Makefile new file mode 100644 index 0000000..3b26d1b --- /dev/null +++ b/www/diddle/Makefile @@ -0,0 +1,58 @@ +PORTNAME= diddle +PORTVERSION= 1.0.0 +CATEGORIES= www + +MAINTAINER= jan@jantuomi.fi +COMMENT= Minimalist self-hosted Doodle alternative + +LICENSE= APACHE20 + +USE_GITHUB= yes +GH_ACCOUNT= jantuomi +GH_PROJECT= diddle +GH_TAGNAME= main + +NO_CHECKSUM= yes +NO_ARCH= yes +NO_BUILD= yes + +USES= python:3.11+ +RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Flask>0:www/py-flask@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}Flask-Compress>0:www/py-flask-compress@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}gunicorn>0:www/py-gunicorn@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}python-dotenv>0:www/py-python-dotenv@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}yaml>0:devel/py-pyyaml@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}ua-parser>0:www/py-ua-parser@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}user-agents>0:www/py-user-agents@${PY_FLAVOR} + +SUB_FILES= pkg-message +SUB_LIST= PYTHON_CMD=${PYTHON_CMD} + +USE_RC_SUBR= diddle + +APPDIR= ${PREFIX}/diddle +STAGE_APPDIR= ${STAGEDIR}${APPDIR} + +do-install: + ${MKDIR} ${STAGE_APPDIR}/app + + ${INSTALL_DATA} ${WRKSRC}/app.py ${STAGE_APPDIR}/app/ + ${INSTALL_DATA} ${WRKSRC}/db.py ${STAGE_APPDIR}/app/ + ${INSTALL_DATA} ${WRKSRC}/email_client.py ${STAGE_APPDIR}/app/ + ${INSTALL_DATA} ${WRKSRC}/apply_migrations.py ${STAGE_APPDIR}/app/ + + (cd ${WRKSRC}/migrations && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/migrations) + (cd ${WRKSRC}/static && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/static) + (cd ${WRKSRC}/templates && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/templates) + +post-install: + @(cd ${STAGEDIR}${PREFIX} && \ + ${FIND} diddle -type f -o -type l | \ + ${SORT}) >> ${TMPPLIST} + + @(cd ${STAGEDIR}${PREFIX} && \ + ${FIND} diddle -type d | \ + ${SORT} -r | \ + ${SED} 's|^|@dir |') >> ${TMPPLIST} + +.include <bsd.port.mk> diff --git a/www/diddle/files/diddle.in b/www/diddle/files/diddle.in new file mode 100644 index 0000000..9efc9bf --- /dev/null +++ b/www/diddle/files/diddle.in @@ -0,0 +1,71 @@ +#!/bin/sh + +# PROVIDE: diddle +# REQUIRE: NETWORKING +# KEYWORD: shutdown + +. /etc/rc.subr + +name="diddle" +rcvar="diddle_enable" +pidfile="/var/run/${name}.pid" + +load_rc_config "$name" + +: ${diddle_enable:="NO"} +: ${diddle_env_file:="%%PREFIX%%/etc/diddle.env"} +: ${diddle_bind:="0.0.0.0:8000"} +: ${diddle_workers:="4"} + +start_cmd="${name}_start" +stop_cmd="${name}_stop" +status_cmd="${name}_status" + +diddle_start() +{ + if [ ! -f "${diddle_env_file}" ]; then + echo "${name}: env file ${diddle_env_file} not found" + return 1 + fi + + echo "Starting ${name}..." + + cd %%PREFIX%%/diddle/app || return 1 + + # Run migrations + daemon -f env \ + PYTHONPATH=%%PREFIX%%/diddle/vendor:%%PREFIX%%/diddle/app \ + %%PYTHON_CMD%% %%PREFIX%%/diddle/app/apply_migrations.py + + sleep 1 + + daemon -p "${pidfile}" -o /var/log/diddle.log env \ + PATH=%%PREFIX%%/bin:/usr/local/bin:/usr/bin:/bin \ + PYTHONPATH=%%PREFIX%%/diddle/vendor:%%PREFIX%%/diddle/app \ + ENV_FILE="${diddle_env_file}" \ + %%PREFIX%%/diddle/vendor/bin/gunicorn \ + --bind "${diddle_bind}" \ + -w "${diddle_workers}" \ + app:app +} + +diddle_stop() +{ + if [ -f "${pidfile}" ]; then + echo "Stopping ${name}..." + kill "$(cat "${pidfile}")" 2>/dev/null + rm -f "${pidfile}" + fi +} + +diddle_status() +{ + if [ -f "${pidfile}" ] && kill -0 "$(cat "${pidfile}")" 2>/dev/null; then + echo "${name} is running as pid $(cat "${pidfile}")" + else + echo "${name} is not running" + return 1 + fi +} + +run_rc_command "$1" diff --git a/www/diddle/files/pkg-message.in b/www/diddle/files/pkg-message.in new file mode 100644 index 0000000..c3bac39 --- /dev/null +++ b/www/diddle/files/pkg-message.in @@ -0,0 +1,31 @@ +[ + { + type: install + message: <<EOM +======================================================================== + +Diddle requires an environment file for configuration. + +Create the env file: + + install -m 600 /dev/null %%PREFIX%%/etc/diddle.env + +Then edit it with your settings (DATABASE_URL, SECRET_KEY, etc.): + + ee %%PREFIX%%/etc/diddle.env + +Then enable the service and configure settings: + + sysrc diddle_enable=YES + sysrc diddle_env_file=%%PREFIX%%/etc/diddle.env + sysrc diddle_bind="0.0.0.0:8000" + sysrc diddle_workers=4 + +Start the service: + + service diddle start + +======================================================================== +EOM + } +] diff --git a/www/diddle/pkg-descr b/www/diddle/pkg-descr new file mode 100644 index 0000000..ecd2685 --- /dev/null +++ b/www/diddle/pkg-descr @@ -0,0 +1 @@ +Minimalist scheduling. A mobile friendly, fast, self-hosted Doodle alternative. |
