# Contributor: Carlo Landmeter <clandmeter@alpinelinux.org>
# Contributor: Patrycja Rosa <alpine@ptrcnull.me>
# Maintainer: Will Sinatra <wpsinatra@gmail.com>
maintainer="Will Sinatra <wpsinatra@gmail.com>"
pkgname=woodpecker
pkgver=2.8.0
pkgrel=5
pkgdesc="Simple yet powerful CI/CD engine with great extensibility"
url="https://woodpecker-ci.org"
arch="all"
license="Apache-2.0"
pkgusers="woodpecker"
pkggroups="woodpecker"
makedepends="
	go
	go-swag
	sqlite-dev
	pnpm
	"
subpackages="
	$pkgname-agent
	$pkgname-agent-openrc:agent_openrc
	$pkgname-cli
	$pkgname-doc
	$pkgname-openrc
	"
install="$pkgname.pre-install"
source="$pkgname-$pkgver.tar.gz::https://github.com/woodpecker-ci/woodpecker/releases/download/v$pkgver/woodpecker-src.tar.gz
	woodpecker-server.initd
	woodpecker-agent.initd
	woodpecker-server.conf
	woodpecker-agent.conf
	woodpecker-agent-state.conf
	woodpecker-server.logrotate
	woodpecker-agent.logrotate
	fix-makefile.patch
	"
options="net"

# s390x, loongarch64 fail DB migration tests
case "$CARCH" in
	s390x) options="$options !check" ;;
	loongarch64) options="$options !check" ;;
esac

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

unpack() {
	mkdir -p $builddir
	tar -xzvf $srcdir/$pkgname-$pkgver.tar.gz -C $builddir
}

build() {
	export TARGETARCH="$(go env GOHOSTARCH)"
	make build -j1 STATIC_BUILD=false
	make docs
}

check() {
	make test
}

package() {
	# Install server
	install -Dm755 "$builddir"/dist/woodpecker-server \
		"$pkgdir"/usr/bin/woodpecker-server

	# Install initd & conf
	install -Dm755 "$srcdir"/woodpecker-server.initd \
		"$pkgdir"/etc/init.d/woodpecker-server
	install -Dm640 -o woodpecker -g woodpecker "$srcdir"/woodpecker-server.conf \
		"$pkgdir"/etc/woodpecker/server.conf

	# Install web resources
	install -d -m 755 -o woodpecker -g woodpecker "$pkgdir"/usr/share/webapps/$pkgname
	cp -R "$builddir"/web/dist/* "$pkgdir"/usr/share/webapps/$pkgname/

	# Create empty log & lib directories
	install -d -m0750 -o woodpecker -g woodpecker \
		"$pkgdir"/var/log/woodpecker "$pkgdir"/var/lib/woodpecker

	# Install logrotate rules
	install -Dm644 "$srcdir"/woodpecker-server.logrotate \
		"$pkgdir"/etc/logrotate.d/woodpecker-server

	# Install mandocs
	mkdir -p "$pkgdir"/usr/share/doc/$pkgname
	cp -R "$builddir"/docs/docs/* "$pkgdir"/usr/share/doc/$pkgname/
}

cli() {
	pkgdesc="Woodpecker Server CLI"

	install -Dm755 "$builddir"/dist/woodpecker-cli \
		"$subpkgdir"/usr/bin/woodpecker-cli
}

agent() {
	pkgdesc="Woodpecker CI agent"

	install -Dm755 "$builddir"/dist/woodpecker-agent \
		"$subpkgdir"/usr/bin/woodpecker-agent

	# This is the agent's configuration
	install -Dm640 -o woodpecker -g woodpecker "$srcdir"/woodpecker-agent.conf \
		"$subpkgdir"/etc/woodpecker/agent.conf

	# This holds configuration state from the Woodpecker Server component
	install -Dm640 -o woodpecker -g woodpecker "$srcdir"/woodpecker-agent-state.conf \
		"$subpkgdir"/etc/woodpecker/agent-state.conf

	# Install logrotate rules
	install -Dm644 "$srcdir"/woodpecker-agent.logrotate \
		"$pkgdir"/etc/logrotate.d/woodpecker-agent

	# Create empty log & lib directories
	install -d -m0750 -o woodpecker -g woodpecker \
		"$subpkgdir"/var/log/woodpecker "$subpkgdir"/var/lib/woodpecker
		
}

agent_openrc() {
	pkgdesc="Woodpecker CI agent (OpenRC init scripts)"
	depends=openrc
	install_if="openrc $pkgname-agent=$pkgver-r$pkgrel"

	install -Dm755 "$srcdir"/woodpecker-agent.initd \
		"$subpkgdir"/etc/init.d/woodpecker-agent
}

sha512sums="
ebfe601c15bc4e5e301d79c22913156d80aa17a96b0f9a6ff588cee3da1efd1bd38271a5295f844ade2c450e2133f394218636a6ab7b3cdc4b93616175c958e3  woodpecker-2.8.0.tar.gz
78ab8bb18039dd9f754e6561dd9b439642c2dbf897bcd24e6cd1f4473e0aec51ed7a0b1bf37c3ccb57144542ff3db83775ce7254ba9b53c306a653c4dc1a0d5f  woodpecker-server.initd
5f2f9357fd4f4f5a71e65a33992b41ef329b93fc25bffcc304590638bc9bbb95eeef9e8922753ebd7b0aa87bf1dc14c12ca2106563fd585076bb1c6e42aed773  woodpecker-agent.initd
b6c317731c8ae10376019ab0bba7313ddb1b6c495f214de60e58be11c1303245a6c9caf84c3c3ed6290908acc8b6c4d3305f16d72ca66e0349b0c4db7c4d8166  woodpecker-server.conf
c4c6af1bb4f85fa9e21ea0d7d4ac5aeddce001d15ea32c98b3bb9a04285903b65d928d1aa5211c32a53268be1d09d57723c03bd86fcebd04acc69c66c8a0c234  woodpecker-agent.conf
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e  woodpecker-agent-state.conf
e6fbecc95f9e0be9f3c0410492e58167e6aa2a7c47a02446585484cb8f506a6e84ea61f35e656dd335ad9bd297a3dd842b1333bdc8f3581786b3e67029fe7a44  woodpecker-server.logrotate
e6fbecc95f9e0be9f3c0410492e58167e6aa2a7c47a02446585484cb8f506a6e84ea61f35e656dd335ad9bd297a3dd842b1333bdc8f3581786b3e67029fe7a44  woodpecker-agent.logrotate
132ed42fbaa0e227d6722fd36057b8c49ad5abc4e90245d7e80b668323fe7bb8db978e5b9751c540b112ae017c02c25b220f1dca6cd32b5952bec166b03b0938  fix-makefile.patch
"
