service: dev: docs: build: Docs.sh port to dev.py cmd

This PR is made to close issue #1017
It is ready for review

Codecov Report

Merging #1054 (dc90d6f) into master (68aec70) will decrease coverage by 0.33%.
The diff coverage is 18.00%.

@@            Coverage Diff             @@
##           master    #1054      +/-   ##
==========================================
- Coverage   82.91%   82.58%   -0.34%
==========================================
  Files         150      150
  Lines        9729     9779      +50
  Branches     1644     1649       +5
==========================================
+ Hits         8067     8076       +9
- Misses       1319     1360      +41
  Partials      343      343

Impacted Files
Coverage Δ

dffml/service/dev.py
56.81% <18.00%> (-3.82%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 68aec70...dc90d6f. Read the comment docs.

All the 3 failing tests in CI  have the same error message as shown below :
+ dffml service dev docs
Running Sphinx v3.5.3
making output directory... done
loading intersphinx inventory from https://docs.python.org/3/objects.inv...
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 184 source files that are out of date
updating environment: [new config] 184 added, 0 changed, 0 removed
reading sources... [  0%] about
reading sources... [  1%] api/base
reading sources... [  1%] api/cli/cli
reading sources... [  2%] api/cli/config
reading sources... [  2%] api/cli/dataflow
reading sources... [  3%] api/cli/index
reading sources... [  3%] api/cli/list
reading sources... [  4%] api/cli/log
reading sources... [  4%] api/cli/ml
reading sources... [  5%] api/configloader/configloader
reading sources... [  5%] api/configloader/index
reading sources... [  6%] api/configloader/json
reading sources... [  7%] api/db/base
reading sources... [  7%] api/db/index
reading sources... [  8%] api/db/sql
reading sources... [  8%] api/db/sqlite
reading sources... [  9%] api/df/base
reading sources... [  9%] api/df/exceptions
reading sources... [ 10%] api/df/index
reading sources... [ 10%] api/df/log
reading sources... [ 11%] api/df/memory
reading sources... [ 11%] api/df/multicomm
reading sources... [ 12%] api/df/types
reading sources... [ 13%] api/feature/feature
reading sources... [ 13%] api/feature/index
reading sources... [ 14%] api/feature/log
reading sources... [ 14%] api/high_level
reading sources... [ 15%] api/index
reading sources... [ 15%] api/log
reading sources... [ 16%] api/model/accuracy
reading sources... [ 16%] api/model/index
reading sources... [ 17%] api/model/log
reading sources... [ 17%] api/model/model
reading sources... [ 18%] api/model/slr
reading sources... [ 19%] api/noasync
reading sources... [ 19%] api/operation/dataflow
reading sources... [ 20%] api/operation/db
reading sources... [ 20%] api/operation/index
reading sources... [ 21%] api/operation/io
reading sources... [ 21%] api/operation/log
reading sources... [ 22%] api/operation/mapping
reading sources... [ 22%] api/operation/math
reading sources... [ 23%] api/operation/model
reading sources... [ 23%] api/operation/output
reading sources... [ 24%] api/operation/preprocess
reading sources... [ 25%] api/plugins
reading sources... [ 25%] api/port/index
reading sources... [ 26%] api/port/json
reading sources... [ 26%] api/port/log
reading sources... [ 27%] api/port/port
reading sources... [ 27%] api/record
reading sources... [ 28%] api/secret/base
reading sources... [ 28%] api/secret/index
reading sources... [ 29%] api/secret/ini
reading sources... [ 29%] api/service/dev
reading sources... [ 30%] api/service/index
reading sources... [ 30%] api/source/csv
reading sources... [ 31%] api/source/dataset/base
reading sources... [ 32%] api/source/dataset/index
reading sources... [ 32%] api/source/dataset/iris
reading sources... [ 33%] api/source/db
reading sources... [ 33%] api/source/df
reading sources... [ 34%] api/source/dir
reading sources... [ 34%] api/source/file
reading sources... [ 35%] api/source/idx1
reading sources... [ 35%] api/source/idx3
reading sources... [ 36%] api/source/index
reading sources... [ 36%] api/source/ini
reading sources... [ 37%] api/source/json
reading sources... [ 38%] api/source/log
reading sources... [ 38%] api/source/memory
reading sources... [ 39%] api/source/op
reading sources... [ 39%] api/source/source
reading sources... [ 40%] api/source/wrapper
reading sources... [ 40%] api/util/asynchelper
reading sources... [ 41%] api/util/asynctestcase
reading sources... [ 41%] api/util/cli/arg
reading sources... [ 42%] api/util/cli/cmd
reading sources... [ 42%] api/util/cli/cmds
reading sources... [ 43%] api/util/cli/index
reading sources... [ 44%] api/util/cli/log
reading sources... [ 44%] api/util/cli/parser
reading sources... [ 45%] api/util/config/exceptions
reading sources... [ 45%] api/util/config/fields
reading sources... [ 46%] api/util/config/index
reading sources... [ 46%] api/util/config/inspect
reading sources... [ 47%] api/util/config/numpy
reading sources... [ 47%] api/util/crypto
reading sources... [ 48%] api/util/data
reading sources... [ 48%] api/util/display
reading sources... [ 49%] api/util/entrypoint
reading sources... [ 50%] api/util/file
reading sources... [ 50%] api/util/index
reading sources... [ 51%] api/util/log
reading sources... [ 51%] api/util/net
reading sources... [ 52%] api/util/os
reading sources... [ 52%] api/util/packaging
reading sources... [ 53%] api/util/skel
reading sources... [ 53%] api/util/tempdir
reading sources... [ 54%] api/util/testing/consoletest/builder
reading sources... [ 54%] api/util/testing/consoletest/cli
reading sources... [ 55%] api/util/testing/consoletest/commands
reading sources... [ 55%] api/util/testing/consoletest/directives
reading sources... [ 56%] api/util/testing/consoletest/index
reading sources... [ 57%] api/util/testing/consoletest/parser
reading sources... [ 57%] api/util/testing/consoletest/runner
reading sources... [ 58%] api/util/testing/consoletest/util
reading sources... [ 58%] api/util/testing/docs
reading sources... [ 59%] api/util/testing/index
reading sources... [ 59%] api/util/testing/source
reading sources... [ 60%] api/version
reading sources... [ 60%] changelog
reading sources... [ 61%] cli
reading sources... [ 61%] concepts/dataflow
reading sources... [ 62%] concepts/index
reading sources... [ 63%] contact
reading sources... [ 63%] contributing/codebase
reading sources... [ 64%] contributing/consoletest
reading sources... [ 64%] contributing/debugging
reading sources... [ 65%] contributing/dev_community
reading sources... [ 65%] contributing/dev_env
reading sources... [ 66%] contributing/docs
reading sources... [ 66%] contributing/editors/index
reading sources... [ 67%] contributing/editors/vscode
reading sources... [ 67%] contributing/git
reading sources... [ 68%] contributing/gsoc/2019
reading sources... [ 69%] contributing/gsoc/2020
reading sources... [ 69%] contributing/gsoc/2021/archive_storage
reading sources... [ 70%] contributing/gsoc/2021/automl
reading sources... [ 70%] contributing/gsoc/2021/cleanup_dataflows
reading sources... [ 71%] contributing/gsoc/2021/dataflow_event_types
reading sources... [ 71%] contributing/gsoc/2021/index
reading sources... [ 72%] contributing/gsoc/index
reading sources... [ 72%] contributing/gsoc/rubric
reading sources... [ 73%] contributing/index
reading sources... [ 73%] contributing/maintainers
reading sources... [ 74%] contributing/style
reading sources... [ 75%] contributing/testing
reading sources... [ 75%] examples/dataflows
reading sources... [ 76%] examples/flower17/flower17
reading sources... [ 76%] examples/flower17/flower17_pytorch
reading sources... [ 77%] examples/flower17/flower17_scikit
reading sources... [ 77%] examples/index
reading sources... [ 78%] examples/integration
reading sources... [ 78%] examples/mnist
reading sources... [ 79%] examples/or_covid_data_by_county
reading sources... [ 79%] examples/shouldi
reading sources... [ 80%] examples/webhook/deploy
reading sources... [ 80%] examples/webhook/index
reading sources... [ 81%] examples/webhook/webhook
reading sources... [ 82%] index
reading sources... [ 82%] installation
reading sources... [ 83%] news/0_4_0_alpha_release
reading sources... [ 83%] news/index
reading sources... [ 84%] plugins/index
reading sources... [ 84%] plugins/service/http/api
reading sources... [ 85%] plugins/service/http/cli
reading sources... [ 85%] plugins/service/http/dataflow
reading sources... [ 86%] plugins/service/http/index
reading sources... [ 86%] plugins/service/http/javascript
reading sources... [ 87%] plugins/service/http/python
reading sources... [ 88%] plugins/service/http/security
reading sources... [ 88%] publications
reading sources... [ 89%] quickstart/model
reading sources... [ 89%] shouldi
reading sources... [ 90%] swportal
reading sources... [ 90%] troubleshooting
reading sources... [ 91%] tutorials/dataflows/chatbot
reading sources... [ 91%] tutorials/dataflows/index
reading sources... [ 92%] tutorials/dataflows/io
reading sources... [ 92%] tutorials/dataflows/locking
reading sources... [ 93%] tutorials/dataflows/nlp
reading sources... [ 94%] tutorials/doublecontextentry
reading sources... [ 94%] tutorials/index
reading sources... [ 95%] tutorials/models/docs
reading sources... [ 95%] tutorials/models/index
reading sources... [ 96%] tutorials/models/iris
reading sources... [ 96%] tutorials/models/load
reading sources... [ 97%] tutorials/models/package
reading sources... [ 97%] tutorials/models/slr
reading sources... [ 98%] tutorials/neuralnetwork
reading sources... [ 98%] tutorials/sources/complex
reading sources... [ 99%] tutorials/sources/file
reading sources... [100%] tutorials/sources/index

/opt/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))

