sphinx-external-toc-strict 1.1.1__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 (210) hide show
  1. sphinx_external_toc_strict-1.1.1/.github/dependabot.yml +7 -0
  2. sphinx_external_toc_strict-1.1.1/.github/workflows/codeql-analysis.yml +86 -0
  3. sphinx_external_toc_strict-1.1.1/.github/workflows/dependency-review.yml +35 -0
  4. sphinx_external_toc_strict-1.1.1/.github/workflows/kit.yml +309 -0
  5. sphinx_external_toc_strict-1.1.1/.github/workflows/python-nightly.yml +89 -0
  6. sphinx_external_toc_strict-1.1.1/.github/workflows/quality.yml +110 -0
  7. sphinx_external_toc_strict-1.1.1/.github/workflows/release.yml +159 -0
  8. sphinx_external_toc_strict-1.1.1/.github/workflows/test-coverage.yml +99 -0
  9. sphinx_external_toc_strict-1.1.1/.github/workflows/testsuite.yml +112 -0
  10. sphinx_external_toc_strict-1.1.1/.gitignore +136 -0
  11. sphinx_external_toc_strict-1.1.1/.pre-commit-config.yaml +73 -0
  12. sphinx_external_toc_strict-1.1.1/.readthedocs.yml +17 -0
  13. sphinx_external_toc_strict-1.1.1/CHANGELOG.md +146 -0
  14. sphinx_external_toc_strict-1.1.1/CHANGES.rst +78 -0
  15. sphinx_external_toc_strict-1.1.1/CONTRIBUTING.md +15 -0
  16. sphinx_external_toc_strict-1.1.1/LICENSE +21 -0
  17. sphinx_external_toc_strict-1.1.1/Makefile +206 -0
  18. sphinx_external_toc_strict-1.1.1/NOTICE.txt +14 -0
  19. sphinx_external_toc_strict-1.1.1/PKG-INFO +820 -0
  20. sphinx_external_toc_strict-1.1.1/README.rst +574 -0
  21. sphinx_external_toc_strict-1.1.1/codecov.yml +10 -0
  22. sphinx_external_toc_strict-1.1.1/docs/Makefile +170 -0
  23. sphinx_external_toc_strict-1.1.1/docs/_static/toc-graphic.png +0 -0
  24. sphinx_external_toc_strict-1.1.1/docs/_static/toc_tree.pptx +0 -0
  25. sphinx_external_toc_strict-1.1.1/docs/_toc.yml +27 -0
  26. sphinx_external_toc_strict-1.1.1/docs/code/api.rst +10 -0
  27. sphinx_external_toc_strict-1.1.1/docs/code/cli.rst +104 -0
  28. sphinx_external_toc_strict-1.1.1/docs/code/compat.rst +9 -0
  29. sphinx_external_toc_strict-1.1.1/docs/code/constrants.rst +9 -0
  30. sphinx_external_toc_strict-1.1.1/docs/code/events.rst +10 -0
  31. sphinx_external_toc_strict-1.1.1/docs/code/exceptions.rst +7 -0
  32. sphinx_external_toc_strict-1.1.1/docs/code/filename_suffix.rst +9 -0
  33. sphinx_external_toc_strict-1.1.1/docs/code/index.rst +4 -0
  34. sphinx_external_toc_strict-1.1.1/docs/code/parsing_shared.rst +9 -0
  35. sphinx_external_toc_strict-1.1.1/docs/code/parsing_strictyaml.rst +9 -0
  36. sphinx_external_toc_strict-1.1.1/docs/code/pep518_read.rst +9 -0
  37. sphinx_external_toc_strict-1.1.1/docs/code/tools_strictyaml.rst +9 -0
  38. sphinx_external_toc_strict-1.1.1/docs/code/version_semantic.rst +9 -0
  39. sphinx_external_toc_strict-1.1.1/docs/conf.py +178 -0
  40. sphinx_external_toc_strict-1.1.1/docs/example/globfolder/page1.rst +4 -0
  41. sphinx_external_toc_strict-1.1.1/docs/example/globfolder/page2.rst +4 -0
  42. sphinx_external_toc_strict-1.1.1/docs/example/index.rst +5 -0
  43. sphinx_external_toc_strict-1.1.1/docs/example/subfolder/page.rst +4 -0
  44. sphinx_external_toc_strict-1.1.1/docs/intro.rst +56 -0
  45. sphinx_external_toc_strict-1.1.1/docs/objects-black.txt +7 -0
  46. sphinx_external_toc_strict-1.1.1/docs/objects-docutils-source.txt +7 -0
  47. sphinx_external_toc_strict-1.1.1/docs/objects-python.txt +16493 -0
  48. sphinx_external_toc_strict-1.1.1/docs/objects-sphinx-docs.txt +10 -0
  49. sphinx_external_toc_strict-1.1.1/docs/objects-strictyaml-docs.txt +11 -0
  50. sphinx_external_toc_strict-1.1.1/docs/objects-strictyaml-source.txt +37 -0
  51. sphinx_external_toc_strict-1.1.1/docs/objects-toc-strict.txt +7 -0
  52. sphinx_external_toc_strict-1.1.1/docs/requirements.in +14 -0
  53. sphinx_external_toc_strict-1.1.1/docs/requirements.pip +159 -0
  54. sphinx_external_toc_strict-1.1.1/docs/user_guide/api.rst +38 -0
  55. sphinx_external_toc_strict-1.1.1/docs/user_guide/cli.rst +176 -0
  56. sphinx_external_toc_strict-1.1.1/docs/user_guide/sphinx.rst +307 -0
  57. sphinx_external_toc_strict-1.1.1/docs/user_guide/why.rst +85 -0
  58. sphinx_external_toc_strict-1.1.1/howto.txt +79 -0
  59. sphinx_external_toc_strict-1.1.1/igor.py +633 -0
  60. sphinx_external_toc_strict-1.1.1/pyproject.toml +194 -0
  61. sphinx_external_toc_strict-1.1.1/requirements/dev.in +19 -0
  62. sphinx_external_toc_strict-1.1.1/requirements/dev.pip +174 -0
  63. sphinx_external_toc_strict-1.1.1/requirements/kit.in +20 -0
  64. sphinx_external_toc_strict-1.1.1/requirements/kit.pip +52 -0
  65. sphinx_external_toc_strict-1.1.1/requirements/manage.in +12 -0
  66. sphinx_external_toc_strict-1.1.1/requirements/manage.pip +132 -0
  67. sphinx_external_toc_strict-1.1.1/requirements/mypy.in +8 -0
  68. sphinx_external_toc_strict-1.1.1/requirements/mypy.pip +8 -0
  69. sphinx_external_toc_strict-1.1.1/requirements/pins.pip +4 -0
  70. sphinx_external_toc_strict-1.1.1/requirements/pip-tools.in +10 -0
  71. sphinx_external_toc_strict-1.1.1/requirements/pip-tools.pip +36 -0
  72. sphinx_external_toc_strict-1.1.1/requirements/pip.in +10 -0
  73. sphinx_external_toc_strict-1.1.1/requirements/pip.pip +16 -0
  74. sphinx_external_toc_strict-1.1.1/requirements/prod.in +4 -0
  75. sphinx_external_toc_strict-1.1.1/requirements/prod.pip +72 -0
  76. sphinx_external_toc_strict-1.1.1/requirements/tox.in +16 -0
  77. sphinx_external_toc_strict-1.1.1/requirements/tox.pip +38 -0
  78. sphinx_external_toc_strict-1.1.1/setup.cfg +4 -0
  79. sphinx_external_toc_strict-1.1.1/setup.py +71 -0
  80. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/__init__.py +47 -0
  81. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/__init__.pyi +12 -0
  82. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_compat.py +265 -0
  83. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_version.py +16 -0
  84. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_version.pyi +13 -0
  85. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/api.py +424 -0
  86. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/api.pyi +105 -0
  87. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/cli.py +251 -0
  88. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/cli.pyi +23 -0
  89. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/constants.py +122 -0
  90. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/constants.pyi +31 -0
  91. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/events.py +477 -0
  92. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/events.pyi +47 -0
  93. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/exceptions.py +18 -0
  94. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/exceptions.pyi +10 -0
  95. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/filename_suffix.py +194 -0
  96. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/filename_suffix.pyi +20 -0
  97. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_shared.py +340 -0
  98. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_shared.pyi +68 -0
  99. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_strictyaml.py +593 -0
  100. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_strictyaml.pyi +65 -0
  101. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/pep518_read.py +241 -0
  102. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/pep518_read.pyi +29 -0
  103. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/py.typed +1 -0
  104. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/tools_strictyaml.py +578 -0
  105. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/tools_strictyaml.pyi +60 -0
  106. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/version_semantic.py +331 -0
  107. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/version_semantic.pyi +18 -0
  108. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/PKG-INFO +820 -0
  109. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/SOURCES.txt +208 -0
  110. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/dependency_links.txt +1 -0
  111. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/entry_points.txt +5 -0
  112. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/requires.txt +203 -0
  113. sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/top_level.txt +1 -0
  114. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/bad_option_value.yml +5 -0
  115. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/bad_url.yml +3 -0
  116. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/doc_multiple_times.yml +4 -0
  117. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/doc_validation_fail.yml +6 -0
  118. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty.yml +0 -0
  119. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty_items.yml +2 -0
  120. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty_subtrees.yml +2 -0
  121. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/entry_not_a_mapping.yml +5 -0
  122. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/entry_unknown_link_type.yml +3 -0
  123. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/file_and_glob_present.yml +4 -0
  124. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/item_then_subtrees_key.yml +5 -0
  125. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/items_in_glob.yml +5 -0
  126. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/items_in_url.yml +5 -0
  127. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/list.yml +2 -0
  128. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/no_root.yml +1 -0
  129. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/subtree_with_no_items.yml +3 -0
  130. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_keys.yml +3 -0
  131. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_keys_nested.yml +7 -0
  132. sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_usecase.yml +5 -0
  133. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/chapters.yml +26 -0
  134. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/jb_docs_toc.yml +83 -0
  135. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/list_and_nested.yml +14 -0
  136. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_chapters.yml +15 -0
  137. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_depth.yml +15 -0
  138. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_depth_parts_subset.yml +21 -0
  139. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_parts.yml +18 -0
  140. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_parts_subset.yml +21 -0
  141. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/parts.yml +26 -0
  142. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/simple_dict.yml +14 -0
  143. sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/simple_list.yml +3 -0
  144. sphinx_external_toc_strict-1.1.1/tests/_toc_files/basic.yml +16 -0
  145. sphinx_external_toc_strict-1.1.1/tests/_toc_files/basic_compressed.yml +14 -0
  146. sphinx_external_toc_strict-1.1.1/tests/_toc_files/caption_not_entries.yml +11 -0
  147. sphinx_external_toc_strict-1.1.1/tests/_toc_files/exclude_missing.yml +9 -0
  148. sphinx_external_toc_strict-1.1.1/tests/_toc_files/glob.yml +8 -0
  149. sphinx_external_toc_strict-1.1.1/tests/_toc_files/glob_md.yml +46 -0
  150. sphinx_external_toc_strict-1.1.1/tests/_toc_files/nested.yml +11 -0
  151. sphinx_external_toc_strict-1.1.1/tests/_toc_files/tableofcontents.yml +11 -0
  152. sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/contains_toctree.yml +10 -0
  153. sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/file_not_in_toc.yml +5 -0
  154. sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/multiple_tableofcontents.yml +10 -0
  155. sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/no_glob_match.yml +5 -0
  156. sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/tableofcontents_no_toc.yml +6 -0
  157. sphinx_external_toc_strict-1.1.1/tests/conftest.py +50 -0
  158. sphinx_external_toc_strict-1.1.1/tests/test_api.py +61 -0
  159. sphinx_external_toc_strict-1.1.1/tests/test_cli/test_create_toc.txt +26 -0
  160. sphinx_external_toc_strict-1.1.1/tests/test_cli.py +82 -0
  161. sphinx_external_toc_strict-1.1.1/tests/test_filename_suffix.py +106 -0
  162. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_basic_.yml +16 -0
  163. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_basic_compressed_.yml +15 -0
  164. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_caption_not_entries_.yml +8 -0
  165. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_exclude_missing_.yml +9 -0
  166. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_glob_.yml +8 -0
  167. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_glob_md_.yml +46 -0
  168. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_nested_.yml +11 -0
  169. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_tableofcontents_.yml +12 -0
  170. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_basic_.yml +44 -0
  171. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_basic_compressed_.yml +44 -0
  172. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_caption_not_entries_.yml +20 -0
  173. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_exclude_missing_.yml +24 -0
  174. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_glob_.yml +19 -0
  175. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_glob_md_.yml +57 -0
  176. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_nested_.yml +44 -0
  177. sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_tableofcontents_.yml +36 -0
  178. sphinx_external_toc_strict-1.1.1/tests/test_parsing.py +190 -0
  179. sphinx_external_toc_strict-1.1.1/tests/test_pep518_read.py +261 -0
  180. sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_basic_.xml +6 -0
  181. sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_basic_compressed_.xml +6 -0
  182. sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_caption_not_entries_.xml +6 -0
  183. sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_glob_md_.xml +6 -0
  184. sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_tableofcontents_.xml +8 -0
  185. sphinx_external_toc_strict-1.1.1/tests/test_sphinx.py +178 -0
  186. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_caption_not_entries_.yml +3 -0
  187. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_create_site_map_from_path.yml +92 -0
  188. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_.yml +7 -0
  189. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_compressed_.yml +6 -0
  190. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_md_.yml +7 -0
  191. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_caption_not_entries_.yml +3 -0
  192. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_exclude_missing_.yml +6 -0
  193. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_glob_.yml +5 -0
  194. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_glob_md_.yml +6 -0
  195. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_nested_.yml +10 -0
  196. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_tableofcontents_.yml +4 -0
  197. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_chapters_.yml +28 -0
  198. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_jb_docs_toc_.yml +77 -0
  199. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_list_and_nested_.yml +15 -0
  200. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_chapters_.yml +17 -0
  201. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_depth_.yml +17 -0
  202. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_depth_parts_subset_.yml +23 -0
  203. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_parts_.yml +21 -0
  204. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_parts_subset_.yml +23 -0
  205. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_parts_.yml +28 -0
  206. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_simple_dict_.yml +15 -0
  207. sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_simple_list_.yml +5 -0
  208. sphinx_external_toc_strict-1.1.1/tests/test_tools.py +116 -0
  209. sphinx_external_toc_strict-1.1.1/tests/test_version_semantic.py +352 -0
  210. sphinx_external_toc_strict-1.1.1/tox.ini +106 -0
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ # Maintain dependencies for GitHub Actions
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "monthly"
@@ -0,0 +1,86 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ # `docs <https://docs.github.com/en/code-security/code-scanning>`_
13
+ name: "CodeQL"
14
+
15
+ on:
16
+ push:
17
+ branches:
18
+ - main
19
+ pull_request:
20
+ # The branches below must be a subset of the branches above
21
+ branches:
22
+ - main
23
+ schedule:
24
+ - cron: '30 20 * * 6'
25
+
26
+ permissions:
27
+ contents: read
28
+
29
+ jobs:
30
+ analyze:
31
+ name: Analyze
32
+ runs-on: ubuntu-latest
33
+ permissions:
34
+ actions: read
35
+ contents: read
36
+ security-events: write
37
+
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ language:
42
+ - python
43
+ # - javascript
44
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
45
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
46
+
47
+ steps:
48
+ - name: Checkout repository
49
+ uses: actions/checkout@v4
50
+
51
+ # Initializes the CodeQL tools for scanning.
52
+ - name: Initialize CodeQL
53
+ uses: github/codeql-action/init@v3
54
+ with:
55
+ languages: ${{ matrix.language }}
56
+
57
+ # https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#specifying-configuration-details-using-the-config-input
58
+ # ignores the tests/ folder
59
+ # CodeQL compiles code. The executed code is the compiled code within __pycache__ folders.
60
+ # In compiled code, __file__ path differs. Causing unforeseeable gotchas
61
+ config: |
62
+ paths:
63
+ - src
64
+ # If you wish to specify custom queries, you can do so here or in a config file.
65
+ # By default, queries listed here will override any specified in a config file.
66
+ # Prefix the list here with "+" to use these queries and those in the config file.
67
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
68
+
69
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
70
+ # If this step fails, then you should remove it and run the build manually (see below)
71
+ - name: Autobuild
72
+ uses: github/codeql-action/autobuild@v3
73
+
74
+ # ℹ️ Command-line programs to run using the OS shell.
75
+ # 📚 https://git.io/JvXDl
76
+
77
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
78
+ # and modify them (or add more) to build your code if your project
79
+ # uses a compiled language
80
+
81
+ #- run: |
82
+ # make bootstrap
83
+ # make release
84
+
85
+ - name: Perform CodeQL Analysis
86
+ uses: github/codeql-action/analyze@v3
@@ -0,0 +1,35 @@
1
+ # Dependency Review Action
2
+ #
3
+ # This Action will scan dependency manifest files that change as part
4
+ # of a Pull Reqest, surfacing known-vulnerable versions of the packages
5
+ # declared or updated in the PR. Once installed, if the workflow run is
6
+ # marked as required, PRs introducing known-vulnerable packages will be
7
+ # blocked from merging.
8
+ #
9
+ # Source repository: https://github.com/actions/dependency-review-action
10
+ # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
11
+
12
+ name: 'Dependency Review'
13
+ on:
14
+ push:
15
+ branches:
16
+ - main
17
+ - msftcangoblowm/*
18
+ pull_request:
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ jobs:
25
+ dependency-review:
26
+ if: github.repository_owner == 'msftcangoblowm'
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - name: 'Checkout Repository'
30
+ uses: actions/checkout@v4
31
+ - name: 'Dependency Review'
32
+ uses: actions/dependency-review-action@v4
33
+ with:
34
+ base-ref: ${{ github.event.pull_request.base.sha || 'main' }}
35
+ head-ref: ${{ github.event.pull_request.head.sha || github.ref }}
@@ -0,0 +1,309 @@
1
+ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2
+ # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
3
+
4
+ # This file is meant to be processed with cog.
5
+ # Running "make prebuild" will bring it up to date.
6
+
7
+ # Based on:
8
+ # https://github.com/joerick/cibuildwheel/blob/master/examples/github-deploy.yml
9
+
10
+ # To test installing wheels without uploading them to PyPI:
11
+ #
12
+ # $ mkdir /tmp/pypi
13
+ # $ cp dist/* /tmp/pypi
14
+ # $ python -m pip install piprepo
15
+ # $ piprepo build /tmp/pypi
16
+ # $ python -m pip install -v logging-strict --index-url=file:///tmp/pypi/simple
17
+ #
18
+ # Note that cibuildwheel recommends not shipping wheels for pre-release versions
19
+ # of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#prerelease-pythons
20
+ # So we don't.
21
+
22
+ name: "Kits"
23
+
24
+ on:
25
+ push:
26
+ branches:
27
+ # Don't build kits all the time, but do if the branch is about kits.
28
+ - "**/*kit*"
29
+ workflow_dispatch:
30
+ repository_dispatch:
31
+ types:
32
+ - build-kits
33
+
34
+ defaults:
35
+ run:
36
+ shell: bash
37
+
38
+ env:
39
+ PIP_DISABLE_PIP_VERSION_CHECK: 1
40
+
41
+ permissions:
42
+ contents: read
43
+
44
+ concurrency:
45
+ group: "${{ github.workflow }}-${{ github.ref }}"
46
+ cancel-in-progress: true
47
+
48
+ jobs:
49
+ wheels:
50
+ name: "${{ matrix.py }} ${{ matrix.os }} ${{ matrix.arch }} wheels"
51
+ runs-on: ${{ matrix.os }}-latest
52
+ env:
53
+ MATRIX_ID: "${{ matrix.py }}-${{ matrix.os }}-${{ matrix.arch }}"
54
+ strategy:
55
+ matrix:
56
+ include:
57
+ # To change the matrix, edit the choices, then process this file with cog:
58
+ #
59
+ # $ make workflows
60
+ #
61
+ # which runs:
62
+ #
63
+ # $ python -m pip install cogapp
64
+ # $ python -m cogapp -crP .github/workflows/kit.yml
65
+ #
66
+ # Choices come from the table on https://pypi.org/project/cibuildwheel/
67
+ #
68
+ # [[[cog
69
+ # #----- vvv Choices for the matrix vvv -----
70
+ #
71
+ # # Operating systems:
72
+ # oss = ["ubuntu", "macos", "windows"]
73
+ #
74
+ # # For each OS, what arch to use with cibuildwheel:
75
+ # os_archs = {
76
+ # "ubuntu": ["x86_64", "i686", "aarch64"],
77
+ # "macos": ["arm64", "x86_64"],
78
+ # "windows": ["x86", "AMD64"],
79
+ # }
80
+ # # PYVERSIONS. Available versions:
81
+ # # https://github.com/actions/python-versions/blob/main/versions-manifest.json
82
+ # # PyPy versions are handled further below in the "pypy" step.
83
+ # pys = ["cp38", "cp39", "cp310", "cp311", "cp312"]
84
+ #
85
+ # # Some OS/arch combinations need overrides for the Python versions:
86
+ # os_arch_pys = {
87
+ # ("macos", "arm64"): ["cp38", "cp39", "cp310", "cp311", "cp312"],
88
+ # }
89
+ #
90
+ # #----- ^^^ ---------------------- ^^^ -----
91
+ #
92
+ # import json
93
+ # for the_os in oss:
94
+ # for the_arch in os_archs[the_os]:
95
+ # for the_py in os_arch_pys.get((the_os, the_arch), pys):
96
+ # them = {
97
+ # "os": the_os,
98
+ # "py": the_py,
99
+ # "arch": the_arch,
100
+ # }
101
+ # print(f"- {json.dumps(them)}")
102
+ # ]]]
103
+ - {"os": "ubuntu", "py": "cp38", "arch": "x86_64"}
104
+ - {"os": "ubuntu", "py": "cp39", "arch": "x86_64"}
105
+ - {"os": "ubuntu", "py": "cp310", "arch": "x86_64"}
106
+ - {"os": "ubuntu", "py": "cp311", "arch": "x86_64"}
107
+ - {"os": "ubuntu", "py": "cp312", "arch": "x86_64"}
108
+ - {"os": "ubuntu", "py": "cp38", "arch": "i686"}
109
+ - {"os": "ubuntu", "py": "cp39", "arch": "i686"}
110
+ - {"os": "ubuntu", "py": "cp310", "arch": "i686"}
111
+ - {"os": "ubuntu", "py": "cp311", "arch": "i686"}
112
+ - {"os": "ubuntu", "py": "cp312", "arch": "i686"}
113
+ - {"os": "ubuntu", "py": "cp38", "arch": "aarch64"}
114
+ - {"os": "ubuntu", "py": "cp39", "arch": "aarch64"}
115
+ - {"os": "ubuntu", "py": "cp310", "arch": "aarch64"}
116
+ - {"os": "ubuntu", "py": "cp311", "arch": "aarch64"}
117
+ - {"os": "ubuntu", "py": "cp312", "arch": "aarch64"}
118
+ # - {"os": "macos", "py": "cp38", "arch": "arm64"}
119
+ # - {"os": "macos", "py": "cp39", "arch": "arm64"}
120
+ # - {"os": "macos", "py": "cp310", "arch": "arm64"}
121
+ # - {"os": "macos", "py": "cp311", "arch": "arm64"}
122
+ # - {"os": "macos", "py": "cp312", "arch": "arm64"}
123
+ # - {"os": "macos", "py": "cp38", "arch": "x86_64"}
124
+ # - {"os": "macos", "py": "cp39", "arch": "x86_64"}
125
+ # - {"os": "macos", "py": "cp310", "arch": "x86_64"}
126
+ # - {"os": "macos", "py": "cp311", "arch": "x86_64"}
127
+ # - {"os": "macos", "py": "cp312", "arch": "x86_64"}
128
+ # - {"os": "windows", "py": "cp38", "arch": "x86"}
129
+ # - {"os": "windows", "py": "cp39", "arch": "x86"}
130
+ # - {"os": "windows", "py": "cp310", "arch": "x86"}
131
+ # - {"os": "windows", "py": "cp311", "arch": "x86"}
132
+ # - {"os": "windows", "py": "cp312", "arch": "x86"}
133
+ # - {"os": "windows", "py": "cp38", "arch": "AMD64"}
134
+ # - {"os": "windows", "py": "cp39", "arch": "AMD64"}
135
+ # - {"os": "windows", "py": "cp310", "arch": "AMD64"}
136
+ # - {"os": "windows", "py": "cp311", "arch": "AMD64"}
137
+ # - {"os": "windows", "py": "cp312", "arch": "AMD64"}
138
+ # [[[end]]] (checksum: a6ca53e9c620c9e5ca85e7322122056c)
139
+ fail-fast: false
140
+
141
+ steps:
142
+ - name: "Setup QEMU"
143
+ if: matrix.os == 'ubuntu'
144
+ uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3
145
+ with:
146
+ platforms: arm64
147
+
148
+ - name: "Check out the repo"
149
+ uses: actions/checkout@v4
150
+ with:
151
+ # fetch all branches and tags instead of only fetching the ref/SHA that triggered the workflow
152
+ fetch-depth: 0
153
+
154
+ - name: "Install Python 3.9"
155
+ uses: actions/setup-python@v5
156
+ with:
157
+ # PYVERSIONS
158
+ python-version: "3.9"
159
+ # cache: pip
160
+ # cache-dependency-path: 'requirements/*.pip'
161
+
162
+ - name: "Install tools"
163
+ run: |
164
+ python -m pip install -r requirements/kit.pip
165
+
166
+ - name: "Build wheels"
167
+ env:
168
+ CIBW_BUILD: ${{ matrix.py }}-*
169
+ CIBW_ARCHS: ${{ matrix.arch }}
170
+ CIBW_ENVIRONMENT: PIP_DISABLE_PIP_VERSION_CHECK=1
171
+ CIBW_PRERELEASE_PYTHONS: True
172
+ run: |
173
+ python -m cibuildwheel --output-dir wheelhouse
174
+
175
+ - name: "List wheels"
176
+ run: |
177
+ ls -al wheelhouse/
178
+
179
+ - name: "Upload wheels"
180
+ uses: actions/upload-artifact@v4
181
+ with:
182
+ name: dist-${{ env.MATRIX_ID }}
183
+ path: wheelhouse/*.whl
184
+ retention-days: 7
185
+
186
+ sdist:
187
+ name: "Source distribution"
188
+ runs-on: ubuntu-latest
189
+ steps:
190
+ - name: "Check out the repo"
191
+ uses: actions/checkout@v4
192
+ with:
193
+ # fetch all branches and tags instead of only fetching the ref/SHA that triggered the workflow
194
+ fetch-depth: 0
195
+
196
+ # https://stackoverflow.com/questions/66349002/get-latest-tag-git-describe-tags-when-repo-is-cloned-with-depth-1
197
+ # echo "tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT
198
+ - name: Get latest tag
199
+ id: vars
200
+ run: |
201
+ echo "tag=$(git describe --tags)" >> $GITHUB_OUTPUT
202
+
203
+ - name: "Install Python 3.9"
204
+ uses: actions/setup-python@v5
205
+ with:
206
+ # PYVERSIONS
207
+ python-version: "3.9"
208
+ cache: pip
209
+ cache-dependency-path: 'requirements/*.pip'
210
+
211
+ - name: "Install tools"
212
+ run: |
213
+ python -m pip install -r requirements/kit.pip
214
+
215
+ - name: "Build sdist"
216
+ env:
217
+ RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
218
+ run: |
219
+ echo "python igor.py build_next $RELEASE_VERSION"
220
+ python igor.py build_next "$RELEASE_VERSION"
221
+
222
+ - name: "List tarballs"
223
+ run: |
224
+ ls -al dist/
225
+
226
+ - name: "Upload sdist"
227
+ uses: actions/upload-artifact@v4
228
+ with:
229
+ name: dist-sdist
230
+ path: dist/*.tar.gz
231
+ retention-days: 7
232
+
233
+ pypy:
234
+ name: "PyPy wheel"
235
+ runs-on: ubuntu-latest
236
+ steps:
237
+ - name: "Check out the repo"
238
+ uses: actions/checkout@v4
239
+ with:
240
+ # fetch all branches and tags instead of only fetching the ref/SHA that triggered the workflow
241
+ fetch-depth: 0
242
+
243
+ - name: "Install PyPy"
244
+ uses: actions/setup-python@v5
245
+ with:
246
+ python-version: "pypy-3.9" # Minimum of PyPy PYVERSIONS
247
+ cache: pip
248
+ cache-dependency-path: 'requirements/*.pip'
249
+
250
+ - name: "Install requirements"
251
+ run: |
252
+ pypy3 -m pip install -r requirements/kit.pip
253
+
254
+ - name: "Build wheel"
255
+ env:
256
+ DIST_EXTRA_CONFIG: extra.cfg
257
+ run: |
258
+ # One wheel works for all PyPy versions. PYVERSIONS
259
+ # yes, this is weird syntax: https://github.com/pypa/build/issues/202
260
+ echo -e "[bdist_wheel]\npython_tag=pp38.pp39.pp310" > $DIST_EXTRA_CONFIG
261
+ pypy3 -m build -w
262
+
263
+ - name: "List wheels"
264
+ run: |
265
+ ls -al dist/
266
+
267
+ - name: "Upload wheels"
268
+ uses: actions/upload-artifact@v4
269
+ with:
270
+ name: dist-pypy
271
+ path: dist/*.whl
272
+ retention-days: 7
273
+
274
+ sign:
275
+ # This signs our artifacts, but we don't use the signatures for anything
276
+ # yet. Someday maybe PyPI will have a way to upload and verify them.
277
+ name: "Sign artifacts"
278
+ needs:
279
+ - wheels
280
+ - sdist
281
+ - pypy
282
+ runs-on: ubuntu-latest
283
+ permissions:
284
+ id-token: write
285
+ steps:
286
+ - name: "Download artifacts"
287
+ uses: actions/download-artifact@v4
288
+ with:
289
+ pattern: dist-*
290
+ merge-multiple: true
291
+
292
+ - name: "Sign artifacts"
293
+ uses: sigstore/gh-action-sigstore-python@v2.1.1
294
+ with:
295
+ inputs: logging-strict-*.*
296
+
297
+ - name: "List files"
298
+ run: |
299
+ ls -alR
300
+
301
+ - name: "Upload signatures"
302
+ uses: actions/upload-artifact@v4
303
+ with:
304
+ name: signatures
305
+ path: |
306
+ *.crt
307
+ *.sig
308
+ *.sigstore
309
+ retention-days: 7
@@ -0,0 +1,89 @@
1
+ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2
+ # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
3
+
4
+ name: "Python Nightly Tests"
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - "**/*nightly*"
10
+ schedule:
11
+ # Run at 2:22am early every morning Eastern time (6/7:22 UTC)
12
+ # so that we get tips of CPython development tested.
13
+ # https://crontab.guru/#22_7_%2a_%2a_%2a
14
+ - cron: "22 7 * * *"
15
+ workflow_dispatch:
16
+
17
+ defaults:
18
+ run:
19
+ shell: bash
20
+
21
+ env:
22
+ PIP_DISABLE_PIP_VERSION_CHECK: 1
23
+
24
+ permissions:
25
+ contents: read
26
+
27
+ concurrency:
28
+ group: "${{ github.workflow }}-${{ github.ref }}"
29
+ cancel-in-progress: true
30
+
31
+ jobs:
32
+ tests:
33
+ name: "${{ matrix.python-version }}"
34
+ # Choose a recent Ubuntu that deadsnakes still builds all the versions for.
35
+ # For example, deadsnakes doesn't provide 3.10 nightly for 22.04 (jammy)
36
+ # because jammy ships 3.10, and deadsnakes doesn't want to clobber it.
37
+ # https://launchpad.net/~deadsnakes/+archive/ubuntu/nightly/+packages
38
+ # https://github.com/deadsnakes/issues/issues/234
39
+ # bionic: 18, focal: 20, jammy: 22
40
+ runs-on: ubuntu-20.04
41
+ # If it doesn't finish in an hour, it's not going to. Don't spin for six
42
+ # hours needlessly.
43
+ timeout-minutes: 60
44
+
45
+ strategy:
46
+ matrix:
47
+ python-version:
48
+ # When changing this list, be sure to check the [gh] list in
49
+ # tox.ini so that tox will run properly. PYVERSIONS
50
+ # Available versions:
51
+ # https://launchpad.net/~deadsnakes/+archive/ubuntu/nightly/+packages
52
+ - "3.11-dev"
53
+ - "3.12-dev"
54
+ - "3.13-dev"
55
+ # https://github.com/actions/setup-python#available-versions-of-pypy
56
+ - "pypy-3.9-nightly"
57
+ - "pypy-3.10-nightly"
58
+ fail-fast: false
59
+
60
+ steps:
61
+ - name: "Check out the repo"
62
+ uses: "actions/checkout@v4"
63
+
64
+ - name: "Install ${{ matrix.python-version }} with deadsnakes"
65
+ uses: deadsnakes/action@6c8b9b82fe0b4344f4b98f2775fcc395df45e494
66
+ if: "!startsWith(matrix.python-version, 'pypy-')"
67
+ with:
68
+ python-version: "${{ matrix.python-version }}"
69
+
70
+ - name: "Install ${{ matrix.python-version }} with setup-python"
71
+ uses: "actions/setup-python@v5"
72
+ if: "startsWith(matrix.python-version, 'pypy-')"
73
+ with:
74
+ python-version: "${{ matrix.python-version }}"
75
+
76
+ - name: "Show diagnostic info"
77
+ run: |
78
+ set -xe
79
+ python -VV
80
+ python -m site
81
+ env
82
+
83
+ - name: "Install dependencies"
84
+ run: |
85
+ python -m pip install -r requirements/tox.pip
86
+
87
+ - name: "Run tox"
88
+ run: |
89
+ python -m tox -- -rfsEX
@@ -0,0 +1,110 @@
1
+ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2
+ # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
3
+ # https://github.com/pyscaffold/pyscaffold/blob/master/src/pyscaffold/templates/github_ci_workflow.template
4
+ # https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts#passing-data-between-jobs-in-a-workflow
5
+
6
+ name: "Quality"
7
+
8
+ on:
9
+ push:
10
+ branches:
11
+ - main
12
+ - msftcangoblowm/*
13
+ pull_request:
14
+ workflow_dispatch:
15
+
16
+ defaults:
17
+ run:
18
+ shell: bash
19
+
20
+ env:
21
+ PIP_DISABLE_PIP_VERSION_CHECK: 1
22
+
23
+ permissions:
24
+ contents: read
25
+
26
+ concurrency:
27
+ group: >-
28
+ ${{ github.workflow }}-${{ github.ref_type }}-
29
+ ${{ github.event.pull_request.number || github.sha }}
30
+ cancel-in-progress: true
31
+
32
+ jobs:
33
+ lint:
34
+ name: "isort black flake8 etc"
35
+ runs-on: ubuntu-latest
36
+
37
+ steps:
38
+ - name: "Check out the repo"
39
+ uses: "actions/checkout@v4"
40
+
41
+ - name: "Install Python"
42
+ uses: "actions/setup-python@v5"
43
+ with:
44
+ python-version: "3.9" # Minimum of PYVERSIONS
45
+ # cache: pip
46
+ # cache-dependency-path: 'requirements/*.pip'
47
+
48
+ - name: "Install dependencies"
49
+ run: |
50
+ python -m pip install -r requirements/tox.pip
51
+
52
+ - name: "Tox lint"
53
+ run: |
54
+ python -m tox -e lint
55
+
56
+ mypy:
57
+ name: "Check types"
58
+ runs-on: ubuntu-latest
59
+
60
+ steps:
61
+ - name: "Check out the repo"
62
+ uses: "actions/checkout@v4"
63
+
64
+ - name: "Install Python"
65
+ uses: "actions/setup-python@v5"
66
+ with:
67
+ python-version: "3.9" # Minimum of PYVERSIONS, but at least 3.9
68
+ # cache: pip
69
+ cache-dependency-path: 'requirements/*.pip'
70
+
71
+ - name: "Install dependencies"
72
+ run: |
73
+ # Runs on 3.9, but hashes supported by pip-tools is
74
+ # not supported by setuptools. So don't expect hashes
75
+ python -m pip install -r requirements/tox.pip
76
+
77
+ - name: "Tox mypy"
78
+ run: |
79
+ python -m tox -e mypy
80
+
81
+ docs:
82
+ name: "Build docs"
83
+ runs-on: ubuntu-latest
84
+
85
+ steps:
86
+ - name: "Check out the repo"
87
+ uses: "actions/checkout@v4"
88
+
89
+ - name: "Install Python"
90
+ uses: "actions/setup-python@v5"
91
+ with:
92
+ python-version: "3.9" # Doc version from PYVERSIONS
93
+ # cache: pip
94
+ cache-dependency-path: 'requirements/*.pip'
95
+
96
+ - name: "Show environment"
97
+ run: |
98
+ set -xe
99
+ python -VV
100
+ python -m site
101
+ env
102
+
103
+ - name: "Install dependencies"
104
+ run: |
105
+ set -xe
106
+ python -m pip install -r requirements/tox.pip
107
+
108
+ - name: "Tox docs"
109
+ run: |
110
+ python -m tox -e docs