build: Taskfile improvements · RDFLib/rdflib@6553986 (original) (raw)
``
1
`+
https://taskfile.dev/usage/
`
``
2
`+
https://pkg.go.dev/text/template
`
``
3
`+
https://go-task.github.io/slim-sprig/
`
1
4
`version: "3"
`
2
5
``
3
6
`vars:
`
``
7
`+
TASKFILE_DIR:
`
``
8
`+
sh: pwd
`
4
9
`# The path to the virtual environment to use when using a virtual
`
5
10
`# environment.
`
6
``
`-
VENV_PATH: '{{default ".venv" (env "VENV_PATH")}}'
`
``
11
`+
VENV_PATH: '{{(env "VENV_PATH") | default (osClean (print .TASKFILE_DIR "/.venv"))}}'
`
7
12
`# Non empty string results in tasks using a virtual environment.
`
8
``
`-
WITH_VENV: '{{env "WITH_VENV"}}'
`
``
13
`+
WITH_VENV: '{{env "WITH_VENV" | default "false"}}'
`
9
14
`# The virtual environemtn specific python interpreter to use.
`
10
``
`-
VENV_PYTHON: '{{if (eq OS "windows")}}{{.VENV_PATH}}/Scripts/python.exe{{else}}{{.VENV_PATH}}/bin/python{{end}}'
`
``
15
`+
VENV_BINPREFIX: '{{if (mustFromJson .WITH_VENV)}}{{if (eq OS "windows")}}{{.VENV_PATH}}/Scripts/{{else}}{{.VENV_PATH}}/bin/{{end}}{{end}}'
`
``
16
`+
VENV_PYTHON: '{{if (eq OS "windows")}}{{.VENV_BINPREFIX}}python.exe{{else}}{{.VENV_BINPREFIX}}python{{end}}'
`
11
17
`# The python interpreter to use.
`
12
18
`PYTHON: python
`
13
``
`-
_PYTHON: '{{if .WITH_VENV}}{{.VENV_PYTHON}}{{else}}{{.PYTHON}}{{end}}'
`
14
``
`-
Non empty string results in java being installed as a system dependency.
`
15
``
`-
INSTALL_SYSTEM_DEPS_JAVA: ""
`
16
``
`-
Non empty string results in extras being installed with pip.
`
17
``
`-
INSTALL_PIP_EXTRAS: ""
`
18
``
`-
Non empty string results in extensive tests being ran and dependencies for
`
19
``
`-
extensive tests being installed.
`
20
``
`-
EXTENSIVE: ""
`
``
19
`+
_PYTHON: '{{if (mustFromJson .WITH_VENV)}}{{.VENV_PYTHON}}{{else}}{{.PYTHON}}{{end}}'
`
``
20
`+
Truthish values ("true", "1", etc.) results in java being installed as a
`
``
21
`+
system dependency.
`
``
22
`+
INSTALL_SYSTEM_DEPS_JAVA: "false"
`
``
23
`+
Truthish values ("true", "1", etc.) results in extras being installed with
`
``
24
`+
pip.
`
``
25
`+
INSTALL_PIP_EXTRAS: "false"
`
``
26
`+
Truthish values ("true", "1", etc.) results in extensive tests being ran and
`
``
27
`+
dependencies for extensive tests being installed.
`
``
28
`+
EXTENSIVE: "false"
`
21
29
`# The python version for which tox should run, empty string does not restrict
`
22
30
`# python versions.
`
23
31
`TOX_PYTHON_VERSION: ""
`
24
``
`-
TEST_HARNESS: '{{if (and .EXTENSIVE (not (eq OS "windows")))}}./with-fuseki.sh{{end}} '
`
25
``
`-
A non empty string results in github specific things being done.
`
26
``
`-
WITH_GITHUB_ACTIONS: ""
`
27
``
`-
A non empty string results in coverage being generated for relevant
`
28
``
`-
commands.
`
29
``
`-
WITH_COVERAGE: ""
`
``
32
`+
TEST_HARNESS: '{{if (and (mustFromJson .EXTENSIVE) (not (eq OS "windows")))}}./with-fuseki.sh{{end}} '
`
``
33
`+
Truthish values ("true", "1", etc.) results in github specific things being
`
``
34
`+
done.
`
``
35
`+
WITH_GITHUB_ACTIONS: "false"
`
``
36
`+
Truthish values ("true", "1", etc.) results in coverage being generated for
`
``
37
`+
relevant commands.
`
``
38
`+
WITH_COVERAGE: "false"
`
30
39
``
31
40
`tasks:
`
32
41
`install:system-deps:
`
`@@ -35,27 +44,27 @@ tasks:
`
35
44
` - echo "OS = {{OS}}"
`
36
45
` - echo "ARCH = {{ARCH}}"
`
37
46
` - |
`
38
``
`-
{{if (and .EXTENSIVE (eq OS "linux"))}}
`
``
47
`+
{{if (and (mustFromJson .EXTENSIVE) (eq OS "linux"))}}
`
39
48
` if type apt-get >/dev/null 2>&1
`
40
49
` then
`
41
50
` sudo apt-get install -y libdb-dev
`
42
51
` elif type dnf >/dev/null 2>&1
`
43
52
` then
`
44
53
` sudo dnf install -y libdb-devel
`
45
54
` fi
`
46
``
`-
{{else if (and .EXTENSIVE (eq OS "darwin"))}}
`
``
55
`+
{{else if (and (mustFromJson .EXTENSIVE) (eq OS "darwin"))}}
`
47
56
` brew install berkeley-db@4
`
48
57
` {{end}}
`
49
58
``
50
59
`install:tox:
`
51
60
`desc: Install tox
`
52
61
`cmds:
`
53
``
`-
- "{{._PYTHON}} -m pip install tox {{if .WITH_GITHUB_ACTIONS}}tox-gh-actions{{end}}"
`
``
62
`+
- '{{._PYTHON}} -m pip install tox {{if (mustFromJson .WITH_GITHUB_ACTIONS)}}tox-gh-actions{{end}}'
`
54
63
``
55
64
`install:pip-deps:
`
56
65
`desc: Install pip dependencies
`
57
66
`cmds:
`
58
``
`-
- "{{._PYTHON}} -m pip install --upgrade -r requirements.txt -r requirements.dev.txt -r docs/sphinx-requirements.txt {{if .INSTALL_PIP_EXTRAS}}-r requirements.dev-extras.txt{{end}}"
`
``
67
`+
- '{{._PYTHON}} -m pip install --upgrade -r requirements.txt -r requirements.dev.txt -r docs/sphinx-requirements.txt {{if (mustFromJson .INSTALL_PIP_EXTRAS)}}-r requirements.dev-extras.txt{{end}}'
`
59
68
``
60
69
`install:flake8:
`
61
70
`desc: Install flake8 dependencies
`
`@@ -82,6 +91,22 @@ tasks:
`
82
91
` - task: _rimraf
`
83
92
`vars: { _PYTHON: "{{.PYTHON}}", RIMRAF_TARGET: "{{.VENV_PATH}}" }
`
84
93
``
``
94
`+
venv:run:
`
``
95
`+
desc: Run a command inside the venv
`
``
96
`+
cmds:
`
``
97
`+
- cmd: |
`
``
98
`+
VIRTUAL_ENV="{{.VENV_PATH}}" PATH="{{.VENV_PATH}}/bin${PATH:+:${PATH}}" {{.CLI_ARGS}}
`
``
99
+
``
100
`+
run:
`
``
101
`+
desc: Run a command. If WITH_VENV is truthish, the command will be run inside the virtual environment.
`
``
102
`+
cmds:
`
``
103
`+
- cmd: |
`
``
104
`+
{{if (mustFromJson .WITH_VENV)}}
`
``
105
`+
VIRTUAL_ENV="{{.VENV_PATH}}" PATH="{{.VENV_PATH}}/bin${PATH:+:${PATH}}" {{.CLI_ARGS}}
`
``
106
`+
{{else}}
`
``
107
`+
{{.CLI_ARGS}}
`
``
108
`+
{{end}}
`
``
109
+
85
110
`tox:
`
86
111
`desc: Run tox
`
87
112
`cmds:
`
`@@ -95,36 +120,50 @@ tasks:
`
95
120
` -m tox \
`
96
121
` {{.CLI_ARGS}}
`
97
122
`env:
`
98
``
`-
TOXENV: '{{if .TOX_PYTHON_VERSION}}py{{mustRegexReplaceAll "^([0-9]+)..*" .TOX_PYTHON_VERSION "${1}${2}"}}{{if .EXTENSIVE}}-extensive{{end}}{{.TOXENV_SUFFIX | default ""}}{{end}}'
`
``
123
`+
TOXENV: '{{if .TOX_PYTHON_VERSION}}py{{mustRegexReplaceAll "^([0-9]+)..*" .TOX_PYTHON_VERSION "${1}${2}"}}{{if (mustFromJson .EXTENSIVE)}}-extensive{{end}}{{.TOXENV_SUFFIX | default ""}}{{end}}'
`
99
124
`test:
`
100
125
`desc: Run tests
`
101
126
`cmds:
`
102
``
`-
- "{{.TEST_HARNESS}}{{._PYTHON}} -m pytest {{if .WITH_COVERAGE}}--cov --cov-report={{end}} {{.CLI_ARGS}}"
`
``
127
`+
- '{{.TEST_HARNESS}}{{.VENV_BINPREFIX}}pytest {{if (mustFromJson .WITH_COVERAGE)}}--cov --cov-report={{end}} {{.CLI_ARGS}}'
`
103
128
``
104
129
`flake8:
`
105
130
`desc: Run flake8
`
106
131
`cmds:
`
107
132
` - "{{._PYTHON}} -m flakeheaven lint {{.CLI_ARGS}}"
`
108
133
``
``
134
`+
black:
`
``
135
`+
desc: Run black
`
``
136
`+
cmds:
`
``
137
`+
- '{{._PYTHON}} -m black {{if (mustFromJson (.CHECK | default "false"))}}--check --diff {{end}}{{.CLI_ARGS | default "."}}'
`
``
138
`+
isort:
`
``
139
`+
desc: Run isort
`
``
140
`+
cmds:
`
``
141
`+
- '{{._PYTHON}} -m isort {{if (mustFromJson (.CHECK | default "false"))}}--check --diff {{end}}{{.CLI_ARGS | default "."}}'
`
``
142
`+
mypy:
`
``
143
`+
desc: Run mypy
`
``
144
`+
cmds:
`
``
145
`+
- "{{._PYTHON}} -m mypy --show-error-context --show-error-codes"
`
``
146
+
109
147
`lint:fix:
`
110
148
`desc: Fix auto-fixable linting errors
`
111
149
`cmds:
`
112
``
`-
- "{{._PYTHON}} -m black ."
`
113
``
`-
- "{{._PYTHON}} -m isort ."
`
``
150
`+
- task: isort
`
``
151
`+
- task: black
`
114
152
``
115
153
`lint:
`
116
154
`desc: Perform linting
`
117
155
`cmds:
`
118
``
`-
- "{{._PYTHON}} -m isort --check --diff ."
`
119
``
`-
- "{{._PYTHON}} -m black --check --diff ."
`
``
156
`+
- task: isort
`
``
157
`+
vars: { CHECK: true }
`
``
158
`+
- task: black
`
``
159
`+
vars: { CHECK: true }
`
120
160
` - task: flake8
`
121
161
``
122
``
-
123
162
`validate:static:
`
124
163
`desc: Perform static validation
`
125
164
`cmds:
`
126
165
` - task: lint
`
127
``
`-
- "{{._PYTHON}} -m mypy --show-error-context --show-error-codes"
`
``
166
`+
- task: mypy
`
128
167
``
129
168
`validate:fix:
`
130
169
`desc: Fix auto-fixable validation errors.
`
`@@ -217,7 +256,7 @@ tasks:
`
217
256
` - task: install:system-deps
`
218
257
` - task: install:tox
`
219
258
`vars:
`
220
``
`-
WITH_GITHUB_ACTIONS: 1
`
``
259
`+
WITH_GITHUB_ACTIONS: true
`
221
260
` - cmd: "{{._PYTHON}} -m pip install coveralls"
`
222
261
` - task: tox
`
223
262
`vars:
`