Warning, treated as error:
/home/runner/work/dffml/dffml/docs/plugins/index.rst:12:toctree contains reference to nonexisting document 'plugins/dffml_source'
$ sphinx-build -W -b html docs pages
Traceback (most recent call last):
  File "/home/runner/.local/bin/dffml", line 33, in <module>
    sys.exit(load_entry_point('dffml', 'console_scripts', 'dffml')())
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 288, in main
    result = loop.run_until_complete(cls._main(*argv[1:]))
  File "/opt/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 238, in _main
    result = await cls.cli(*args)
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/home/runner/work/dffml/dffml/dffml/service/dev.py", line 1136, in run
    raise SphinxBuildError
Error: ervice.dev.SphinxBuildError: [ERROR] Failed run sphinx, is it installed (pip install -U .[dev])?
+ cleanup_temp_dirs
+ '[' x '!=' x ']'
+ for temp_dir in ${TEMP_DIRS[@]}
+ rm -rf /tmp/tmp.nZkfty40jw
+ for temp_dir in ${TEMP_DIRS[@]}
+ rm -rf /tmp/tmp.rIrjN0iLXt
Error: Process completed with exit code 1.

I am looking into it , it'd be really great if you can give any inputs on how to resolve it ...... 🙂

test (examples/shouldi, 3.7) & test (examples/shouldi, 3.8) are also failing in CI , but the error is not shown in the logs available online , so I have downloaded the outputs and am looking into both of em as well , would update this message soon.

