git-smash 0.1.1

Smash staged changes into previous commits
-include Makefile.local

DESTDIR ?=
PREFIX ?= /usr/local
BINDIR ?= ${PREFIX}/bin
DATAROOTDIR ?= ${PREFIX}/share
MANDIR ?= ${DATAROOTDIR}/man

TARBALLDIR ?= target/release/tarball
TARBALLFORMAT=tar.gz

RM := rm
CARGO := cargo
SCDOC := scdoc
INSTALL := install
GIT := git
GPG := gpg
SED := sed

DEBUG := 0
ifeq ($(DEBUG), 0)
	CARGO_OPTIONS := --release --locked
	CARGO_TARGET := release
else
	CARGO_OPTIONS :=
	CARGO_TARGET := debug
endif

.PHONY: all git-smash test docs completions clean install uninstall

all: git-smash test docs

git-smash:
	$(CARGO) build $(CARGO_OPTIONS)

test:
	$(CARGO) test $(CARGO_OPTIONS)

lint:
	$(CARGO) fmt -- --check
	$(CARGO) check
	find . -name '*.rs' -exec touch {} +
	$(CARGO) clippy --all -- -D warnings

docs: completions

completions: git-smash
	target/$(CARGO_TARGET)/git-smash completions bash | $(INSTALL) -Dm 644 /dev/stdin target/completion/bash/git-smash
	target/$(CARGO_TARGET)/git-smash completions zsh | $(INSTALL) -Dm 644 /dev/stdin target/completion/zsh/_git-smash
	target/$(CARGO_TARGET)/git-smash completions fish | $(INSTALL) -Dm 644 /dev/stdin target/completion/fish/git-smash.fish

clean:
	$(RM) -rf target contrib/man/*.1

install: git-smash docs
	$(INSTALL) -Dm 755 target/$(CARGO_TARGET)/git-smash -t $(DESTDIR)$(BINDIR)
	$(INSTALL) -Dm 644 target/completion/bash/git-smash -t $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions
	$(INSTALL) -Dm 644 target/completion/zsh/_git-smash -t  $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions
	$(INSTALL) -Dm 644 target/completion/fish/git-smash.fish -t  $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d

uninstall:
	$(RM) -f $(DESTDIR)$(BINDIR)/git-smash
	$(RM) -f $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions/git-smash
	$(RM) -f $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions/_git-smash
	$(RM) -f $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d/git-smash.fish

release: all
	$(INSTALL) -d $(TARBALLDIR)
	gh auth status
	git cliff --strip=all --unreleased
	@read -p 'version> ' TAG && \
		$(SED) "s|^version = .*|version = \"$$TAG\"|" -i Cargo.toml && \
		$(CARGO) build --release && \
		git cliff --tag "v$$TAG" > CHANGELOG.md && \
		$(GIT) commit --gpg-sign --message "chore(release): version v$$TAG" Cargo.toml Cargo.lock CHANGELOG.md && \
		$(GIT) tag --sign --message "Version v$$TAG" v$$TAG && \
		$(GIT) archive -o $(TARBALLDIR)/git-smash-v$$TAG.$(TARBALLFORMAT) --format $(TARBALLFORMAT) --prefix=git-smash-$$TAG/ v$$TAG && \
		$(GPG) --detach-sign $(TARBALLDIR)/git-smash-v$$TAG.$(TARBALLFORMAT) && \
		git push origin main && \
		git push origin v$$TAG && \
		gh release create \
			--title "v$$TAG" \
			--notes-file <(git cliff --strip=all --latest) \
			"v$$TAG" \
			git-smash-v$$TAG.$(TARBALLFORMAT) \
			git-smash-v$$TAG.$(TARBALLFORMAT).sig && \
		cargo publish