PORTNAME=	remark42
DISTVERSIONPREFIX=	v
DISTVERSION=	1.18.0
CATEGORIES=	www
MASTER_SITES=	LOCAL/delphij:prefetch

MAINTAINER=	delphij@FreeBSD.org
COMMENT=	Privacy-focused lightweight commenting engine
WWW=		https://remark42.com/

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/LICENSE

USES=		cpe go:1.27+,modules nodejs:env npm:pnpm,build tar:xz
USE_GITHUB=	yes
GH_ACCOUNT=	umputun
GH_TUPLE=	Depado:bfchroma:v2.0.0:depado_bfchroma_v2/vendor/github.com/Depado/bfchroma/v2 \
		PuerkitoBio:goquery:v1.13.0:puerkitobio_goquery/vendor/github.com/PuerkitoBio/goquery \
		alecthomas:chroma:v2.27.0:alecthomas_chroma_v2/vendor/github.com/alecthomas/chroma/v2 \
		andybalholm:cascadia:v1.3.4:andybalholm_cascadia/vendor/github.com/andybalholm/cascadia \
		aymerick:douceur:v0.2.0:aymerick_douceur/vendor/github.com/aymerick/douceur \
		cespare:xxhash:v2.3.0:cespare_xxhash_v2/vendor/github.com/cespare/xxhash/v2 \
		dghubble:oauth1:v0.7.3:dghubble_oauth1/vendor/github.com/dghubble/oauth1 \
		didip:tollbooth:v8.0.1:didip_tollbooth_v8/vendor/github.com/didip/tollbooth/v8 \
		dlclark:regexp2:v2.7.1:dlclark_regexp2_v2/vendor/github.com/dlclark/regexp2/v2 \
		etcd-io:bbolt:v1.5.0:etcd_io_bbolt/vendor/go.etcd.io/bbolt \
		go-oauth2:oauth2:v4.5.4:go_oauth2_oauth2_v4/vendor/github.com/go-oauth2/oauth2/v4 \
		go-pkgz:auth:v2.3.1:go_pkgz_auth_v2/vendor/github.com/go-pkgz/auth \
		go-pkgz:email:v0.8.0:go_pkgz_email/vendor/github.com/go-pkgz/email \
		go-pkgz:expirable-cache:v3.1.1:go_pkgz_expirable_cache_v3/vendor/github.com/go-pkgz/expirable-cache \
		go-pkgz:jrpc:v0.4.2:go_pkgz_jrpc/vendor/github.com/go-pkgz/jrpc \
		go-pkgz:lcw:v2.1.0:go_pkgz_lcw_v2/vendor/github.com/go-pkgz/lcw \
		go-pkgz:lgr:v0.12.4:go_pkgz_lgr/vendor/github.com/go-pkgz/lgr \
		go-pkgz:notify:v1.5.0:go_pkgz_notify/vendor/github.com/go-pkgz/notify \
		go-pkgz:repeater:v2.2.0:go_pkgz_repeater_v2/vendor/github.com/go-pkgz/repeater/v2 \
		go-pkgz:rest:v1.24.0:go_pkgz_rest/vendor/github.com/go-pkgz/rest \
		go-pkgz:routegroup:v1.6.1:go_pkgz_routegroup/vendor/github.com/go-pkgz/routegroup \
		go-pkgz:syncs:v1.3.3:go_pkgz_syncs/vendor/github.com/go-pkgz/syncs \
		golang-jwt:jwt:v5.3.1:golang_jwt_jwt_v5/vendor/github.com/golang-jwt/jwt/v5 \
		golang:crypto:v0.56.0:golang_crypto/vendor/golang.org/x/crypto \
		golang:image:v0.45.0:golang_image/vendor/golang.org/x/image \
		golang:net:v0.58.0:golang_net/vendor/golang.org/x/net \
		golang:oauth2:v0.36.0:golang_oauth2/vendor/golang.org/x/oauth2 \
		golang:snappy:v1.0.0:golang_snappy/vendor/github.com/golang/snappy \
		golang:sync:v0.22.0:golang_sync/vendor/golang.org/x/sync \
		golang:sys:v0.47.0:golang_sys/vendor/golang.org/x/sys \
		golang:text:v0.41.0:golang_text/vendor/golang.org/x/text \
		google:uuid:v1.6.0:google_uuid/vendor/github.com/google/uuid \
		googleapis:google-cloud-go:v0.9.0:googleapis_google_cloud_go/vendor/cloud.google.com/go/compute/metadata \
		gorilla:css:v1.0.1:gorilla_css/vendor/github.com/gorilla/css \
		gorilla:feeds:v1.2.0:gorilla_feeds/vendor/github.com/gorilla/feeds \
		gorilla:websocket:v1.5.3:gorilla_websocket/vendor/github.com/gorilla/websocket \
		hashicorp:golang-lru:v2.0.7:hashicorp_golang_lru_v2/vendor/github.com/hashicorp/golang-lru/v2 \
		jessevdk:go-flags:v1.6.1:jessevdk_go_flags/vendor/github.com/jessevdk/go-flags \
		klauspost:compress:v1.19.2:klauspost_compress/vendor/github.com/klauspost/compress \
		kyokomi:emoji:v2.2.14:kyokomi_emoji_v2/vendor/github.com/kyokomi/emoji/v2 \
		microcosm-cc:bluemonday:v1.0.27:microcosm_cc_bluemonday/vendor/github.com/microcosm-cc/bluemonday \
		mongodb:mongo-go-driver:v1.17.9:mongodb_mongo_go_driver/vendor/go.mongodb.org/mongo-driver \
		montanaflynn:stats:v0.12.4:montanaflynn_stats/vendor/github.com/montanaflynn/stats \
		redis:go-redis:v9.22.0:redis_go_redis_v9/vendor/github.com/redis/go-redis/v9 \
		rrivera:identicon:d5ba35832c0d:rrivera_identicon/vendor/github.com/rrivera/identicon \
		rs:xid:v1.6.0:rs_xid/vendor/github.com/rs/xid \
		russross:blackfriday:v2.1.0:russross_blackfriday_v2/vendor/github.com/russross/blackfriday/v2 \
		skip2:go-qrcode:da1b6568686e:skip2_go_qrcode/vendor/github.com/skip2/go-qrcode \
		slack-go:slack:v0.29.0:slack_go_slack/vendor/github.com/slack-go/slack \
		stretchr:testify:v1.12.1:stretchr_testify/vendor/github.com/stretchr/testify \
		uber-go:atomic:v1.11.0:uber_go_atomic/vendor/go.uber.org/atomic \
		uber-go:goleak:v1.3.0:uber_go_goleak/vendor/go.uber.org/goleak \
		xdg-go:pbkdf2:v1.0.0:xdg_go_pbkdf2/vendor/github.com/xdg-go/pbkdf2 \
		xdg-go:scram:v1.2.0:xdg_go_scram/vendor/github.com/xdg-go/scram \
		xdg-go:stringprep:v1.0.4:xdg_go_stringprep/vendor/github.com/xdg-go/stringprep \
		yaml:go-yaml:v3.0.5:yaml_go_yaml/vendor/go.yaml.in/yaml/v3 \
		youmark:pkcs8:a2c0da244d78:youmark_pkcs8/vendor/github.com/youmark/pkcs8
