forked from collective/icalendar
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
185 lines (153 loc) · 5.77 KB
/
Copy pathMakefile
File metadata and controls
185 lines (153 loc) · 5.77 KB
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
180
181
182
183
184
185
# Makefile for Sphinx documentation
.DEFAULT_GOAL = help
SHELL = bash
# You can set these variables from the command line.
SPHINXOPTS ?=
PAPER ?=
VERSION ?=
# Internal variables.
RUFFPATH = "$(realpath .venv/bin/ruff)"
SPHINXAUTOBUILD = "$(realpath .venv/bin/sphinx-autobuild)"
SPHINXBUILD = "$(realpath .venv/bin/sphinx-build)"
TOWNCRIERPATH = "$(realpath .venv/bin/towncrier)"
DOCS_DIR = ./docs/
BUILDDIR = ../_build
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -W -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
VALEFILES := $(shell find $(DOCS_DIR) -type f -name "*.rst" -print) # Also add `src` for docstrings.
VALEOPTS ?=
PYTHONVERSION = >=3.10,<3.15
# Add the following 'help' target to your Makefile
# And add help text after each target name starting with '\#\#'
.PHONY: help
help: # This help message
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
# environment management
.venv: ## Install required Python, create Python virtual environment, and install package requirements
@uv python install "$(PYTHONVERSION)"
@uv venv --python "$(PYTHONVERSION)"
@uv sync --group dev
@uv run pre-commit install
.PHONY: sync
sync: ## Sync package requirements
@uv sync
.PHONY: init
init: clean clean-python .venv ## Clean docs build directory, Python virtual environment, and initialize Python virtual environment
.PHONY: clean
clean: ## Clean docs build directory
cd $(DOCS_DIR) && rm -rf $(BUILDDIR)/
.PHONY: clean-python
clean-python: clean
rm -rf .venv/
# /environment management
# documentation builders
.PHONY: html
html: .venv ## Build html
cd $(DOCS_DIR) && $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: livehtml
livehtml: .venv ## Rebuild Sphinx documentation on changes, with live-reload in the browser
cd "$(DOCS_DIR)" && ${SPHINXAUTOBUILD} \
--watch "../src/icalendar/" \
--watch "../CHANGES.rst" \
--re-ignore ".*\\.swp|.*\\.typed" \
--ignore "../src/icalendar/tests" \
--ignore "../src/icalendar/fuzzing" \
--port 8050 \
-b html . "$(BUILDDIR)/html" $(SPHINXOPTS) $(O)
.PHONY: dirhtml
dirhtml: .venv
cd $(DOCS_DIR) && $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml: .venv
cd $(DOCS_DIR) && $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: text
text: .venv
cd $(DOCS_DIR) && $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: sphinx-changes
sphinx-changes: .venv
cd $(DOCS_DIR) && $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
# /documentation builders
# test
.PHONY: linkcheck
linkcheck: .venv ## Run linkcheck
cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/ ."
.PHONY: linkcheckbroken
linkcheckbroken: .venv ## Run linkcheck and show only broken links
cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | GREP_COLORS='0;31' grep -wi "[^.]broken\|redirect" --color=always && if test $$? = 0; then exit 1; fi || test $$? = 1
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/ ."
.PHONY: vale
vale: .venv ## Run Vale style, grammar, and spell checks
@uv run vale sync
@uv run vale --no-wrap $(VALEOPTS) $(VALEFILES); \
if [ $$? = 0 ]; then \
echo; \
echo "Vale passed!"; \
else \
echo; \
echo "Vale spell, style, and grammar check failed."; \
echo "Read the error messages above to see what didn't pass."; \
echo "For guidance of how to correct the errors, see:"; \
echo "https://icalendar.readthedocs.io/en/latest/contribute/documentation/build-check.html#spelling-grammar-and-style"; \
exit 1; \
fi
.PHONY: doctest
doctest: .venv ## Test snippets and docstrings in the documentation
@echo;
@pytest src/icalendar/tests/test_with_doctest.py
.PHONY: docs-all
docs-all: .venv clean vale doctest html linkcheckbroken ## Clean docs build, then run vale, doctest, html, and linkcheckbroken
.PHONY: test
test: .venv ## Run code tests and coverage
@uv run tox
# /test
# development
.PHONY: dev
dev: .venv ## Install required Python, create Python virtual environment, install package and development requirements
.PHONY: format
format: .venv ## Format the code base with ruff
$(RUFFPATH) format
$(RUFFPATH) check --fix
# /development
# deployment
.PHONY: rtd-prepare
rtd-prepare: ## Prepare environment on Read the Docs
asdf plugin add uv
asdf install uv latest
asdf global uv latest
.PHONY: rtd-pr-preview
rtd-pr-preview: rtd-prepare .venv ## Build pull request preview on Read the Docs
cd $(DOCS_DIR) && $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/
# /deployment
# release
.PHONY: wo
wo: .venv
@uv run generate_windows_to_olson_mapping.py
$(RUFFPATH) format
.PHONY: changes-check
changes-check: dev
$(TOWNCRIERPATH) check
.PHONY: changes-draft
changes-draft: dev
@test -n "$(VERSION)" || (echo "VERSION is not set. Run 'export VERSION=x.y.z' first." && exit 1)
$(TOWNCRIERPATH) build --draft --version ${VERSION} --yes
.PHONY: changes
changes: dev
@test -n "$(VERSION)" || (echo "VERSION is not set. Run 'export VERSION=x.y.z' first." && exit 1)
$(TOWNCRIERPATH) build --version ${VERSION} --yes
# /release