# Maintainer: Joachim Schlöffel <joachim.schloeffel@financial-service-plus.de>
pkgname=greptimedb
pkgver=1.2.1
pkgrel=4
pkgdesc="Cloud-native observability database for metrics, logs, and traces"
url="https://github.com/GreptimeTeam/greptimedb"
arch="x86_64"
license="Apache-2.0"
depends="ca-certificates /bin/sh"
makedepends="
	binutils
	clang
	cmake
	coreutils
	cargo-auditable
	git
	lld
	linux-headers
	make
	mold
	nodejs
	openssl-dev
	openssl-libs-static
	perl
	pnpm
	protobuf
	protobuf-dev
	rustup
	zlib-dev
	zlib-static
	zstd-dev
	zstd-static
	"
checkdepends="cargo-nextest"
install="$pkgname.pre-install"
subpackages="
	$pkgname-datanode-openrc:_openrc_datanode:noarch
	$pkgname-docs:_docs:noarch
	$pkgname-flownode-openrc:_openrc_flownode:noarch
	$pkgname-frontend-openrc:_openrc_frontend:noarch
	$pkgname-logrotate:_logrotate:noarch
	$pkgname-metasrv-openrc:_openrc_metasrv:noarch
	$pkgname-standalone-openrc:_openrc_standalone:noarch
	"
options="net"
_dashboard_version="v0.12.0"
source="
	$pkgname-$pkgver.tar.gz::https://github.com/GreptimeTeam/greptimedb/archive/refs/tags/v$pkgver.tar.gz
	dashboard-$_dashboard_version.tar.gz::https://github.com/GreptimeTeam/dashboard/archive/refs/tags/$_dashboard_version.tar.gz
	datanode.toml
	flownode.toml
	frontend.toml
	greptimedb.datanode.confd
	greptimedb.flownode.confd
	greptimedb.frontend.confd
	greptimedb.initd
	greptimedb.logrotate
	greptimedb.metasrv.confd
	greptimedb.standalone.confd
	metasrv.toml
	standalone.toml
	"

_rust_toolchain="nightly-2026-03-21"
_cargo_profile="nightly"
export CARGO_HOME="${CARGO_HOME:-$srcdir/cargo}"
export CARGO_TARGET_DIR="${CARGO_TARGET_DIR:-$builddir/target}"
export RUSTUP_HOME="${RUSTUP_HOME:-$srcdir/rustup}"
export CARGO_BUILD_JOBS="${CARGO_BUILD_JOBS:-2}"
export CARGO_PROFILE_NIGHTLY_CODEGEN_UNITS="${CARGO_PROFILE_NIGHTLY_CODEGEN_UNITS:-16}"
export CARGO_PROFILE_NIGHTLY_DEBUG="${CARGO_PROFILE_NIGHTLY_DEBUG:-false}"
export CARGO_PROFILE_NIGHTLY_LTO="${CARGO_PROFILE_NIGHTLY_LTO:-thin}"
export CARGO_PROFILE_TEST_DEBUG="${CARGO_PROFILE_TEST_DEBUG:-false}"
export LIBRARY_PATH="/usr/lib"
export RUSTFLAGS="${RUSTFLAGS:-} -C link-arg=-fuse-ld=mold"

