This caches the virtual environment so we don't have to download it every time (the cache can be cleared from the repository > Actions > Caches (on the left).
We also split black formatting into a separate workflow.
This means we can run black ONLY when *.py files are changed.
It also means all other testing jobs don't need to _also_ check formatting.
* Make devtools deps extras, add note to internal ref docs, raise exception when deps missing
* Ensure dev extras are installed in GitHub Actions
* Update lockfile
* Add extra docs note
* Add a TODO about adding link to devtools docs
* Add click to dev extras dependencies in pyproject
Running the scripts with this package leads to the following cryptic error in our CI, when run in macOS:
```
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
```
(and Python's docs clearly state that this `freeze_support` function has no effect when invoked on any operating system other than Windows ¯\_(ツ)_/¯ )