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.
Files changed (71) hide show
  1. {runem-0.0.28 → runem-0.0.30}/HISTORY.md +228 -0
  2. {runem-0.0.28 → runem-0.0.30}/PKG-INFO +25 -34
  3. {runem-0.0.28 → runem-0.0.30}/README.md +14 -24
  4. runem-0.0.30/runem/VERSION +1 -0
  5. {runem-0.0.28 → runem-0.0.30}/runem/cli.py +1 -0
  6. {runem-0.0.28 → runem-0.0.30}/runem/command_line.py +33 -8
  7. {runem-0.0.28 → runem-0.0.30}/runem/config.py +58 -9
  8. {runem-0.0.28 → runem-0.0.30}/runem/config_metadata.py +8 -0
  9. {runem-0.0.28 → runem-0.0.30}/runem/config_parse.py +188 -13
  10. {runem-0.0.28 → runem-0.0.30}/runem/files.py +32 -7
  11. runem-0.0.30/runem/hook_manager.py +116 -0
  12. {runem-0.0.28 → runem-0.0.30}/runem/job_execute.py +49 -26
  13. {runem-0.0.28 → runem-0.0.30}/runem/job_filter.py +2 -2
  14. {runem-0.0.28 → runem-0.0.30}/runem/job_runner_simple_command.py +7 -1
  15. runem-0.0.30/runem/job_wrapper.py +25 -0
  16. {runem-0.0.28 → runem-0.0.30}/runem/job_wrapper_python.py +7 -7
  17. {runem-0.0.28 → runem-0.0.30}/runem/log.py +8 -0
  18. runem-0.0.30/runem/report.py +256 -0
  19. {runem-0.0.28 → runem-0.0.30}/runem/run_command.py +18 -0
  20. {runem-0.0.28 → runem-0.0.30}/runem/runem.py +46 -19
  21. {runem-0.0.28 → runem-0.0.30}/runem/types.py +62 -5
  22. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/PKG-INFO +25 -34
  23. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/SOURCES.txt +5 -1
  24. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/requires.txt +10 -9
  25. {runem-0.0.28 → runem-0.0.30}/setup.py +1 -0
  26. {runem-0.0.28 → runem-0.0.30}/tests/cli/test_initialise_options.py +2 -0
  27. runem-0.0.28/tests/data/help_output.txt → runem-0.0.30/tests/data/help_output.3.10.txt +8 -2
  28. runem-0.0.30/tests/data/help_output.3.11.txt +77 -0
  29. runem-0.0.30/tests/sanitise_reports_footer.py +20 -0
  30. {runem-0.0.28 → runem-0.0.30}/tests/test_config.py +74 -9
  31. {runem-0.0.28 → runem-0.0.30}/tests/test_config_parse.py +319 -16
  32. runem-0.0.30/tests/test_files.py +87 -0
  33. runem-0.0.30/tests/test_hook_manager.py +198 -0
  34. {runem-0.0.28 → runem-0.0.30}/tests/test_job_execute.py +50 -48
  35. {runem-0.0.28 → runem-0.0.30}/tests/test_job_filter.py +26 -6
  36. {runem-0.0.28 → runem-0.0.30}/tests/test_job_wrapper.py +1 -1
  37. runem-0.0.30/tests/test_report.py +238 -0
  38. {runem-0.0.28 → runem-0.0.30}/tests/test_run_command.py +12 -1
  39. {runem-0.0.28 → runem-0.0.30}/tests/test_runem.py +628 -111
  40. runem-0.0.28/runem/VERSION +0 -1
  41. runem-0.0.28/runem/job_wrapper.py +0 -19
  42. runem-0.0.28/runem/report.py +0 -145
  43. runem-0.0.28/tests/test_files.py +0 -36
  44. runem-0.0.28/tests/test_report.py +0 -126
  45. {runem-0.0.28 → runem-0.0.30}/Containerfile +0 -0
  46. {runem-0.0.28 → runem-0.0.30}/LICENSE +0 -0
  47. {runem-0.0.28 → runem-0.0.30}/MANIFEST.in +0 -0
  48. {runem-0.0.28 → runem-0.0.30}/runem/__init__.py +0 -0
  49. {runem-0.0.28 → runem-0.0.30}/runem/__main__.py +0 -0
  50. {runem-0.0.28 → runem-0.0.30}/runem/base.py +0 -0
  51. {runem-0.0.28 → runem-0.0.30}/runem/blocking_print.py +0 -0
  52. {runem-0.0.28 → runem-0.0.30}/runem/cli/initialise_options.py +0 -0
  53. {runem-0.0.28 → runem-0.0.30}/runem/informative_dict.py +0 -0
  54. {runem-0.0.28 → runem-0.0.30}/runem/job.py +0 -0
  55. {runem-0.0.28 → runem-0.0.30}/runem/py.typed +0 -0
  56. {runem-0.0.28 → runem-0.0.30}/runem/runem_version.py +0 -0
  57. {runem-0.0.28 → runem-0.0.30}/runem/utils.py +0 -0
  58. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/dependency_links.txt +0 -0
  59. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/entry_points.txt +0 -0
  60. {runem-0.0.28 → runem-0.0.30}/runem.egg-info/top_level.txt +0 -0
  61. {runem-0.0.28 → runem-0.0.30}/setup.cfg +0 -0
  62. {runem-0.0.28 → runem-0.0.30}/tests/__init__.py +0 -0
  63. {runem-0.0.28 → runem-0.0.30}/tests/conftest.py +0 -0
  64. {runem-0.0.28 → runem-0.0.30}/tests/intentional_test_error.py +0 -0
  65. {runem-0.0.28 → runem-0.0.30}/tests/test_base.py +0 -0
  66. {runem-0.0.28 → runem-0.0.30}/tests/test_blocking_print.py +0 -0
  67. {runem-0.0.28 → runem-0.0.30}/tests/test_cli.py +0 -0
  68. {runem-0.0.28 → runem-0.0.30}/tests/test_informative_dict.py +0 -0
  69. {runem-0.0.28 → runem-0.0.30}/tests/test_job.py +0 -0
  70. {runem-0.0.28 → runem-0.0.30}/tests/test_job_runner_simple_command.py +0 -0
  71. {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.28
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==23.11.0; extra == "test"
14
- Requires-Dist: coverage==7.3.2; extra == "test"
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.12.0; extra == "test"
19
+ Requires-Dist: isort==5.13.2; extra == "test"
20
20
  Requires-Dist: mkdocs==1.5.3; extra == "test"
21
- Requires-Dist: mypy==1.8.0; extra == "test"
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.2; extra == "test"
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.3.1; extra == "test"
28
- Requires-Dist: pytest==7.4.3; extra == "test"
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.12; extra == "test"
31
- Requires-Dist: requests-mock==1.10.0; extra == "test"
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 executing whatever command-line tools a developer uses (or *should* use). Overall it is designed to enhance iteration speed and boost developer productivity.
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: check_only
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 "check_only" in options and options["check_only"]:
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 "black" in options and options["black"]:
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 "docformatter" in options and options["docformatter"]:
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 "check_only" in options and options["check_only"]:
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 (total): 0.00498s
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 (total): 0.557559s
407
+ runem: ├edit (user-time): 0.557559s
407
408
  runem: │├edit.reformat py: 0.557559s
408
- runem: ├analysis (total): 21.526145s
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 (total) [ 0.005825]
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 (total) [ 0.579153] ▋
437
+ ├edit (user-time) [ 0.579153] ▋
437
438
  │├edit.reformat py [ 0.579153] ▋
438
- ├analysis (total) [36.231034] ████████████████████████████████████████
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] [--update-snapshots] [--no-update-snapshots] [--unit-test] [--no-unit-test] [--unit-test-firebase-data]
472
- [--no-unit-test-firebase-data] [--unit-test-python] [--no-unit-test-python] [--call-graphs | --no-call-graphs]
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 executing whatever command-line tools a developer uses (or *should* use). Overall it is designed to enhance iteration speed and boost developer productivity.
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: check_only
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 "check_only" in options and options["check_only"]:
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 "black" in options and options["black"]:
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 "docformatter" in options and options["docformatter"]:
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 "check_only" in options and options["check_only"]:
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 (total): 0.00498s
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 (total): 0.557559s
373
+ runem: ├edit (user-time): 0.557559s
374
374
  runem: │├edit.reformat py: 0.557559s
375
- runem: ├analysis (total): 21.526145s
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 (total) [ 0.005825]
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 (total) [ 0.579153] ▋
403
+ ├edit (user-time) [ 0.579153] ▋
404
404
  │├edit.reformat py [ 0.579153] ▋
405
- ├analysis (total) [36.231034] ████████████████████████████████████████
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] [--update-snapshots] [--no-update-snapshots] [--unit-test] [--no-unit-test] [--unit-test-firebase-data]
439
- [--no-unit-test-firebase-data] [--unit-test-python] [--no-unit-test-python] [--call-graphs | --no-call-graphs]
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
@@ -1,4 +1,5 @@
1
1
  """CLI interface for runem project."""
2
+
2
3
  import sys
3
4
 
4
5
  from runem.runem import timed_main
@@ -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(description="Runs the Lursight Lang test-suite")
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
- log(
234
+ error(
210
235
  (
211
- f"ERROR: invalid job-name '{job_name}' for {name}, "
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
- log(
246
+ error(
222
247
  (
223
- f"ERROR: invalid tag '{tag}' for {name}, "
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
- log(
261
+ error(
237
262
  (
238
- f"ERROR: invalid phase '{phase}' for {name}, "
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
  )