# Contributor: Carlo Landmeter <clandmeter@alpinelinux.org>
# Contributor: 6543 <6543@obermui.de>
# Contributor: techknowlogick <techknowlogick@gitea.io>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=forgejo
pkgver=9.0.3
pkgrel=7
pkgdesc="Self-hosted Git service written in Go"
url="https://forgejo.org"
arch="all"
license="GPL-3.0-or-later"
depends="git git-lfs gnupg"
makedepends="go nodejs npm"
checkdepends="bash openssh openssh-keygen sqlite tzdata"
install="$pkgname.pre-install"
pkgusers="forgejo"
pkggroups="www-data"
subpackages="$pkgname-openrc"
source="$pkgname-$pkgver.tar.gz::https://codeberg.org/forgejo/forgejo/archive/v$pkgver.tar.gz
	$pkgname.initd
	$pkgname.ini
	sec-forgejo-actions-web-routes.patch
	sec-permission-check-for-project-issue.patch
	sec-git-push-permission-check.patch
	"
builddir="$srcdir/forgejo"
options="!check net chmod-clean" # broken with GIT_CEILING

# secfixes:
#   7.0.4-r0:
#     - CVE-2024-24789
#   7.0.3-r0:
#     - CVE-2024-24788
#   1.21.10.0-r0:
#     - CVE-2023-45288
#   1.21.3.0-r0:
#     - CVE-2023-48795

export GOCACHE="${GOCACHE:-"$srcdir/go-cache"}"
export GOTMPDIR="${GOTMPDIR:-"$srcdir"}"
export GOMODCACHE="${GOMODCACHE:-"$srcdir/go"}"

# Skip tests for archs that fail unrelated in CI
case "$CARCH" in
s390x|x86|armhf|armv7) options="$options !check" ;;
esac

prepare() {
	default_prepare

	npm ci
}

build() {
	# XXX: LARGEFILE64
	export CGO_CFLAGS="$CFLAGS -O2 -D_LARGEFILE64_SOURCE"
	export TAGS="bindata sqlite sqlite_unlock_notify"
	export GITEA_VERSION="$pkgver"
	export EXTRA_GOFLAGS="$GOFLAGS"
	export CGO_LDFLAGS="$LDFLAGS"
	unset LDFLAGS
	## make FHS compliant
	local setting="code.gitea.io/gitea/modules/setting"
	export LDFLAGS="$LDFLAGS -X $setting.CustomConf=/etc/forgejo/app.ini"
	export LDFLAGS="$LDFLAGS -X $setting.AppWorkPath=/var/lib/forgejo/"

	make -j1 build
}

check() {
	local home="$srcdir"/home
	mkdir -p "$home"
	install -d -m700 "$home"/.ssh
	touch "$home"/.gitconfig

	env GITEA_ROOT="$home" HOME="$home" GITEA_WORK_DIR="$(pwd)" timeout -s ABRT 20m make -j1 test-sqlite
	## "make test" - modified (exclude broken tests)
	## 'code.gitea.io/gitea/modules/migrations': github hase rate limits! 403 API
	local tests=$(go list ./... | grep -v /vendor/ |
		grep -v 'code.gitea.io/gitea/modules/migrations' |
		grep -v 'code.gitea.io/gitea/modules/charset' |
		grep -v 'code.gitea.io/gitea/models/migrations' |
		grep -v 'code.gitea.io/gitea/services/migrations' |
		grep -v 'code.gitea.io/gitea/integrations')
	env GITEA_CONF="$PWD/tests/sqlite.ini" GITEA_ROOT="$home" HOME="$home" GO111MODULE=on go test -mod=vendor -tags='sqlite sqlite_unlock_notify' $tests

}

package() {
	for dir in $pkgname $pkgname/git $pkgname/data $pkgname/db $pkgname/custom; do
		install -dm750 -o forgejo -g www-data \
			"$pkgdir"/var/lib/$dir
	done

	install -dm755 -o forgejo -g www-data "$pkgdir"/var/log/forgejo

	# TODO: rename when upstream does
	install -Dm755 -g www-data gitea "$pkgdir"/usr/bin/forgejo

	install -Dm644 -o forgejo -g www-data "$srcdir"/forgejo.ini \
		"$pkgdir"/etc/forgejo/app.ini
	chown forgejo:www-data "$pkgdir"/etc/forgejo

	install -Dm755 "$srcdir"/forgejo.initd \
		"$pkgdir"/etc/init.d/forgejo
}

sha512sums="
fd58e6ede466511cfa9d78885983121dd524e2fac2b1672b6547918be2d7a696fce265cc942974576e2550d4ef48f3a6379caff93f0303e07156ab84bf1c7615  forgejo-9.0.3.tar.gz
eb93a9f6c8f204de5c813f58727015f53f9feaab546589e016c60743131559f04fc1518f487b6d2a0e7fa8fab6d4a67cd0cd9713a7ccd9dec767a8c1ddebe129  forgejo.initd
b537b41b6b3a945274a6028800f39787b48c318425a37cf5d40ace0d1b305444fd07f17b4acafcd31a629bedd7d008b0bb3e30f82ffeb3d7e7e947bdbe0ff4f3  forgejo.ini
068548d1a96238ae36b2381db66f3ac021cca75a2ce2440b9ec47e8696badcb2b688736c80240a64d21d47f94994d63a20e3385a0100a67f4e87a7359c808a87  sec-forgejo-actions-web-routes.patch
7545bb4dd9949a87a7c887b2f6721db3a24ad7f36303b81f40d7148711b662ac69018aaa244793a14fdfefbdf8886a48d53ebf171ab8074e6767efbcf9098975  sec-permission-check-for-project-issue.patch
a66f5a65b5dda4337a07f357fac6071cad6334adcf6b46be627e15a6a1cf668478ab7936921e833ddc46ac16da7a2000ba08aab5bb29587d95fa5115aa94aa14  sec-git-push-permission-check.patch
"
