coverage 7.16.2__tar.gz → 7.17.0__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 (422) hide show
  1. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/codeql-analysis.yml +3 -3
  2. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/coverage.yml +16 -20
  3. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/kit.yml +55 -31
  4. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/publish.yml +3 -3
  5. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/quality.yml +3 -3
  6. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/testsuite.yml +43 -3
  7. {coverage-7.16.2 → coverage-7.17.0}/.gitignore +2 -0
  8. {coverage-7.16.2 → coverage-7.17.0}/.pre-commit-config.yaml +1 -2
  9. {coverage-7.16.2 → coverage-7.17.0}/CHANGES.rst +105 -0
  10. {coverage-7.16.2 → coverage-7.17.0}/CONTRIBUTORS.txt +1 -0
  11. {coverage-7.16.2 → coverage-7.17.0}/MANIFEST.in +2 -1
  12. {coverage-7.16.2 → coverage-7.17.0}/Makefile +6 -2
  13. {coverage-7.16.2/coverage.egg-info → coverage-7.17.0}/PKG-INFO +11 -13
  14. {coverage-7.16.2 → coverage-7.17.0}/README.rst +2 -2
  15. {coverage-7.16.2 → coverage-7.17.0}/coverage/__init__.py +4 -9
  16. {coverage-7.16.2 → coverage-7.17.0}/coverage/annotate.py +2 -0
  17. {coverage-7.16.2 → coverage-7.17.0}/coverage/bytecode.py +2 -2
  18. {coverage-7.16.2 → coverage-7.17.0}/coverage/cmdline.py +1 -1
  19. {coverage-7.16.2 → coverage-7.17.0}/coverage/config.py +10 -6
  20. {coverage-7.16.2 → coverage-7.17.0}/coverage/context.py +2 -4
  21. {coverage-7.16.2 → coverage-7.17.0}/coverage/control.py +3 -1
  22. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/filedisp.c +2 -0
  23. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/module.c +0 -2
  24. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/tracer.c +32 -25
  25. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/util.h +61 -4
  26. {coverage-7.16.2 → coverage-7.17.0}/coverage/data.py +7 -5
  27. {coverage-7.16.2 → coverage-7.17.0}/coverage/debug.py +1 -1
  28. {coverage-7.16.2 → coverage-7.17.0}/coverage/env.py +2 -0
  29. {coverage-7.16.2 → coverage-7.17.0}/coverage/exceptions.py +2 -0
  30. {coverage-7.16.2 → coverage-7.17.0}/coverage/execfile.py +2 -6
  31. {coverage-7.16.2 → coverage-7.17.0}/coverage/files.py +1 -1
  32. {coverage-7.16.2 → coverage-7.17.0}/coverage/html.py +2 -0
  33. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/coverage_html.js +44 -4
  34. {coverage-7.16.2 → coverage-7.17.0}/coverage/jsonreport.py +3 -1
  35. {coverage-7.16.2 → coverage-7.17.0}/coverage/lcovreport.py +7 -0
  36. {coverage-7.16.2 → coverage-7.17.0}/coverage/misc.py +15 -23
  37. {coverage-7.16.2 → coverage-7.17.0}/coverage/numbits.py +2 -0
  38. {coverage-7.16.2 → coverage-7.17.0}/coverage/parser.py +62 -57
  39. {coverage-7.16.2 → coverage-7.17.0}/coverage/phystokens.py +12 -10
  40. {coverage-7.16.2 → coverage-7.17.0}/coverage/pytracer.py +1 -1
  41. {coverage-7.16.2 → coverage-7.17.0}/coverage/regions.py +11 -3
  42. {coverage-7.16.2 → coverage-7.17.0}/coverage/report.py +10 -5
  43. {coverage-7.16.2 → coverage-7.17.0}/coverage/report_core.py +2 -0
  44. {coverage-7.16.2 → coverage-7.17.0}/coverage/results.py +2 -0
  45. {coverage-7.16.2 → coverage-7.17.0}/coverage/sqldata.py +43 -6
  46. {coverage-7.16.2 → coverage-7.17.0}/coverage/sqlitedb.py +13 -5
  47. {coverage-7.16.2 → coverage-7.17.0}/coverage/templite.py +2 -0
  48. {coverage-7.16.2 → coverage-7.17.0}/coverage/tomlconfig.py +7 -28
  49. {coverage-7.16.2 → coverage-7.17.0}/coverage/types.py +2 -0
  50. {coverage-7.16.2 → coverage-7.17.0}/coverage/version.py +1 -1
  51. {coverage-7.16.2 → coverage-7.17.0}/coverage/xmlreport.py +21 -6
  52. {coverage-7.16.2 → coverage-7.17.0/coverage.egg-info}/PKG-INFO +11 -13
  53. {coverage-7.16.2 → coverage-7.17.0}/coverage.egg-info/SOURCES.txt +10 -1
  54. coverage-7.17.0/coverage.egg-info/requires.txt +2 -0
  55. {coverage-7.16.2 → coverage-7.17.0}/doc/conf.py +3 -3
  56. {coverage-7.16.2 → coverage-7.17.0}/doc/config.rst +0 -4
  57. {coverage-7.16.2 → coverage-7.17.0}/doc/contributing.rst +8 -4
  58. {coverage-7.16.2 → coverage-7.17.0}/doc/index.rst +2 -2
  59. {coverage-7.16.2 → coverage-7.17.0}/doc/messages.rst +21 -0
  60. coverage-7.17.0/doc/requirements.txt +871 -0
  61. {coverage-7.16.2 → coverage-7.17.0}/pyproject.toml +12 -1
  62. {coverage-7.16.2 → coverage-7.17.0}/requirements/dev.in +1 -0
  63. coverage-7.17.0/requirements/dev.txt +1144 -0
  64. coverage-7.17.0/requirements/js.in +9 -0
  65. coverage-7.17.0/requirements/js.txt +101 -0
  66. coverage-7.17.0/requirements/kit.txt +555 -0
  67. {coverage-7.16.2 → coverage-7.17.0}/requirements/light-threads.txt +129 -129
  68. {coverage-7.16.2 → coverage-7.17.0}/requirements/mypy.in +3 -0
  69. coverage-7.17.0/requirements/mypy.txt +716 -0
  70. coverage-7.17.0/requirements/pip.txt +36 -0
  71. coverage-7.17.0/requirements/pytest.txt +347 -0
  72. coverage-7.17.0/requirements/tox.txt +74 -0
  73. {coverage-7.16.2 → coverage-7.17.0}/setup.py +7 -15
  74. {coverage-7.16.2 → coverage-7.17.0}/tests/conftest.py +2 -0
  75. {coverage-7.16.2 → coverage-7.17.0}/tests/coveragetest.py +2 -0
  76. {coverage-7.16.2 → coverage-7.17.0}/tests/goldtest.py +2 -0
  77. {coverage-7.16.2 → coverage-7.17.0}/tests/helpers.py +2 -16
  78. {coverage-7.16.2 → coverage-7.17.0}/tests/hypo.py +2 -6
  79. coverage-7.17.0/tests/js/collect_results.js +24 -0
  80. coverage-7.17.0/tests/js/run_js_tests.py +47 -0
  81. {coverage-7.16.2 → coverage-7.17.0}/tests/js/tests.js +40 -0
  82. {coverage-7.16.2 → coverage-7.17.0}/tests/mixins.py +5 -2
  83. {coverage-7.16.2 → coverage-7.17.0}/tests/osinfo.py +2 -0
  84. coverage-7.17.0/tests/oss-scanner/Dockerfile +41 -0
  85. coverage-7.17.0/tests/oss-scanner/README.rst +19 -0
  86. coverage-7.17.0/tests/oss-scanner/local_run.sh +19 -0
  87. coverage-7.17.0/tests/oss-scanner/project.yaml +8 -0
  88. coverage-7.17.0/tests/oss-scanner/threat_model.md +113 -0
  89. {coverage-7.16.2 → coverage-7.17.0}/tests/plugin_config.py +2 -0
  90. coverage-7.17.0/tests/smoke.py +20 -0
  91. {coverage-7.16.2 → coverage-7.17.0}/tests/strategies.py +2 -0
  92. {coverage-7.16.2 → coverage-7.17.0}/tests/test_api.py +35 -6
  93. {coverage-7.16.2 → coverage-7.17.0}/tests/test_arcs.py +121 -2
  94. {coverage-7.16.2 → coverage-7.17.0}/tests/test_config.py +1 -69
  95. {coverage-7.16.2 → coverage-7.17.0}/tests/test_context.py +5 -9
  96. {coverage-7.16.2 → coverage-7.17.0}/tests/test_data.py +92 -5
  97. {coverage-7.16.2 → coverage-7.17.0}/tests/test_filereporter.py +2 -1
  98. {coverage-7.16.2 → coverage-7.17.0}/tests/test_files.py +5 -0
  99. {coverage-7.16.2 → coverage-7.17.0}/tests/test_html.py +6 -5
  100. {coverage-7.16.2 → coverage-7.17.0}/tests/test_lcov.py +67 -20
  101. {coverage-7.16.2 → coverage-7.17.0}/tests/test_misc.py +0 -25
  102. {coverage-7.16.2 → coverage-7.17.0}/tests/test_oddball.py +101 -6
  103. {coverage-7.16.2 → coverage-7.17.0}/tests/test_parser.py +19 -0
  104. {coverage-7.16.2 → coverage-7.17.0}/tests/test_plugins.py +59 -0
  105. {coverage-7.16.2 → coverage-7.17.0}/tests/test_process.py +39 -5
  106. coverage-7.17.0/tests/test_regions.py +259 -0
  107. {coverage-7.16.2 → coverage-7.17.0}/tests/test_report.py +24 -6
  108. {coverage-7.16.2 → coverage-7.17.0}/tests/test_sqlitedb.py +1 -1
  109. {coverage-7.16.2 → coverage-7.17.0}/tests/test_venv.py +5 -3
  110. {coverage-7.16.2 → coverage-7.17.0}/tests/test_xml.py +79 -3
  111. {coverage-7.16.2 → coverage-7.17.0}/tests/testenv.py +10 -1
  112. {coverage-7.16.2 → coverage-7.17.0}/tox.ini +24 -11
  113. coverage-7.16.2/coverage.egg-info/requires.txt +0 -5
  114. coverage-7.16.2/doc/requirements.txt +0 -883
  115. coverage-7.16.2/requirements/dev.txt +0 -1114
  116. coverage-7.16.2/requirements/kit.txt +0 -542
  117. coverage-7.16.2/requirements/mypy.txt +0 -612
  118. coverage-7.16.2/requirements/pip.txt +0 -36
  119. coverage-7.16.2/requirements/pytest.txt +0 -340
  120. coverage-7.16.2/requirements/tox.txt +0 -125
  121. coverage-7.16.2/tests/qunit/jquery.tmpl.min.js +0 -10
  122. coverage-7.16.2/tests/test_regions.py +0 -112
  123. {coverage-7.16.2 → coverage-7.17.0}/.editorconfig +0 -0
  124. {coverage-7.16.2 → coverage-7.17.0}/.git-blame-ignore-revs +0 -0
  125. {coverage-7.16.2 → coverage-7.17.0}/.github/CODE_OF_CONDUCT.md +0 -0
  126. {coverage-7.16.2 → coverage-7.17.0}/.github/FUNDING.yml +0 -0
  127. {coverage-7.16.2 → coverage-7.17.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  128. {coverage-7.16.2 → coverage-7.17.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  129. {coverage-7.16.2 → coverage-7.17.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  130. {coverage-7.16.2 → coverage-7.17.0}/.github/ISSUE_TEMPLATE/support.md +0 -0
  131. {coverage-7.16.2 → coverage-7.17.0}/.github/SECURITY.md +0 -0
  132. {coverage-7.16.2 → coverage-7.17.0}/.github/dependabot.yml +0 -0
  133. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/dependency-review.yml +0 -0
  134. {coverage-7.16.2 → coverage-7.17.0}/.github/workflows/python-nightly.yml +0 -0
  135. {coverage-7.16.2 → coverage-7.17.0}/.github/zizmor.yml +0 -0
  136. {coverage-7.16.2 → coverage-7.17.0}/.ignore +0 -0
  137. {coverage-7.16.2 → coverage-7.17.0}/.readthedocs.yaml +0 -0
  138. {coverage-7.16.2 → coverage-7.17.0}/CITATION.cff +0 -0
  139. {coverage-7.16.2 → coverage-7.17.0}/LICENSE.txt +0 -0
  140. {coverage-7.16.2 → coverage-7.17.0}/NOTICE.txt +0 -0
  141. {coverage-7.16.2 → coverage-7.17.0}/__main__.py +0 -0
  142. {coverage-7.16.2 → coverage-7.17.0}/a1_coverage.pth +0 -0
  143. {coverage-7.16.2 → coverage-7.17.0}/ci/README.txt +0 -0
  144. {coverage-7.16.2 → coverage-7.17.0}/ci/comment_on_fixes.py +0 -0
  145. {coverage-7.16.2 → coverage-7.17.0}/ci/session.py +0 -0
  146. {coverage-7.16.2 → coverage-7.17.0}/ci/trigger_action.py +0 -0
  147. {coverage-7.16.2 → coverage-7.17.0}/ci/update_rtfd.py +0 -0
  148. {coverage-7.16.2 → coverage-7.17.0}/coverage/__main__.py +0 -0
  149. {coverage-7.16.2 → coverage-7.17.0}/coverage/collector.py +0 -0
  150. {coverage-7.16.2 → coverage-7.17.0}/coverage/core.py +0 -0
  151. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/datastack.c +0 -0
  152. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/datastack.h +0 -0
  153. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/filedisp.h +0 -0
  154. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/stats.h +0 -0
  155. {coverage-7.16.2 → coverage-7.17.0}/coverage/ctracer/tracer.h +0 -0
  156. {coverage-7.16.2 → coverage-7.17.0}/coverage/disposition.py +0 -0
  157. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/favicon_32.png +0 -0
  158. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/index.html +0 -0
  159. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/keybd_closed.png +0 -0
  160. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/pyfile.html +0 -0
  161. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/style.css +0 -0
  162. {coverage-7.16.2 → coverage-7.17.0}/coverage/htmlfiles/style.scss +0 -0
  163. {coverage-7.16.2 → coverage-7.17.0}/coverage/inorout.py +0 -0
  164. {coverage-7.16.2 → coverage-7.17.0}/coverage/multiproc.py +0 -0
  165. {coverage-7.16.2 → coverage-7.17.0}/coverage/patch.py +0 -0
  166. {coverage-7.16.2 → coverage-7.17.0}/coverage/plugin.py +0 -0
  167. {coverage-7.16.2 → coverage-7.17.0}/coverage/plugin_support.py +0 -0
  168. {coverage-7.16.2 → coverage-7.17.0}/coverage/pth_file.py +0 -0
  169. {coverage-7.16.2 → coverage-7.17.0}/coverage/py.typed +0 -0
  170. {coverage-7.16.2 → coverage-7.17.0}/coverage/python.py +0 -0
  171. {coverage-7.16.2 → coverage-7.17.0}/coverage/sysmon.py +0 -0
  172. {coverage-7.16.2 → coverage-7.17.0}/coverage/tracer.pyi +0 -0
  173. {coverage-7.16.2 → coverage-7.17.0}/coverage.egg-info/dependency_links.txt +0 -0
  174. {coverage-7.16.2 → coverage-7.17.0}/coverage.egg-info/entry_points.txt +0 -0
  175. {coverage-7.16.2 → coverage-7.17.0}/coverage.egg-info/not-zip-safe +0 -0
  176. {coverage-7.16.2 → coverage-7.17.0}/coverage.egg-info/top_level.txt +0 -0
  177. {coverage-7.16.2 → coverage-7.17.0}/doc/_static/coverage.css +0 -0
  178. {coverage-7.16.2 → coverage-7.17.0}/doc/api.rst +0 -0
  179. {coverage-7.16.2 → coverage-7.17.0}/doc/api_coverage.rst +0 -0
  180. {coverage-7.16.2 → coverage-7.17.0}/doc/api_coveragedata.rst +0 -0
  181. {coverage-7.16.2 → coverage-7.17.0}/doc/api_exceptions.rst +0 -0
  182. {coverage-7.16.2 → coverage-7.17.0}/doc/api_module.rst +0 -0
  183. {coverage-7.16.2 → coverage-7.17.0}/doc/api_plugin.rst +0 -0
  184. {coverage-7.16.2 → coverage-7.17.0}/doc/branch.rst +0 -0
  185. {coverage-7.16.2 → coverage-7.17.0}/doc/changes.rst +0 -0
  186. {coverage-7.16.2 → coverage-7.17.0}/doc/cog_helpers.py +0 -0
  187. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_annotate.rst +0 -0
  188. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_combine.rst +0 -0
  189. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_debug.rst +0 -0
  190. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_erase.rst +0 -0
  191. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_html.rst +0 -0
  192. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_json.rst +0 -0
  193. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_lcov.rst +0 -0
  194. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_report.rst +0 -0
  195. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_reporting.rst +0 -0
  196. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_run.rst +0 -0
  197. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/cmd_xml.rst +0 -0
  198. {coverage-7.16.2 → coverage-7.17.0}/doc/commands/index.rst +0 -0
  199. {coverage-7.16.2 → coverage-7.17.0}/doc/contexts.rst +0 -0
  200. {coverage-7.16.2 → coverage-7.17.0}/doc/dbschema.rst +0 -0
  201. {coverage-7.16.2 → coverage-7.17.0}/doc/dict.txt +0 -0
  202. {coverage-7.16.2 → coverage-7.17.0}/doc/excluding.rst +0 -0
  203. {coverage-7.16.2 → coverage-7.17.0}/doc/faq.rst +0 -0
  204. {coverage-7.16.2 → coverage-7.17.0}/doc/howitworks.rst +0 -0
  205. {coverage-7.16.2 → coverage-7.17.0}/doc/install.rst +0 -0
  206. {coverage-7.16.2 → coverage-7.17.0}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  207. {coverage-7.16.2 → coverage-7.17.0}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  208. {coverage-7.16.2 → coverage-7.17.0}/doc/media/sleepy-snake-600.png +0 -0
  209. {coverage-7.16.2 → coverage-7.17.0}/doc/media/sleepy-snake-circle-150.png +0 -0
  210. {coverage-7.16.2 → coverage-7.17.0}/doc/migrating.rst +0 -0
  211. {coverage-7.16.2 → coverage-7.17.0}/doc/other.rst +0 -0
  212. {coverage-7.16.2 → coverage-7.17.0}/doc/plugins.rst +0 -0
  213. {coverage-7.16.2 → coverage-7.17.0}/doc/python-coverage.1.txt +0 -0
  214. {coverage-7.16.2 → coverage-7.17.0}/doc/requirements.in +0 -0
  215. {coverage-7.16.2 → coverage-7.17.0}/doc/sleepy.rst +0 -0
  216. {coverage-7.16.2 → coverage-7.17.0}/doc/source.rst +0 -0
  217. {coverage-7.16.2 → coverage-7.17.0}/doc/subprocess.rst +0 -0
  218. {coverage-7.16.2 → coverage-7.17.0}/doc/trouble.rst +0 -0
  219. {coverage-7.16.2 → coverage-7.17.0}/doc/whatsnew5x.rst +0 -0
  220. {coverage-7.16.2 → coverage-7.17.0}/howto.txt +0 -0
  221. {coverage-7.16.2 → coverage-7.17.0}/igor.py +0 -0
  222. {coverage-7.16.2 → coverage-7.17.0}/lab/README.txt +0 -0
  223. {coverage-7.16.2 → coverage-7.17.0}/lab/branches.py +0 -0
  224. {coverage-7.16.2 → coverage-7.17.0}/lab/compare_times.sh +0 -0
  225. {coverage-7.16.2 → coverage-7.17.0}/lab/coverage-04.dtd +0 -0
  226. {coverage-7.16.2 → coverage-7.17.0}/lab/extract_code.py +0 -0
  227. {coverage-7.16.2 → coverage-7.17.0}/lab/goals.py +0 -0
  228. {coverage-7.16.2 → coverage-7.17.0}/lab/hack_pyc.py +0 -0
  229. {coverage-7.16.2 → coverage-7.17.0}/lab/notes/arcs-to-branches.txt +0 -0
  230. {coverage-7.16.2 → coverage-7.17.0}/lab/notes/bug1303.txt +0 -0
  231. {coverage-7.16.2 → coverage-7.17.0}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  232. {coverage-7.16.2 → coverage-7.17.0}/lab/parse_all.py +0 -0
  233. {coverage-7.16.2 → coverage-7.17.0}/lab/parser.py +0 -0
  234. {coverage-7.16.2 → coverage-7.17.0}/lab/pick.py +0 -0
  235. {coverage-7.16.2 → coverage-7.17.0}/lab/platform_info.py +0 -0
  236. {coverage-7.16.2 → coverage-7.17.0}/lab/run_sysmon.py +0 -0
  237. {coverage-7.16.2 → coverage-7.17.0}/lab/run_trace.py +0 -0
  238. {coverage-7.16.2 → coverage-7.17.0}/lab/select_contexts.py +0 -0
  239. {coverage-7.16.2 → coverage-7.17.0}/lab/show_platform.py +0 -0
  240. {coverage-7.16.2 → coverage-7.17.0}/lab/show_pyc.py +0 -0
  241. {coverage-7.16.2 → coverage-7.17.0}/lab/treetopy.sh +0 -0
  242. {coverage-7.16.2 → coverage-7.17.0}/lab/warn_executed.py +0 -0
  243. {coverage-7.16.2 → coverage-7.17.0}/lab/warn_executed.toml +0 -0
  244. {coverage-7.16.2 → coverage-7.17.0}/metacov.ini +0 -0
  245. {coverage-7.16.2 → coverage-7.17.0}/requirements/kit.in +0 -0
  246. {coverage-7.16.2 → coverage-7.17.0}/requirements/light-threads.in +0 -0
  247. {coverage-7.16.2 → coverage-7.17.0}/requirements/pins.txt +0 -0
  248. {coverage-7.16.2 → coverage-7.17.0}/requirements/pip.in +0 -0
  249. {coverage-7.16.2 → coverage-7.17.0}/requirements/pytest.in +0 -0
  250. {coverage-7.16.2 → coverage-7.17.0}/requirements/tox.in +0 -0
  251. {coverage-7.16.2 → coverage-7.17.0}/setup.cfg +0 -0
  252. {coverage-7.16.2 → coverage-7.17.0}/tests/__init__.py +0 -0
  253. {coverage-7.16.2 → coverage-7.17.0}/tests/covmodzip1.py +0 -0
  254. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/README.rst +0 -0
  255. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  256. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  257. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  258. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  259. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  260. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  261. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/mae/mae.py,cover +0 -0
  262. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  263. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  264. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  265. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  266. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/multi/multi.py,cover +0 -0
  267. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/annotate/white/white.py,cover +0 -0
  268. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/Makefile +0 -0
  269. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/a/a_py.html +0 -0
  270. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/a/class_index.html +0 -0
  271. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/a/function_index.html +0 -0
  272. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/a/index.html +0 -0
  273. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/b_branch/b_py.html +0 -0
  274. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/b_branch/class_index.html +0 -0
  275. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/b_branch/function_index.html +0 -0
  276. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/b_branch/index.html +0 -0
  277. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/bom/bom_py.html +0 -0
  278. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/bom/class_index.html +0 -0
  279. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/bom/function_index.html +0 -0
  280. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/bom/index.html +0 -0
  281. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/contexts/class_index.html +0 -0
  282. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/contexts/function_index.html +0 -0
  283. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/contexts/index.html +0 -0
  284. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/contexts/two_tests_py.html +0 -0
  285. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/isolatin1/class_index.html +0 -0
  286. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/isolatin1/function_index.html +0 -0
  287. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/isolatin1/index.html +0 -0
  288. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
  289. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/multiline/class_index.html +0 -0
  290. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/multiline/function_index.html +0 -0
  291. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/multiline/index.html +0 -0
  292. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/multiline/multiline_py.html +0 -0
  293. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/class_index.html +0 -0
  294. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/function_index.html +0 -0
  295. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/index.html +0 -0
  296. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/m1_py.html +0 -0
  297. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/m2_py.html +0 -0
  298. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/m3_py.html +0 -0
  299. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_1/main_py.html +0 -0
  300. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/class_index.html +0 -0
  301. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/function_index.html +0 -0
  302. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/index.html +0 -0
  303. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/m2_py.html +0 -0
  304. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/m3_py.html +0 -0
  305. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_2/main_py.html +0 -0
  306. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_3/class_index.html +0 -0
  307. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_3/function_index.html +0 -0
  308. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_3/index.html +0 -0
  309. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_3/m3_py.html +0 -0
  310. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_3/main_py.html +0 -0
  311. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/class_index.html +0 -0
  312. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/function_index.html +0 -0
  313. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/index.html +0 -0
  314. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/m1_py.html +0 -0
  315. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/m3_py.html +0 -0
  316. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_4/main_py.html +0 -0
  317. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_5/class_index.html +0 -0
  318. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_5/function_index.html +0 -0
  319. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_5/index.html +0 -0
  320. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_5/m1_py.html +0 -0
  321. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/omit_5/main_py.html +0 -0
  322. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/other/blah_blah_other_py.html +0 -0
  323. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/other/class_index.html +0 -0
  324. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/other/function_index.html +0 -0
  325. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/other/here_py.html +0 -0
  326. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/other/index.html +0 -0
  327. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/partial/class_index.html +0 -0
  328. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/partial/function_index.html +0 -0
  329. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/partial/index.html +0 -0
  330. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/partial/partial_py.html +0 -0
  331. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/a_py.html +0 -0
  332. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/class_index.html +0 -0
  333. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/function_index.html +0 -0
  334. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/index.html +0 -0
  335. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/myextra.css +0 -0
  336. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/styled/style.css +0 -0
  337. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  338. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  339. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  340. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  341. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/unicode/class_index.html +0 -0
  342. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/unicode/function_index.html +0 -0
  343. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/unicode/index.html +0 -0
  344. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/html/unicode/unicode_py.html +0 -0
  345. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/testing/getty/gettysburg.txt +0 -0
  346. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/testing/xml/output.xml +0 -0
  347. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/xml/x_xml/coverage.xml +0 -0
  348. {coverage-7.16.2 → coverage-7.17.0}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  349. {coverage-7.16.2 → coverage-7.17.0}/tests/js/index.html +0 -0
  350. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/__init__.py +0 -0
  351. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/afile.odd.py +0 -0
  352. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/afile.py +0 -0
  353. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb/__init__.py +0 -0
  354. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb/bfile.odd.py +0 -0
  355. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb/bfile.py +0 -0
  356. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb/cc/__init__.py +0 -0
  357. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb/cc/cfile.py +0 -0
  358. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/bb.odd/bfile.py +0 -0
  359. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/aa/zfile.py +0 -0
  360. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/ambiguous/__init__.py +0 -0
  361. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  362. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  363. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/checkspec.py +0 -0
  364. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/covmod1.py +0 -0
  365. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  366. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/__init__.py +0 -0
  367. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/__main__.py +0 -0
  368. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/p1a.py +0 -0
  369. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/p1b.py +0 -0
  370. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/p1c.py +0 -0
  371. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/runmod2.py +0 -0
  372. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/sub/__init__.py +0 -0
  373. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/sub/__main__.py +0 -0
  374. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/sub/ps1a.py +0 -0
  375. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg1/sub/runmod3.py +0 -0
  376. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg2/__init__.py +0 -0
  377. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg2/p2a.py +0 -0
  378. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/pkg2/p2b.py +0 -0
  379. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/plugins/__init__.py +0 -0
  380. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/plugins/a_plugin.py +0 -0
  381. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/plugins/another.py +0 -0
  382. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/process_test/__init__.py +0 -0
  383. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/process_test/try_execfile.py +0 -0
  384. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/runmod1.py +0 -0
  385. {coverage-7.16.2 → coverage-7.17.0}/tests/modules/usepkgs.py +0 -0
  386. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  387. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/__init__.py +0 -0
  388. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/othera.py +0 -0
  389. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/otherb.py +0 -0
  390. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/sub/__init__.py +0 -0
  391. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/sub/osa.py +0 -0
  392. {coverage-7.16.2 → coverage-7.17.0}/tests/moremodules/othermods/sub/osb.py +0 -0
  393. {coverage-7.16.2 → coverage-7.17.0}/tests/plugin1.py +0 -0
  394. {coverage-7.16.2 → coverage-7.17.0}/tests/plugin2.py +0 -0
  395. {coverage-7.16.2 → coverage-7.17.0}/tests/select_plugin.py +0 -0
  396. {coverage-7.16.2 → coverage-7.17.0}/tests/stress_phystoken.tok +0 -0
  397. {coverage-7.16.2 → coverage-7.17.0}/tests/stress_phystoken_dos.tok +0 -0
  398. {coverage-7.16.2 → coverage-7.17.0}/tests/test_annotate.py +0 -0
  399. {coverage-7.16.2 → coverage-7.17.0}/tests/test_bytecode.py +0 -0
  400. {coverage-7.16.2 → coverage-7.17.0}/tests/test_cmdline.py +0 -0
  401. {coverage-7.16.2 → coverage-7.17.0}/tests/test_collector.py +0 -0
  402. {coverage-7.16.2 → coverage-7.17.0}/tests/test_concurrency.py +0 -0
  403. {coverage-7.16.2 → coverage-7.17.0}/tests/test_core.py +0 -0
  404. {coverage-7.16.2 → coverage-7.17.0}/tests/test_coverage.py +0 -0
  405. {coverage-7.16.2 → coverage-7.17.0}/tests/test_debug.py +0 -0
  406. {coverage-7.16.2 → coverage-7.17.0}/tests/test_execfile.py +0 -0
  407. {coverage-7.16.2 → coverage-7.17.0}/tests/test_goldtest.py +0 -0
  408. {coverage-7.16.2 → coverage-7.17.0}/tests/test_json.py +0 -0
  409. {coverage-7.16.2 → coverage-7.17.0}/tests/test_mixins.py +0 -0
  410. {coverage-7.16.2 → coverage-7.17.0}/tests/test_numbits.py +0 -0
  411. {coverage-7.16.2 → coverage-7.17.0}/tests/test_phystokens.py +0 -0
  412. {coverage-7.16.2 → coverage-7.17.0}/tests/test_python.py +0 -0
  413. {coverage-7.16.2 → coverage-7.17.0}/tests/test_report_common.py +0 -0
  414. {coverage-7.16.2 → coverage-7.17.0}/tests/test_report_core.py +0 -0
  415. {coverage-7.16.2 → coverage-7.17.0}/tests/test_results.py +0 -0
  416. {coverage-7.16.2 → coverage-7.17.0}/tests/test_setup.py +0 -0
  417. {coverage-7.16.2 → coverage-7.17.0}/tests/test_sysmon.py +0 -0
  418. {coverage-7.16.2 → coverage-7.17.0}/tests/test_templite.py +0 -0
  419. {coverage-7.16.2 → coverage-7.17.0}/tests/test_testing.py +0 -0
  420. {coverage-7.16.2 → coverage-7.17.0}/tests/test_version.py +0 -0
  421. {coverage-7.16.2 → coverage-7.17.0}/tests/zipsrc/zip1/__init__.py +0 -0
  422. {coverage-7.16.2 → coverage-7.17.0}/tests/zipsrc/zip1/zip1.py +0 -0
@@ -55,7 +55,7 @@ jobs:
55
55
 
56
56
  # Initializes the CodeQL tools for scanning.
57
57
  - name: Initialize CodeQL
58
- uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
58
+ uses: github/codeql-action/init@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
59
59
  with:
60
60
  languages: ${{ matrix.language }}
61
61
  # If you wish to specify custom queries, you can do so here or in a config file.
@@ -66,7 +66,7 @@ jobs:
66
66
  # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
67
67
  # If this step fails, then you should remove it and run the build manually (see below)
68
68
  - name: Autobuild
69
- uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
69
+ uses: github/codeql-action/autobuild@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
70
70
 
71
71
  # ℹ️ Command-line programs to run using the OS shell.
72
72
  # 📚 https://git.io/JvXDl
@@ -80,4 +80,4 @@ jobs:
80
80
  # make release
81
81
 
82
82
  - name: Perform CodeQL Analysis
83
- uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
83
+ uses: github/codeql-action/analyze@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
@@ -87,7 +87,6 @@ jobs:
87
87
  # tox.ini so that tox will run properly. PYVERSIONS
88
88
  # Available versions:
89
89
  # https://github.com/actions/python-versions/blob/main/versions-manifest.json
90
- - "3.10"
91
90
  - "3.11"
92
91
  - "3.12"
93
92
  - "3.13"
@@ -95,19 +94,11 @@ jobs:
95
94
  - "3.14t"
96
95
  - "3.15"
97
96
  - "3.15t"
98
- - "pypy-3.10"
99
97
  - "pypy-3.11"
100
98
  exclude:
101
99
  # Mac PyPy always takes the longest, and doesn't add anything.
102
- - os: macos
103
- python-version: "pypy-3.10"
104
100
  - os: macos
105
101
  python-version: "pypy-3.11"
106
- # Windows pypy 3.10 gets stuck with PyPy 7.3.15. I hope to
107
- # unstick them, but I don't want that to block all other progress, so
108
- # skip them for now.
109
- - os: windows
110
- python-version: "pypy-3.10"
111
102
  # If we need to tweak the os version we can do it with an include like
112
103
  # this:
113
104
  # include:
@@ -164,7 +155,7 @@ jobs:
164
155
  mv .metacov ".metacov.$MATRIX_ID"
165
156
 
166
157
  - name: "Upload coverage data"
167
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
158
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
168
159
  with:
169
160
  name: metacov-${{ env.MATRIX_ID }}
170
161
  path: .metacov.*
@@ -189,12 +180,9 @@ jobs:
189
180
  - name: "Set up Python"
190
181
  uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
191
182
  with:
192
- python-version: "3.10" # Minimum of PYVERSIONS
193
- # At a certain point, installing dependencies failed on pypy 3.9 and
194
- # 3.10 on Windows. Commenting out the cache here fixed it. Someday
195
- # try using the cache again.
196
- #cache: pip
197
- #cache-dependency-path: 'requirements/*.txt'
183
+ python-version: "3.11" # Minimum of PYVERSIONS
184
+ cache: pip
185
+ cache-dependency-path: 'requirements/*.txt'
198
186
 
199
187
  - name: "Show environment"
200
188
  run: |
@@ -211,7 +199,7 @@ jobs:
211
199
  python igor.py zip_mods
212
200
 
213
201
  - name: "Download coverage data"
214
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
202
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
215
203
  with:
216
204
  pattern: metacov-*
217
205
  merge-multiple: true
@@ -225,14 +213,14 @@ jobs:
225
213
  python igor.py combine_html
226
214
 
227
215
  - name: "Upload HTML report"
228
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
216
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
229
217
  with:
230
218
  name: html_report
231
219
  path: htmlcov
232
220
  include-hidden-files: true
233
221
 
234
222
  - name: "Upload other reports"
235
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
223
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
236
224
  with:
237
225
  name: json_xml
238
226
  path: |
@@ -262,6 +250,14 @@ jobs:
262
250
  echo '***** Total coverage is less than 90%!'
263
251
  exit 1
264
252
  fi
253
+
254
+ # Files that have reached 100% coverage should stay that way.
255
+ # shellcheck disable=SC2046
256
+ if ! python lab/goals.py --file 100 $(grep -l -R 'pragma: enforce 100% coverage'); then
257
+ echo '***** Coverage dropped for a 100% file!'
258
+ exit 1
259
+ fi
260
+
265
261
  # Absolutely all of our test code should be covered.
266
262
  if ! python lab/goals.py --file 100 "tests/test_*.py"; then
267
263
  echo '***** Coverage of test files must be 100%!'
@@ -331,7 +327,7 @@ jobs:
331
327
 
332
328
  - name: "Download coverage HTML report"
333
329
  if: ${{ github.ref == 'refs/heads/main' }}
334
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
330
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
335
331
  with:
336
332
  name: html_report
337
333
  path: reports_repo/${{ env.report_dir }}
@@ -36,7 +36,7 @@ env:
36
36
  PIP_DISABLE_PIP_VERSION_CHECK: 1
37
37
  # PYVERSIONS: changing the list of versions will change the number of
38
38
  # expected distributions. This must match the same number in publish.yml.
39
- EXPECTED: 121
39
+ EXPECTED: 119
40
40
 
41
41
  permissions:
42
42
  contents: read
@@ -47,10 +47,10 @@ concurrency:
47
47
 
48
48
  jobs:
49
49
  wheels:
50
- name: "${{ matrix.py }} ${{ matrix.os }} ${{ matrix.arch }} wheels"
50
+ name: "${{ matrix.py }} ${{ matrix.platform || matrix.os }} ${{ matrix.arch }} wheels"
51
51
  runs-on: "${{ matrix.os }}-${{ matrix.os-version || 'latest' }}"
52
52
  env:
53
- MATRIX_ID: "${{ matrix.py }}-${{ matrix.os }}-${{ matrix.arch }}"
53
+ MATRIX_ID: "${{ matrix.py }}-${{ matrix.platform || matrix.os }}-${{ matrix.arch }}"
54
54
  strategy:
55
55
  matrix:
56
56
  include:
@@ -79,7 +79,7 @@ jobs:
79
79
  # # of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#enable
80
80
  # # When changing this, also adjust SHIPPING_WHEELS in env.py.
81
81
  #
82
- # pys = ["cp310", "cp311", "cp312", "cp313", "cp314", "cp315"]
82
+ # pys = ["cp311", "cp312", "cp313", "cp314", "cp315"]
83
83
  # cipy = "3.11" # PYVERSIONS, default for cibuildwheel
84
84
  #
85
85
  # # Some OS/arch combinations need overrides for the Python versions:
@@ -88,6 +88,14 @@ jobs:
88
88
  # ("windows", "ARM64"): ["cp311", "cp312", "cp313", "cp314", "cp315"],
89
89
  # }
90
90
  #
91
+ # # Mobile platforms: cibuildwheel only supports these from cp313 onward,
92
+ # # and each tuple key is (os, platform, os-version-or-None).
93
+ # mobile_pys = ["cp313", "cp314", "cp315"]
94
+ # mobile_os_archs = {
95
+ # ("ubuntu", "android", None): ["arm64_v8a", "x86_64"],
96
+ # ("macos", "ios", "26"): ["arm64_iphoneos", "arm64_iphonesimulator"],
97
+ # }
98
+ #
91
99
  # #----- ^^^ ---------------------- ^^^ -----
92
100
  #
93
101
  # import json
@@ -101,7 +109,7 @@ jobs:
101
109
  # "cipy": cipy,
102
110
  # }
103
111
  # if the_os == "macos":
104
- # them["os-version"] = "14"
112
+ # them["os-version"] = "26"
105
113
  # if the_os == "windows" and the_arch == "ARM64":
106
114
  # them["os-version"] = "11-arm"
107
115
  # # them["cipy"] = "3.11"
@@ -111,56 +119,60 @@ jobs:
111
119
  # if the_arch == "ppc64le":
112
120
  # them["os-version"] = "24.04-ppc64le"
113
121
  # print(f"- {json.dumps(them)}")
122
+ # for (the_os, the_platform, the_os_version), archs in mobile_os_archs.items():
123
+ # for the_arch in archs:
124
+ # for the_py in mobile_pys:
125
+ # them = {
126
+ # "os": the_os,
127
+ # "py": the_py,
128
+ # "arch": the_arch,
129
+ # "cipy": cipy,
130
+ # "platform": the_platform,
131
+ # }
132
+ # if the_os_version is not None:
133
+ # them["os-version"] = the_os_version
134
+ # print(f"- {json.dumps(them)}")
114
135
  # ]]]
115
- - {"os": "ubuntu", "py": "cp310", "arch": "x86_64", "cipy": "3.11"}
116
136
  - {"os": "ubuntu", "py": "cp311", "arch": "x86_64", "cipy": "3.11"}
117
137
  - {"os": "ubuntu", "py": "cp312", "arch": "x86_64", "cipy": "3.11"}
118
138
  - {"os": "ubuntu", "py": "cp313", "arch": "x86_64", "cipy": "3.11"}
119
139
  - {"os": "ubuntu", "py": "cp314", "arch": "x86_64", "cipy": "3.11"}
120
140
  - {"os": "ubuntu", "py": "cp315", "arch": "x86_64", "cipy": "3.11"}
121
- - {"os": "ubuntu", "py": "cp310", "arch": "i686", "cipy": "3.11"}
122
141
  - {"os": "ubuntu", "py": "cp311", "arch": "i686", "cipy": "3.11"}
123
142
  - {"os": "ubuntu", "py": "cp312", "arch": "i686", "cipy": "3.11"}
124
143
  - {"os": "ubuntu", "py": "cp313", "arch": "i686", "cipy": "3.11"}
125
144
  - {"os": "ubuntu", "py": "cp314", "arch": "i686", "cipy": "3.11"}
126
145
  - {"os": "ubuntu", "py": "cp315", "arch": "i686", "cipy": "3.11"}
127
- - {"os": "ubuntu", "py": "cp310", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
128
146
  - {"os": "ubuntu", "py": "cp311", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
129
147
  - {"os": "ubuntu", "py": "cp312", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
130
148
  - {"os": "ubuntu", "py": "cp313", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
131
149
  - {"os": "ubuntu", "py": "cp314", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
132
150
  - {"os": "ubuntu", "py": "cp315", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
133
- - {"os": "ubuntu", "py": "cp310", "arch": "riscv64", "cipy": "3.11"}
134
151
  - {"os": "ubuntu", "py": "cp311", "arch": "riscv64", "cipy": "3.11"}
135
152
  - {"os": "ubuntu", "py": "cp312", "arch": "riscv64", "cipy": "3.11"}
136
153
  - {"os": "ubuntu", "py": "cp313", "arch": "riscv64", "cipy": "3.11"}
137
154
  - {"os": "ubuntu", "py": "cp314", "arch": "riscv64", "cipy": "3.11"}
138
155
  - {"os": "ubuntu", "py": "cp315", "arch": "riscv64", "cipy": "3.11"}
139
- - {"os": "ubuntu", "py": "cp310", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
140
156
  - {"os": "ubuntu", "py": "cp311", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
141
157
  - {"os": "ubuntu", "py": "cp312", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
142
158
  - {"os": "ubuntu", "py": "cp313", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
143
159
  - {"os": "ubuntu", "py": "cp314", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
144
160
  - {"os": "ubuntu", "py": "cp315", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
145
- - {"os": "macos", "py": "cp310", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
146
- - {"os": "macos", "py": "cp311", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
147
- - {"os": "macos", "py": "cp312", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
148
- - {"os": "macos", "py": "cp313", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
149
- - {"os": "macos", "py": "cp314", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
150
- - {"os": "macos", "py": "cp315", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
151
- - {"os": "macos", "py": "cp310", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
152
- - {"os": "macos", "py": "cp311", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
153
- - {"os": "macos", "py": "cp312", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
154
- - {"os": "macos", "py": "cp313", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
155
- - {"os": "macos", "py": "cp314", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
156
- - {"os": "macos", "py": "cp315", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
157
- - {"os": "windows", "py": "cp310", "arch": "x86", "cipy": "3.11"}
161
+ - {"os": "macos", "py": "cp311", "arch": "arm64", "cipy": "3.11", "os-version": "26"}
162
+ - {"os": "macos", "py": "cp312", "arch": "arm64", "cipy": "3.11", "os-version": "26"}
163
+ - {"os": "macos", "py": "cp313", "arch": "arm64", "cipy": "3.11", "os-version": "26"}
164
+ - {"os": "macos", "py": "cp314", "arch": "arm64", "cipy": "3.11", "os-version": "26"}
165
+ - {"os": "macos", "py": "cp315", "arch": "arm64", "cipy": "3.11", "os-version": "26"}
166
+ - {"os": "macos", "py": "cp311", "arch": "x86_64", "cipy": "3.11", "os-version": "26"}
167
+ - {"os": "macos", "py": "cp312", "arch": "x86_64", "cipy": "3.11", "os-version": "26"}
168
+ - {"os": "macos", "py": "cp313", "arch": "x86_64", "cipy": "3.11", "os-version": "26"}
169
+ - {"os": "macos", "py": "cp314", "arch": "x86_64", "cipy": "3.11", "os-version": "26"}
170
+ - {"os": "macos", "py": "cp315", "arch": "x86_64", "cipy": "3.11", "os-version": "26"}
158
171
  - {"os": "windows", "py": "cp311", "arch": "x86", "cipy": "3.11"}
159
172
  - {"os": "windows", "py": "cp312", "arch": "x86", "cipy": "3.11"}
160
173
  - {"os": "windows", "py": "cp313", "arch": "x86", "cipy": "3.11"}
161
174
  - {"os": "windows", "py": "cp314", "arch": "x86", "cipy": "3.11"}
162
175
  - {"os": "windows", "py": "cp315", "arch": "x86", "cipy": "3.11"}
163
- - {"os": "windows", "py": "cp310", "arch": "AMD64", "cipy": "3.11"}
164
176
  - {"os": "windows", "py": "cp311", "arch": "AMD64", "cipy": "3.11"}
165
177
  - {"os": "windows", "py": "cp312", "arch": "AMD64", "cipy": "3.11"}
166
178
  - {"os": "windows", "py": "cp313", "arch": "AMD64", "cipy": "3.11"}
@@ -171,7 +183,19 @@ jobs:
171
183
  - {"os": "windows", "py": "cp313", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
172
184
  - {"os": "windows", "py": "cp314", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
173
185
  - {"os": "windows", "py": "cp315", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
174
- # [[[end]]] (sum: N6DRns0iG/)
186
+ - {"os": "ubuntu", "py": "cp313", "arch": "arm64_v8a", "cipy": "3.11", "platform": "android"}
187
+ - {"os": "ubuntu", "py": "cp314", "arch": "arm64_v8a", "cipy": "3.11", "platform": "android"}
188
+ - {"os": "ubuntu", "py": "cp315", "arch": "arm64_v8a", "cipy": "3.11", "platform": "android"}
189
+ - {"os": "ubuntu", "py": "cp313", "arch": "x86_64", "cipy": "3.11", "platform": "android"}
190
+ - {"os": "ubuntu", "py": "cp314", "arch": "x86_64", "cipy": "3.11", "platform": "android"}
191
+ - {"os": "ubuntu", "py": "cp315", "arch": "x86_64", "cipy": "3.11", "platform": "android"}
192
+ - {"os": "macos", "py": "cp313", "arch": "arm64_iphoneos", "cipy": "3.11", "platform": "ios", "os-version": "26"}
193
+ - {"os": "macos", "py": "cp314", "arch": "arm64_iphoneos", "cipy": "3.11", "platform": "ios", "os-version": "26"}
194
+ - {"os": "macos", "py": "cp315", "arch": "arm64_iphoneos", "cipy": "3.11", "platform": "ios", "os-version": "26"}
195
+ - {"os": "macos", "py": "cp313", "arch": "arm64_iphonesimulator", "cipy": "3.11", "platform": "ios", "os-version": "26"}
196
+ - {"os": "macos", "py": "cp314", "arch": "arm64_iphonesimulator", "cipy": "3.11", "platform": "ios", "os-version": "26"}
197
+ - {"os": "macos", "py": "cp315", "arch": "arm64_iphonesimulator", "cipy": "3.11", "platform": "ios", "os-version": "26"}
198
+ # [[[end]]] (sum: f3kjK8N7/g)
175
199
  # ^^^^^^^^^^^^^^^
176
200
  # If a check fails and points to this checksum line, it means you edited
177
201
  # the matrix directly instead of editing the Python code in the comment
@@ -212,7 +236,7 @@ jobs:
212
236
 
213
237
  - name: "Set up QEMU"
214
238
  if: ${{ matrix.arch == 'riscv64' }}
215
- uses: docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4.3.0
239
+ uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4.4.0
216
240
 
217
241
  - name: "Show environment"
218
242
  run: |
@@ -221,10 +245,10 @@ jobs:
221
245
 
222
246
  - name: "Build binary wheels"
223
247
  env:
248
+ CIBW_PLATFORM: ${{ matrix.platform || 'auto' }}
224
249
  CIBW_BUILD: ${{ matrix.py }}*-*
225
250
  CIBW_ARCHS: ${{ matrix.arch }}
226
251
  CIBW_ENVIRONMENT: PIP_DISABLE_PIP_VERSION_CHECK=1
227
- CIBW_TEST_COMMAND: python -c "from coverage.tracer import CTracer; print('CTracer OK!')"
228
252
  run: |
229
253
  python -m cibuildwheel --output-dir wheelhouse
230
254
 
@@ -237,7 +261,7 @@ jobs:
237
261
  python -m twine check wheelhouse/*
238
262
 
239
263
  - name: "Upload binary wheels"
240
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
264
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
241
265
  with:
242
266
  name: dist-${{ env.MATRIX_ID }}
243
267
  path: wheelhouse/*.whl
@@ -278,7 +302,7 @@ jobs:
278
302
  python -m twine check dist/*
279
303
 
280
304
  - name: "Upload non-binary artifacts"
281
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
305
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
282
306
  with:
283
307
  name: dist-non-binary
284
308
  path: dist/*
@@ -296,7 +320,7 @@ jobs:
296
320
  id-token: write # Needed for signing artifacts
297
321
  steps:
298
322
  - name: "Download artifacts"
299
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
323
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
300
324
  with:
301
325
  pattern: dist-*
302
326
  merge-multiple: true
@@ -318,7 +342,7 @@ jobs:
318
342
  ls -alR
319
343
 
320
344
  - name: "Upload signatures"
321
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
345
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
322
346
  with:
323
347
  name: signatures
324
348
  path: "*.sigstore.json"
@@ -17,7 +17,7 @@ defaults:
17
17
  env:
18
18
  # PYVERSIONS: changing the list of versions will change the number of
19
19
  # expected distributions. This must match the same number in kit.yml.
20
- EXPECTED: 121
20
+ EXPECTED: 119
21
21
 
22
22
  permissions:
23
23
  contents: read
@@ -69,7 +69,7 @@ jobs:
69
69
 
70
70
  steps:
71
71
  - name: "Download dists"
72
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
72
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
73
73
  with:
74
74
  repository: "coveragepy/coveragepy"
75
75
  run-id: ${{ needs.find-run.outputs.run-id }}
@@ -110,7 +110,7 @@ jobs:
110
110
 
111
111
  steps:
112
112
  - name: "Download dists"
113
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
113
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
114
114
  with:
115
115
  repository: "coveragepy/coveragepy"
116
116
  run-id: ${{ needs.find-run.outputs.run-id }}
@@ -82,7 +82,7 @@ jobs:
82
82
  - name: "Install Python"
83
83
  uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
84
84
  with:
85
- python-version: "3.10" # Minimum of PYVERSIONS
85
+ python-version: "3.11" # Minimum of PYVERSIONS
86
86
  cache: pip
87
87
  cache-dependency-path: 'requirements/*.txt'
88
88
 
@@ -112,7 +112,7 @@ jobs:
112
112
  - name: "Install Python"
113
113
  uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
114
114
  with:
115
- python-version: "3.10" # Minimum of PYVERSIONS
115
+ python-version: "3.11" # Minimum of PYVERSIONS
116
116
  cache: pip
117
117
  cache-dependency-path: 'requirements/*.txt'
118
118
 
@@ -185,7 +185,7 @@ jobs:
185
185
  persist-credentials: false
186
186
 
187
187
  - name: "Install uv"
188
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
188
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
189
189
  with:
190
190
  enable-cache: false
191
191
 
@@ -36,6 +36,7 @@ jobs:
36
36
  pull-requests: read # Needed for this check to run on pull requests
37
37
  outputs:
38
38
  run_tests: ${{ steps.filter.outputs.run_tests }}
39
+ run_js_tests: ${{ steps.filter.outputs.run_js_tests }}
39
40
  steps:
40
41
  - name: "Check out the repo"
41
42
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -57,6 +58,12 @@ jobs:
57
58
  - "tox.ini"
58
59
  - "requirements/*.txt"
59
60
  - "tests/gold/**"
61
+ run_js_tests:
62
+ - "coverage/htmlfiles/*.js"
63
+ - "tests/js/**"
64
+ - ".github/workflows/testsuite.yml"
65
+ - "tox.ini"
66
+ - "requirements/js.txt"
60
67
 
61
68
  tests:
62
69
  name: "${{ matrix.python-version }} on ${{ matrix.os }}"
@@ -87,7 +94,6 @@ jobs:
87
94
  # Available versions:
88
95
  # https://github.com/actions/python-versions/blob/main/versions-manifest.json
89
96
  # https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#available-versions-of-python-and-pypy
90
- - "3.10"
91
97
  - "3.11"
92
98
  - "3.12"
93
99
  - "3.13"
@@ -95,7 +101,6 @@ jobs:
95
101
  - "3.14t"
96
102
  - "3.15"
97
103
  - "3.15t"
98
- - "pypy-3.10"
99
104
  - "pypy-3.11"
100
105
 
101
106
  #
@@ -161,6 +166,40 @@ jobs:
161
166
  # `exit 1` makes sure that the job remains red with flaky runs
162
167
  python -m tox -- -rfsEX --lf -vvvvv && exit 1
163
168
 
169
+ js_tests:
170
+ name: "JavaScript tests"
171
+ runs-on: ubuntu-latest
172
+ timeout-minutes: 15
173
+
174
+ # Don't run tests if the branch name includes "-notests".
175
+ # Only run tests if files that affect the JavaScript tests have changed.
176
+ needs: changed
177
+ if:
178
+ needs.changed.outputs.run_js_tests == 'true'
179
+ && !contains(github.ref, '-notests')
180
+
181
+ steps:
182
+ - name: "Check out the repo"
183
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
184
+ with:
185
+ persist-credentials: false
186
+
187
+ - name: "Set up Python"
188
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
189
+ with:
190
+ python-version: "3.11" # Minimum of PYVERSIONS
191
+ cache: pip
192
+ cache-dependency-path: 'requirements/*.txt'
193
+
194
+ - name: "Install dependencies"
195
+ run: |
196
+ set -xe
197
+ python -m pip install -r requirements/tox.txt
198
+
199
+ - name: "Run the JavaScript tests"
200
+ run: |
201
+ python -m tox -e js
202
+
164
203
  # This job aggregates test results. It's the required check for branch protection.
165
204
  # https://github.com/marketplace/actions/alls-green#why
166
205
  # https://github.com/orgs/community/discussions/33579
@@ -168,6 +207,7 @@ jobs:
168
207
  name: "Tests successful"
169
208
  needs:
170
209
  - tests
210
+ - js_tests
171
211
  # Without this, GitHub skips this job when `tests` doesn't succeed, so the
172
212
  # gate reports "skipped" instead of failing. `allowed-skips` keeps the
173
213
  # deliberate skips (-notests branches, no test-relevant files) passing.
@@ -178,4 +218,4 @@ jobs:
178
218
  uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
179
219
  with:
180
220
  jobs: ${{ toJSON(needs) }}
181
- allowed-skips: tests
221
+ allowed-skips: tests, js_tests
@@ -10,6 +10,7 @@
10
10
  .metacov
11
11
  .metacov.*
12
12
  *.swp
13
+ .envrc
13
14
 
14
15
  # Data files we should ignore in the root, but need for gold files.
15
16
  /coverage.xml
@@ -29,6 +30,7 @@ dist
29
30
  htmlcov
30
31
  MANIFEST
31
32
  setuptools-*.egg
33
+ wheelhouse
32
34
  .tox
33
35
  .noseids
34
36
  .cache
@@ -11,12 +11,11 @@ repos:
11
11
  - id: check-xml
12
12
  - id: check-yaml
13
13
  - id: end-of-file-fixer
14
- exclude: "(status\\.json|\\.min\\.js)$"
15
14
  - id: trailing-whitespace
16
15
  exclude: "stress_phystoken|\\.py,cover$"
17
16
 
18
17
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.16.8
18
+ rev: v0.17.1
20
19
  hooks:
21
20
  - id: ruff-format
22
21
 
@@ -22,6 +22,101 @@ upgrading your version of coverage.py.
22
22
 
23
23
  .. start-releases
24
24
 
25
+ .. _changes_7-17-0:
26
+
27
+ Version 7.17.0 — 2026-10-22
28
+ ---------------------------
29
+
30
+ - Dropped support for Python 3.10.
31
+
32
+ - Binary wheels are now provided for iOS and Android. This allows the use of
33
+ the optimized C tracer on mobile platforms.
34
+
35
+ - Fix: three or more levels of nested ``with`` statements could make a ``with``
36
+ line look like a branch with an exit that can never happen. Using the
37
+ sys.monitoring core, these phantom branches were reported as partial. Other
38
+ cores hid the problem but still counted the phantom branches in the total.
39
+ Closes `issue 1987`_.
40
+
41
+ - Fix: a comment or string that merely mentioned ``if True:`` or
42
+ ``while True:`` could mark its line as a branch that is known to be partial,
43
+ so a branch that never ran was reported as taken. These built-in patterns
44
+ now only match at the start of the statement. Closes `issue 2314`_.
45
+
46
+ - Fix: region detection missed functions defined in unusual places, such as
47
+ ``else`` and ``except`` clauses. This is now fixed.
48
+
49
+ - Fix: recent versions of the lcov tool complain if the same function name
50
+ appears more than once in a report. Python can have multiple same-named
51
+ functions in a few ways, for example, getters/setters or conditionally
52
+ defined functions. These are now disambiguated by adding a ``@<line number>``
53
+ suffix to the function name. Fixes `issue 2335`.
54
+
55
+ - Fix: The "Can't combine statement coverage data with branch data" error now
56
+ names the two data files it couldn't combine. The :ref:`error description
57
+ <error_cant_combine>` in the docs now lists common causes and how to find the
58
+ process that wrote the file.
59
+
60
+ - Fix: at coverage totals close to 0 or 100, the XML report could get incorrect
61
+ ``line-rate`` values like ``8.333e-05`` or ``1``. This is now fixed, closing
62
+ `issue 2293`_ and `issue 2294`_.
63
+
64
+ - Fix: a parallel data file saved more than once kept the hash of its first
65
+ save in its file name. Combining could then skip it as a duplicate of another
66
+ file that had the same data at that point, and delete it, losing the data
67
+ recorded after the first save. Each save now updates the hash. This had been
68
+ a problem since 7.13.1. Fixes `issue 2338`_.
69
+
70
+ - Fixes for obscure but legal file names:
71
+
72
+ - File names (and plugin names) can contain control characters, which are
73
+ legal in POSIX paths but unsafe in reports: in XML 1.0 they make the
74
+ document non-well-formed, and in a terminal they act as escape sequences
75
+ (colors, title/clipboard sequences, cursor moves that forge output). Now
76
+ the XML report, the text and Markdown summary reports, and ``coverage debug
77
+ data`` replace non-printable characters in names. Printable names are
78
+ unchanged.
79
+
80
+ - A file pattern (from ``include``, ``omit``, or a ``[paths]`` alias)
81
+ containing a newline sent the glob-to-regex translation into an infinite
82
+ loop, hanging the process. Newlines in patterns are now handled like any
83
+ other character.
84
+
85
+ - Fixes in the implementation of the C tracer:
86
+
87
+ - If a plugin's ``dynamic_source_filename`` method raised an exception, lines
88
+ in that function could be recorded as belonging to a different file. Also
89
+ fixed some minor memory leaks in the C tracer.
90
+
91
+ - The refcount of ``None`` was mismanaged during function calls, including
92
+ comprehensions. This was unlikely to cause an actual problem, but is now
93
+ fixed. Thanks, Andrew Dalke.
94
+
95
+ - The C tracer held borrowed references to dictionary values, which was
96
+ unsafe on free-threaded Python. Now it takes its own references.
97
+
98
+ - An internal error while recording a new file could be reported as a
99
+ confusing ``SystemError`` instead of the actual exception.
100
+
101
+ - Performance: the text summary report (``coverage report``) held on to every
102
+ file's parsed source until it finished, so its memory use grew with the size
103
+ of the project: ten times or more what 7.14 used on large projects. Now it
104
+ keeps only what it needs to print. Fixes `issue 2277`_.
105
+
106
+ - Performance: HTML reports should be about 5% faster to produce.
107
+
108
+ - Kept the political banner in the README. Closes `issue 2344`_.
109
+
110
+ .. _issue 1987: https://github.com/coveragepy/coveragepy/issues/1987
111
+ .. _issue 2277: https://github.com/coveragepy/coveragepy/issues/2277
112
+ .. _issue 2293: https://github.com/coveragepy/coveragepy/issues/2293
113
+ .. _issue 2294: https://github.com/coveragepy/coveragepy/issues/2294
114
+ .. _issue 2314: https://github.com/coveragepy/coveragepy/issues/2314
115
+ .. _issue 2335: https://github.com/coveragepy/coveragepy/issues/2335
116
+ .. _issue 2338: https://github.com/coveragepy/coveragepy/issues/2338
117
+ .. _issue 2344: https://github.com/coveragepy/coveragepy/issues/2344
118
+
119
+
25
120
  .. _changes_7-16-2:
26
121
 
27
122
  Version 7.16.2 — 2026-09-27
@@ -57,7 +152,17 @@ Version 7.16.1 — 2026-09-13
57
152
  - Fix: using :meth:`.CoverageData.update` twice on an in-memory database would
58
153
  fail, as described in `issue 2279`_. This is now fixed.
59
154
 
155
+ - Fix: the Total row in the footer of the HTML report's index page was
156
+ recomputed in JavaScript with rounding that could disagree with the total
157
+ the server rendered in the heading, including showing ``100%`` when coverage
158
+ was not complete. The footer now clamps values the way the rest of the
159
+ report does, and when nothing is filtered out it is shown exactly as the
160
+ server rendered it, so the two can't disagree. That also keeps rows the
161
+ report omits (``--skip-covered`` drops fully covered files) in the total.
162
+ Fixes `issue 2256`_.
163
+
60
164
  .. _issue 1563: https://github.com/coveragepy/coveragepy/issues/1563
165
+ .. _issue 2256: https://github.com/coveragepy/coveragepy/issues/2256
61
166
  .. _pull 2269: https://github.com/coveragepy/coveragepy/pull/2269
62
167
  .. _issue 2279: https://github.com/coveragepy/coveragepy/issues/2279
63
168
 
@@ -140,6 +140,7 @@ Karthikeyan Singaravelan
140
140
  Kassandra Keeton
141
141
  Ken Schackart
142
142
  Kevin Brown-Silva
143
+ Kevin Deldycke
143
144
  Kevin Turcios
144
145
  Kjell Braden
145
146
  Krystian Kichewko