base-cli 0.3.0__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 (184) hide show
  1. base_cli-0.4.1/.github/ISSUE_TEMPLATE/support.md +28 -0
  2. base_cli-0.4.1/.github/base-project.yml +9 -0
  3. base_cli-0.4.1/.github/pull_request_template.md +25 -0
  4. base_cli-0.4.1/.github/workflows/compatibility.yml +68 -0
  5. base_cli-0.4.1/.github/workflows/docs.yml +81 -0
  6. base_cli-0.4.1/.github/workflows/examples.yml +45 -0
  7. base_cli-0.4.1/.github/workflows/issue-branch-policy.yml +508 -0
  8. base_cli-0.4.1/.github/workflows/package.yml +186 -0
  9. base_cli-0.4.1/.github/workflows/project-intake.yml +255 -0
  10. base_cli-0.4.1/.github/workflows/tests.yml +140 -0
  11. base_cli-0.4.1/CHANGELOG.md +212 -0
  12. base_cli-0.4.1/CONTRIBUTING.md +74 -0
  13. base_cli-0.4.1/MANIFEST.in +21 -0
  14. base_cli-0.4.1/PKG-INFO +1136 -0
  15. base_cli-0.4.1/README.md +1085 -0
  16. base_cli-0.4.1/SECURITY.md +73 -0
  17. base_cli-0.4.1/VERSION +1 -0
  18. base_cli-0.4.1/base_manifest.yaml +12 -0
  19. base_cli-0.4.1/compatibility/README.md +38 -0
  20. base_cli-0.4.1/compatibility/consumers/atlas_click/README.md +9 -0
  21. base_cli-0.4.1/compatibility/consumers/atlas_click/pyproject.toml +19 -0
  22. base_cli-0.4.1/compatibility/consumers/atlas_click/src/atlas_click/__init__.py +1 -0
  23. base_cli-0.4.1/compatibility/consumers/atlas_click/src/atlas_click/cli.py +45 -0
  24. base_cli-0.4.1/compatibility/consumers/atlas_click/tests/test_consumer.py +26 -0
  25. base_cli-0.4.1/compatibility/consumers/beacon_typer/README.md +11 -0
  26. base_cli-0.4.1/compatibility/consumers/beacon_typer/pyproject.toml +19 -0
  27. base_cli-0.4.1/compatibility/consumers/beacon_typer/src/beacon_typer/__init__.py +1 -0
  28. base_cli-0.4.1/compatibility/consumers/beacon_typer/src/beacon_typer/cli.py +43 -0
  29. base_cli-0.4.1/compatibility/consumers/beacon_typer/tests/test_consumer.py +25 -0
  30. base_cli-0.4.1/compatibility/consumers/cinder_automation/README.md +12 -0
  31. base_cli-0.4.1/compatibility/consumers/cinder_automation/pyproject.toml +22 -0
  32. base_cli-0.4.1/compatibility/consumers/cinder_automation/src/cinder_automation/__init__.py +1 -0
  33. base_cli-0.4.1/compatibility/consumers/cinder_automation/src/cinder_automation/cli.py +47 -0
  34. base_cli-0.4.1/compatibility/consumers/cinder_automation/tests/test_consumer.py +32 -0
  35. base_cli-0.4.1/compatibility/consumers/manifest.json +26 -0
  36. base_cli-0.4.1/docs/adopter-readiness.md +107 -0
  37. base_cli-0.4.1/docs/api-stability.md +122 -0
  38. base_cli-0.4.1/docs/cache-ownership-and-layout.md +80 -0
  39. base_cli-0.4.1/docs/consumer-profiles.md +243 -0
  40. base_cli-0.4.1/docs/extensions.md +49 -0
  41. base_cli-0.4.1/docs/index.md +76 -0
  42. base_cli-0.4.1/docs/integrations.md +54 -0
  43. base_cli-0.4.1/docs/json-contracts.md +113 -0
  44. base_cli-0.4.1/docs/local-config.md +23 -0
  45. base_cli-0.4.1/docs/migrations.md +53 -0
  46. base_cli-0.4.1/docs/output-contracts.md +25 -0
  47. base_cli-0.4.1/docs/performance.md +33 -0
  48. base_cli-0.4.1/docs/platform-support.md +56 -0
  49. base_cli-0.4.1/docs/releasing.md +92 -0
  50. base_cli-0.4.1/docs/security-review.md +56 -0
  51. base_cli-0.4.1/docs/security-threat-model.md +123 -0
  52. base_cli-0.4.1/docs/typer-adapter.md +78 -0
  53. base_cli-0.4.1/docs/user-config-typing.md +105 -0
  54. base_cli-0.4.1/examples/README.md +34 -0
  55. base_cli-0.4.1/examples/automation_observability_app/README.md +72 -0
  56. base_cli-0.4.1/examples/automation_observability_app/pyproject.toml +28 -0
  57. base_cli-0.4.1/examples/automation_observability_app/src/automation_observability_app/__init__.py +1 -0
  58. base_cli-0.4.1/examples/automation_observability_app/src/automation_observability_app/cli.py +63 -0
  59. base_cli-0.4.1/examples/automation_observability_app/tests/test_cli.py +25 -0
  60. base_cli-0.4.1/examples/minimal_cli/README.md +62 -0
  61. base_cli-0.4.1/examples/minimal_cli/pyproject.toml +19 -0
  62. base_cli-0.4.1/examples/minimal_cli/src/minimal_cli/__init__.py +1 -0
  63. base_cli-0.4.1/examples/minimal_cli/src/minimal_cli/cli.py +30 -0
  64. base_cli-0.4.1/examples/minimal_cli/tests/test_cli.py +26 -0
  65. base_cli-0.4.1/examples/nested_click_app/README.md +62 -0
  66. base_cli-0.4.1/examples/nested_click_app/pyproject.toml +25 -0
  67. base_cli-0.4.1/examples/nested_click_app/src/nested_click_app/__init__.py +1 -0
  68. base_cli-0.4.1/examples/nested_click_app/src/nested_click_app/cli.py +71 -0
  69. base_cli-0.4.1/examples/nested_click_app/src/nested_click_app/plugin.py +9 -0
  70. base_cli-0.4.1/examples/nested_click_app/tests/test_cli.py +29 -0
  71. base_cli-0.4.1/examples/typed_consumer.py +77 -0
  72. base_cli-0.4.1/examples/typer_app/README.md +65 -0
  73. base_cli-0.4.1/examples/typer_app/pyproject.toml +22 -0
  74. base_cli-0.4.1/examples/typer_app/src/typer_app/__init__.py +1 -0
  75. base_cli-0.4.1/examples/typer_app/src/typer_app/cli.py +45 -0
  76. base_cli-0.4.1/examples/typer_app/tests/test_cli.py +25 -0
  77. base_cli-0.4.1/examples/typer_consumer.py +48 -0
  78. base_cli-0.4.1/lib/python/base_cli/__init__.py +263 -0
  79. base_cli-0.4.1/lib/python/base_cli/_cleanup.py +341 -0
  80. base_cli-0.4.1/lib/python/base_cli/_click_compat.py +174 -0
  81. base_cli-0.4.1/lib/python/base_cli/_lifecycle.py +170 -0
  82. base_cli-0.4.1/lib/python/base_cli/_private_files.py +193 -0
  83. base_cli-0.4.1/lib/python/base_cli/_runtime.py +672 -0
  84. base_cli-0.4.1/lib/python/base_cli/app.py +3179 -0
  85. base_cli-0.4.1/lib/python/base_cli/attachment.py +68 -0
  86. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/command_filters.py +1 -4
  87. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/command_protocol.py +126 -31
  88. base_cli-0.4.1/lib/python/base_cli/config.py +255 -0
  89. base_cli-0.4.1/lib/python/base_cli/context.py +189 -0
  90. base_cli-0.4.1/lib/python/base_cli/deprecations.py +52 -0
  91. base_cli-0.4.1/lib/python/base_cli/errors.py +5 -0
  92. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/exit_codes.py +1 -0
  93. base_cli-0.4.1/lib/python/base_cli/experimental.py +8 -0
  94. base_cli-0.4.1/lib/python/base_cli/extensions.py +322 -0
  95. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/history.py +25 -33
  96. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/inspection.py +1 -2
  97. base_cli-0.4.1/lib/python/base_cli/integrations.py +197 -0
  98. base_cli-0.4.1/lib/python/base_cli/json_contracts.py +152 -0
  99. base_cli-0.4.1/lib/python/base_cli/lifecycle_options.py +195 -0
  100. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/logging.py +103 -8
  101. base_cli-0.4.1/lib/python/base_cli/output.py +341 -0
  102. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/paths.py +27 -0
  103. base_cli-0.4.1/lib/python/base_cli/profile.py +316 -0
  104. base_cli-0.4.1/lib/python/base_cli/redaction.py +612 -0
  105. base_cli-0.4.1/lib/python/base_cli/runtime.py +63 -0
  106. base_cli-0.4.1/lib/python/base_cli/testing.py +102 -0
  107. base_cli-0.4.1/lib/python/base_cli/typer.py +172 -0
  108. base_cli-0.4.1/lib/python/base_cli.egg-info/PKG-INFO +1136 -0
  109. base_cli-0.4.1/lib/python/base_cli.egg-info/SOURCES.txt +163 -0
  110. base_cli-0.4.1/lib/python/base_cli.egg-info/requires.txt +28 -0
  111. {base_cli-0.3.0 → base_cli-0.4.1}/pyproject.toml +59 -1
  112. base_cli-0.4.1/scripts/benchmark_runtime.py +114 -0
  113. base_cli-0.4.1/scripts/validate_consumers.py +72 -0
  114. base_cli-0.4.1/scripts/validate_docs.py +63 -0
  115. base_cli-0.4.1/scripts/validate_examples.py +75 -0
  116. base_cli-0.4.1/scripts/validate_installed_package.py +50 -0
  117. base_cli-0.4.1/scripts/validate_package_artifact.py +173 -0
  118. base_cli-0.4.1/tests/conftest.py +47 -0
  119. base_cli-0.4.1/tests/test_adversarial_regressions.py +389 -0
  120. base_cli-0.4.1/tests/test_api_stability.py +182 -0
  121. base_cli-0.4.1/tests/test_app_lifecycle.py +251 -0
  122. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_quiet.py +1 -1
  123. base_cli-0.4.1/tests/test_app_registration.py +651 -0
  124. base_cli-0.4.1/tests/test_app_run.py +270 -0
  125. base_cli-0.4.1/tests/test_app_run_metadata.py +990 -0
  126. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_runtime_errors.py +31 -0
  127. base_cli-0.4.1/tests/test_app_security_boundaries.py +462 -0
  128. base_cli-0.4.1/tests/test_app_startup_transaction.py +395 -0
  129. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_subcommands.py +5 -2
  130. base_cli-0.4.1/tests/test_batteries_included_config.py +173 -0
  131. base_cli-0.4.1/tests/test_benchmark_runtime.py +21 -0
  132. base_cli-0.4.1/tests/test_cleanup_security.py +485 -0
  133. base_cli-0.4.1/tests/test_click_tree_attachment.py +1721 -0
  134. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_command_filters.py +1 -3
  135. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_command_protocol.py +33 -10
  136. base_cli-0.4.1/tests/test_explicit_config_validation.py +324 -0
  137. base_cli-0.4.1/tests/test_extensions.py +119 -0
  138. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_generic_core.py +28 -0
  139. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_history.py +33 -3
  140. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_inspection.py +1 -2
  141. base_cli-0.4.1/tests/test_integrations.py +115 -0
  142. base_cli-0.4.1/tests/test_invocation_parity.py +254 -0
  143. base_cli-0.4.1/tests/test_json_contracts.py +256 -0
  144. base_cli-0.4.1/tests/test_lifecycle_options.py +1328 -0
  145. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_logging.py +14 -0
  146. base_cli-0.4.1/tests/test_output.py +282 -0
  147. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_paths.py +45 -1
  148. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_profile.py +34 -0
  149. base_cli-0.4.1/tests/test_public_api.py +178 -0
  150. base_cli-0.4.1/tests/test_redaction_security.py +264 -0
  151. base_cli-0.4.1/tests/test_run_bundle_retention.py +174 -0
  152. base_cli-0.4.1/tests/test_security_documentation.py +63 -0
  153. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_testing.py +28 -5
  154. base_cli-0.4.1/tests/test_typed_contracts.py +105 -0
  155. base_cli-0.4.1/tests/test_typer_adapter.py +151 -0
  156. base_cli-0.3.0/PKG-INFO +0 -569
  157. base_cli-0.3.0/README.md +0 -537
  158. base_cli-0.3.0/VERSION +0 -1
  159. base_cli-0.3.0/lib/python/base_cli/__init__.py +0 -108
  160. base_cli-0.3.0/lib/python/base_cli/_private_files.py +0 -51
  161. base_cli-0.3.0/lib/python/base_cli/_runtime.py +0 -131
  162. base_cli-0.3.0/lib/python/base_cli/app.py +0 -470
  163. base_cli-0.3.0/lib/python/base_cli/config.py +0 -28
  164. base_cli-0.3.0/lib/python/base_cli/context.py +0 -102
  165. base_cli-0.3.0/lib/python/base_cli/output.py +0 -198
  166. base_cli-0.3.0/lib/python/base_cli/profile.py +0 -147
  167. base_cli-0.3.0/lib/python/base_cli/redaction.py +0 -50
  168. base_cli-0.3.0/lib/python/base_cli/testing.py +0 -55
  169. base_cli-0.3.0/lib/python/base_cli.egg-info/PKG-INFO +0 -569
  170. base_cli-0.3.0/lib/python/base_cli.egg-info/SOURCES.txt +0 -47
  171. base_cli-0.3.0/lib/python/base_cli.egg-info/requires.txt +0 -6
  172. base_cli-0.3.0/tests/test_app_run.py +0 -155
  173. base_cli-0.3.0/tests/test_output.py +0 -134
  174. base_cli-0.3.0/tests/test_public_api.py +0 -81
  175. {base_cli-0.3.0 → base_cli-0.4.1}/LICENSE +0 -0
  176. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/_dependencies.py +0 -0
  177. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli/py.typed +0 -0
  178. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli.egg-info/dependency_links.txt +0 -0
  179. {base_cli-0.3.0 → base_cli-0.4.1}/lib/python/base_cli.egg-info/top_level.txt +0 -0
  180. {base_cli-0.3.0 → base_cli-0.4.1}/setup.cfg +0 -0
  181. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_dry_run.py +0 -0
  182. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_log_retention.py +0 -0
  183. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_app_runtime_boundary.py +0 -0
  184. {base_cli-0.3.0 → base_cli-0.4.1}/tests/test_context_workspace.py +0 -0
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: Adoption support
3
+ about: Request migration or downstream compatibility help
4
+ title: "[Support] "
5
+ labels: ""
6
+ assignees: ""
7
+ ---
8
+
9
+ ## What are you adopting?
10
+
11
+ Describe the CLI, its Click/Typer version, and the intended production use case.
12
+
13
+ ## Reproduction
14
+
15
+ Provide a minimal command and the exact exit code. Remove credentials, tokens,
16
+ customer data, and private paths.
17
+
18
+ ## Environment
19
+
20
+ - `base-cli` version:
21
+ - Python version:
22
+ - Operating system:
23
+ - Click/Typer and optional integration versions:
24
+
25
+ ## Evidence
26
+
27
+ Attach or link a redacted log/run bundle and say whether the failure occurs
28
+ against an installed wheel. Security-sensitive reports belong in `SECURITY.md`.
@@ -0,0 +1,9 @@
1
+ project:
2
+ areas: []
3
+ initiatives: []
4
+ issue_defaults:
5
+ status: Backlog
6
+ priority: P2
7
+ area: Product
8
+ initiative: Adoption Polish
9
+ size: S
@@ -0,0 +1,25 @@
1
+ ## Summary
2
+
3
+ <!-- What changed and why. Focus on decisions and user impact, not just the diff. -->
4
+
5
+ ## Issue
6
+
7
+ Closes #
8
+
9
+ ## Validation
10
+
11
+ <!-- Commands run and relevant output. Include narrow checks and any broader suite used. -->
12
+
13
+ ## Notes
14
+
15
+ <!-- Optional: tradeoffs, follow-up work, or reviewer context. -->
16
+
17
+ ## Checklist
18
+
19
+ - [ ] Branch name follows `<category>/<issue>-<YYYYMMDD>-<slug>`, and its category prefix matches the issue's single standard category label.
20
+ - [ ] Pull request is scoped to one issue, unless a documented multi-issue exception applies.
21
+ - [ ] Pull request body explains what changed and how it was validated.
22
+ - [ ] Relevant project checks pass.
23
+ - [ ] Documentation is updated when behavior or user-facing commands change.
24
+ - [ ] CHANGELOG is updated for notable user-visible or release-worthy changes.
25
+ - [ ] Pull request includes `Fixes #<issue>` or `Closes #<issue>` when merge should close the issue.
@@ -0,0 +1,68 @@
1
+ name: Reference consumers
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ typer-matrix:
16
+ name: Typer ${{ matrix.typer-version }} / Python ${{ matrix.python-version }}
17
+ runs-on: ubuntu-latest
18
+ timeout-minutes: 20
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
23
+ typer-version: ["0.25.1", "0.26.0", "0.27.1"]
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+ - name: Set up Python
27
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ - name: Install framework and exact Typer line
31
+ run: |
32
+ python -m pip install "setuptools<77" "wheel"
33
+ python -m pip install ".[dev]"
34
+ python -m pip install --upgrade "typer==${{ matrix.typer-version }}"
35
+ - name: Install Beacon fixture without dependency resolution
36
+ run: python -m pip install --no-deps compatibility/consumers/beacon_typer
37
+ - name: Run adapter and Beacon compatibility tests
38
+ run: python -m pytest tests/test_typer_adapter.py compatibility/consumers/beacon_typer/tests
39
+
40
+ downstream:
41
+ name: Install and test independent consumers
42
+ runs-on: ubuntu-latest
43
+ timeout-minutes: 15
44
+ steps:
45
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ - name: Set up Python
47
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
48
+ with:
49
+ python-version: "3.13"
50
+ - name: Install framework build and test dependencies
51
+ run: python -m pip install ".[dev,typer,rich,telemetry]"
52
+ - name: Build and install the framework wheel
53
+ run: |
54
+ python -m build --wheel
55
+ python -m pip uninstall --yes base-cli
56
+ python -m pip install dist/*.whl
57
+ - name: Validate consumer manifest
58
+ run: python scripts/validate_consumers.py
59
+ - name: Install consumers independently
60
+ run: |
61
+ python -m pip install compatibility/consumers/atlas_click
62
+ python -m pip install compatibility/consumers/beacon_typer
63
+ python -m pip install "compatibility/consumers/cinder_automation[observability]"
64
+ - name: Run downstream compatibility suites
65
+ run: |
66
+ for tests in compatibility/consumers/*/tests; do
67
+ python -m pytest "$tests"
68
+ done
@@ -0,0 +1,81 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - "README.md"
9
+ - "SECURITY.md"
10
+ - "docs/**"
11
+ - "mkdocs.yml"
12
+ - "pyproject.toml"
13
+ - "scripts/validate_docs.py"
14
+ - "tests/validate.sh"
15
+ - ".github/workflows/docs.yml"
16
+ pull_request:
17
+ paths:
18
+ - "README.md"
19
+ - "SECURITY.md"
20
+ - "docs/**"
21
+ - "mkdocs.yml"
22
+ - "pyproject.toml"
23
+ - "scripts/validate_docs.py"
24
+ - "tests/validate.sh"
25
+ - ".github/workflows/docs.yml"
26
+ workflow_dispatch:
27
+
28
+ permissions:
29
+ contents: read
30
+
31
+ concurrency:
32
+ group: ${{ github.workflow }}-${{ github.ref }}
33
+ cancel-in-progress: true
34
+
35
+ jobs:
36
+ build:
37
+ name: Build and validate documentation
38
+ runs-on: ubuntu-latest
39
+ timeout-minutes: 10
40
+ steps:
41
+ - name: Check out source
42
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
+
44
+ - name: Set up Python
45
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
46
+ with:
47
+ python-version: "3.13"
48
+
49
+ - name: Install documentation tools
50
+ run: python -m pip install ".[docs]"
51
+
52
+ - name: Validate repository links and examples
53
+ run: python scripts/validate_docs.py
54
+
55
+ - name: Build documentation with strict warnings
56
+ run: python -m mkdocs build --strict --site-dir site
57
+
58
+ - name: Upload Pages artifact
59
+ uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
60
+ with:
61
+ path: site
62
+
63
+ deploy:
64
+ name: Deploy documentation site
65
+ if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' }}
66
+ needs: build
67
+ runs-on: ubuntu-latest
68
+ timeout-minutes: 10
69
+ environment:
70
+ name: github-pages
71
+ url: ${{ steps.deployment.outputs.page_url }}
72
+ permissions:
73
+ pages: write
74
+ id-token: write
75
+ steps:
76
+ - name: Configure GitHub Pages
77
+ uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
78
+
79
+ - name: Deploy to GitHub Pages
80
+ id: deployment
81
+ uses: actions/deploy-pages@f33f41b675f0ab2dc5a6863c9a170fe83af3571e # v4.0.0
@@ -0,0 +1,45 @@
1
+ name: Reference examples
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ install-and-test:
16
+ name: Build wheel, install examples, and test
17
+ runs-on: ubuntu-latest
18
+ timeout-minutes: 15
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ - name: Set up Python
22
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
23
+ with:
24
+ python-version: "3.13"
25
+ - name: Install framework build and test dependencies
26
+ run: python -m pip install ".[dev,typer,rich,telemetry]"
27
+ - name: Build and install the framework wheel
28
+ run: |
29
+ python -m build --wheel
30
+ python -m pip uninstall --yes base-cli
31
+ python -m pip install dist/*.whl
32
+ - name: Validate reference-app structure
33
+ run: python scripts/validate_examples.py
34
+ - name: Install each example independently
35
+ run: |
36
+ for example in examples/*; do
37
+ if [[ -f "$example/pyproject.toml" ]]; then
38
+ python -m pip install "$example"
39
+ fi
40
+ done
41
+ - name: Run reference-app tests
42
+ run: |
43
+ for tests in examples/*/tests; do
44
+ python -m pytest "$tests"
45
+ done