prepare() {
	default_prepare

	rustup-init \
		-y \
		--no-modify-path \
		--profile minimal \
		--default-toolchain "$_rust_toolchain"
	"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo fetch \
		--locked

	local _dashboard_builddir="$srcdir"/dashboard-${_dashboard_version#v}
	(
		cd "$_dashboard_builddir"
		pnpm install --frozen-lockfile --store-dir "$srcdir"/pnpm-store
		pnpm run build:docker
	)
	rm -rf "$builddir"/src/servers/dashboard/dist
	cp -a "$_dashboard_builddir"/dist "$builddir"/src/servers/dashboard/
}

build() {
	"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo auditable build \
		--profile "$_cargo_profile" \
		--frozen \
		--locked \
		--bin greptime \
		--features servers/dashboard
}

check() {
	"$CARGO_HOME"/bin/rustup run "$_rust_toolchain" cargo nextest run \
		-p cmd \
		--lib \
		--frozen
}

package() {
	install -Dm755 "$CARGO_TARGET_DIR"/"$_cargo_profile"/greptime \
		"$pkgdir"/usr/bin/greptime
	local _config
	for _config in datanode flownode frontend metasrv standalone; do
		install -Dm644 "$srcdir"/$_config.toml \
			"$pkgdir"/etc/greptimedb/$_config.toml
	done
}

_openrc_service() {
	local _service="$1"
	pkgdesc="$pkgdesc (OpenRC $_service service)"
	depends="$pkgname=$pkgver-r$pkgrel openrc"

	install -Dm755 "$srcdir"/greptimedb.initd \
		"$subpkgdir"/etc/init.d/greptimedb.$_service
	install -Dm644 "$srcdir"/greptimedb.$_service.confd \
		"$subpkgdir"/etc/conf.d/greptimedb.$_service
}

_openrc_datanode() { _openrc_service datanode; }
_openrc_flownode() { _openrc_service flownode; }
_openrc_frontend() { _openrc_service frontend; }
_openrc_metasrv() { _openrc_service metasrv; }
_openrc_standalone() { _openrc_service standalone; }

_logrotate() {
	pkgdesc="Log rotation configuration for $pkgname"
	depends="$pkgname=$pkgver-r$pkgrel logrotate"

	install -Dm644 "$srcdir"/greptimedb.logrotate \
		"$subpkgdir"/etc/logrotate.d/$pkgname
}

_docs() {
	pkgdesc="$pkgdesc (configuration examples and reference)"
	depends=""

	mkdir -p "$subpkgdir"/usr/share/doc/$pkgname
	cp -a "$builddir"/config "$subpkgdir"/usr/share/doc/$pkgname/
}

sha512sums="
fc580f6e34df84b4f37219047d751968324c356f3cad352d1515abb4b441515a1ad98f0d01e2de33aac5129a2d7a5335edc4d8888923da7683a084a484769bea  greptimedb-1.2.1.tar.gz
3f853b6767a86cfa97ec640a17de59b2e798561c9402026e9b3a749907780b9b686149dba8a932b5d61ae538c430deab2410248e5c9e6e1961909000445ee2ee  dashboard-v0.12.0.tar.gz
29cc3376753487b216748e3f85e12639830e1ac4a763e94f330f87c3651a8ef9de35732958311c0049e1b7cbb4e90a9e602b3aff43297fe088c5ce795a110a79  datanode.toml
52790808cb4f5cf0220ac2ab169b623fe76b6318d27d7f003e1197e850373cb915bfd40556098bcb7650f293d751039cb3bccbf9107bb160b8284887794ba975  flownode.toml
e3e19ab3c7a345ecf8cf0a507f7fc95dd3b036a4a797385cf77fcf1999f2e4f053042c7bbda8de73ed43ff72e87aad81e4ac6d4a34d01773bbc1f6d0d967d9f7  frontend.toml
313ed7d9ccd174b1869f3009e174266cdc414599e0b0f8307c8aaf2b73841eb36ce4c1b2f6244a0358b5a587a4edaa621b781fbd767835088b3fa13623fcc0df  greptimedb.datanode.confd
daf8efacc8bf2b74abd9f4900f889585295b57333a8a562a722de0596d35f25d5f9149e0879f4140bfdf727caa59c3f55b1380212722df92c588d912275530b8  greptimedb.flownode.confd
e3e61b1df00f8172a3b1d4a0d37ed2574a8c5cd27676b4e2ce14d15ad8933d233baabe8da374f715d00cfaee26f665244c1ba00f70197fcc713c4e9af9c3229e  greptimedb.frontend.confd
f72f52aa8277fc56eb071b5118990b8f4e09d143634c2f7fc54ed1f5ff065631c8630c45fe90d3db1f3ea0540c1ab3154a383d2000b4c5978e889ca02a1b6564  greptimedb.initd
775b4db7e7bc6127376b22fed8330b952c5027e3bfbfa29bb6ae034e6c75e7fed8ddfc0ad9761f369acd37398dfbd145cfea210828f2fc0bec9be92b051e6a75  greptimedb.logrotate
df495367d85844dcba99e5aa01e5a23fd14799b7521a72d9ea00d29fc0e5fbc5c5d06ee88e88d9637e260f8337249a39d2b0115de58da4899824d20bd844254a  greptimedb.metasrv.confd
882a79e969cac42adfada22060e6507fb687755a6d266d6728154b3e4da5777d2eaf5ad9bc331ed050448249ca609e6a61977b624d9faf25d83ed975345452cf  greptimedb.standalone.confd
8120ec338ebe1330d43b20d9b34a8f5f778ea13cb056febd3c8e9dc189d0de2380b90e5474a0990294d7004827c6133d44d2dd3e32d463b9259c47c82592d257  metasrv.toml
7e625a40460b363415b69e59142fd202c4dbb51296286e6afdeb94d6303e5bf097f2d83196bfeea8cf1182aa90ffd4a503a939426e7eeeea4c14b7242bb99ddb  standalone.toml
"
