.PHONY: check clippy tag-patch tag-minor tag-major

check:
	cargo check

clippy:
	cargo clippy -- -D warnings


define release
	cargo update --workspace
	git add Cargo.toml Cargo.lock
	git commit -m "version bump to $(1)"
	git push origin main
	git tag $(1)
	git push origin $(1)
	@echo "Tagged and pushed $(1)"
endef

tag-patch:
	$(eval LATEST := $(shell git tag --list 'v*' --sort=-version:refname | head -1))
	$(eval VERSION := $(if $(LATEST),$(LATEST),v0.0.0))
	$(eval MAJOR := $(word 1,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval MINOR := $(word 2,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval PATCH := $(word 3,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval NEW_PATCH := $(shell echo $$(($(PATCH)+1))))
	$(eval NEW_TAG := v$(MAJOR).$(MINOR).$(NEW_PATCH))
	sed -i "s/^version = \".*\"/version = \"$(MAJOR).$(MINOR).$(NEW_PATCH)\"/" Cargo.toml
	$(call release,$(NEW_TAG))

tag-minor:
	$(eval LATEST := $(shell git tag --list 'v*' --sort=-version:refname | head -1))
	$(eval VERSION := $(if $(LATEST),$(LATEST),v0.0.0))
	$(eval MAJOR := $(word 1,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval MINOR := $(word 2,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval NEW_MINOR := $(shell echo $$(($(MINOR)+1))))
	$(eval NEW_TAG := v$(MAJOR).$(NEW_MINOR).0)
	sed -i "s/^version = \".*\"/version = \"$(MAJOR).$(NEW_MINOR).0\"/" Cargo.toml
	$(call release,$(NEW_TAG))

tag-major:
	$(eval LATEST := $(shell git tag --list 'v*' --sort=-version:refname | head -1))
	$(eval VERSION := $(if $(LATEST),$(LATEST),v0.0.0))
	$(eval MAJOR := $(word 1,$(subst ., ,$(subst v,,$(VERSION)))))
	$(eval NEW_MAJOR := $(shell echo $$(($(MAJOR)+1))))
	$(eval NEW_TAG := v$(NEW_MAJOR).0.0)
	sed -i "s/^version = \".*\"/version = \"$(NEW_MAJOR).0.0\"/" Cargo.toml
	$(call release,$(NEW_TAG))
