diff --git a/GIDs b/GIDs index 676af70a80a4..c3880bd44564 100644 --- a/GIDs +++ b/GIDs @@ -731,7 +731,7 @@ stirlingpdf:*:785: # free: 787 # free: 788 # free: 789 -# free: 790 +healthchecks:*:790: # free: 791 # free: 792 # free: 793 diff --git a/UIDs b/UIDs index ba84ebfec8c4..800f52f25482 100644 --- a/UIDs +++ b/UIDs @@ -737,7 +737,7 @@ stirlingpdf:*:785:785::0:0:Stirling PDF Daemon:/usr/local/stirlingpdf:/usr/sbin/ # free: 787 # free: 788 # free: 789 -# free: 790 +healthchecks:*:790:790::0:0:Open-source cron and background task monitoring service:/var/db/healthchecks:/usr/sbin/nologin # free: 791 # free: 792 # free: 793 diff --git a/sysutils/Makefile b/sysutils/Makefile index bfe64a59ea3e..f31ade8c88cf 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -1033,6 +1033,7 @@ SUBDIR += py-google-compute-engine SUBDIR += py-hared SUBDIR += py-hcloud + SUBDIR += py-healthchecks SUBDIR += py-honcho SUBDIR += py-howdoi SUBDIR += py-hpilo diff --git a/sysutils/py-healthchecks/Makefile b/sysutils/py-healthchecks/Makefile new file mode 100644 index 000000000000..04f881daa09c --- /dev/null +++ b/sysutils/py-healthchecks/Makefile @@ -0,0 +1,100 @@ +PORTNAME= healthchecks +DISTVERSIONPREFIX= v +DISTVERSION= 3.10 +CATEGORIES= sysutils python +PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} + +MAINTAINER= dtxdf@FreeBSD.org +COMMENT= Open-source cron job and background task monitoring service +WWW= https://github.com/healthchecks/${PORTNAME} + +LICENSE= BSD3CLAUSE +LICENSE_FILE= ${WRKSRC}/LICENSE + +BUILD_DEPENDS= ${ALL_DEPENDS} +RUN_DEPENDS= ${ALL_DEPENDS} + +USES= python shebangfix +USE_GITHUB= yes + +SHEBANG_FILES= ${WRKSRC}/manage.py + +NO_ARCH= yes +SUB_FILES= hcks pkg-message uwsgi.ini +SUB_LIST= HOMEDIR=${HEALTHCHECKS_HOMEDIR} + +USERS= ${HEALTHCHECKS_USER} +GROUPS= ${HEALTHCHECKS_GROUP} + +PLIST_SUB= GROUP=${GROUPS:[1]} \ + HOMEDIR=${HEALTHCHECKS_HOMEDIR} \ + USER=${USERS:[1]} +PORTDOCS= README.md + +OPTIONS_DEFINE= APPRISE DOCS MINIO +OPTIONS_DEFAULT= APPRISE MINIO + +APPRISE_DESC= Enable support for Apprise integration +MINIO_DESC= Enable support for external object storage + +APPRISE_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}apprise>=0:net-im/py-apprise@${PY_FLAVOR} +MINIO_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}minio>=0:devel/py-minio@${PY_FLAVOR} + +HEALTHCHECKS_USER= ${PORTNAME} +HEALTHCHECKS_GROUP= ${HEALTHCHECKS_USER} + +HEALTHCHECKS_HOMEDIR= /var/db/${PORTNAME} + +ALL_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiosmtpd>=0:mail/py-aiosmtpd@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}cronsim>=0:devel/py-cronsim@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}django52>=0:www/py-django52@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}django_compressor>=0:www/py-django_compressor@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj52-django-stubs-ext>0:www/py-dj52-django-stubs-ext@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}fido2>0:security/py-fido2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}oncalendar>=0:devel/py-oncalendar@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}psycopg>=0:databases/py-psycopg@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pycurl>=0:ftp/py-pycurl@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pydantic2>=0:devel/py-pydantic2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyjwt>=0:www/py-pyjwt@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyotp>=0:security/py-pyotp@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}segno>=0:textproc/py-segno@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}statsd>=0:devel/py-statsd@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}whitenoise>=0:www/py-whitenoise@${PY_FLAVOR} + +do-build: + @${PYTHON_CMD} -O ${PYTHON_LIBDIR}/compileall.py \ + -d ${PYTHONPREFIX_SITELIBDIR} \ + -f ${WRKSRC}/hc + @${SETENV} \ + ${PYTHON_CMD} ${WRKSRC}/manage.py compress --force + @${SETENV} \ + ${PYTHON_CMD} ${WRKSRC}/manage.py collectstatic --no-input + +do-install: + @${MKDIR} ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + @cd ${WRKSRC} && \ + ${COPYTREE_SHARE} ./hc ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + @cd ${WRKSRC} && \ + ${COPYTREE_SHARE} ./static ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + @cd ${WRKSRC} && \ + ${COPYTREE_SHARE} ./static-collected ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + @cd ${WRKSRC} && \ + ${COPYTREE_SHARE} ./templates ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + ${INSTALL_SCRIPT} ${WRKSRC}/manage.py ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + ${INSTALL_DATA} ${WRKSRC}/search.db ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + ${INSTALL_DATA} ${WRKSRC}/CHANGELOG.md ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_DATA} ${WRKDIR}/uwsgi.ini ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_SCRIPT} ${WRKDIR}/hcks ${STAGEDIR}${LOCALBASE}/bin/hcks + +post-install: +.for dir in run log + @${MKDIR} ${STAGEDIR}/var/${dir}/${PORTNAME} +.endfor + @${MKDIR} ${STAGEDIR}${HEALTHCHECKS_HOMEDIR} + +post-install-DOCS-on: + @${MKDIR} ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/README.md ${STAGEDIR}/${DOCSDIR} + +.include diff --git a/sysutils/py-healthchecks/distinfo b/sysutils/py-healthchecks/distinfo new file mode 100644 index 000000000000..ab854ba59b73 --- /dev/null +++ b/sysutils/py-healthchecks/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1749595062 +SHA256 (healthchecks-healthchecks-v3.10_GH0.tar.gz) = 81fcc6577771ba966e45e35976f084419e1637b3f595e42d91556054a7a1b6d6 +SIZE (healthchecks-healthchecks-v3.10_GH0.tar.gz) = 4868195 diff --git a/sysutils/py-healthchecks/files/hcks.in b/sysutils/py-healthchecks/files/hcks.in new file mode 100644 index 000000000000..bad9800f4b1b --- /dev/null +++ b/sysutils/py-healthchecks/files/hcks.in @@ -0,0 +1,12 @@ +#!/bin/sh + +args= +for arg in "$@" ; do + if [ "${arg#* }" != "${arg}" ] ; then + args="${args} '${arg}'" + else + args="${args} ${arg}" + fi +done + +su -m healthchecks -c "%%HOMEDIR%%/manage.py ${args}" diff --git a/sysutils/py-healthchecks/files/patch-hc_lib_webauthn.py b/sysutils/py-healthchecks/files/patch-hc_lib_webauthn.py new file mode 100644 index 000000000000..24494bdf19db --- /dev/null +++ b/sysutils/py-healthchecks/files/patch-hc_lib_webauthn.py @@ -0,0 +1,11 @@ +--- hc/lib/webauthn.py.orig 2025-06-11 05:51:38 UTC ++++ hc/lib/webauthn.py +@@ -14,8 +14,6 @@ from fido2.webauthn import ( + UserVerificationRequirement, + ) + +-fido2.features.webauthn_json_mapping.enabled = True +- + + class CreateHelper: + def __init__(self, rp_id: str, credentials: Iterable[bytes]): diff --git a/sysutils/py-healthchecks/files/pkg-message.in b/sysutils/py-healthchecks/files/pkg-message.in new file mode 100644 index 000000000000..62bf96d135ad --- /dev/null +++ b/sysutils/py-healthchecks/files/pkg-message.in @@ -0,0 +1,22 @@ +[ +{ type: install + message: <