InquirerPrompt 0.3.4__tar.gz → 0.4.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 (147) hide show
  1. inquirerprompt-0.4.1/.editorconfig +43 -0
  2. inquirerprompt-0.4.1/.github/SECURITY.md +35 -0
  3. inquirerprompt-0.4.1/.github/dependabot.yml +23 -0
  4. inquirerprompt-0.4.1/.github/workflows/cd.yml +72 -0
  5. inquirerprompt-0.4.1/.github/workflows/ci.yml +96 -0
  6. inquirerprompt-0.4.1/.github/workflows/codeql.yml +40 -0
  7. inquirerprompt-0.4.1/.github/workflows/compat.yml +78 -0
  8. inquirerprompt-0.4.1/.gitignore +147 -0
  9. inquirerprompt-0.4.1/.markdownlint-cli2.jsonc +50 -0
  10. inquirerprompt-0.4.1/.pre-commit-config.yaml +9 -0
  11. inquirerprompt-0.4.1/.prettierignore +33 -0
  12. inquirerprompt-0.4.1/.prettierrc +82 -0
  13. inquirerprompt-0.4.1/.readthedocs.yaml +19 -0
  14. inquirerprompt-0.4.1/AGENTS.md +107 -0
  15. inquirerprompt-0.4.1/CHANGELOG.md +2364 -0
  16. inquirerprompt-0.4.1/InquirerPrompt/__init__.py +4 -0
  17. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/base/complex.py +21 -4
  18. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/base/control.py +20 -8
  19. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/base/list.py +4 -4
  20. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/base/simple.py +3 -3
  21. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/containers/instruction.py +1 -1
  22. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/containers/message.py +2 -2
  23. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/containers/spinner.py +6 -4
  24. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/containers/validation.py +1 -1
  25. inquirerprompt-0.4.1/InquirerPrompt/inquirer.py +31 -0
  26. inquirerprompt-0.4.1/InquirerPrompt/prompts/__init__.py +25 -0
  27. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/checkbox.py +17 -9
  28. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/confirm.py +5 -5
  29. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/expand.py +25 -15
  30. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/filepath.py +6 -6
  31. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/fuzzy.py +44 -23
  32. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/input.py +6 -6
  33. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/list.py +25 -16
  34. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/number.py +15 -9
  35. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/rawlist.py +16 -11
  36. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/prompts/secret.py +3 -3
  37. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/resolver.py +26 -22
  38. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/separator.py +1 -1
  39. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/utils.py +58 -9
  40. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/validator.py +2 -2
  41. {inquirerprompt-0.3.4 → inquirerprompt-0.4.1}/PKG-INFO +73 -30
  42. {inquirerprompt-0.3.4 → inquirerprompt-0.4.1}/README.md +57 -10
  43. inquirerprompt-0.4.1/Taskfile.yml +208 -0
  44. inquirerprompt-0.4.1/buildspec.yml +23 -0
  45. inquirerprompt-0.4.1/docs/Makefile +23 -0
  46. inquirerprompt-0.4.1/docs/conf.py +37 -0
  47. inquirerprompt-0.4.1/docs/index.md +189 -0
  48. inquirerprompt-0.4.1/docs/pages/api.md +159 -0
  49. inquirerprompt-0.4.1/docs/pages/changelog.md +3 -0
  50. inquirerprompt-0.4.1/docs/pages/color_print.md +31 -0
  51. inquirerprompt-0.4.1/docs/pages/compat_report.md +19 -0
  52. inquirerprompt-0.4.1/docs/pages/compatibility.md +39 -0
  53. inquirerprompt-0.4.1/docs/pages/dynamic.md +384 -0
  54. inquirerprompt-0.4.1/docs/pages/env.md +193 -0
  55. inquirerprompt-0.4.1/docs/pages/faq.md +105 -0
  56. inquirerprompt-0.4.1/docs/pages/height.md +160 -0
  57. inquirerprompt-0.4.1/docs/pages/inquirer.md +60 -0
  58. inquirerprompt-0.4.1/docs/pages/kb.md +340 -0
  59. inquirerprompt-0.4.1/docs/pages/patched_print.md +29 -0
  60. inquirerprompt-0.4.1/docs/pages/prompt.md +146 -0
  61. inquirerprompt-0.4.1/docs/pages/prompts/checkbox.md +95 -0
  62. inquirerprompt-0.4.1/docs/pages/prompts/confirm.md +141 -0
  63. inquirerprompt-0.4.1/docs/pages/prompts/expand.md +169 -0
  64. inquirerprompt-0.4.1/docs/pages/prompts/filepath.md +78 -0
  65. inquirerprompt-0.4.1/docs/pages/prompts/fuzzy.md +187 -0
  66. inquirerprompt-0.4.1/docs/pages/prompts/input.md +132 -0
  67. inquirerprompt-0.4.1/docs/pages/prompts/list.md +157 -0
  68. inquirerprompt-0.4.1/docs/pages/prompts/number.md +266 -0
  69. inquirerprompt-0.4.1/docs/pages/prompts/rawlist.md +84 -0
  70. inquirerprompt-0.4.1/docs/pages/prompts/secret.md +53 -0
  71. inquirerprompt-0.4.1/docs/pages/raise_kbi.md +194 -0
  72. inquirerprompt-0.4.1/docs/pages/separator.md +83 -0
  73. inquirerprompt-0.4.1/docs/pages/style.md +151 -0
  74. inquirerprompt-0.4.1/docs/pages/validator.md +310 -0
  75. inquirerprompt-0.4.1/docs/requirements.txt +5 -0
  76. inquirerprompt-0.4.1/examples/__init__.py +0 -0
  77. inquirerprompt-0.4.1/examples/alternate/__init__.py +0 -0
  78. inquirerprompt-0.4.1/examples/alternate/checkbox.py +46 -0
  79. inquirerprompt-0.4.1/examples/alternate/confirm.py +14 -0
  80. inquirerprompt-0.4.1/examples/alternate/expand.py +36 -0
  81. inquirerprompt-0.4.1/examples/alternate/filepath.py +23 -0
  82. inquirerprompt-0.4.1/examples/alternate/fuzzy.py +51 -0
  83. inquirerprompt-0.4.1/examples/alternate/input.py +30 -0
  84. inquirerprompt-0.4.1/examples/alternate/list.py +32 -0
  85. inquirerprompt-0.4.1/examples/alternate/number.py +20 -0
  86. inquirerprompt-0.4.1/examples/alternate/rawlist.py +37 -0
  87. inquirerprompt-0.4.1/examples/alternate/secret.py +26 -0
  88. inquirerprompt-0.4.1/examples/async.py +19 -0
  89. inquirerprompt-0.4.1/examples/classic/__init__.py +0 -0
  90. inquirerprompt-0.4.1/examples/classic/checkbox.py +51 -0
  91. inquirerprompt-0.4.1/examples/classic/confirm.py +28 -0
  92. inquirerprompt-0.4.1/examples/classic/expand.py +48 -0
  93. inquirerprompt-0.4.1/examples/classic/filepath.py +31 -0
  94. inquirerprompt-0.4.1/examples/classic/fuzzy.py +58 -0
  95. inquirerprompt-0.4.1/examples/classic/input.py +35 -0
  96. inquirerprompt-0.4.1/examples/classic/list.py +34 -0
  97. inquirerprompt-0.4.1/examples/classic/number.py +26 -0
  98. inquirerprompt-0.4.1/examples/classic/rawlist.py +43 -0
  99. inquirerprompt-0.4.1/examples/classic/secret.py +33 -0
  100. inquirerprompt-0.4.1/examples/colored_choices.py +136 -0
  101. inquirerprompt-0.4.1/examples/demo_alternate.py +61 -0
  102. inquirerprompt-0.4.1/examples/demo_classic.py +71 -0
  103. inquirerprompt-0.4.1/examples/inquirer.py +23 -0
  104. inquirerprompt-0.4.1/examples/pizza.py +63 -0
  105. inquirerprompt-0.4.1/examples/prompt.py +33 -0
  106. inquirerprompt-0.4.1/examples/requirements.txt +1 -0
  107. inquirerprompt-0.4.1/pyproject.toml +149 -0
  108. inquirerprompt-0.4.1/pyrightconfig.json +10 -0
  109. inquirerprompt-0.4.1/scripts/compat_check.py +192 -0
  110. inquirerprompt-0.4.1/tests/__init__.py +0 -0
  111. inquirerprompt-0.4.1/tests/base/__init__.py +0 -0
  112. inquirerprompt-0.4.1/tests/base/test_complex.py +376 -0
  113. inquirerprompt-0.4.1/tests/base/test_control.py +303 -0
  114. inquirerprompt-0.4.1/tests/base/test_list.py +327 -0
  115. inquirerprompt-0.4.1/tests/base/test_simple.py +191 -0
  116. inquirerprompt-0.4.1/tests/conftest.py +31 -0
  117. inquirerprompt-0.4.1/tests/containers/__init__.py +0 -0
  118. inquirerprompt-0.4.1/tests/containers/test_instruction.py +9 -0
  119. inquirerprompt-0.4.1/tests/containers/test_spinner.py +55 -0
  120. inquirerprompt-0.4.1/tests/prompts/__init__.py +0 -0
  121. inquirerprompt-0.4.1/tests/prompts/test_checkbox.py +220 -0
  122. inquirerprompt-0.4.1/tests/prompts/test_confirm.py +296 -0
  123. inquirerprompt-0.4.1/tests/prompts/test_expand.py +339 -0
  124. inquirerprompt-0.4.1/tests/prompts/test_filepath.py +293 -0
  125. inquirerprompt-0.4.1/tests/prompts/test_fuzzy.py +990 -0
  126. inquirerprompt-0.4.1/tests/prompts/test_input.py +284 -0
  127. inquirerprompt-0.4.1/tests/prompts/test_list.py +185 -0
  128. inquirerprompt-0.4.1/tests/prompts/test_number.py +494 -0
  129. inquirerprompt-0.4.1/tests/prompts/test_rawlist.py +226 -0
  130. inquirerprompt-0.4.1/tests/prompts/test_secret.py +158 -0
  131. inquirerprompt-0.4.1/tests/style.py +31 -0
  132. inquirerprompt-0.4.1/tests/test_colored_choices.py +258 -0
  133. inquirerprompt-0.4.1/tests/test_inquirer.py +20 -0
  134. inquirerprompt-0.4.1/tests/test_resolver.py +484 -0
  135. inquirerprompt-0.4.1/tests/test_utils.py +143 -0
  136. inquirerprompt-0.4.1/tests/test_validator.py +75 -0
  137. inquirerprompt-0.4.1/uv.lock +3094 -0
  138. inquirerprompt-0.3.4/InquirerPy/__init__.py +0 -4
  139. inquirerprompt-0.3.4/InquirerPy/inquirer.py +0 -31
  140. inquirerprompt-0.3.4/InquirerPy/prompts/__init__.py +0 -25
  141. inquirerprompt-0.3.4/pyproject.toml +0 -98
  142. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/base/__init__.py +0 -0
  143. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/containers/__init__.py +0 -0
  144. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/enum.py +0 -0
  145. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/exceptions.py +0 -0
  146. {inquirerprompt-0.3.4/InquirerPy → inquirerprompt-0.4.1/InquirerPrompt}/py.typed +0 -0
  147. {inquirerprompt-0.3.4 → inquirerprompt-0.4.1}/LICENSE +0 -0
