github.com/git-chglog/git-chglog@v0.15.5-0.20240126074033-6a6993d52d69/Makefile (about)

     1  # Build variables
     2  VERSION ?= $(shell git describe --tags --always)
     3  
     4  # Go variables
     5  GO      ?= go
     6  GOOS    ?= $(shell $(GO) env GOOS)
     7  GOARCH  ?= $(shell $(GO) env GOARCH)
     8  GOHOST  ?= GOOS=$(GOOS) GOARCH=$(GOARCH) $(GO)
     9  
    10  LDFLAGS ?= "-X main.version=$(VERSION)"
    11  
    12  # Docker variables
    13  DEFAULT_TAG  ?= $(shell echo "$(VERSION)" | tr -d 'v')
    14  DOCKER_IMAGE := quay.io/git-chglog/git-chglog
    15  DOCKER_TAG   ?= $(DEFAULT_TAG)
    16  
    17  .PHONY: all
    18  all: help
    19  
    20  ###############
    21  ##@ Development
    22  
    23  .PHONY: clean
    24  clean:   ## Clean workspace
    25  	@ $(MAKE) --no-print-directory log-$@
    26  	rm -rf ./dist/
    27  	rm -rf ./git-chglog
    28  	rm -rf $(GOPATH)/bin/git-chglog
    29  	rm -rf cover.out
    30  
    31  .PHONY: test
    32  test:   ## Run tests
    33  	@ $(MAKE) --no-print-directory log-$@
    34  	$(GOHOST) test -covermode atomic -coverprofile cover.out -v ./...
    35  
    36  .PHONY: lint
    37  lint:   ## Run linters
    38  	@ $(MAKE) --no-print-directory log-$@
    39  	golangci-lint run
    40  
    41  #########
    42  ##@ Build
    43  
    44  .PHONY: build
    45  build:   ## Build git-chglog
    46  	@ $(MAKE) --no-print-directory log-$@
    47  	CGO_ENABLED=0 $(GOHOST) build -ldflags=$(LDFLAGS) -o git-chglog ./cmd/git-chglog
    48  
    49  .PHONY: install
    50  install:   ## Install git-chglog
    51  	@ $(MAKE) --no-print-directory log-$@
    52  	$(GOHOST) install ./cmd/git-chglog
    53  
    54  .PHONY: docker
    55  docker: build   ## Build Docker image
    56  	@ $(MAKE) --no-print-directory log-$@
    57  	docker build --pull --tag $(DOCKER_IMAGE):$(DOCKER_TAG) .
    58  
    59  .PHONY: push
    60  push:   ## Push Docker image
    61  	@ $(MAKE) --no-print-directory log-$@
    62  	docker push $(DOCKER_IMAGE):$(DOCKER_TAG)
    63  
    64  ###########
    65  ##@ Release
    66  
    67  .PHONY: changelog
    68  changelog: build   ## Generate changelog
    69  	@ $(MAKE) --no-print-directory log-$@
    70  	./git-chglog --next-tag $(VERSION) -o CHANGELOG.md
    71  
    72  .PHONY: release
    73  release: changelog   ## Release a new tag
    74  	@ $(MAKE) --no-print-directory log-$@
    75  	git add CHANGELOG.md
    76  	git commit -m "chore: update changelog for $(VERSION)"
    77  	git tag $(VERSION)
    78  	git push origin master $(VERSION)
    79  
    80  ########
    81  ##@ Help
    82  
    83  .PHONY: help
    84  help:   ## Display this help
    85  	@awk \
    86  		-v "col=\033[36m" -v "nocol=\033[0m" \
    87  		' \
    88  			BEGIN { \
    89  				FS = ":.*##" ; \
    90  				printf "Usage:\n  make %s<target>%s\n", col, nocol \
    91  			} \
    92  			/^[a-zA-Z_-]+:.*?##/ { \
    93  				printf "  %s%-12s%s %s\n", col, $$1, nocol, $$2 \
    94  			} \
    95  			/^##@/ { \
    96  				printf "\n%s%s%s\n", nocol, substr($$0, 5), nocol \
    97  			} \
    98  		' $(MAKEFILE_LIST)
    99  
   100  log-%:
   101  	@grep -h -E '^$*:.*?## .*$$' $(MAKEFILE_LIST) | \
   102  		awk \
   103  			'BEGIN { \
   104  				FS = ":.*?## " \
   105  			}; \
   106  			{ \
   107  				printf "\033[36m==> %s\033[0m\n", $$2 \
   108  			}'