.PHONY: publish build clean patch minor major

IMAGE   ?= artifactapi.k8s.syd1.au.unkin.net/docker-internal/jellyfin-ha
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "0.0.0-dev")
REF     := $(shell cat UPSTREAM_REF)

# Clone the pinned upstream source and publish the .NET server into
# ./publish-output (consumed by Dockerfile.runtime). Mirrors CI.
publish:
	rm -rf src publish-output
	git clone https://git.unkin.net/unkin/jellyfin-ha-src.git src
	git -C src checkout $(REF)
	dotnet publish src/Jellyfin.Server/Jellyfin.Server.csproj \
		-c Release -r linux-x64 --self-contained false -o ./publish-output

build: publish
	docker build -f Dockerfile.runtime -t $(IMAGE):$(VERSION) .

clean:
	rm -rf src publish-output
	docker rmi $(IMAGE):$(VERSION) 2>/dev/null || true

_LATEST := $(shell git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$$' | head -1)
_BASE   := $(if $(_LATEST),$(_LATEST),v0.0.0)
_MAJ    := $(shell echo $(_BASE) | sed 's/^v//' | cut -d. -f1)
_MIN    := $(shell echo $(_BASE) | sed 's/^v//' | cut -d. -f2)
_PAT    := $(shell echo $(_BASE) | sed 's/^v//' | cut -d. -f3)

patch:
	@NEW=v$(_MAJ).$(_MIN).$(shell expr $(_PAT) + 1); \
	git tag $$NEW && echo "Tagged $$NEW" && git push origin $$NEW

minor:
	@NEW=v$(_MAJ).$(shell expr $(_MIN) + 1).0; \
	git tag $$NEW && echo "Tagged $$NEW" && git push origin $$NEW

major:
	@NEW=v$(shell expr $(_MAJ) + 1).0.0; \
	git tag $$NEW && echo "Tagged $$NEW" && git push origin $$NEW
