runem 0.0.28__tar.gz → 0.0.30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {runem-0.0.28 → runem-0.0.30}/HISTORY.md +228 -0
- {runem-0.0.28 → runem-0.0.30}/PKG-INFO +25 -34
- {runem-0.0.28 → runem-0.0.30}/README.md +14 -24
- runem-0.0.30/runem/VERSION +1 -0
- {runem-0.0.28 → runem-0.0.30}/runem/cli.py +1 -0
- {runem-0.0.28 → runem-0.0.30}/runem/command_line.py +33 -8
- {runem-0.0.28 → runem-0.0.30}/runem/config.py +58 -9
- {runem-0.0.28 → runem-0.0.30}/runem/config_metadata.py +8 -0
- {runem-0.0.28 → runem-0.0.30}/runem/config_parse.py +188 -13
- {runem-0.0.28 → runem-0.0.30}/runem/files.py +32 -7
- runem-0.0.30/runem/hook_manager.py +116 -0
- {runem-0.0.28 → runem-0.0.30}/runem/job_execute.py +49 -26
- {runem-0.0.28 → runem-0.0.30}/runem/job_filter.py +2 -2
- {runem-0.0.28 → runem-0.0.30}/runem/job_runner_simple_command.py +7 -1
- runem-0.0.30/runem/job_wrapper.py +25 -0
- {runem-0.0.28 → runem-0.0.30}/runem/job_wrapper_python.py +7 -7
- {runem-0.0.28 → runem-0.0.30}/runem/log.py +8 -0
- runem-0.0.30/runem/report.py +256 -0
- {runem-0.0.28 → runem-0.0.30}/runem/run_command.py +18 -0
- {runem-0.0.28 → runem-0.0.30}/runem/runem.py +46 -19
- {runem-0.0.28 → runem-0.0.30}/runem/types.py +62 -5
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/PKG-INFO +25 -34
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/SOURCES.txt +5 -1
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/requires.txt +10 -9
- {runem-0.0.28 → runem-0.0.30}/setup.py +1 -0
- {runem-0.0.28 → runem-0.0.30}/tests/cli/test_initialise_options.py +2 -0
- runem-0.0.28/tests/data/help_output.txt → runem-0.0.30/tests/data/help_output.3.10.txt +8 -2
- runem-0.0.30/tests/data/help_output.3.11.txt +77 -0
- runem-0.0.30/tests/sanitise_reports_footer.py +20 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_config.py +74 -9
- {runem-0.0.28 → runem-0.0.30}/tests/test_config_parse.py +319 -16
- runem-0.0.30/tests/test_files.py +87 -0
- runem-0.0.30/tests/test_hook_manager.py +198 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_job_execute.py +50 -48
- {runem-0.0.28 → runem-0.0.30}/tests/test_job_filter.py +26 -6
- {runem-0.0.28 → runem-0.0.30}/tests/test_job_wrapper.py +1 -1
- runem-0.0.30/tests/test_report.py +238 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_run_command.py +12 -1
- {runem-0.0.28 → runem-0.0.30}/tests/test_runem.py +628 -111
- runem-0.0.28/runem/VERSION +0 -1
- runem-0.0.28/runem/job_wrapper.py +0 -19
- runem-0.0.28/runem/report.py +0 -145
- runem-0.0.28/tests/test_files.py +0 -36
- runem-0.0.28/tests/test_report.py +0 -126
- {runem-0.0.28 → runem-0.0.30}/Containerfile +0 -0
- {runem-0.0.28 → runem-0.0.30}/LICENSE +0 -0
- {runem-0.0.28 → runem-0.0.30}/MANIFEST.in +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/__init__.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/__main__.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/base.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/blocking_print.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/cli/initialise_options.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/informative_dict.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/job.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/py.typed +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/runem_version.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem/utils.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/dependency_links.txt +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/entry_points.txt +0 -0
- {runem-0.0.28 → runem-0.0.30}/runem.egg-info/top_level.txt +0 -0
- {runem-0.0.28 → runem-0.0.30}/setup.cfg +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/__init__.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/conftest.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/intentional_test_error.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_base.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_blocking_print.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_cli.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_informative_dict.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_job.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_job_runner_simple_command.py +0 -0
- {runem-0.0.28 → runem-0.0.30}/tests/test_job_wrapper_python.py +0 -0
@@ -4,6 +4,234 @@ Changelog
|
|
4
4
|
|
5
5
|
(unreleased)
|
6
6
|
------------
|
7
|
+
- Merge pull request #47 from lursight/feat/git-fast-files. [Frank
|
8
|
+
Harrison]
|
9
|
+
|
10
|
+
Feat/git fast files
|
11
|
+
- Feat(git-files): adds -f and -h for handling changed files and head
|
12
|
+
files. [Frank Harrison]
|
13
|
+
|
14
|
+
This makes using runem for big projects MUCH more effecient.
|
15
|
+
- Chore(help): moves help switch from -h -> -H. [Frank Harrison]
|
16
|
+
|
17
|
+
This is so we can add `-h` as `HEAD files`
|
18
|
+
- Chore(error-reporting): adds warn() and error() logging types. [Frank
|
19
|
+
Harrison]
|
20
|
+
- Merge pull request #46 from lursight/chore/docs. [Frank Harrison]
|
21
|
+
|
22
|
+
Chore/docs
|
23
|
+
- Chore(test): adds a new e2e test for tags-to-ignore. [Frank Harrison]
|
24
|
+
|
25
|
+
Once again everything seems to be behaving properly.
|
26
|
+
- Chore(docs): annotates the tags-to-exclude test. [Frank Harrison]
|
27
|
+
|
28
|
+
I thought it was buggy, but we have another issue somewhere.
|
29
|
+
- Chore(docs): updates the core-goal in the README. [Frank Harrison]
|
30
|
+
- Chore(test): adds NUM CORES handling to tests. [Frank Harrison]
|
31
|
+
- Chore(coverage): fixes coverage warnings. [Frank Harrison]
|
32
|
+
- Merge pull request #45 from lursight/chore/update_deps. [Frank
|
33
|
+
Harrison]
|
34
|
+
|
35
|
+
updates deps
|
36
|
+
- Updates deps. [Frank Harrison]
|
37
|
+
- Merge pull request #44 from lursight/chore/update_py_black. [Frank
|
38
|
+
Harrison]
|
39
|
+
|
40
|
+
Chore/update py black
|
41
|
+
- Chore(black): updates formatting after upgrading black. [Frank
|
42
|
+
Harrison]
|
43
|
+
- Chore(deps): upgrades py-black following dependabot. [Frank Harrison]
|
44
|
+
- Merge pull request #43 from lursight/feat/user-local-hook_1st_pass.
|
45
|
+
[Frank Harrison]
|
46
|
+
|
47
|
+
Feat/user local hooks (1st pass)
|
48
|
+
- Feat(user-local-cfg): fixes for python 3.9 tests. [Frank Harrison]
|
49
|
+
- Feat(user-local-cfg): handles situations where jobs are in local
|
50
|
+
configs. [Frank Harrison]
|
51
|
+
|
52
|
+
... and phases are missing.
|
53
|
+
- Chore(docs): stop the help-text test being verbose. [Frank Harrison]
|
54
|
+
|
55
|
+
... it is unlikely that --help will be used in verbose mode... probs. Sigh.
|
56
|
+
- Feat(user-local-cfg): gets user- and local- configs working. [Frank
|
57
|
+
Harrison]
|
58
|
+
- Feat(user-local-cfg): splits the project loading into load and parse
|
59
|
+
phases. [Frank Harrison]
|
60
|
+
|
61
|
+
This is so we can use it to load user configs
|
62
|
+
- Feat(user-local-cfg): splits the config loading and the ConfigMetadata
|
63
|
+
construction functions. [Frank Harrison]
|
64
|
+
|
65
|
+
This allows re-using the parsing function for N files
|
66
|
+
- Feat(hooks): adds a hook system with support for ON_EXIT. [Frank
|
67
|
+
Harrison]
|
68
|
+
|
69
|
+
- we remove the deprecated function-type for jobs
|
70
|
+
- we add support for hooks
|
71
|
+
- add a hooks section to the .runem.yml reader
|
72
|
+
- add a on-exit hook to the runem project's .runem.yml
|
73
|
+
- Merge pull request #42 from lursight/feat/prettier_tree_graph. [Frank
|
74
|
+
Harrison]
|
75
|
+
|
76
|
+
Feat/prettier tree graph
|
77
|
+
- Feat(prettier-tree-report): changes how we index the leaver on the
|
78
|
+
report-tree. [Frank Harrison]
|
79
|
+
|
80
|
+
Basically removes the duplicate information, reducing visual noise,
|
81
|
+
especially after adding the variously shaded bar-graphs
|
82
|
+
- Chore(.runem): uses current best practise for accessing options in
|
83
|
+
runem's own jobs. [Frank Harrison]
|
84
|
+
- Chore(.runem): connects the unit-test option to the runem python
|
85
|
+
checks. [Frank Harrison]
|
86
|
+
- Chore(.runem): removes defunct options. [Frank Harrison]
|
87
|
+
|
88
|
+
These were left over from lursight's config
|
89
|
+
- Chore(.runem): rename switches for consistency. [Frank Harrison]
|
90
|
+
- Fix(pretty-tree): adds extra test for bar-graph chars. [Frank
|
91
|
+
Harrison]
|
92
|
+
- Chore: typo. [Frank Harrison]
|
93
|
+
- Merge pull request #41 from lursight/feat/prettier_tree_graph. [Frank
|
94
|
+
Harrison]
|
95
|
+
|
96
|
+
Feat/prettier tree graph
|
97
|
+
- Feat(tree-graph): hangs all tree leaves off of the runem.phases.
|
98
|
+
[Frank Harrison]
|
99
|
+
- Feat(tree-graph): adds runem-reports regression checks. [Frank
|
100
|
+
Harrison]
|
101
|
+
|
102
|
+
This means we can capture any changes if they happen to the layout of
|
103
|
+
the graph, as I intended to changed the layout next.
|
104
|
+
- Merge pull request #38 from
|
105
|
+
lursight/dependabot/github_actions/softprops/action-gh-release-2.
|
106
|
+
[Frank Harrison]
|
107
|
+
|
108
|
+
chore(deps): bump softprops/action-gh-release from 1 to 2
|
109
|
+
- Chore(deps): bump softprops/action-gh-release from 1 to 2.
|
110
|
+
[dependabot[bot]]
|
111
|
+
|
112
|
+
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
|
113
|
+
- [Release notes](https://github.com/softprops/action-gh-release/releases)
|
114
|
+
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
|
115
|
+
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)
|
116
|
+
|
117
|
+
---
|
118
|
+
updated-dependencies:
|
119
|
+
- dependency-name: softprops/action-gh-release
|
120
|
+
dependency-type: direct:production
|
121
|
+
update-type: version-update:semver-major
|
122
|
+
...
|
123
|
+
|
124
|
+
|
125
|
+
0.0.29 (2024-03-18)
|
126
|
+
-------------------
|
127
|
+
- Release: version 0.0.29 🚀 [Frank Harrison]
|
128
|
+
- Merge pull request #40 from lursight/fix/time_saved. [Frank Harrison]
|
129
|
+
|
130
|
+
Fix/time saved
|
131
|
+
- Feat(prettier-bars): clarifies that total is user-space time. [Frank
|
132
|
+
Harrison]
|
133
|
+
|
134
|
+
... not wall-clock or system-time
|
135
|
+
- Feat(prettier-bars): distiguishes the wall-clock bars. [Frank
|
136
|
+
Harrison]
|
137
|
+
|
138
|
+
... from the total/sum and sub-job bars, so that it's slightly easier to
|
139
|
+
see where the time is being really spent.
|
140
|
+
- Fix(time-saved): clarifies which measurement is the wall-clock time
|
141
|
+
for the entire run. [Frank Harrison]
|
142
|
+
- Fix(time-saved): add message about how long we _would_ have waited
|
143
|
+
without runem. [Frank Harrison]
|
144
|
+
- Fix(time-saved): renames all variable associated with timing reports.
|
145
|
+
[Frank Harrison]
|
146
|
+
|
147
|
+
This just makes someting which can become intractable/confusing a lot
|
148
|
+
easier to follow.
|
149
|
+
- Fix(time-saved): check that time-saved is reported correctly. [Frank
|
150
|
+
Harrison]
|
151
|
+
|
152
|
+
Here we add a test first and then fix the missing math to calculate the
|
153
|
+
time-saved by using runem. We broke this in the previous feature for
|
154
|
+
rendering the tree slightly more elegantly.
|
155
|
+
- Feat(hide-single-leafs): only show the job when it has a single child.
|
156
|
+
[Frank Harrison]
|
157
|
+
|
158
|
+
We would get duplicated information for jobs which had single
|
159
|
+
run_command invocations. This only shows sub-tasks/jobs if there are
|
160
|
+
more than one sub-tasks meaning the output looks a lot nicer & clearer.
|
161
|
+
- Chore(deps): adds setuptools as a explicit dep. [Frank Harrison]
|
162
|
+
|
163
|
+
... otherwise we get the following error (more often in python 3.12),
|
164
|
+
perhaps due to setuptools being removed from distros?:
|
165
|
+
|
166
|
+
```text
|
167
|
+
Traceback (most recent call last):
|
168
|
+
File "/var/www/mydir/virtualenvs/dev/bin/pip", line 5, in <module>
|
169
|
+
from pkg_resources import load_entry_point
|
170
|
+
ImportError: No module named pkg_resources
|
171
|
+
```
|
172
|
+
- Merge pull request #39 from lursight/feat/time_all_run_command_calls.
|
173
|
+
[Frank Harrison]
|
174
|
+
|
175
|
+
Feat/time all run command calls
|
176
|
+
- Feat(pretty-tree): refactors out the phase-job report generator.
|
177
|
+
[Frank Harrison]
|
178
|
+
|
179
|
+
This is just to make pylint happy.
|
180
|
+
- Feat(pretty-tree): makes the report tree neater. [Frank Harrison]
|
181
|
+
- Feat(time-all-sub-tasks): re-raise errors for context in ci/cd. [Frank
|
182
|
+
Harrison]
|
183
|
+
|
184
|
+
In github ci/cd we were hitting the asserts but had no context of where
|
185
|
+
they're raised from or why. This should fix that if they still occur.
|
186
|
+
- Feat(time-all-sub-tasks): adds a test to test the time-recording
|
187
|
+
functions. [Frank Harrison]
|
188
|
+
- Feat(time-all-sub-tasks): adds all run_command times to report output.
|
189
|
+
[Frank Harrison]
|
190
|
+
- Chore(type): uses a type-alias instead of manual type. [Frank
|
191
|
+
Harrison]
|
192
|
+
- Merge pull request #37 from
|
193
|
+
lursight/dependabot/github_actions/actions/upload-artifact-4. [Frank
|
194
|
+
Harrison]
|
195
|
+
|
196
|
+
chore(deps): bump actions/upload-artifact from 3 to 4
|
197
|
+
- Chore(deps): bump actions/upload-artifact from 3 to 4.
|
198
|
+
[dependabot[bot]]
|
199
|
+
|
200
|
+
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
|
201
|
+
- [Release notes](https://github.com/actions/upload-artifact/releases)
|
202
|
+
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)
|
203
|
+
|
204
|
+
---
|
205
|
+
updated-dependencies:
|
206
|
+
- dependency-name: actions/upload-artifact
|
207
|
+
dependency-type: direct:production
|
208
|
+
update-type: version-update:semver-major
|
209
|
+
...
|
210
|
+
- Merge pull request #36 from lursight/chore/more_python_versions_in_ci.
|
211
|
+
[Frank Harrison]
|
212
|
+
|
213
|
+
Chore/more python versions in ci
|
214
|
+
- Chore(github-ci): workaround for python 3.12 setuptools issue. [Frank
|
215
|
+
Harrison]
|
216
|
+
|
217
|
+
This fies what looks like an issue with pytest hooks running ci/cd (and
|
218
|
+
on local machine) where we get:
|
219
|
+
ModuleNotFoundError: No module named 'pkg_resources'
|
220
|
+
- Chore(github-ci): updates the python `--help` tests for 3.11 (and
|
221
|
+
later) [Frank Harrison]
|
222
|
+
- Chore(github-ci): test python 3.9, 3.11 and 3.12 in ci. [Frank
|
223
|
+
Harrison]
|
224
|
+
|
225
|
+
We don't bother with 3.10 because we test 3.9 and boundaries for
|
226
|
+
features are on the 3.11 version.
|
227
|
+
|
228
|
+
We don't bother with earlier than 3.9, even though 3.8 is the earliest
|
229
|
+
officially supported version.
|
230
|
+
|
231
|
+
|
232
|
+
0.0.28 (2024-03-01)
|
233
|
+
-------------------
|
234
|
+
- Release: version 0.0.28 🚀 [Frank Harrison]
|
7
235
|
- Merge pull request #35 from lursight/fix/aliases_not_setting_options.
|
8
236
|
[Frank Harrison]
|
9
237
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: runem
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.30
|
4
4
|
Summary: Awesome runem created by lursight
|
5
5
|
Home-page: https://github.com/lursight/runem/
|
6
6
|
Author: lursight
|
@@ -10,25 +10,26 @@ Requires-Dist: halo
|
|
10
10
|
Requires-Dist: packaging
|
11
11
|
Requires-Dist: PyYAML
|
12
12
|
Provides-Extra: test
|
13
|
-
Requires-Dist: black==
|
14
|
-
Requires-Dist: coverage==7.
|
13
|
+
Requires-Dist: black==24.3.0; extra == "test"
|
14
|
+
Requires-Dist: coverage==7.4.4; extra == "test"
|
15
15
|
Requires-Dist: docformatter==1.7.5; extra == "test"
|
16
16
|
Requires-Dist: flake8-bugbear==24.2.6; extra == "test"
|
17
17
|
Requires-Dist: flake8==7.0.0; extra == "test"
|
18
18
|
Requires-Dist: gitchangelog==3.0.4; extra == "test"
|
19
|
-
Requires-Dist: isort==5.
|
19
|
+
Requires-Dist: isort==5.13.2; extra == "test"
|
20
20
|
Requires-Dist: mkdocs==1.5.3; extra == "test"
|
21
|
-
Requires-Dist: mypy==1.
|
21
|
+
Requires-Dist: mypy==1.9.0; extra == "test"
|
22
22
|
Requires-Dist: pydocstyle==6.3.0; extra == "test"
|
23
|
-
Requires-Dist: pylint==3.0
|
23
|
+
Requires-Dist: pylint==3.1.0; extra == "test"
|
24
24
|
Requires-Dist: pylama==8.4.1; extra == "test"
|
25
25
|
Requires-Dist: pytest-cov==4.1.0; extra == "test"
|
26
26
|
Requires-Dist: pytest-profiling==1.7.0; extra == "test"
|
27
|
-
Requires-Dist: pytest-xdist==3.
|
28
|
-
Requires-Dist: pytest==
|
27
|
+
Requires-Dist: pytest-xdist==3.5.0; extra == "test"
|
28
|
+
Requires-Dist: pytest==8.1.1; extra == "test"
|
29
|
+
Requires-Dist: setuptools; extra == "test"
|
29
30
|
Requires-Dist: termplotlib==0.3.9; extra == "test"
|
30
|
-
Requires-Dist: types-PyYAML==6.0.12.
|
31
|
-
Requires-Dist: requests-mock==1.
|
31
|
+
Requires-Dist: types-PyYAML==6.0.12.20240311; extra == "test"
|
32
|
+
Requires-Dist: requests-mock==1.11.0; extra == "test"
|
32
33
|
Requires-Dist: types-setuptools; extra == "test"
|
33
34
|
|
34
35
|
# Run 'em
|
@@ -39,7 +40,7 @@ Requires-Dist: types-setuptools; extra == "test"
|
|
39
40
|
|
40
41
|
## 1. Overview
|
41
42
|
|
42
|
-
The core objective of Run'em's is to minimize the wall-clock time required for
|
43
|
+
The core objective of Run'em's is to minimize the wall-clock time required for running checks, supporting [shift-left](https://en.wikipedia.org/wiki/Shift-left_testing). Overall it is designed to enhance iteration speed and boost developer productivity.
|
43
44
|
|
44
45
|
`runem` is also designed to be easy to learn and simple to use, but `runem` also has many powerful tools for advanced users.
|
45
46
|
|
@@ -172,7 +173,7 @@ Here's a simple setup for a python project.
|
|
172
173
|
type: bool
|
173
174
|
desc: formats docs and comments in whatever job can do so
|
174
175
|
- option:
|
175
|
-
name:
|
176
|
+
name: check-only
|
176
177
|
alias: check
|
177
178
|
default: false
|
178
179
|
type: bool
|
@@ -246,11 +247,11 @@ def _job_py_code_reformat(
|
|
246
247
|
docformatter_extra_args = [
|
247
248
|
"--in-place",
|
248
249
|
]
|
249
|
-
if
|
250
|
+
if options["check-only"]:
|
250
251
|
extra_args.append("--check")
|
251
252
|
docformatter_extra_args = [] # --inplace is not compatible with --check
|
252
253
|
|
253
|
-
if
|
254
|
+
if options["black"]:
|
254
255
|
black_cmd = [
|
255
256
|
"python3",
|
256
257
|
"-m",
|
@@ -261,7 +262,7 @@ def _job_py_code_reformat(
|
|
261
262
|
kwargs["label"] = f"{label} black"
|
262
263
|
run_command(cmd=black_cmd, **kwargs)
|
263
264
|
|
264
|
-
if
|
265
|
+
if options["docformatter"]:
|
265
266
|
docformatter_cmd = [
|
266
267
|
"python3",
|
267
268
|
"-m",
|
@@ -278,7 +279,7 @@ def _job_py_code_reformat(
|
|
278
279
|
0, # no work/change required
|
279
280
|
3, # no errors, but code was reformatted
|
280
281
|
)
|
281
|
-
if
|
282
|
+
if options["check-only"]:
|
282
283
|
# in check it is ONLY ok if no work/change was required
|
283
284
|
allowed_exits = (0,)
|
284
285
|
kwargs["label"] = f"{label} docformatter"
|
@@ -400,12 +401,12 @@ runem: reports:
|
|
400
401
|
runem: runem: 8.820488s
|
401
402
|
runem: ├runem.pre-build: 0.019031s
|
402
403
|
runem: ├runem.run-phases: 8.801317s
|
403
|
-
runem: ├pre-run (
|
404
|
+
runem: ├pre-run (user-time): 0.00498s
|
404
405
|
runem: │├pre-run.install python requirements: 2.6e-05s
|
405
406
|
runem: │├pre-run.ls -alh runem: 0.004954s
|
406
|
-
runem: ├edit (
|
407
|
+
runem: ├edit (user-time): 0.557559s
|
407
408
|
runem: │├edit.reformat py: 0.557559s
|
408
|
-
runem: ├analysis (
|
409
|
+
runem: ├analysis (user-time): 21.526145s
|
409
410
|
runem: │├analysis.pylint py: 7.457029s
|
410
411
|
runem: │├analysis.flake8 py: 0.693754s
|
411
412
|
runem: │├analysis.mypy py: 1.071956s
|
@@ -430,12 +431,12 @@ runem: reports:
|
|
430
431
|
runem [14.174612] ███████████████▋
|
431
432
|
├runem.pre-build [ 0.025858]
|
432
433
|
├runem.run-phases [14.148587] ███████████████▋
|
433
|
-
├pre-run (
|
434
|
+
├pre-run (user-time) [ 0.005825]
|
434
435
|
│├pre-run.install python requirements [ 0.000028]
|
435
436
|
│├pre-run.ls -alh runem [ 0.005797]
|
436
|
-
├edit (
|
437
|
+
├edit (user-time) [ 0.579153] ▋
|
437
438
|
│├edit.reformat py [ 0.579153] ▋
|
438
|
-
├analysis (
|
439
|
+
├analysis (user-time) [36.231034] ████████████████████████████████████████
|
439
440
|
│├analysis.pylint py [12.738303] ██████████████▏
|
440
441
|
│├analysis.flake8 py [ 0.798575] ▉
|
441
442
|
│├analysis.mypy py [ 0.335984] ▍
|
@@ -468,8 +469,8 @@ usage: runem.py [-h] [--jobs JOBS [JOBS ...]] [--not-jobs JOBS_EXCLUDED [JOBS_EX
|
|
468
469
|
[--not-phases PHASES_EXCLUDED [PHASES_EXCLUDED ...]] [--tags TAGS [TAGS ...]] [--not-tags TAGS_EXCLUDED [TAGS_EXCLUDED ...]]
|
469
470
|
[--black] [--no-black] [--check-only] [--no-check-only] [--coverage] [--no-coverage] [--docformatter] [--no-docformatter]
|
470
471
|
[--generate-call-graphs] [--no-generate-call-graphs] [--install-deps] [--no-install-deps] [--isort] [--no-isort] [--profile]
|
471
|
-
[--no-profile] [--
|
472
|
-
[--
|
472
|
+
[--no-profile] [--unit-test] [--no-unit-test]
|
473
|
+
[--call-graphs | --no-call-graphs]
|
473
474
|
[--procs PROCS] [--root ROOT_DIR] [--verbose | --no-verbose | -v]
|
474
475
|
|
475
476
|
Runs the Lursight Lang test-suite
|
@@ -523,18 +524,8 @@ job-param overrides:
|
|
523
524
|
--no-isort turn off allow/disallows isort from running on python files
|
524
525
|
--profile generate profile information in jobs that can
|
525
526
|
--no-profile turn off generate profile information in jobs that can
|
526
|
-
--update-snapshots update snapshots in jobs that can update data snapshots
|
527
|
-
--no-update-snapshots
|
528
|
-
turn off update snapshots in jobs that can update data snapshots
|
529
527
|
--unit-test run unit tests
|
530
528
|
--no-unit-test turn off run unit tests
|
531
|
-
--unit-test-firebase-data
|
532
|
-
run unit tests for the firebase function's data
|
533
|
-
--no-unit-test-firebase-data
|
534
|
-
turn off run unit tests for the firebase function's data
|
535
|
-
--unit-test-python run unit tests for the python code
|
536
|
-
--no-unit-test-python
|
537
|
-
turn off run unit tests for the python code
|
538
529
|
```
|
539
530
|
</details>
|
540
531
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
## 1. Overview
|
8
8
|
|
9
|
-
The core objective of Run'em's is to minimize the wall-clock time required for
|
9
|
+
The core objective of Run'em's is to minimize the wall-clock time required for running checks, supporting [shift-left](https://en.wikipedia.org/wiki/Shift-left_testing). Overall it is designed to enhance iteration speed and boost developer productivity.
|
10
10
|
|
11
11
|
`runem` is also designed to be easy to learn and simple to use, but `runem` also has many powerful tools for advanced users.
|
12
12
|
|
@@ -139,7 +139,7 @@ Here's a simple setup for a python project.
|
|
139
139
|
type: bool
|
140
140
|
desc: formats docs and comments in whatever job can do so
|
141
141
|
- option:
|
142
|
-
name:
|
142
|
+
name: check-only
|
143
143
|
alias: check
|
144
144
|
default: false
|
145
145
|
type: bool
|
@@ -213,11 +213,11 @@ def _job_py_code_reformat(
|
|
213
213
|
docformatter_extra_args = [
|
214
214
|
"--in-place",
|
215
215
|
]
|
216
|
-
if
|
216
|
+
if options["check-only"]:
|
217
217
|
extra_args.append("--check")
|
218
218
|
docformatter_extra_args = [] # --inplace is not compatible with --check
|
219
219
|
|
220
|
-
if
|
220
|
+
if options["black"]:
|
221
221
|
black_cmd = [
|
222
222
|
"python3",
|
223
223
|
"-m",
|
@@ -228,7 +228,7 @@ def _job_py_code_reformat(
|
|
228
228
|
kwargs["label"] = f"{label} black"
|
229
229
|
run_command(cmd=black_cmd, **kwargs)
|
230
230
|
|
231
|
-
if
|
231
|
+
if options["docformatter"]:
|
232
232
|
docformatter_cmd = [
|
233
233
|
"python3",
|
234
234
|
"-m",
|
@@ -245,7 +245,7 @@ def _job_py_code_reformat(
|
|
245
245
|
0, # no work/change required
|
246
246
|
3, # no errors, but code was reformatted
|
247
247
|
)
|
248
|
-
if
|
248
|
+
if options["check-only"]:
|
249
249
|
# in check it is ONLY ok if no work/change was required
|
250
250
|
allowed_exits = (0,)
|
251
251
|
kwargs["label"] = f"{label} docformatter"
|
@@ -367,12 +367,12 @@ runem: reports:
|
|
367
367
|
runem: runem: 8.820488s
|
368
368
|
runem: ├runem.pre-build: 0.019031s
|
369
369
|
runem: ├runem.run-phases: 8.801317s
|
370
|
-
runem: ├pre-run (
|
370
|
+
runem: ├pre-run (user-time): 0.00498s
|
371
371
|
runem: │├pre-run.install python requirements: 2.6e-05s
|
372
372
|
runem: │├pre-run.ls -alh runem: 0.004954s
|
373
|
-
runem: ├edit (
|
373
|
+
runem: ├edit (user-time): 0.557559s
|
374
374
|
runem: │├edit.reformat py: 0.557559s
|
375
|
-
runem: ├analysis (
|
375
|
+
runem: ├analysis (user-time): 21.526145s
|
376
376
|
runem: │├analysis.pylint py: 7.457029s
|
377
377
|
runem: │├analysis.flake8 py: 0.693754s
|
378
378
|
runem: │├analysis.mypy py: 1.071956s
|
@@ -397,12 +397,12 @@ runem: reports:
|
|
397
397
|
runem [14.174612] ███████████████▋
|
398
398
|
├runem.pre-build [ 0.025858]
|
399
399
|
├runem.run-phases [14.148587] ███████████████▋
|
400
|
-
├pre-run (
|
400
|
+
├pre-run (user-time) [ 0.005825]
|
401
401
|
│├pre-run.install python requirements [ 0.000028]
|
402
402
|
│├pre-run.ls -alh runem [ 0.005797]
|
403
|
-
├edit (
|
403
|
+
├edit (user-time) [ 0.579153] ▋
|
404
404
|
│├edit.reformat py [ 0.579153] ▋
|
405
|
-
├analysis (
|
405
|
+
├analysis (user-time) [36.231034] ████████████████████████████████████████
|
406
406
|
│├analysis.pylint py [12.738303] ██████████████▏
|
407
407
|
│├analysis.flake8 py [ 0.798575] ▉
|
408
408
|
│├analysis.mypy py [ 0.335984] ▍
|
@@ -435,8 +435,8 @@ usage: runem.py [-h] [--jobs JOBS [JOBS ...]] [--not-jobs JOBS_EXCLUDED [JOBS_EX
|
|
435
435
|
[--not-phases PHASES_EXCLUDED [PHASES_EXCLUDED ...]] [--tags TAGS [TAGS ...]] [--not-tags TAGS_EXCLUDED [TAGS_EXCLUDED ...]]
|
436
436
|
[--black] [--no-black] [--check-only] [--no-check-only] [--coverage] [--no-coverage] [--docformatter] [--no-docformatter]
|
437
437
|
[--generate-call-graphs] [--no-generate-call-graphs] [--install-deps] [--no-install-deps] [--isort] [--no-isort] [--profile]
|
438
|
-
[--no-profile] [--
|
439
|
-
[--
|
438
|
+
[--no-profile] [--unit-test] [--no-unit-test]
|
439
|
+
[--call-graphs | --no-call-graphs]
|
440
440
|
[--procs PROCS] [--root ROOT_DIR] [--verbose | --no-verbose | -v]
|
441
441
|
|
442
442
|
Runs the Lursight Lang test-suite
|
@@ -490,18 +490,8 @@ job-param overrides:
|
|
490
490
|
--no-isort turn off allow/disallows isort from running on python files
|
491
491
|
--profile generate profile information in jobs that can
|
492
492
|
--no-profile turn off generate profile information in jobs that can
|
493
|
-
--update-snapshots update snapshots in jobs that can update data snapshots
|
494
|
-
--no-update-snapshots
|
495
|
-
turn off update snapshots in jobs that can update data snapshots
|
496
493
|
--unit-test run unit tests
|
497
494
|
--no-unit-test turn off run unit tests
|
498
|
-
--unit-test-firebase-data
|
499
|
-
run unit tests for the firebase function's data
|
500
|
-
--no-unit-test-firebase-data
|
501
|
-
turn off run unit tests for the firebase function's data
|
502
|
-
--unit-test-python run unit tests for the python code
|
503
|
-
--no-unit-test-python
|
504
|
-
turn off run unit tests for the python code
|
505
495
|
```
|
506
496
|
</details>
|
507
497
|
|
@@ -0,0 +1 @@
|
|
1
|
+
0.0.30
|
@@ -6,7 +6,7 @@ import typing
|
|
6
6
|
|
7
7
|
from runem.config_metadata import ConfigMetadata
|
8
8
|
from runem.informative_dict import InformativeDict
|
9
|
-
from runem.log import log
|
9
|
+
from runem.log import error, log
|
10
10
|
from runem.runem_version import get_runem_version
|
11
11
|
from runem.types import JobNames, OptionConfig, OptionsWritable
|
12
12
|
from runem.utils import printable_set
|
@@ -22,7 +22,12 @@ def parse_args(
|
|
22
22
|
|
23
23
|
Returns the parsed args, the jobs_names_to_run, job_phases_to_run, job_tags_to_run
|
24
24
|
"""
|
25
|
-
parser = argparse.ArgumentParser(
|
25
|
+
parser = argparse.ArgumentParser(
|
26
|
+
add_help=False, description="Runs the Lursight Lang test-suite"
|
27
|
+
)
|
28
|
+
parser.add_argument(
|
29
|
+
"-H", "--help", action="help", help="show this help message and exit"
|
30
|
+
)
|
26
31
|
|
27
32
|
job_group = parser.add_argument_group("jobs")
|
28
33
|
all_job_names: JobNames = set(name for name in config_metadata.all_job_names)
|
@@ -112,6 +117,26 @@ def parse_args(
|
|
112
117
|
required=False,
|
113
118
|
)
|
114
119
|
|
120
|
+
parser.add_argument(
|
121
|
+
"-f",
|
122
|
+
"--modified-files-only",
|
123
|
+
dest="check_modified_files_only",
|
124
|
+
help="only use files that have changed",
|
125
|
+
action=argparse.BooleanOptionalAction,
|
126
|
+
default=False,
|
127
|
+
required=False,
|
128
|
+
)
|
129
|
+
|
130
|
+
parser.add_argument(
|
131
|
+
"-h",
|
132
|
+
"--git-head-files-only",
|
133
|
+
dest="check_head_files_only",
|
134
|
+
help="fast run of files",
|
135
|
+
action=argparse.BooleanOptionalAction,
|
136
|
+
default=False,
|
137
|
+
required=False,
|
138
|
+
)
|
139
|
+
|
115
140
|
parser.add_argument(
|
116
141
|
"--procs",
|
117
142
|
"-j",
|
@@ -206,9 +231,9 @@ def _validate_filters(
|
|
206
231
|
for name, name_list in (("--jobs", args.jobs), ("--not-jobs", args.jobs_excluded)):
|
207
232
|
for job_name in name_list:
|
208
233
|
if job_name not in config_metadata.all_job_names:
|
209
|
-
|
234
|
+
error(
|
210
235
|
(
|
211
|
-
f"
|
236
|
+
f"invalid job-name '{job_name}' for {name}, "
|
212
237
|
f"choose from one of {printable_set(config_metadata.all_job_names)}"
|
213
238
|
)
|
214
239
|
)
|
@@ -218,9 +243,9 @@ def _validate_filters(
|
|
218
243
|
for name, tag_list in (("--tags", args.tags), ("--not-tags", args.tags_excluded)):
|
219
244
|
for tag in tag_list:
|
220
245
|
if tag not in config_metadata.all_job_tags:
|
221
|
-
|
246
|
+
error(
|
222
247
|
(
|
223
|
-
f"
|
248
|
+
f"invalid tag '{tag}' for {name}, "
|
224
249
|
f"choose from one of {printable_set(config_metadata.all_job_tags)}"
|
225
250
|
)
|
226
251
|
)
|
@@ -233,9 +258,9 @@ def _validate_filters(
|
|
233
258
|
):
|
234
259
|
for phase in phase_list:
|
235
260
|
if phase not in config_metadata.all_job_phases:
|
236
|
-
|
261
|
+
error(
|
237
262
|
(
|
238
|
-
f"
|
263
|
+
f"invalid phase '{phase}' for {name}, "
|
239
264
|
f"choose from one of {printable_set(config_metadata.all_job_phases)}"
|
240
265
|
)
|
241
266
|
)
|