From 0397053f21db7b5f249b4c837b1a8ee9159a32f0 Mon Sep 17 00:00:00 2001 From: "Orville Q. Song" Date: Sat, 15 Mar 2025 21:27:43 +0300 Subject: [PATCH] www/codeberg-pages-server: New port: "Github Pages"-like pages server for Gitea/Forgejo Gitea lacks the ability to host static pages from Git. The Codeberg Pages Server addresses this lack by implementing a standalone service that connects to Gitea via API. It is suitable to be deployed by other Gitea instances, too, to offer static pages hosting to their users. https://codeberg.org/Codeberg/pages-server PR: 284267 --- www/Makefile | 1 + www/codeberg-pages-server/Makefile | 47 +++++++++++ www/codeberg-pages-server/distinfo | 5 ++ .../files/codeberg-pages-server.in | 46 ++++++++++ .../files/config-generater.go | 83 +++++++++++++++++++ www/codeberg-pages-server/pkg-descr | 5 ++ www/codeberg-pages-server/pkg-plist | 4 + 7 files changed, 191 insertions(+) create mode 100644 www/codeberg-pages-server/Makefile create mode 100644 www/codeberg-pages-server/distinfo create mode 100644 www/codeberg-pages-server/files/codeberg-pages-server.in create mode 100644 www/codeberg-pages-server/files/config-generater.go create mode 100644 www/codeberg-pages-server/pkg-descr create mode 100644 www/codeberg-pages-server/pkg-plist diff --git a/www/Makefile b/www/Makefile index ce73a5fc45eb..7d8547c00d87 100644 --- a/www/Makefile +++ b/www/Makefile @@ -116,6 +116,7 @@ SUBDIR += closure-compiler SUBDIR += cntlm SUBDIR += cobalt + SUBDIR += codeberg-pages-server SUBDIR += codeigniter SUBDIR += colly SUBDIR += coppermine diff --git a/www/codeberg-pages-server/Makefile b/www/codeberg-pages-server/Makefile new file mode 100644 index 000000000000..7dc38257e12b --- /dev/null +++ b/www/codeberg-pages-server/Makefile @@ -0,0 +1,47 @@ +PORTNAME= codeberg-pages-server +DISTVERSIONPREFIX= v +DISTVERSION= 6.2.1 +CATEGORIES= www +MASTER_SITES= https://codeberg.org/Codeberg/pages-server/archive/ +DISTFILES= ${DISTVERSIONFULL}.zip + +MAINTAINER= orville@anislet.dev +COMMENT= Codeberg Pages Server +WWW= https://codeberg.org/Codeberg/pages-server + +LICENSE= EUPL12 +LICENSE_FILE= ${WRKSRC}/LICENSE + +USES= cpe go:1.24,modules +USE_RC_SUBR= codeberg-pages-server + +GO_MODULE= codeberg.org/codeberg/pages +GO_MOD_DIST= https://codeberg.org/Codeberg/pages-server/raw/tag/${DISTVERSIONFULL}/ +GO_TARGET= codeberg.org/codeberg/pages:codeberg-pages-server +GO_BUILDFLAGS+= -ldflags=" \ + ${STRIP} -w \ + -extldflags '-static' \ + -X codeberg.org/codeberg/pages/server/version.Version=${DISTVERSIONFULL}" +GO_BUILDFLAGS+= -tags=" \ + sqlite \ + sqlite_unlock_notify \ + netgo" + +WRKSRC= ${WRKDIR}/pages-server + +USERS= www +GROUPS= www + +post-build: + @${WRKDIR}/bin/codeberg-pages-server --help | \ + ${SETENV} XDG_CACHE_HOME=${WRKDIR}/.cache ${GO_ENV} \ + ${GO_CMD} run ${FILESDIR}/config-generater.go > \ + ${WRKSRC}/codeberg-pages-server-config.in + +post-install: + ${INSTALL} -m0600 ${WRKSRC}/codeberg-pages-server-config.in \ + ${STAGEDIR}${PREFIX}/etc/rc.conf.d/codeberg-pages-server.sample + + @${MKDIR} ${STAGEDIR}/var/db/codeberg-pages-server + +.include diff --git a/www/codeberg-pages-server/distinfo b/www/codeberg-pages-server/distinfo new file mode 100644 index 000000000000..2a2d26fcfef4 --- /dev/null +++ b/www/codeberg-pages-server/distinfo @@ -0,0 +1,5 @@ +TIMESTAMP = 1740750130 +SHA256 (go/www_codeberg-pages-server/codeberg-pages-server-v6.2.1/v6.2.1.zip) = cb501480f938430aee6066faa473660fafde2ea93539e20472c4acf00bd1d112 +SIZE (go/www_codeberg-pages-server/codeberg-pages-server-v6.2.1/v6.2.1.zip) = 187631 +SHA256 (go/www_codeberg-pages-server/codeberg-pages-server-v6.2.1/go.mod) = 608493cbe24bb51ace67cba30cb80b811d431d1f0e660f705a641812c61da041 +SIZE (go/www_codeberg-pages-server/codeberg-pages-server-v6.2.1/go.mod) = 12379 diff --git a/www/codeberg-pages-server/files/codeberg-pages-server.in b/www/codeberg-pages-server/files/codeberg-pages-server.in new file mode 100644 index 000000000000..1421e4a6275f --- /dev/null +++ b/www/codeberg-pages-server/files/codeberg-pages-server.in @@ -0,0 +1,46 @@ +#!/bin/sh +# +# PROVIDE: codeberg_pages_server +# REQUIRE: LOGIN +# KEYWORD: shutdown + +. /etc/rc.subr + +name="codeberg_pages_server" +rcvar="${name}_enable" + +load_rc_config codeberg-pages-server + +: ${codeberg_pages_server_enable:="NO"} +: ${codeberg_pages_server_user:="www"} +: ${codeberg_pages_server_group:="www"} +: ${codeberg_pages_server_log:="/var/log/codeberg-pages-server.log"} +: ${codeberg_pages_server_chdir:="/var/db/codeberg-pages-server"} + +command="/usr/sbin/daemon" +task="/usr/local/bin/codeberg-pages-server" +pidfile="/var/run/codeberg-pages-server/codeberg-pages-server.pid" +procname="${task}" + +command_args="-p ${pidfile} -o ${codeberg_pages_server_log} ${task}" + +start_precmd="${name}_prestart" + +codeberg_pages_server_prestart() { + if [ ! -d "${codeberg_pages_server_chdir}" ]; then + mkdir "${codeberg_pages_server_chdir}" + chown ${codeberg_pages_server_user} "${codeberg_pages_server_chdir}" + fi + + if [ ! -f "${codeberg_pages_server_log}" ]; then + touch "${codeberg_pages_server_log}" + chown ${codeberg_pages_server_user}:${codeberg_pages_server_group} "${codeberg_pages_server_log}" + chmod 640 "${codeberg_pages_server_log}" + fi + + if [ ! -d "/var/run/codeberg-pages-server" ] ; then + install -d -o ${codeberg_pages_server_user} -g ${codeberg_pages_server_group} "/var/run/codeberg-pages-server" + fi +} + +run_rc_command "$1" diff --git a/www/codeberg-pages-server/files/config-generater.go b/www/codeberg-pages-server/files/config-generater.go new file mode 100644 index 000000000000..9aa9793db05a --- /dev/null +++ b/www/codeberg-pages-server/files/config-generater.go @@ -0,0 +1,83 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "regexp" + "strings" +) + +var ( + linePattern = regexp.MustCompile(`^ *--([a-zA-Z0-9_-]+)\ value.*\[\$([A-Z0-9_]+)\]`) + descRegexp = regexp.MustCompile(`^.*value\s+(.*)(\(default.*\)|\[.*\]).*$`) + defValRegexp = regexp.MustCompile(`\(default: ([^)]+)\)`) +) + +func main() { + fmt.Println("# See https://codeberg.org/Codeberg/pages-server") + fmt.Println() + + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + line := scanner.Text() + matches := linePattern.FindStringSubmatch(line) + if matches == nil { + continue + } + + optionName := matches[2] + + descMatches := descRegexp.FindStringSubmatch(line) + var description string + if len(descMatches) > 1 { + description = descMatches[1] + } + description = strings.TrimRight(description, " \t") + if strings.HasPrefix(description, "]") { + description = strings.TrimPrefix(description, "]") + description = strings.TrimLeft(description, " ") + } + + defValMatches := defValRegexp.FindStringSubmatch(line) + var defaultValue string + if len(defValMatches) > 1 { + defaultValue = defValMatches[1] + } + + exportCmd := "export" + switch optionName { + case "FORBIDDEN_MIME_TYPES", + "ALLOWED_CORS_DOMAINS", + "BLACKLISTED_PATHS", + "CONFIG_FILE", + "PROFILING_ADDRESS", + "ACME_EAB_KID", + "ACME_EAB_HMAC", + "DNS_PROVIDER": + optionName = "#" + optionName + exportCmd = "#" + exportCmd + } + + if description != "" { + fmt.Printf("# %s\n", description) + } else { + fmt.Println("#") + } + + if defaultValue != "" { + fmt.Printf("%s=%s\n", optionName, defaultValue) + fmt.Printf("%s %s\n", exportCmd, optionName) + } else { + fmt.Printf("%s=\"\"\n", optionName) + uncommented := strings.TrimPrefix(optionName, "#") + fmt.Printf("%s %s\n", exportCmd, uncommented) + } + fmt.Println() + } + + if err := scanner.Err(); err != nil { + fmt.Fprintf(os.Stderr, "read error: %v\n", err) + os.Exit(1) + } +} diff --git a/www/codeberg-pages-server/pkg-descr b/www/codeberg-pages-server/pkg-descr new file mode 100644 index 000000000000..cc3508f37750 --- /dev/null +++ b/www/codeberg-pages-server/pkg-descr @@ -0,0 +1,5 @@ +Gitea/Forgejo lacks the ability to host static pages from Git. +The Codeberg Pages Server addresses this lack by implementing a +standalone service that connects to Gitea/Forgejo via API. It is +suitable to be deployed by other Gitea/Forgejo instances, too, +to offer static pages hosting to their users. diff --git a/www/codeberg-pages-server/pkg-plist b/www/codeberg-pages-server/pkg-plist new file mode 100644 index 000000000000..833779860d39 --- /dev/null +++ b/www/codeberg-pages-server/pkg-plist @@ -0,0 +1,4 @@ +bin/codeberg-pages-server +@sample etc/rc.conf.d/codeberg-pages-server.sample +@dir etc/rc.conf.d +@dir(www,www,755) /var/db/codeberg-pages-server