@@ -0,0 +1,43 @@
1
+ # EditorConfig for consistent formatting across the project
2
+ # See: https://editorconfig.org/
3
+
4
+ root = true
5
+
6
+ # Default formatting (all files)
7
+ [*]
8
+ charset = utf-8
9
+ end_of_line = lf
10
+ insert_final_newline = true
11
+ trim_trailing_whitespace = true
12
+ indent_style = space
13
+ max_line_length = 200
14
+ indent_size = 4
15
+
16
+ # Shell scripts (bash, sh, bash-like)
17
+ [*.{sh,bash,inc,command},*.zsh,.zshrc,.zshenv,.zprofile,.zshaliases]
18
+ indent_size = 2
19
+ # Shfmt specific options (when ignoreEditorconfig = false in VSCode settings)
20
+ # See: https://github.com/mvdan/sh
21
+ # shell_variant = bash
22
+ # shell_variant = zsh
23
+ # binary_next_line = false # boolean operators stay on same line
24
+ case_indent = true # indent case patterns
25
+ # func_next_line = false # function braces on same line
26
+ space_redirects = true # space after redirection operators
27
+ # simplify = false # don't remove redundant code
28
+ switch_case_indent = true # indent case patterns
29
+ keep_padding = true # keep padding around redirects
30
+ function_next_line = true
31
+
32
+ # Markdown documentation
33
+ [*.{md,markdown}]
34
+ trim_trailing_whitespace = true
35
+ max_line_length = 3000
36
+ indent_size = 2
37
+
38
+ # YAML/JSON configuration
39
+ [*.{yaml,yml,json}]
40
+ indent_style = space
41
+
42
+ [Makefile]
43
+ indent_style = tab
@@ -0,0 +1,35 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a Vulnerability
4
+
5
+ If you discover a security vulnerability in InquirerPrompt, please report it
6
+ responsibly:
7
+
8
+ 1. **Do not open a public GitHub issue.**
9
+ 2. Email the maintainer at **tobias.hochguertel@googlemail.com** with a
10
+ description of the vulnerability and steps to reproduce.
11
+ 3. You will receive an acknowledgment within 48 hours.
12
+ 4. A fix will be prepared and a security advisory published on GitHub once
13
+ the fix is released.
14
+
15
+ ## Supported Versions
16
+
17
+ | Version | Supported |
18
+ |---------|-----------|
19
+ | latest `main` / `dev` | Yes |
20
+ | tagged releases on `main` | Yes |
21
+ | older versions | No — please upgrade |
22
+
23
+ ## Scope
24
+
25
+ This policy covers the `InquirerPrompt` package (PyPI) and the
26
+ `tobiashochguertel/InquirerPrompt` repository. It does not cover the
27
+ upstream `kazhala/InquirerPy` project — report upstream vulnerabilities
28
+ through their channels.
29
+
30
+ ## Security Features Enabled
31
+
32
+ - Secret scanning (with push protection)
33
+ - Dependabot security alerts and automated security updates
34
+ - CodeQL code scanning (on `main` and `dev`)
35
+ - Branch protection on `main` (no force pushes, no deletions)
@@ -0,0 +1,23 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ labels:
9
+ - dependencies
10
+ - python
11
+ commit-message:
12
+ prefix: "chore(deps)"
13
+
14
+ - package-ecosystem: github-actions
15
+ directory: /
16
+ schedule:
17
+ interval: weekly
18
+ open-pull-requests-limit: 5
19
+ labels:
20
+ - dependencies
21
+ - github-actions
22
+ commit-message:
23
+ prefix: "chore(deps)"
@@ -0,0 +1,72 @@
1
+ name: CD — Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ # Centralized version pins — adjust here to update all jobs
13
+ env:
14
+ UV_VERSION: "0.5.18"
15
+ PYTHON_VERSION: "3.12"
16
+
17
+ jobs:
18
+ release:
19
+ name: Semantic Release
20
+ runs-on: ubuntu-latest
21
+ # Only run on non-fork repositories
22
+ if: github.repository_owner == 'tobiashochguertel'
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0
27
+ token: ${{ secrets.GH_RELEASE_TOKEN }}
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: ${{ env.PYTHON_VERSION }}
33
+
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v5
36
+ with:
37
+ version: ${{ env.UV_VERSION }}
38
+ enable-cache: true
39
+ cache-dependency-glob: "uv.lock"
40
+
41
+ - name: Install dependencies
42
+ run: uv sync --group dev
43
+
44
+ - name: Check if release needed
45
+ id: check
46
+ run: |
47
+ NEXT_TAG=$(uv run semantic-release version --print-tag 2>/dev/null || echo "")
48
+ if [ -n "$NEXT_TAG" ]; then
49
+ echo "released=true" >> "$GITHUB_OUTPUT"
50
+ echo "tag=$NEXT_TAG" >> "$GITHUB_OUTPUT"
51
+ else
52
+ echo "released=false" >> "$GITHUB_OUTPUT"
53
+ fi
54
+
55
+ - name: Run semantic-release version
56
+ if: steps.check.outputs.released == 'true'
57
+ run: uv run semantic-release -vv version
58
+ env:
59
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
60
+
61
+ - name: Publish to PyPI
62
+ if: steps.check.outputs.released == 'true'
63
+ uses: pypa/gh-action-pypi-publish@release/v1
64
+ with:
65
+ password: ${{ secrets.PYPI_API_TOKEN }}
66
+ packages-dir: dist/
67
+
68
+ - name: Upload dist artifacts to GitHub release
69
+ if: steps.check.outputs.released == 'true'
70
+ run: uv run semantic-release -vv publish
71
+ env:
72
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
@@ -0,0 +1,96 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, dev]
6
+ pull_request:
7
+ branches: [main, dev]
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ # Centralized version pins — adjust here to update all jobs
15
+ env:
16
+ UV_VERSION: "0.5.18"
17
+
18
+ jobs:
19
+ lint:
20
+ name: Lint
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: "3.12"
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@v5
30
+ with:
31
+ version: ${{ env.UV_VERSION }}
32
+ enable-cache: true
33
+ cache-dependency-glob: "uv.lock"
34
+ - name: Install dependencies
35
+ run: uv sync --group dev
36
+ - name: Run ruff check
37
+ run: uv run ruff check InquirerPrompt/ tests/
38
+ - name: Run ruff format
39
+ run: uv run ruff format --check InquirerPrompt/ tests/
40
+ - name: Run pyright
41
+ run: uv run pyright InquirerPrompt
42
+
43
+ test:
44
+ name: Test (Python ${{ matrix.python-version }})
45
+ runs-on: ubuntu-latest
46
+ strategy:
47
+ fail-fast: false
48
+ matrix:
49
+ # Add/remove Python versions here
50
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
51
+
52
+ steps:
53
+ - uses: actions/checkout@v4
54
+ - name: Set up Python ${{ matrix.python-version }}
55
+ uses: actions/setup-python@v5
56
+ with:
57
+ python-version: ${{ matrix.python-version }}
58
+ - name: Install uv
59
+ uses: astral-sh/setup-uv@v5
60
+ with:
61
+ version: ${{ env.UV_VERSION }}
62
+ enable-cache: true
63
+ cache-dependency-glob: "uv.lock"
64
+ - name: Install dependencies
65
+ run: uv sync --group dev --python ${{ matrix.python-version }}
66
+ - name: Run tests
67
+ run: uv run pytest tests/ -v --tb=short
68
+
69
+ coverage:
70
+ name: Coverage
71
+ runs-on: ubuntu-latest
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+ - name: Set up Python
75
+ uses: actions/setup-python@v5
76
+ with:
77
+ python-version: "3.12"
78
+ - name: Install uv
79
+ uses: astral-sh/setup-uv@v5
80
+ with:
81
+ version: ${{ env.UV_VERSION }}
82
+ enable-cache: true
83
+ cache-dependency-glob: "uv.lock"
84
+ - name: Install dependencies
85
+ run: uv sync --group dev
86
+ - name: Run coverage
87
+ run: |
88
+ uv run coverage run -m pytest tests/
89
+ uv run coverage xml
90
+ uv run coverage report
91
+ - name: Upload coverage to Codecov
92
+ uses: codecov/codecov-action@v5
93
+ with:
94
+ token: ${{ secrets.CODECOV_TOKEN }}
95
+ fail_ci_if_error: false
96
+ files: ./coverage.xml
@@ -0,0 +1,40 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [main, dev]
6
+ pull_request:
7
+ branches: [main, dev]
8
+ schedule:
9
+ - cron: "0 6 * * 1"
10
+ workflow_dispatch:
11
+
12
+ jobs:
13
+ analyze:
14
+ name: Analyze
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ security-events: write
18
+ actions: read
19
+ contents: read
20
+
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ language: [python]
25
+
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+
29
+ - name: Initialize CodeQL
30
+ uses: github/codeql-action/init@v3
31
+ with:
32
+ languages: ${{ matrix.language }}
33
+
34
+ - name: Autobuild
35
+ uses: github/codeql-action/autobuild@v3
36
+
37
+ - name: Perform CodeQL Analysis
38
+ uses: github/codeql-action/analyze@v3
39
+ with:
40
+ category: "/language:${{ matrix.language }}"
@@ -0,0 +1,78 @@
1
+ name: Compatibility Check
2
+
3
+ on:
4
+ push:
5
+ branches: [main, dev]
6
+ pull_request:
7
+ branches: [main, dev]
8
+ schedule:
9
+ # Run weekly to catch upstream changes even when fork is idle
10
+ - cron: "0 6 * * 1"
11
+ workflow_dispatch:
12
+
13
+ # Centralized version pins — adjust here to update all jobs
14
+ env:
15
+ UV_VERSION: "0.5.18"
16
+ PYTHON_VERSION: "3.12"
17
+
18
+ jobs:
19
+ compat:
20
+ name: API Compatibility vs upstream InquirerPy
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ # Need full history for auto-commit step
27
+ fetch-depth: 0
28
+ token: ${{ secrets.GH_RELEASE_TOKEN }}
29
+
30
+ - name: Set up Python
31
+ uses: actions/setup-python@v5
32
+ with:
33
+ python-version: ${{ env.PYTHON_VERSION }}
34
+
35
+ - name: Install uv
36
+ uses: astral-sh/setup-uv@v5
37
+ with:
38
+ version: ${{ env.UV_VERSION }}
39
+ enable-cache: true
40
+ cache-dependency-glob: "uv.lock"
41
+
42
+ - name: Install griffe
43
+ run: uv pip install --system "griffe>=1.0"
44
+
45
+ - name: Install fork package (editable)
46
+ run: uv pip install --system -e .
47
+
48
+ - name: Run compatibility check
49
+ id: compat
50
+ run: |
51
+ python scripts/compat_check.py --output docs/pages/compat_report.md
52
+ echo "report_exists=true" >> "$GITHUB_OUTPUT"
53
+ # Never fail CI — this is a report-only step
54
+ continue-on-error: true
55
+
56
+ - name: Upload compatibility report as artifact
57
+ uses: actions/upload-artifact@v4
58
+ with:
59
+ name: compatibility-report
60
+ path: docs/pages/compat_report.md
61
+ if-no-files-found: warn
62
+
63
+ - name: Commit updated report (main only, not on push to avoid race with CD)
64
+ if: >
65
+ github.ref == 'refs/heads/main' &&
66
+ github.event_name != 'pull_request' &&
67
+ github.event_name != 'push'
68
+ run: |
69
+ git config user.name "github-actions[bot]"
70
+ git config user.email "github-actions[bot]@users.noreply.github.com"
71
+ git add docs/pages/compat_report.md
72
+ git pull --rebase --autostash origin main
73
+ if git diff --cached --quiet; then
74
+ echo "No changes to compat_report.md — nothing to commit."
75
+ else
76
+ git commit -m "docs: update upstream compatibility report [skip ci]"
77
+ git push
78
+ fi
@@ -0,0 +1,147 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+ # pytype static type analyzer
135
+ .pytype/
136
+
137
+ # Cython debug symbols
138
+ cython_debug/
139
+ sample.txt
140
+
141
+ .vscode
142
+ # Fork setup notes — contains credentials/tokens/account info — NEVER commit this
143
+ FORK_SETUP_NOTES.md
144
+ fork-setup-notes.md
145
+ .fork-notes/
146
+ *.secrets
147
+ FORK_LICENSE_NOTES.md
@@ -0,0 +1,50 @@
1
+ {
2
+ // https://github.com/DavidAnson/markdownlint-cli2
3
+ // Example configuration file for markdownlint-cli2
4
+ // https://github.com/DavidAnson/markdownlint-cli2/blob/main/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc
5
+ "config": {
6
+ "line-length": {
7
+ "code_blocks": false,
8
+ "headings": false,
9
+ "line_length": 3000,
10
+ "tables": false
11
+ },
12
+ "MD007": {
13
+ "indent": 2
14
+ },
15
+ "MD025": false,
16
+ "MD029": false,
17
+ "MD036": false,
18
+ "MD046": false,
19
+ "no-duplicate-heading": false,
20
+ "no-inline-html": false,
21
+ "no-space-in-code": false,
22
+ "ul-style": {
23
+ "style": "dash"
24
+ }
25
+ },
26
+ // Ignore files referenced by .gitignore (only valid at root)
27
+ "gitignore": true,
28
+ // Define glob expressions to use (only valid at root)
29
+ "globs": [
30
+ "!*bout.md"
31
+ ],
32
+ // Define glob expressions to ignore
33
+ "ignores": [
34
+ "ignore*.md"
35
+ ],
36
+ // Disable banner message on stdout (only valid at root)
37
+ "noBanner": true,
38
+ // Enable inline config comments
39
+ "noInlineConfig": false,
40
+ // Disable progress on stdout (only valid at root)
41
+ "noProgress": true,
42
+ // Use a specific formatter (only valid at root)
43
+ "outputFormatters": [
44
+ [
45
+ "markdownlint-cli2-formatter-default"
46
+ ]
47
+ ],
48
+ // Show found files on stdout (only valid at root)
49
+ "showFound": true
50
+ }
@@ -0,0 +1,9 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.16.4
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ files: InquirerPrompt
8
+ - id: ruff-format
9
+ files: InquirerPrompt
@@ -0,0 +1,33 @@
1
+ # Python files
2
+ *.py
3
+ __pycache__/
4
+ *.pyc
5
+ *.pyo
6
+ *.pyd
7
+
8
+ # Python build artifacts
9
+ build/
10
+ dist/
11
+ *.egg-info/
12
+
13
+ # Virtual environments
14
+ venv/
15
+ .venv/
16
+ env/
17
+
18
+ # Cache directories
19
+ .pytest_cache/
20
+ .coverage
21
+ .mypy_cache/
22
+ .ruff_cache/
23
+
24
+ # Keep Prettier focused on documentation and configs
25
+ **/*.py
26
+ !**/*.md
27
+ !**/*.json
28
+ !**/*.yaml
29
+ !**/*.yml
30
+ !*.md
31
+ !zsh_analysis/reports/**/*.md
32
+
33
+ ##