-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
64 lines (45 loc) · 2.47 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
export MAIN_BRANCH ?= main
.DEFAULT_GOAL := help
.PHONY: test test/unit test/integration build clean release/prepare release/tag .check_bump_type .check_git_clean help
GIT_BRANCH := $(shell git symbolic-ref --short HEAD)
WORKTREE_CLEAN := $(shell git status --porcelain 1>/dev/null 2>&1; echo $$?)
SCRIPTS_DIR := $(CURDIR)/scripts
curVersion := $$(sed -n -E 's/^version: "([0-9]+\.[0-9]+\.[0-9]+)"$$/\1/p' galaxy.yml)
namespace := $$(sed -n -E 's/^namespace: (.+)/\1/p' galaxy.yml)
name := $$(sed -n -E 's/^name: (.+)/\1/p' galaxy.yml)
test/unit: ## Run unit tests in a Docker container
$(SCRIPTS_DIR)/run-tests.sh units
test/integration: ## Run integration tests inside a Docker container
$(SCRIPTS_DIR)/run-tests.sh integration
test/sanity: ## Run ansible sanity tests in a Docker container
$(SCRIPTS_DIR)/run-tests.sh sanity
build: clean ## Build collection artifact
ansible-galaxy collection build --output-path dist/
publish:
@ansible-galaxy collection publish --token=${ANSIBLE_GALAXY_TOKEN} dist/$(namespace)-$(name)-$(curVersion).tar.gz
clean: ## Removes dist/ directory
@rm -rf ./dist
help: ## Prints this help message
@grep -E '^[\/a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
## Release functions =====================
release/prepare: .check_git_clean ## Bumps version and creates release branch (call with 'release/prepare version=<new_version_number>')
@test $(version) || (echo "[ERROR] version argument not set."; exit 1)
@git fetch --quiet origin $(MAIN_BRANCH)
@sed -i.tmp -E 's/^(version:) ([0-9]+\.[0-9]+\.[0-9]+)$$/\1 "$(version)"/' galaxy.yml
@sed -i.tmp -E 's/^(COLLECTION_VERSION) = "(.+)"$$/\1 = "$(version)"/' plugins/module_utils/const.py
@NEW_VERSION=$(version) $(SCRIPTS_DIR)/prepare-release.sh
@rm -f galaxy.yml.tmp plugins/module_utils/const.py.tmp
release/tag: .check_git_clean ## Creates git tag using version from package.json
@git pull --ff-only
@echo "Applying tag 'v$(curVersion)' to HEAD..."
@git tag --sign "v$(curVersion)" -m "Release v$(curVersion)"
@echo "[OK] Success!"
@echo "Remember to call 'git push --tags' to persist the tag."
## Helper functions =====================
.check_git_clean:
ifneq ($(GIT_BRANCH), $(MAIN_BRANCH))
@echo "[ERROR] Please checkout default branch '$(MAIN_BRANCH)' and re-run this command."; exit 1;
endif
ifneq ($(WORKTREE_CLEAN), 0)
@echo "[ERROR] Uncommitted changes found in worktree. Address them and try again."; exit 1;
endif