USE_RC_SUBR=	remark

GO_PKGNAME=	github.com/${GH_ACCOUNT}/${PORTNAME}/backend
GO_TARGET=	app:${PREFIX}/libexec/${PORTNAME}
GO_BUILDFLAGS=	-ldflags "-s -w -X main.revision=${DISTVERSION}"

NPM_EXTRACT_WRKSRC=	${WRKSRC}/frontend/apps/${PORTNAME}

SUB_LIST+=	REMARK_DATADIR=${REMARK_DATADIR} \
		REMARK_PIDDIR=${REMARK_PIDDIR} \
		REMARK_USER=${REMARK_USER}

PLIST_FILES=	libexec/${PORTNAME}

REMARK_DATADIR?=	/var/db/${PORTNAME}
REMARK_PIDDIR=		/var/run/${PORTNAME}/
REMARK_USER?=		www

# USES=npm regenerates missing prefetch distfiles from the npm registry before
# do-fetch runs.  Try MASTER_SITES first, so only the maintainer generates them.
pre-fetch:
	@cd ${.CURDIR} && ${MAKE} do-fetch DISTFILES="${DISTFILES:M*\:prefetch}" || ${TRUE}

# USES=npm always archives the node modules with gzip; recompress with xz.
# Multi-threaded xz output does not depend on the number of threads.
post-fetch:
	@f=${DISTDIR}/${DIST_SUBDIR}/${DISTFILES:M*-node-modules*:S/:prefetch//}; \
	if ! ${XZ_CMD} -l $${f} >/dev/null 2>&1 && ${GZCAT} $${f} >/dev/null 2>&1; then \
		${ECHO_MSG} "===>  Recompressing $${f##*/} with xz"; \
		${GZCAT} $${f} | ${XZ_CMD} -9e -T0 --block-size=64MiB > $${f}.tmp && \
			${MV} $${f}.tmp $${f}; \
	fi

pre-build:
	cd ${NPM_EXTRACT_WRKSRC} && ${SETENV} ${MAKE_ENV} ${NPM_CMDNAME} build
	${RM} -r ${WRKSRC}/backend/app/cmd/web/
	${MV} ${NPM_EXTRACT_WRKSRC}/public ${WRKSRC}/backend/app/cmd/web

do-build:
	cd ${WRKSRC}/backend && ${SETENV} ${MAKE_ENV} ${GO_ENV} GOPROXY=off ${GO_CMD} build ${GO_BUILDFLAGS} \
		-o ${GO_WRKDIR_BIN}/${PORTNAME} ./app

.include <bsd.port.mk>
