base-cli 0.4.2__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/bug_report.yml +50 -0
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/documentation.yml +25 -0
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/feature_request.yml +25 -0
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/support.md +12 -0
- base_cli-0.5.0/.github/ISSUE_TEMPLATE/support.yml +30 -0
- base_cli-0.5.0/.github/workflows/compatibility.yml +110 -0
- base_cli-0.5.0/.github/workflows/dependency-matrix.yml +48 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/.github/workflows/docs.yml +24 -1
- base_cli-0.5.0/.github/workflows/package.yml +464 -0
- base_cli-0.5.0/.github/workflows/project-intake.yml +309 -0
- base_cli-0.5.0/.github/workflows/tests.yml +201 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/CHANGELOG.md +174 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/CONTRIBUTING.md +7 -10
- {base_cli-0.4.2/lib/python/base_cli.egg-info → base_cli-0.5.0}/PKG-INFO +159 -46
- base_cli-0.4.2/PKG-INFO → base_cli-0.5.0/README.md +145 -91
- base_cli-0.5.0/VERSION +1 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/base_manifest.yaml +6 -1
- base_cli-0.5.0/compatibility/README.md +58 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/atlas_click/README.md +2 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/atlas_click/pyproject.toml +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/atlas_click/tests/test_consumer.py +0 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/beacon_typer/README.md +5 -4
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/beacon_typer/pyproject.toml +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/beacon_typer/src/beacon_typer/cli.py +0 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/beacon_typer/tests/test_consumer.py +0 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/cinder_automation/README.md +1 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/cinder_automation/pyproject.toml +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/cinder_automation/src/cinder_automation/cli.py +4 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/cinder_automation/tests/test_consumer.py +0 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/adopter-readiness.md +10 -8
- base_cli-0.5.0/docs/adoption-evidence.md +78 -0
- base_cli-0.5.0/docs/api-reference.md +1974 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/api-stability.md +21 -8
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/cache-ownership-and-layout.md +26 -4
- base_cli-0.5.0/docs/compatibility-dashboard.md +53 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/consumer-profiles.md +33 -3
- base_cli-0.5.0/docs/consumer-quickstart.md +92 -0
- base_cli-0.5.0/docs/coverage-policy.md +27 -0
- base_cli-0.5.0/docs/dependency-support.md +41 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/extensions.md +35 -0
- base_cli-0.5.0/docs/framework-choice.md +45 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/index.md +28 -4
- base_cli-0.5.0/docs/integrations.md +85 -0
- base_cli-0.5.0/docs/json-contracts.md +188 -0
- base_cli-0.5.0/docs/local-config.md +62 -0
- base_cli-0.5.0/docs/migration-0.5.md +33 -0
- base_cli-0.5.0/docs/migration-argparse.md +70 -0
- base_cli-0.5.0/docs/migration-cement.md +80 -0
- base_cli-0.5.0/docs/migration-click.md +75 -0
- base_cli-0.5.0/docs/migration-typer.md +72 -0
- base_cli-0.5.0/docs/migrations.md +93 -0
- base_cli-0.5.0/docs/optional-output-dependencies.md +78 -0
- base_cli-0.5.0/docs/output-contracts.md +50 -0
- base_cli-0.5.0/docs/performance.md +210 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/platform-support.md +40 -3
- base_cli-0.5.0/docs/release-0.5.0-checklist.md +55 -0
- base_cli-0.5.0/docs/releasing.md +215 -0
- base_cli-0.5.0/docs/schemas.md +33 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/security-review.md +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/security-threat-model.md +19 -2
- base_cli-0.5.0/docs/strict-json-consumer.md +93 -0
- base_cli-0.5.0/docs/testing.md +86 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/typer-adapter.md +16 -6
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/automation_observability_app/src/automation_observability_app/cli.py +3 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/minimal_cli/src/minimal_cli/cli.py +3 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/README.md +2 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_app/README.md +6 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_app/pyproject.toml +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/__init__.py +24 -0
- base_cli-0.5.0/lib/python/base_cli/_app_core.py +1624 -0
- base_cli-0.5.0/lib/python/base_cli/_attach.py +624 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_click_compat.py +55 -7
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_dependencies.py +4 -2
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_lifecycle.py +17 -13
- base_cli-0.5.0/lib/python/base_cli/_lifecycle_install.py +895 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_private_files.py +31 -5
- base_cli-0.5.0/lib/python/base_cli/_run.py +868 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_runtime.py +355 -30
- base_cli-0.5.0/lib/python/base_cli/_stdout_capture.py +117 -0
- base_cli-0.5.0/lib/python/base_cli/_windows_retention.py +100 -0
- base_cli-0.5.0/lib/python/base_cli/app.py +31 -0
- base_cli-0.5.0/lib/python/base_cli/asyncio_adapter.py +39 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/command_protocol.py +12 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/config.py +191 -16
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/context.py +13 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/extensions.py +96 -22
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/history.py +55 -11
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/inspection.py +3 -2
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/integrations.py +32 -8
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/json_contracts.py +65 -16
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/lifecycle_options.py +20 -1
- base_cli-0.5.0/lib/python/base_cli/logging.py +448 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/output.py +174 -46
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/paths.py +36 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/profile.py +43 -11
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/redaction.py +77 -6
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/command-protocol.schema.json +15 -0
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/error.schema.json +17 -0
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/inspection.schema.json +15 -0
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/log.schema.json +18 -0
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/ndjson.schema.json +13 -0
- base_cli-0.5.0/lib/python/base_cli/schemas/v1/output.schema.json +17 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/testing.py +4 -4
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/typer.py +1 -1
- base_cli-0.4.2/README.md → base_cli-0.5.0/lib/python/base_cli.egg-info/PKG-INFO +204 -40
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli.egg-info/SOURCES.txt +82 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli.egg-info/requires.txt +9 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/pyproject.toml +29 -8
- base_cli-0.5.0/scripts/benchmark_runtime.py +912 -0
- base_cli-0.5.0/scripts/generate_api_reference.py +187 -0
- base_cli-0.5.0/scripts/generate_compatibility_dashboard.py +176 -0
- base_cli-0.5.0/scripts/generate_release_metadata.py +160 -0
- base_cli-0.5.0/scripts/record_compatibility_evidence.py +74 -0
- base_cli-0.5.0/scripts/release_metadata_helpers.py +24 -0
- base_cli-0.5.0/scripts/validate_changelog.py +216 -0
- base_cli-0.5.0/scripts/validate_consumer_typing.py +48 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/scripts/validate_consumers.py +2 -2
- base_cli-0.5.0/scripts/validate_contract_fixtures.py +98 -0
- base_cli-0.5.0/scripts/validate_coverage.py +94 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/scripts/validate_docs.py +57 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/scripts/validate_package_artifact.py +15 -1
- base_cli-0.5.0/scripts/validate_release_metadata.py +87 -0
- base_cli-0.5.0/scripts/validate_release_provenance.py +181 -0
- base_cli-0.5.0/scripts/validate_release_ref.py +66 -0
- base_cli-0.5.0/scripts/validate_schemas.py +61 -0
- base_cli-0.5.0/scripts/verify_release_assets.py +178 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_adversarial_regressions.py +10 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_api_stability.py +12 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_lifecycle.py +4 -0
- base_cli-0.5.0/tests/test_app_module_boundaries.py +28 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_registration.py +16 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_run.py +75 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_run_metadata.py +196 -11
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_runtime_boundary.py +9 -0
- base_cli-0.5.0/tests/test_batteries_included_config.py +362 -0
- base_cli-0.5.0/tests/test_benchmark_runtime.py +235 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_cleanup_security.py +35 -2
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_click_tree_attachment.py +157 -3
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_command_protocol.py +38 -0
- base_cli-0.5.0/tests/test_community_issue_templates.py +18 -0
- base_cli-0.5.0/tests/test_config_discovery_trust.py +93 -0
- base_cli-0.5.0/tests/test_consumer_quickstart_docs.py +28 -0
- base_cli-0.5.0/tests/test_dependency_documentation.py +29 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_explicit_config_validation.py +1 -1
- base_cli-0.5.0/tests/test_extensions.py +253 -0
- base_cli-0.5.0/tests/test_framework_config_runtime.py +316 -0
- base_cli-0.5.0/tests/test_generate_compatibility_dashboard.py +36 -0
- base_cli-0.5.0/tests/test_generated_api_reference.py +17 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_generic_core.py +27 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_history.py +26 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_integrations.py +68 -0
- base_cli-0.5.0/tests/test_json_contracts.py +628 -0
- base_cli-0.5.0/tests/test_json_descriptor_capture.py +78 -0
- base_cli-0.5.0/tests/test_logger_ownership.py +111 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_logging.py +86 -0
- base_cli-0.5.0/tests/test_logging_hot_path.py +217 -0
- base_cli-0.5.0/tests/test_optional_output_dependencies_docs.py +29 -0
- base_cli-0.5.0/tests/test_optional_yaml_dependency.py +87 -0
- base_cli-0.5.0/tests/test_output.py +501 -0
- base_cli-0.5.0/tests/test_package_workflow.py +38 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_paths.py +36 -1
- base_cli-0.5.0/tests/test_platform_edge_paths.py +296 -0
- base_cli-0.5.0/tests/test_project_intake.py +509 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_public_api.py +4 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_redaction_security.py +144 -0
- base_cli-0.5.0/tests/test_retention_contention.py +93 -0
- base_cli-0.5.0/tests/test_retention_platform.py +61 -0
- base_cli-0.5.0/tests/test_run_app_reentrancy.py +122 -0
- base_cli-0.5.0/tests/test_run_bundle_retention.py +432 -0
- base_cli-0.5.0/tests/test_run_json_preflight.py +227 -0
- base_cli-0.5.0/tests/test_strict_json_consumer_docs.py +27 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_testing.py +40 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_typed_contracts.py +37 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_typer_adapter.py +38 -0
- base_cli-0.5.0/tests/test_validate_changelog.py +120 -0
- base_cli-0.5.0/tests/test_validate_consumer_typing.py +34 -0
- base_cli-0.5.0/tests/test_validate_coverage.py +26 -0
- base_cli-0.5.0/tests/test_validate_docs.py +33 -0
- base_cli-0.5.0/tests/test_validate_package_artifact.py +11 -0
- base_cli-0.5.0/tests/test_validate_release_provenance.py +227 -0
- base_cli-0.5.0/tests/test_validate_release_ref.py +61 -0
- base_cli-0.5.0/tests/test_validate_schemas.py +42 -0
- base_cli-0.5.0/tests/test_verify_release_assets.py +139 -0
- base_cli-0.5.0/tests/test_windows_retention.py +43 -0
- base_cli-0.4.2/.github/ISSUE_TEMPLATE/support.md +0 -28
- base_cli-0.4.2/.github/workflows/compatibility.yml +0 -68
- base_cli-0.4.2/.github/workflows/package.yml +0 -186
- base_cli-0.4.2/.github/workflows/project-intake.yml +0 -255
- base_cli-0.4.2/.github/workflows/tests.yml +0 -140
- base_cli-0.4.2/VERSION +0 -1
- base_cli-0.4.2/compatibility/README.md +0 -38
- base_cli-0.4.2/docs/integrations.md +0 -54
- base_cli-0.4.2/docs/json-contracts.md +0 -113
- base_cli-0.4.2/docs/local-config.md +0 -23
- base_cli-0.4.2/docs/migrations.md +0 -53
- base_cli-0.4.2/docs/output-contracts.md +0 -25
- base_cli-0.4.2/docs/performance.md +0 -33
- base_cli-0.4.2/docs/releasing.md +0 -92
- base_cli-0.4.2/lib/python/base_cli/app.py +0 -3175
- base_cli-0.4.2/lib/python/base_cli/logging.py +0 -292
- base_cli-0.4.2/scripts/benchmark_runtime.py +0 -114
- base_cli-0.4.2/tests/test_batteries_included_config.py +0 -173
- base_cli-0.4.2/tests/test_benchmark_runtime.py +0 -21
- base_cli-0.4.2/tests/test_extensions.py +0 -119
- base_cli-0.4.2/tests/test_json_contracts.py +0 -256
- base_cli-0.4.2/tests/test_output.py +0 -282
- base_cli-0.4.2/tests/test_run_bundle_retention.py +0 -174
- {base_cli-0.4.2 → base_cli-0.5.0}/.github/base-project.yml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/.github/pull_request_template.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/.github/workflows/examples.yml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/.github/workflows/issue-branch-policy.yml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/LICENSE +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/MANIFEST.in +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/SECURITY.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/atlas_click/src/atlas_click/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/atlas_click/src/atlas_click/cli.py +1 -1
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/beacon_typer/src/beacon_typer/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/cinder_automation/src/cinder_automation/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/compatibility/consumers/manifest.json +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/docs/user-config-typing.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/README.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/automation_observability_app/README.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/automation_observability_app/pyproject.toml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/automation_observability_app/src/automation_observability_app/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/automation_observability_app/tests/test_cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/minimal_cli/README.md +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/minimal_cli/pyproject.toml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/minimal_cli/src/minimal_cli/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/minimal_cli/tests/test_cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/pyproject.toml +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/src/nested_click_app/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/src/nested_click_app/cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/src/nested_click_app/plugin.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/nested_click_app/tests/test_cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typed_consumer.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_app/src/typer_app/__init__.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_app/src/typer_app/cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_app/tests/test_cli.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/examples/typer_consumer.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/_cleanup.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/attachment.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/command_filters.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/deprecations.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/errors.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/exit_codes.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/experimental.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/py.typed +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli/runtime.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli.egg-info/dependency_links.txt +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/lib/python/base_cli.egg-info/top_level.txt +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/scripts/validate_examples.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/scripts/validate_installed_package.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/setup.cfg +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/conftest.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_dry_run.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_log_retention.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_quiet.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_runtime_errors.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_security_boundaries.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_startup_transaction.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_app_subcommands.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_command_filters.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_context_workspace.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_inspection.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_invocation_parity.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_lifecycle_options.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_profile.py +0 -0
- {base_cli-0.4.2 → base_cli-0.5.0}/tests/test_security_documentation.py +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible base-cli defect
|
|
3
|
+
title: "bug: "
|
|
4
|
+
labels:
|
|
5
|
+
- bug
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Do not include secrets, personal data, or vulnerability details. Use SECURITY.md for private reports.
|
|
11
|
+
- type: input
|
|
12
|
+
id: version
|
|
13
|
+
attributes:
|
|
14
|
+
label: Version or commit
|
|
15
|
+
description: Include the installed release, package revision, or commit.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: input
|
|
19
|
+
id: environment
|
|
20
|
+
attributes:
|
|
21
|
+
label: Environment
|
|
22
|
+
description: Include Python, Click/Typer, OS, architecture, and relevant extras.
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: textarea
|
|
26
|
+
id: reproduction
|
|
27
|
+
attributes:
|
|
28
|
+
label: Reproduction
|
|
29
|
+
description: Give the smallest command, fixture, or test that reproduces the problem.
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: expected
|
|
34
|
+
attributes:
|
|
35
|
+
label: Expected behavior
|
|
36
|
+
validations:
|
|
37
|
+
required: true
|
|
38
|
+
- type: textarea
|
|
39
|
+
id: actual
|
|
40
|
+
attributes:
|
|
41
|
+
label: Actual behavior
|
|
42
|
+
render: text
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: textarea
|
|
46
|
+
id: logs
|
|
47
|
+
attributes:
|
|
48
|
+
label: Relevant logs
|
|
49
|
+
description: Redact credentials, tokens, personal data, and private paths.
|
|
50
|
+
render: text
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: true
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Support and adoption questions
|
|
4
|
+
url: https://github.com/orgs/basefoundry/discussions
|
|
5
|
+
about: Ask ecosystem-wide usage and onboarding questions in the canonical public forum.
|
|
6
|
+
- name: Private security report
|
|
7
|
+
url: https://github.com/basefoundry/base-cli/security/advisories/new
|
|
8
|
+
about: Never disclose vulnerabilities or sensitive data in a public issue.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Documentation improvement
|
|
2
|
+
description: Report missing, incorrect, or confusing base-cli documentation
|
|
3
|
+
title: "docs: "
|
|
4
|
+
labels:
|
|
5
|
+
- documentation
|
|
6
|
+
body:
|
|
7
|
+
- type: input
|
|
8
|
+
id: location
|
|
9
|
+
attributes:
|
|
10
|
+
label: Documentation location
|
|
11
|
+
description: Give the URL or repository path.
|
|
12
|
+
validations:
|
|
13
|
+
required: true
|
|
14
|
+
- type: textarea
|
|
15
|
+
id: problem
|
|
16
|
+
attributes:
|
|
17
|
+
label: Problem
|
|
18
|
+
description: Explain what a reader cannot understand or do.
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: suggestion
|
|
23
|
+
attributes:
|
|
24
|
+
label: Suggested improvement
|
|
25
|
+
description: Describe the corrected or clearer outcome.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Feature proposal
|
|
2
|
+
description: Propose a user-facing base-cli capability or improvement
|
|
3
|
+
title: "feature: "
|
|
4
|
+
labels:
|
|
5
|
+
- enhancement
|
|
6
|
+
body:
|
|
7
|
+
- type: textarea
|
|
8
|
+
id: problem
|
|
9
|
+
attributes:
|
|
10
|
+
label: User problem
|
|
11
|
+
description: Who is affected, and what are they unable to do today?
|
|
12
|
+
validations:
|
|
13
|
+
required: true
|
|
14
|
+
- type: textarea
|
|
15
|
+
id: outcome
|
|
16
|
+
attributes:
|
|
17
|
+
label: Desired outcome
|
|
18
|
+
description: Describe what success looks like without requiring a particular implementation.
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: alternatives
|
|
23
|
+
attributes:
|
|
24
|
+
label: Alternatives and context
|
|
25
|
+
description: Include workarounds, constraints, or compatibility concerns.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Adoption support
|
|
3
|
+
about: Request migration or downstream compatibility help
|
|
4
|
+
title: "[Support] "
|
|
5
|
+
labels: ""
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Use the Support and adoption question form when it is available. Include the
|
|
10
|
+
base-cli version, Python and operating-system versions, a minimal
|
|
11
|
+
reproduction, and redacted evidence. Never include secrets; use SECURITY.md
|
|
12
|
+
for private vulnerability reports.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Support and adoption question
|
|
2
|
+
description: Ask for help using or evaluating base-cli
|
|
3
|
+
title: "support: "
|
|
4
|
+
labels:
|
|
5
|
+
- adoption support
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
For general ecosystem questions, prefer Base Discussions. Do not include secrets or security-sensitive details here.
|
|
11
|
+
- type: input
|
|
12
|
+
id: version
|
|
13
|
+
attributes:
|
|
14
|
+
label: Version or commit
|
|
15
|
+
validations:
|
|
16
|
+
required: true
|
|
17
|
+
- type: textarea
|
|
18
|
+
id: environment
|
|
19
|
+
attributes:
|
|
20
|
+
label: Environment
|
|
21
|
+
description: Include Python, Click/Typer, OS, architecture, and relevant extras.
|
|
22
|
+
validations:
|
|
23
|
+
required: true
|
|
24
|
+
- type: textarea
|
|
25
|
+
id: goal
|
|
26
|
+
attributes:
|
|
27
|
+
label: Goal and evidence
|
|
28
|
+
description: What are you trying to do, what did you try, and what happened?
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
@@ -0,0 +1,110 @@
|
|
|
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", "0.27.2"]
|
|
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
|
+
typer-click-boundaries:
|
|
41
|
+
name: Typer ${{ matrix.typer-version }} / Click ${{ matrix.click-version }} / Python ${{ matrix.python-version }}
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
timeout-minutes: 20
|
|
44
|
+
strategy:
|
|
45
|
+
fail-fast: false
|
|
46
|
+
matrix:
|
|
47
|
+
python-version: ["3.10", "3.14"]
|
|
48
|
+
typer-version: ["0.25.1", "0.27.2"]
|
|
49
|
+
click-version: ["8.2.1", "8.5.0"]
|
|
50
|
+
steps:
|
|
51
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
52
|
+
- name: Set up Python
|
|
53
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
54
|
+
with:
|
|
55
|
+
python-version: ${{ matrix.python-version }}
|
|
56
|
+
- name: Install framework and supported Typer adapter
|
|
57
|
+
run: |
|
|
58
|
+
python -m pip install "setuptools<77" "wheel"
|
|
59
|
+
python -m pip install ".[dev,typer]"
|
|
60
|
+
- name: Pin the tested Click/Typer boundary pair
|
|
61
|
+
run: python -m pip install --upgrade "click==${{ matrix.click-version }}" "typer==${{ matrix.typer-version }}"
|
|
62
|
+
- name: Install Beacon fixture without dependency resolution
|
|
63
|
+
run: python -m pip install --no-deps compatibility/consumers/beacon_typer
|
|
64
|
+
- name: Run adapter and Beacon compatibility tests
|
|
65
|
+
run: python -m pytest tests/test_typer_adapter.py compatibility/consumers/beacon_typer/tests
|
|
66
|
+
|
|
67
|
+
downstream:
|
|
68
|
+
name: Install and test independent consumers
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
timeout-minutes: 15
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
73
|
+
- name: Set up Python
|
|
74
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
75
|
+
with:
|
|
76
|
+
python-version: "3.13"
|
|
77
|
+
- name: Install framework build and test dependencies
|
|
78
|
+
run: python -m pip install ".[dev,typer,rich,telemetry]"
|
|
79
|
+
- name: Build and install the framework wheel
|
|
80
|
+
run: |
|
|
81
|
+
python -m build --wheel
|
|
82
|
+
python -m pip uninstall --yes base-cli
|
|
83
|
+
python -m pip install dist/*.whl
|
|
84
|
+
- name: Validate consumer manifest
|
|
85
|
+
run: python scripts/validate_consumers.py
|
|
86
|
+
- name: Install consumers without dependency resolution
|
|
87
|
+
run: |
|
|
88
|
+
python -m pip install --no-deps compatibility/consumers/atlas_click
|
|
89
|
+
python -m pip install --no-deps compatibility/consumers/beacon_typer
|
|
90
|
+
python -m pip install --no-deps "compatibility/consumers/cinder_automation[observability]"
|
|
91
|
+
- name: Verify the installed framework matches the source release
|
|
92
|
+
run: |
|
|
93
|
+
expected="$(tr -d '\r\n' < VERSION)"
|
|
94
|
+
actual="$(python -c 'from importlib.metadata import version; print(version("base-cli"))')"
|
|
95
|
+
test "$actual" = "$expected"
|
|
96
|
+
python -m pip check
|
|
97
|
+
- name: Run downstream compatibility suites
|
|
98
|
+
run: |
|
|
99
|
+
for tests in compatibility/consumers/*/tests; do
|
|
100
|
+
python -m pytest "$tests"
|
|
101
|
+
done
|
|
102
|
+
- name: Record dated compatibility evidence
|
|
103
|
+
run: python scripts/record_compatibility_evidence.py > compatibility-evidence.json
|
|
104
|
+
- name: Upload compatibility evidence
|
|
105
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
106
|
+
with:
|
|
107
|
+
name: base-cli-compatibility-evidence-${{ github.run_id }}
|
|
108
|
+
path: compatibility-evidence.json
|
|
109
|
+
if-no-files-found: error
|
|
110
|
+
retention-days: 90
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Dependency compatibility
|
|
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
|
+
core:
|
|
16
|
+
name: Click ${{ matrix.click-version }} / PyYAML ${{ matrix.pyyaml-version }} / Python ${{ matrix.python-version }}
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
timeout-minutes: 15
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
python-version: ["3.10", "3.14"]
|
|
23
|
+
click-version: ["8.1.*", "8.2.*", "8.3.*", "8.4.*", "8.5.*"]
|
|
24
|
+
pyyaml-version: ["6.0.*"]
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
27
|
+
- name: Set up Python
|
|
28
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
29
|
+
with:
|
|
30
|
+
python-version: ${{ matrix.python-version }}
|
|
31
|
+
- name: Install framework and test dependencies
|
|
32
|
+
run: python -m pip install "setuptools<77" "wheel" ".[dev]"
|
|
33
|
+
- name: Select tested core dependency lines
|
|
34
|
+
run: |
|
|
35
|
+
python -m pip install --upgrade --force-reinstall \
|
|
36
|
+
"click==${{ matrix.click-version }}" \
|
|
37
|
+
"PyYAML==${{ matrix.pyyaml-version }}"
|
|
38
|
+
- name: Verify resolved dependency contract
|
|
39
|
+
run: |
|
|
40
|
+
python - <<'PY'
|
|
41
|
+
from importlib.metadata import version
|
|
42
|
+
|
|
43
|
+
click_version = version("click")
|
|
44
|
+
yaml_version = version("PyYAML")
|
|
45
|
+
print(f"Click {click_version}; PyYAML {yaml_version}")
|
|
46
|
+
PY
|
|
47
|
+
- name: Run core suite
|
|
48
|
+
run: python -m pytest
|
|
@@ -11,7 +11,19 @@ on:
|
|
|
11
11
|
- "mkdocs.yml"
|
|
12
12
|
- "pyproject.toml"
|
|
13
13
|
- "scripts/validate_docs.py"
|
|
14
|
+
- "scripts/validate_changelog.py"
|
|
15
|
+
- "scripts/generate_compatibility_dashboard.py"
|
|
16
|
+
- ".github/workflows/tests.yml"
|
|
17
|
+
- ".github/workflows/dependency-matrix.yml"
|
|
18
|
+
- ".github/workflows/compatibility.yml"
|
|
19
|
+
- "scripts/generate_api_reference.py"
|
|
20
|
+
- "scripts/generate_compatibility_dashboard.py"
|
|
21
|
+
- ".github/workflows/tests.yml"
|
|
22
|
+
- ".github/workflows/dependency-matrix.yml"
|
|
23
|
+
- ".github/workflows/compatibility.yml"
|
|
14
24
|
- "tests/validate.sh"
|
|
25
|
+
- "tests/full_validate.sh"
|
|
26
|
+
- "docs/testing.md"
|
|
15
27
|
- ".github/workflows/docs.yml"
|
|
16
28
|
pull_request:
|
|
17
29
|
paths:
|
|
@@ -21,7 +33,10 @@ on:
|
|
|
21
33
|
- "mkdocs.yml"
|
|
22
34
|
- "pyproject.toml"
|
|
23
35
|
- "scripts/validate_docs.py"
|
|
36
|
+
- "scripts/generate_api_reference.py"
|
|
24
37
|
- "tests/validate.sh"
|
|
38
|
+
- "tests/full_validate.sh"
|
|
39
|
+
- "docs/testing.md"
|
|
25
40
|
- ".github/workflows/docs.yml"
|
|
26
41
|
workflow_dispatch:
|
|
27
42
|
|
|
@@ -40,6 +55,8 @@ jobs:
|
|
|
40
55
|
steps:
|
|
41
56
|
- name: Check out source
|
|
42
57
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
58
|
+
with:
|
|
59
|
+
fetch-depth: 0
|
|
43
60
|
|
|
44
61
|
- name: Set up Python
|
|
45
62
|
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
@@ -50,7 +67,13 @@ jobs:
|
|
|
50
67
|
run: python -m pip install ".[docs]"
|
|
51
68
|
|
|
52
69
|
- name: Validate repository links and examples
|
|
53
|
-
run:
|
|
70
|
+
run: |
|
|
71
|
+
python scripts/validate_docs.py
|
|
72
|
+
python scripts/validate_changelog.py
|
|
73
|
+
python scripts/generate_compatibility_dashboard.py --check
|
|
74
|
+
|
|
75
|
+
- name: Validate generated public API reference
|
|
76
|
+
run: python scripts/generate_api_reference.py --check
|
|
54
77
|
|
|
55
78
|
- name: Build documentation with strict warnings
|
|
56
79
|
run: python -m mkdocs build --strict --site-dir site
|