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.
- sphinx_external_toc_strict-1.1.1/.github/dependabot.yml +7 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/codeql-analysis.yml +86 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/dependency-review.yml +35 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/kit.yml +309 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/python-nightly.yml +89 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/quality.yml +110 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/release.yml +159 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/test-coverage.yml +99 -0
- sphinx_external_toc_strict-1.1.1/.github/workflows/testsuite.yml +112 -0
- sphinx_external_toc_strict-1.1.1/.gitignore +136 -0
- sphinx_external_toc_strict-1.1.1/.pre-commit-config.yaml +73 -0
- sphinx_external_toc_strict-1.1.1/.readthedocs.yml +17 -0
- sphinx_external_toc_strict-1.1.1/CHANGELOG.md +146 -0
- sphinx_external_toc_strict-1.1.1/CHANGES.rst +78 -0
- sphinx_external_toc_strict-1.1.1/CONTRIBUTING.md +15 -0
- sphinx_external_toc_strict-1.1.1/LICENSE +21 -0
- sphinx_external_toc_strict-1.1.1/Makefile +206 -0
- sphinx_external_toc_strict-1.1.1/NOTICE.txt +14 -0
- sphinx_external_toc_strict-1.1.1/PKG-INFO +820 -0
- sphinx_external_toc_strict-1.1.1/README.rst +574 -0
- sphinx_external_toc_strict-1.1.1/codecov.yml +10 -0
- sphinx_external_toc_strict-1.1.1/docs/Makefile +170 -0
- sphinx_external_toc_strict-1.1.1/docs/_static/toc-graphic.png +0 -0
- sphinx_external_toc_strict-1.1.1/docs/_static/toc_tree.pptx +0 -0
- sphinx_external_toc_strict-1.1.1/docs/_toc.yml +27 -0
- sphinx_external_toc_strict-1.1.1/docs/code/api.rst +10 -0
- sphinx_external_toc_strict-1.1.1/docs/code/cli.rst +104 -0
- sphinx_external_toc_strict-1.1.1/docs/code/compat.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/constrants.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/events.rst +10 -0
- sphinx_external_toc_strict-1.1.1/docs/code/exceptions.rst +7 -0
- sphinx_external_toc_strict-1.1.1/docs/code/filename_suffix.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/index.rst +4 -0
- sphinx_external_toc_strict-1.1.1/docs/code/parsing_shared.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/parsing_strictyaml.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/pep518_read.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/tools_strictyaml.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/code/version_semantic.rst +9 -0
- sphinx_external_toc_strict-1.1.1/docs/conf.py +178 -0
- sphinx_external_toc_strict-1.1.1/docs/example/globfolder/page1.rst +4 -0
- sphinx_external_toc_strict-1.1.1/docs/example/globfolder/page2.rst +4 -0
- sphinx_external_toc_strict-1.1.1/docs/example/index.rst +5 -0
- sphinx_external_toc_strict-1.1.1/docs/example/subfolder/page.rst +4 -0
- sphinx_external_toc_strict-1.1.1/docs/intro.rst +56 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-black.txt +7 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-docutils-source.txt +7 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-python.txt +16493 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-sphinx-docs.txt +10 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-strictyaml-docs.txt +11 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-strictyaml-source.txt +37 -0
- sphinx_external_toc_strict-1.1.1/docs/objects-toc-strict.txt +7 -0
- sphinx_external_toc_strict-1.1.1/docs/requirements.in +14 -0
- sphinx_external_toc_strict-1.1.1/docs/requirements.pip +159 -0
- sphinx_external_toc_strict-1.1.1/docs/user_guide/api.rst +38 -0
- sphinx_external_toc_strict-1.1.1/docs/user_guide/cli.rst +176 -0
- sphinx_external_toc_strict-1.1.1/docs/user_guide/sphinx.rst +307 -0
- sphinx_external_toc_strict-1.1.1/docs/user_guide/why.rst +85 -0
- sphinx_external_toc_strict-1.1.1/howto.txt +79 -0
- sphinx_external_toc_strict-1.1.1/igor.py +633 -0
- sphinx_external_toc_strict-1.1.1/pyproject.toml +194 -0
- sphinx_external_toc_strict-1.1.1/requirements/dev.in +19 -0
- sphinx_external_toc_strict-1.1.1/requirements/dev.pip +174 -0
- sphinx_external_toc_strict-1.1.1/requirements/kit.in +20 -0
- sphinx_external_toc_strict-1.1.1/requirements/kit.pip +52 -0
- sphinx_external_toc_strict-1.1.1/requirements/manage.in +12 -0
- sphinx_external_toc_strict-1.1.1/requirements/manage.pip +132 -0
- sphinx_external_toc_strict-1.1.1/requirements/mypy.in +8 -0
- sphinx_external_toc_strict-1.1.1/requirements/mypy.pip +8 -0
- sphinx_external_toc_strict-1.1.1/requirements/pins.pip +4 -0
- sphinx_external_toc_strict-1.1.1/requirements/pip-tools.in +10 -0
- sphinx_external_toc_strict-1.1.1/requirements/pip-tools.pip +36 -0
- sphinx_external_toc_strict-1.1.1/requirements/pip.in +10 -0
- sphinx_external_toc_strict-1.1.1/requirements/pip.pip +16 -0
- sphinx_external_toc_strict-1.1.1/requirements/prod.in +4 -0
- sphinx_external_toc_strict-1.1.1/requirements/prod.pip +72 -0
- sphinx_external_toc_strict-1.1.1/requirements/tox.in +16 -0
- sphinx_external_toc_strict-1.1.1/requirements/tox.pip +38 -0
- sphinx_external_toc_strict-1.1.1/setup.cfg +4 -0
- sphinx_external_toc_strict-1.1.1/setup.py +71 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/__init__.py +47 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/__init__.pyi +12 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_compat.py +265 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_version.py +16 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/_version.pyi +13 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/api.py +424 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/api.pyi +105 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/cli.py +251 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/cli.pyi +23 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/constants.py +122 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/constants.pyi +31 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/events.py +477 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/events.pyi +47 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/exceptions.py +18 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/exceptions.pyi +10 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/filename_suffix.py +194 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/filename_suffix.pyi +20 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_shared.py +340 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_shared.pyi +68 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_strictyaml.py +593 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/parsing_strictyaml.pyi +65 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/pep518_read.py +241 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/pep518_read.pyi +29 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/py.typed +1 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/tools_strictyaml.py +578 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/tools_strictyaml.pyi +60 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/version_semantic.py +331 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict/version_semantic.pyi +18 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/PKG-INFO +820 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/SOURCES.txt +208 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/dependency_links.txt +1 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/entry_points.txt +5 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/requires.txt +203 -0
- sphinx_external_toc_strict-1.1.1/src/sphinx_external_toc_strict.egg-info/top_level.txt +1 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/bad_option_value.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/bad_url.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/doc_multiple_times.yml +4 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/doc_validation_fail.yml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty.yml +0 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty_items.yml +2 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/empty_subtrees.yml +2 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/entry_not_a_mapping.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/entry_unknown_link_type.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/file_and_glob_present.yml +4 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/item_then_subtrees_key.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/items_in_glob.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/items_in_url.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/list.yml +2 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/no_root.yml +1 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/subtree_with_no_items.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_keys.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_keys_nested.yml +7 -0
- sphinx_external_toc_strict-1.1.1/tests/_bad_toc_files/unknown_usecase.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/chapters.yml +26 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/jb_docs_toc.yml +83 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/list_and_nested.yml +14 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_chapters.yml +15 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_depth.yml +15 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_depth_parts_subset.yml +21 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_parts.yml +18 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/numbered_parts_subset.yml +21 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/parts.yml +26 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/simple_dict.yml +14 -0
- sphinx_external_toc_strict-1.1.1/tests/_jb_migrate_toc_files/simple_list.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/basic.yml +16 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/basic_compressed.yml +14 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/caption_not_entries.yml +11 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/exclude_missing.yml +9 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/glob.yml +8 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/glob_md.yml +46 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/nested.yml +11 -0
- sphinx_external_toc_strict-1.1.1/tests/_toc_files/tableofcontents.yml +11 -0
- sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/contains_toctree.yml +10 -0
- sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/file_not_in_toc.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/multiple_tableofcontents.yml +10 -0
- sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/no_glob_match.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/_warning_toc_files/tableofcontents_no_toc.yml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/conftest.py +50 -0
- sphinx_external_toc_strict-1.1.1/tests/test_api.py +61 -0
- sphinx_external_toc_strict-1.1.1/tests/test_cli/test_create_toc.txt +26 -0
- sphinx_external_toc_strict-1.1.1/tests/test_cli.py +82 -0
- sphinx_external_toc_strict-1.1.1/tests/test_filename_suffix.py +106 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_basic_.yml +16 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_basic_compressed_.yml +15 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_caption_not_entries_.yml +8 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_exclude_missing_.yml +9 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_glob_.yml +8 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_glob_md_.yml +46 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_nested_.yml +11 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_create_toc_dict_tableofcontents_.yml +12 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_basic_.yml +44 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_basic_compressed_.yml +44 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_caption_not_entries_.yml +20 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_exclude_missing_.yml +24 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_glob_.yml +19 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_glob_md_.yml +57 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_nested_.yml +44 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing/test_file_to_sitemap_tableofcontents_.yml +36 -0
- sphinx_external_toc_strict-1.1.1/tests/test_parsing.py +190 -0
- sphinx_external_toc_strict-1.1.1/tests/test_pep518_read.py +261 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_basic_.xml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_basic_compressed_.xml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_caption_not_entries_.xml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_glob_md_.xml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx/test_success_tableofcontents_.xml +8 -0
- sphinx_external_toc_strict-1.1.1/tests/test_sphinx.py +178 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_caption_not_entries_.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_create_site_map_from_path.yml +92 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_.yml +7 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_compressed_.yml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_basic_md_.yml +7 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_caption_not_entries_.yml +3 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_exclude_missing_.yml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_glob_.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_glob_md_.yml +6 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_nested_.yml +10 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_file_to_sitemap_tableofcontents_.yml +4 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_chapters_.yml +28 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_jb_docs_toc_.yml +77 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_list_and_nested_.yml +15 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_chapters_.yml +17 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_depth_.yml +17 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_depth_parts_subset_.yml +23 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_parts_.yml +21 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_numbered_parts_subset_.yml +23 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_parts_.yml +28 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_simple_dict_.yml +15 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools/test_migrate_jb_simple_list_.yml +5 -0
- sphinx_external_toc_strict-1.1.1/tests/test_tools.py +116 -0
- sphinx_external_toc_strict-1.1.1/tests/test_version_semantic.py +352 -0
- sphinx_external_toc_strict-1.1.1/tox.ini +106 -0
|
@@ -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
|