Both of my tests written to check docs CMD are failing in  macos (3.7) with the following errors:

macos (3.7) error

======================================================================
ERROR: test_cmd_seq (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 419, in test_cmd_seq
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1138, in run
    returncode = await self._exec_cmd(cmd)
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1094, in _exec_cmd
    proc = await asyncio.create_subprocess_exec(*cmd)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/subprocess.py", line 217, in create_subprocess_exec
    stderr=stderr, **kwds)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 1544, in subprocess_exec
    bufsize, **kwargs)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/unix_events.py", line 193, in _make_subprocess_transport
    self._child_watcher_callback, transp)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/unix_events.py", line 941, in add_child_handler
    "Cannot add child handler, "
RuntimeError: Cannot add child handler, the child watcher does not have a loop attached

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 427, in test_cmd_seq
    """
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/tempfile.py", line 807, in __exit__
    self.cleanup()
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/tempfile.py", line 811, in cleanup
    _shutil.rmtree(self.name)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/shutil.py", line 485, in rmtree
    onerror(os.lstat, path, sys.exc_info())
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/shutil.py", line 483, in rmtree
    orig_st = os.lstat(path)
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp_2g4nkt_'

======================================================================
ERROR: test_files (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 400, in test_files
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1138, in run
    returncode = await self._exec_cmd(cmd)
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1094, in _exec_cmd
    proc = await asyncio.create_subprocess_exec(*cmd)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/subprocess.py", line 217, in create_subprocess_exec
    stderr=stderr, **kwds)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 1544, in subprocess_exec
    bufsize, **kwargs)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/unix_events.py", line 193, in _make_subprocess_transport
    self._child_watcher_callback, transp)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/unix_events.py", line 941, in add_child_handler
    "Cannot add child handler, "
RuntimeError: Cannot add child handler, the child watcher does not have a loop attached

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 410, in test_files
    self.assertTrue(file_path.exists())
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/tempfile.py", line 807, in __exit__
    self.cleanup()
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/tempfile.py", line 811, in cleanup
    _shutil.rmtree(self.name)
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/shutil.py", line 485, in rmtree
    onerror(os.lstat, path, sys.exc_info())
  File "/Users/runner/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/shutil.py", line 483, in rmtree
    orig_st = os.lstat(path)
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmpdvbdrmow'

Both of my tests written to check docs CMD are failing in  macos (3.8) with the following errors:

macos (3.8) error

======================================================================
ERROR: test_cmd_seq (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
$ /Users/runner/hostedtoolcache/Python/3.8.8/x64/bin/python /Users/runner/work/dffml/dffml/scripts/docs.py
  File "/Users/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/Users/runner/hostedtoolcache/Python/3.8.8/x64/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 419, in test_cmd_seq
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1140, in run
    raise RuntimeError
RuntimeError

======================================================================
ERROR: test_files (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/Users/runner/hostedtoolcache/Python/3.8.8/x64/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/Users/runner/work/dffml/dffml/tests/service/test_dev.py", line 400, in test_files
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/Users/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/Users/runner/work/dffml/dffml/dffml/service/dev.py", line 1140, in run
    raise RuntimeError
RuntimeError

Both of my tests written to check docs CMD are failing in  test (., 3.8) with the following errors:

test (., 3.8) error

======================================================================
ERROR: test_cmd_seq (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/opt/hostedtoolcache/Python/3.8.8/x64/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/runner/work/dffml/dffml/tests/service/test_dev.py", line 419, in test_cmd_seq
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/home/runner/work/dffml/dffml/dffml/service/dev.py", line 1156, in run
    raise SphinxBuildError
Error: ervice.dev.SphinxBuildError: [ERROR] Failed run sphinx, is it installed (pip install -U .[dev])?

======================================================================
ERROR: test_files (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/opt/hostedtoolcache/Python/3.8.8/x64/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/runner/work/dffml/dffml/tests/service/test_dev.py", line 400, in test_files
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/home/runner/work/dffml/dffml/dffml/service/dev.py", line 1156, in run
    raise SphinxBuildError
Error: ervice.dev.SphinxBuildError: [ERROR] Failed run sphinx, is it installed (pip install -U .[dev])?

----------------------------------------------------------------------

Both of my tests written to check docs CMD are failing in  test (., 3.7) with the following errors:

test (., 3.8) error

======================================================================
ERROR: test_cmd_seq (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/opt/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/home/runner/work/dffml/dffml/tests/service/test_dev.py", line 419, in test_cmd_seq
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/home/runner/work/dffml/dffml/dffml/service/dev.py", line 1156, in run
    raise SphinxBuildError
Error: ervice.dev.SphinxBuildError: [ERROR] Failed run sphinx, is it installed (pip install -U .[dev])?

======================================================================
ERROR: test_files (tests.service.test_dev.TestMakeDocs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/dffml/dffml/dffml/util/asynctestcase.py", line 69, in run_it
    result = self.loop.run_until_complete(coro(*args, **kwargs))
  File "/opt/hostedtoolcache/Python/3.7.10/x64/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/home/runner/work/dffml/dffml/tests/service/test_dev.py", line 400, in test_files
    await Develop.cli("docs", "-target-dir", tempdir)
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 224, in cli
    return await cmd.do_run()
  File "/home/runner/work/dffml/dffml/dffml/util/cli/cmd.py", line 203, in do_run
    return await self.run()
  File "/home/runner/work/dffml/dffml/dffml/service/dev.py", line 1156, in run
    raise SphinxBuildError
Error: ervice.dev.SphinxBuildError: [ERROR] Failed run sphinx, is it installed (pip install -U .[dev])?

----------------------------------------------------------------------

lint (docs, 3.7, 12.x) is failing because of checkout to older version when this cmd was not there.

I am looking into and working to resolve errors in the tests mentioned above , any input would be highly appreciated :)

Update :
✅  Solved the testing issue and now macos (3.7) , macos (3.8), test (., 3.7) & test (., 3.8)  all are passing.
✅  Code coverage change is now Positive

Great work! Thank you!