-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathemacs-package.mk
179 lines (133 loc) · 4.54 KB
/
emacs-package.mk
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# -- Variables
EMACS?=emacs
DINGHY_DIR?=dinghy
DINGHY_VERSION=0.4.4
DIST_DIR?=dist
LOCAL_DEPS?=$(DIST_DIR)
PACKAGE_SUFFIX?=el
PACKAGE_VERSION=$(shell cask version)
DINGHY_SRC_DIR?=$(DINGHY_DIR)/src
PACIFY=$(DINGHY_SRC_DIR)/dinghy-pacify.el
TEMPLATES_DIR=$(DINGHY_DIR)/templates
UPDATE_VERSION=$(DINGHY_SRC_DIR)/update-version.sh
UPDATE_VERSION_FILES?=Cask $(PACKAGE_NAME).el Makefile
UPDATE_VERSION_CHANGELOG_FILE?=CHANGELOG.md
UPDATE_VERSION_CHANGELOG_HEADING?=Unreleased
CURRENT_PACKAGE_VERSION?="none"
NEXT_RELEASE_VERSION?="none"
# -- Default goal
.PHONY: package-install clean-install ci local
ifdef CI
install: ci
else
install: local
endif
package-install: clean install
$(EMACS) --batch -f package-initialize \
--eval "(setq load-prefer-newer t)" \
--eval "(package-install-file \"$(CURDIR)/$(DIST_DIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION).$(PACKAGE_SUFFIX)\")"
clean-install: clean install
ci: .cask $(CI_DEPS)
$(info Installed (CI) using dinghy v$(DINGHY_VERSION))
local: $(LOCAL_DEPS) $(LOCAL_PHONY_DEPS)
$(info Installed using dinghy v$(DINGHY_VERSION))
$(DIST_DIR): .cask
cask package
.cask: $(CASK_DEPS)
cask install
# -- Checks
.PHONY: test test-coverage test-tagged test-not-tagged test-selector
TEST_DIR?=test
TEST_HELPER?=$(TEST_DIR)/test-helper.el
TEST_COVERAGE_DIR?=coverage
TEST_EXECUTE_BEFORE=true
TEST_SELECTOR=nil
TEST_TAG?=nil
test: .cask cask-clean
mkdir -p $(TEST_COVERAGE_DIR)
ifdef TEST_USE_ERT_RUNNER
$(TEST_EXECUTE_BEFORE) && cask exec ert-runner $(TEST_ARGS)
else
$(TEST_EXECUTE_BEFORE) && EMACS=$(EMACS) cask emacs --batch -L . -L $(TEST_DIR) \
-L $(DINGHY_SRC_DIR) \
--eval '(load-file "$(TEST_HELPER)")' \
--eval '(dolist (f (nthcdr 2 (directory-files "$(TEST_DIR)" t))) (unless (or (file-directory-p f) (string-suffix-p "$(TEST_HELPER)" f)) (load-file f)))' \
--eval "(ert-run-tests-batch-and-exit $(TEST_SELECTOR))"
endif
test-coverage: TEST_EXECUTE_BEFORE=export COVERAGE_WITH_JSON=true
test-coverage: test
test-tagged: TEST_SELECTOR=(quote (tag $(TEST_TAG)))
test-tagged: test
test-not-tagged: TEST_SELECTOR=(quote (not (tag $(TEST_TAG))))
test-not-tagged: test
test-selector: TEST_SELECTOR=(symbol-name (quote $(TEST_SELECTOR_STRING)))
test-selector: test
# -- Clean-up
.PHONY: cask-clean clean
cask-clean:
rm -rf $(DIST_DIR)
cask clean-elc
clean: cask-clean
rm -rf $(LOCAL_DEPS)
# -- Utility
.PHONY: update-version update-next-version pacify upgrade-bydi
update-version:
ifneq ($(CURRENT_PACKAGE_VERSION), "none")
export CHANGELOG_FILE=$(UPDATE_VERSION_CHANGELOG_FILE) && \
export CHANGELOG_HEADING=$(UPDATE_VERSION_CHANGELOG_HEADING) && \
$(UPDATE_VERSION) $(CURRENT_PACKAGE_VERSION) $(UPDATE_VERSION_FILES)
else
$(info You need to set CURRENT_PACKAGE_VERSION in your Makefile)
endif
update-next-version:
ifneq ($(NEXT_PACKAGE_VERSION), "none")
$(UPDATE_VERSION) $(NEXT_PACKAGE_VERSION) $(UPDATE_VERSION_FILES)
else
$(info You need to set NEXT_PACKAGE_VERSION as an environment variable)
endif
pacify: $(PACIFY_DEPS)
EMACS=$(EMACS) cask emacs --batch -L . -l $(PACIFY) $(PACIFY_PRE_EXEC) -f dinghy-pacify-check
CASK_PACKAGE_DIRECTORY=$(shell cask package-directory)
upgrade-bydi:
$(info Removing bydi from $(CASK_PACKAGE_DIRECTORY))
cd $(CASK_PACKAGE_DIRECTORY) && rm -rf bydi*
cask install
# -- Commit linting setup
.PHONY: commits clean-commits
commits: commitlint.config.js .husky
commitlint.config.js:
$(info Setting up commitlint)
npm i --save-dev @commitlint/cli
cp -u $(TEMPLATES_DIR)/commitlint/commitlint.config.js commitlint.config.js
.husky:
$(info Setting up husky)
npm i --save-dev husky
npx husky init
cp $(TEMPLATES_DIR)/commitlint/commit-msg .husky/commit-msg
chmod +x .husky/commit-msg
rm -f .husky/pre-commit
clean-commits:
$(info Removing commit linting)
npm remove husky @commitlint/cli
rm -rf .husky/
rm -f commitlint.config.js
git config --unset core.hooksPath
## Semantic-Release
.PHONY: semantic-release
semantic-release:
ifdef PACKAGE_NAME
$(info Copying semantic-release config, be sure to adjust)
sed -e 's/%PACKAGE%/$(PACKAGE_NAME)/' $(TEMPLATES_DIR)/semantic-release/.releaserc > .releaserc
else
$(info You need to set PACKAGE_NAME to copy config)
endif
$(info Installing dependencies)
npm install --save-dev semantic-release \
@semantic-release/changelog \
@semantic-release/git \
@semantic-release/exec \
conventional-changelog-conventionalcommits
cp -f $(TEMPLATES_DIR)/semantic-release/release.yml .github/workflows/release.yml
cp -f $(TEMPLATES_DIR)/semantic-release/verify.yml .github/workflows/verify.yml
# Run `make V=1 {cmd}` to print commands
$(V).SILENT: