@ngocsangairvds/vsaf 3.1.26 → 3.2.1
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.
- package/package.json +2 -2
- package/src/global.js +70 -10
- package/tools/skills/vds-scripts-skill/.openskills.json +6 -0
- package/tools/skills/vds-scripts-skill/QUALITY.md +44 -0
- package/tools/skills/vds-scripts-skill/SKILL.md +135 -0
- package/tools/skills/vds-scripts-skill/references/audit-commands.md +171 -0
- package/tools/skills/vds-scripts-skill/references/capability-index.md +34 -0
- package/tools/skills/vds-scripts-skill/references/development-commands.md +12 -0
- package/tools/skills/vds-scripts-skill/references/google-sheets.md +73 -0
- package/tools/skills/vds-scripts-skill/references/integration-commands.md +17 -0
- package/tools/skills/vds-scripts-skill/references/platform-bootstrap.md +31 -0
- package/tools/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
- package/tools/skills/vds-scripts-skill/references/validation-commands.md +15 -0
- package/tools/skills/vsaf-build/SKILL.md +32 -2
- package/tools/skills/vsaf-push-prd/SKILL.md +43 -40
- package/tools/skills/vsaf-push-srs/SKILL.md +44 -41
- package/tools/skills/vsaf-ship/SKILL.md +41 -10
- package/tools/skills/vsaf-test/SKILL.md +8 -0
- package/tools/vds-scripts/.mcp.json +11 -0
- package/tools/vds-scripts/.secrets.baseline +133 -0
- package/tools/vds-scripts/AGENTS.md +152 -0
- package/tools/vds-scripts/CLAUDE.md +101 -0
- package/tools/vds-scripts/CLI_COMMAND_OPTIMIZATION.md +156 -0
- package/tools/vds-scripts/PACKAGE_P125B_IMPLEMENTATION_SUMMARY.md +131 -0
- package/tools/vds-scripts/PROJECT_COMPLETION_SUMMARY.md +45 -0
- package/tools/vds-scripts/README.md +97 -0
- package/tools/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
- package/tools/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
- package/tools/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
- package/tools/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
- package/tools/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
- package/tools/vds-scripts/bitbucket_orchestrator/README.md +687 -0
- package/tools/vds-scripts/bitbucket_orchestrator/pyproject.toml +40 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +657 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2108 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2534 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +171 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +151 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +546 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +145 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +115 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client.py +157 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +79 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +163 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +32 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +194 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +164 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +179 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +119 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +156 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +282 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +335 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +147 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_config.py +131 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +371 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +261 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +334 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +343 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +189 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +233 -0
- package/tools/vds-scripts/bitbucket_orchestrator/uv.lock +742 -0
- package/tools/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
- package/tools/vds-scripts/confluence_orchestrator/README.md +412 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
- package/tools/vds-scripts/confluence_orchestrator/pyproject.toml +48 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +2532 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +175 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +290 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +94 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1835 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +80 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +109 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1114 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +165 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +121 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +213 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_png_attachments.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/conftest.py +8 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +224 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +188 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +247 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cli.py +499 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_config.py +83 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content.py +186 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2250 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +223 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing.py +71 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_export.py +230 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_history.py +204 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_http.py +117 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +91 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +34 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_management.py +237 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +332 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +388 -0
- package/tools/vds-scripts/confluence_orchestrator/uv.lock +1023 -0
- package/tools/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
- package/tools/vds-scripts/git_orchestrator/README.md +280 -0
- package/tools/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
- package/tools/vds-scripts/git_orchestrator/pyproject.toml +35 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +7 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +847 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +129 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +819 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +53 -0
- package/tools/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_cli_settings.py +21 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_integration.py +74 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_orchestrator.py +204 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_public_api.py +236 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_resilience.py +345 -0
- package/tools/vds-scripts/git_orchestrator/uv.lock +271 -0
- package/tools/vds-scripts/jira_orchestrator/README.md +770 -0
- package/tools/vds-scripts/jira_orchestrator/pyproject.toml +39 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1320 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2271 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +138 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +65 -0
- package/tools/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +69 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +57 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +117 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +76 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +110 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +133 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +41 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_agile.py +256 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_application_properties.py +193 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +277 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_cli.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_components.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_config.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_filter_management.py +333 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +171 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_link_types.py +314 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_permissions.py +273 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_remote_links.py +254 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +170 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +114 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_user_management.py +226 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_version_management.py +339 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_watchers.py +101 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_worklog.py +223 -0
- package/tools/vds-scripts/jira_orchestrator/uv.lock +738 -0
- package/tools/vds-scripts/mcp_server/Dockerfile +34 -0
- package/tools/vds-scripts/mcp_server/README.md +140 -0
- package/tools/vds-scripts/mcp_server/pyproject.toml +42 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +4 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/server.py +66 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +14 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +59 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
- package/tools/vds-scripts/mcp_server/tests/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/conftest.py +29 -0
- package/tools/vds-scripts/mcp_server/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_git_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +37 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +47 -0
- package/tools/vds-scripts/mcp_server/uv.lock +1032 -0
- package/tools/vds-scripts/mypy.ini +5 -0
- package/tools/vds-scripts/pyproject.toml +29 -0
- package/tools/vds-scripts/repo-manifest.yaml +273 -0
- package/tools/vds-scripts/repo-manifest.yaml.example +25 -0
- package/tools/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
- package/tools/vds-scripts/scripts/BRD-Validation-README.md +308 -0
- package/tools/vds-scripts/scripts/README.md +162 -0
- package/tools/vds-scripts/scripts/bootstrap_uv.sh +30 -0
- package/tools/vds-scripts/scripts/brd-validation-environment.json +51 -0
- package/tools/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
- package/tools/vds-scripts/scripts/brd_coverage_report.json +276 -0
- package/tools/vds-scripts/scripts/create_memory_session.py +35 -0
- package/tools/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
- package/tools/vds-scripts/scripts/final_completion_report.md +139 -0
- package/tools/vds-scripts/scripts/folder_structure_report.json +321 -0
- package/tools/vds-scripts/scripts/generate_completion_report.py +125 -0
- package/tools/vds-scripts/scripts/generate_intellij_modules.py +150 -0
- package/tools/vds-scripts/scripts/link_integrity_report.json +807 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages.py +255 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
- package/tools/vds-scripts/scripts/move_wrong_dept_pages.py +216 -0
- package/tools/vds-scripts/scripts/save_intellij_memories.py +120 -0
- package/tools/vds-scripts/scripts/save_memories_to_vds_ai.py +83 -0
- package/tools/vds-scripts/scripts/save_memories_vds_style.py +129 -0
- package/tools/vds-scripts/scripts/search_intellij_memories.py +50 -0
- package/tools/vds-scripts/scripts/setup_intellij_workspace.py +65 -0
- package/tools/vds-scripts/scripts/target-state-automation/README.md +89 -0
- package/tools/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
- package/tools/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
- package/tools/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
- package/tools/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
- package/tools/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
- package/tools/vds-scripts/scripts/update_modules_xml.py +190 -0
- package/tools/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
- package/tools/vds-scripts/scripts/validate_brd_coverage.py +179 -0
- package/tools/vds-scripts/scripts/validate_folder_structure.py +240 -0
- package/tools/vds-scripts/scripts/validate_link_integrity.py +272 -0
- package/tools/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
- package/tools/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
- package/tools/vds-scripts/scripts/worktree_uv.sh +48 -0
- package/tools/vds-scripts/uv.lock +8 -0
- package/tools/vds-scripts/vds_cli/README.md +126 -0
- package/tools/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
- package/tools/vds-scripts/vds_cli/pyproject.toml +38 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +173 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1203 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/env.py +41 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +198 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/router.py +93 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_api.py +647 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_service.py +266 -0
- package/tools/vds-scripts/vds_cli/tests/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/conftest.py +49 -0
- package/tools/vds-scripts/vds_cli/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_cli.py +143 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +422 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_env.py +51 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_router.py +72 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_service.py +160 -0
- package/tools/vds-scripts/vds_cli/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +33 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +35 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_jira_real.py +41 -0
- package/tools/vds-scripts/vds_cli/uv.lock +524 -0
- package/tools/vds-scripts/vds_cli_common/README.md +190 -0
- package/tools/vds-scripts/vds_cli_common/pyproject.toml +92 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +34 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +119 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +318 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +213 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
- package/tools/vds-scripts/vds_cli_common/tests/__init__.py +1 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_env.py +102 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_errors.py +186 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# Bitbucket API Practices - VDS Orchestrator
|
|
2
|
+
|
|
3
|
+
This document outlines the practices used in the VDS Bitbucket Orchestrator, aligned with the
|
|
4
|
+
[Atlassian Python API documentation](https://atlassian-python-api.readthedocs.io/bitbucket.html).
|
|
5
|
+
|
|
6
|
+
## Implementation Approach
|
|
7
|
+
|
|
8
|
+
### 1. SDK Usage
|
|
9
|
+
|
|
10
|
+
We use the `atlassian-python-api` SDK (v4.0.7) as the **exclusive** method for all Bitbucket operations. This ensures:
|
|
11
|
+
|
|
12
|
+
- ✅ Consistent API interactions across all operations
|
|
13
|
+
- ✅ Automatic handling of Server/DC vs Cloud mode differences
|
|
14
|
+
- ✅ Built-in retry logic and error handling
|
|
15
|
+
- ✅ Type safety and validation
|
|
16
|
+
|
|
17
|
+
**Reference**: [Atlassian Python API - BitBucket module](https://atlassian-python-api.readthedocs.io/bitbucket.html)
|
|
18
|
+
|
|
19
|
+
### 2. Method Mapping
|
|
20
|
+
|
|
21
|
+
Our client wrapper maps directly to SDK methods:
|
|
22
|
+
|
|
23
|
+
| SDK Method | Our Wrapper | Documentation Reference | |------------|-------------|-------------------------| |
|
|
24
|
+
`create_repo()` | `create_repository()` |
|
|
25
|
+
[Create repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#create-a-new-repository) | | `get_repo()`
|
|
26
|
+
| `get_repository()` |
|
|
27
|
+
[Get repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-single-repository) | | `update_repo()` |
|
|
28
|
+
`update_repository()` |
|
|
29
|
+
[Update repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#update-single-repository) | |
|
|
30
|
+
`fork_repository()` | `fork_repository()` |
|
|
31
|
+
[Fork repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#fork-repo-inside-same-project) | |
|
|
32
|
+
`fork_repository_new_project()` | `fork_repository()` |
|
|
33
|
+
[Fork to new project](https://atlassian-python-api.readthedocs.io/bitbucket.html#fork-repo-to-new-project) | |
|
|
34
|
+
`get_repo_labels()` | `get_repository_labels()` |
|
|
35
|
+
[Get labels](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-labels-for-a-single-repository) | |
|
|
36
|
+
`set_repo_label()` | `set_repository_label()` |
|
|
37
|
+
[Set label](https://atlassian-python-api.readthedocs.io/bitbucket.html#set-label-for-a-single-repository) |
|
|
38
|
+
|
|
39
|
+
### 3. Repository Management
|
|
40
|
+
|
|
41
|
+
#### Create Repository
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
# SDK method (from documentation)
|
|
45
|
+
bitbucket.create_repo(project_key, repository, forkable=False, is_private=True)
|
|
46
|
+
|
|
47
|
+
# Our implementation
|
|
48
|
+
client.create_repository(
|
|
49
|
+
project_key="INSURANCE",
|
|
50
|
+
repository="vds-ai-memory",
|
|
51
|
+
forkable=False,
|
|
52
|
+
is_private=True
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Reference**: [Create repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#create-a-new-repository)
|
|
57
|
+
|
|
58
|
+
#### Get Repository
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
# SDK method
|
|
62
|
+
bitbucket.get_repo(project_key, repository_slug)
|
|
63
|
+
|
|
64
|
+
# Our implementation
|
|
65
|
+
client.get_repository(project_key="INSURANCE", repository_slug="vds-ai-memory")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Reference**: [Get repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-single-repository)
|
|
69
|
+
|
|
70
|
+
#### Update Repository
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
# SDK method
|
|
74
|
+
bitbucket.update_repo(project_key, repository_slug, description="Repo description")
|
|
75
|
+
|
|
76
|
+
# Our implementation
|
|
77
|
+
client.update_repository(
|
|
78
|
+
project_key="INSURANCE",
|
|
79
|
+
repository_slug="vds-ai-memory",
|
|
80
|
+
description="Updated description"
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Reference**: [Update repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#update-single-repository)
|
|
85
|
+
|
|
86
|
+
#### Delete Repository
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
# SDK method (DANGER!)
|
|
90
|
+
bitbucket.delete_repo(project_key, repository_slug)
|
|
91
|
+
|
|
92
|
+
# Our implementation
|
|
93
|
+
client.delete_repository(
|
|
94
|
+
project_key="INSURANCE",
|
|
95
|
+
repository_slug="vds-ai-memory"
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**⚠️ Warning**: This operation is irreversible. Use with extreme caution.
|
|
100
|
+
|
|
101
|
+
**Reference**:
|
|
102
|
+
[Delete repository](https://atlassian-python-api.readthedocs.io/bitbucket.html#delete-a-repository-danger)
|
|
103
|
+
|
|
104
|
+
#### Fork Repository
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
# SDK method - Fork within same project
|
|
108
|
+
bitbucket.fork_repository(project_key, repository_slug, new_repository_slug)
|
|
109
|
+
|
|
110
|
+
# SDK method - Fork to new project
|
|
111
|
+
bitbucket.fork_repository_new_project(
|
|
112
|
+
project_key, repository_slug, new_project_key, new_repository_slug
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Our implementation (handles both cases)
|
|
116
|
+
client.fork_repository(
|
|
117
|
+
project_key="INSURANCE",
|
|
118
|
+
repository_slug="vds-ai-memory",
|
|
119
|
+
new_project_key="LEP", # Optional - if None, forks within same project
|
|
120
|
+
new_repository_slug="vds-ai-memory-fork"
|
|
121
|
+
)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Reference**:
|
|
125
|
+
|
|
126
|
+
- [Fork within same project](https://atlassian-python-api.readthedocs.io/bitbucket.html#fork-repo-inside-same-project)
|
|
127
|
+
- [Fork to new project](https://atlassian-python-api.readthedocs.io/bitbucket.html#fork-repo-to-new-project)
|
|
128
|
+
|
|
129
|
+
### 4. Project Management
|
|
130
|
+
|
|
131
|
+
#### List Projects
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
# SDK method
|
|
135
|
+
bitbucket.project_list()
|
|
136
|
+
|
|
137
|
+
# Our implementation
|
|
138
|
+
client.list_projects(limit=50)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Reference**: [Project list](https://atlassian-python-api.readthedocs.io/bitbucket.html#project-list)
|
|
142
|
+
|
|
143
|
+
#### Create Project
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
# SDK method
|
|
147
|
+
bitbucket.create_project(key, name, description="My pretty project")
|
|
148
|
+
|
|
149
|
+
# Our implementation
|
|
150
|
+
client.create_project(
|
|
151
|
+
key="INSURANCE",
|
|
152
|
+
name="Insurance Platform",
|
|
153
|
+
description="Digital Insurance Platform"
|
|
154
|
+
)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Reference**: [Create project](https://atlassian-python-api.readthedocs.io/bitbucket.html#create-project)
|
|
158
|
+
|
|
159
|
+
### 5. Pull Request Management
|
|
160
|
+
|
|
161
|
+
#### List Pull Requests
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
# SDK method
|
|
165
|
+
bitbucket.get_pull_requests(project, repository, state='OPEN', order='newest', limit=100)
|
|
166
|
+
|
|
167
|
+
# Our implementation
|
|
168
|
+
client.list_pull_requests(
|
|
169
|
+
project_key="INSURANCE",
|
|
170
|
+
repository_slug="vds-ai-memory",
|
|
171
|
+
state="OPEN",
|
|
172
|
+
order="newest",
|
|
173
|
+
limit=100
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Reference**: [Get pull requests](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-pull-requests)
|
|
178
|
+
|
|
179
|
+
#### Create Pull Request
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
# SDK method
|
|
183
|
+
bitbucket.open_pull_request(
|
|
184
|
+
source_project, source_repo, dest_project, dest_repo,
|
|
185
|
+
source_branch, destination_branch, title, description
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# Our implementation
|
|
189
|
+
client.create_pull_request(
|
|
190
|
+
source_project="INSURANCE",
|
|
191
|
+
source_repo="vds-ai-memory",
|
|
192
|
+
dest_project="INSURANCE",
|
|
193
|
+
dest_repo="vds-ai-memory",
|
|
194
|
+
source_branch="feature/new-feature",
|
|
195
|
+
destination_branch="main",
|
|
196
|
+
title="Add new feature",
|
|
197
|
+
description="Description of changes"
|
|
198
|
+
)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Reference**:
|
|
202
|
+
[Create pull request](https://atlassian-python-api.readthedocs.io/bitbucket.html#create-a-new-pull-request-between-two-branches)
|
|
203
|
+
|
|
204
|
+
### 6. Permission Management
|
|
205
|
+
|
|
206
|
+
#### Grant Repository Permissions
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
# SDK method - User permissions
|
|
210
|
+
bitbucket.repo_grant_user_permissions(project_key, repo_key, username, permission)
|
|
211
|
+
|
|
212
|
+
# SDK method - Group permissions
|
|
213
|
+
bitbucket.repo_grant_group_permissions(project_key, repo_key, groupname, permission)
|
|
214
|
+
|
|
215
|
+
# Our implementation
|
|
216
|
+
client.grant_user_repository_permissions(
|
|
217
|
+
project_key="INSURANCE",
|
|
218
|
+
repository_slug="vds-ai-memory",
|
|
219
|
+
username="developer",
|
|
220
|
+
permission="REPO_WRITE"
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
client.grant_group_repository_permissions(
|
|
224
|
+
project_key="INSURANCE",
|
|
225
|
+
repository_slug="vds-ai-memory",
|
|
226
|
+
group_name="developers",
|
|
227
|
+
permission="REPO_READ"
|
|
228
|
+
)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Reference**:
|
|
232
|
+
|
|
233
|
+
- [Grant user permissions](https://atlassian-python-api.readthedocs.io/bitbucket.html#grant-repository-permission-to-an-specific-user)
|
|
234
|
+
- [Grant group permissions](https://atlassian-python-api.readthedocs.io/bitbucket.html#grant-repository-permission-to-an-specific-group)
|
|
235
|
+
|
|
236
|
+
### 7. Code Operations
|
|
237
|
+
|
|
238
|
+
#### Get Commits
|
|
239
|
+
|
|
240
|
+
```python
|
|
241
|
+
# SDK method
|
|
242
|
+
bitbucket.get_commits(project, repository, hash_oldest, hash_newest, limit=99999)
|
|
243
|
+
|
|
244
|
+
# Our implementation
|
|
245
|
+
client.get_commits(
|
|
246
|
+
project_key="INSURANCE",
|
|
247
|
+
repository_slug="vds-ai-memory",
|
|
248
|
+
from_hash="abc123",
|
|
249
|
+
to_hash="def456",
|
|
250
|
+
limit=50
|
|
251
|
+
)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Reference**: [Get commit list](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-commit-list-from-repo)
|
|
255
|
+
|
|
256
|
+
#### Get Diff
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
# SDK method
|
|
260
|
+
bitbucket.get_diff(project, repository, path, hash_oldest, hash_newest)
|
|
261
|
+
|
|
262
|
+
# Our implementation
|
|
263
|
+
client.get_diff(
|
|
264
|
+
project_key="INSURANCE",
|
|
265
|
+
repository_slug="vds-ai-memory",
|
|
266
|
+
file_path="app/main.py",
|
|
267
|
+
from_hash="abc123",
|
|
268
|
+
to_hash="def456"
|
|
269
|
+
)
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Reference**: [Get diff](https://atlassian-python-api.readthedocs.io/bitbucket.html#get-diff)
|
|
273
|
+
|
|
274
|
+
### 8. Error Handling
|
|
275
|
+
|
|
276
|
+
Our implementation wraps SDK methods with comprehensive error handling:
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
def create_repository(self, project_key: str, repository: str, ...):
|
|
280
|
+
"""Create a new repository."""
|
|
281
|
+
try:
|
|
282
|
+
result = self._client.create_repo(project_key, repository, ...)
|
|
283
|
+
self._log.info("repository_created", ...)
|
|
284
|
+
return result
|
|
285
|
+
except Exception as exc:
|
|
286
|
+
self._handle_api_error(exc, f"create_repository {repository}")
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Benefits**:
|
|
290
|
+
|
|
291
|
+
- ✅ Consistent error types across all operations
|
|
292
|
+
- ✅ Structured logging for debugging
|
|
293
|
+
- ✅ Context preservation in error messages
|
|
294
|
+
- ✅ Automatic retry for transient errors
|
|
295
|
+
|
|
296
|
+
### 9. Cloud vs Server/DC Mode
|
|
297
|
+
|
|
298
|
+
The SDK automatically handles differences between Bitbucket Cloud and Server/DC:
|
|
299
|
+
|
|
300
|
+
```python
|
|
301
|
+
# Our implementation detects mode automatically
|
|
302
|
+
if settings.is_cloud_mode:
|
|
303
|
+
self._client = AtlassianBitbucket(
|
|
304
|
+
url=url, timeout=self._timeout, cloud=True,
|
|
305
|
+
workspace=settings.cloud_workspace, **auth_kwargs
|
|
306
|
+
)
|
|
307
|
+
else:
|
|
308
|
+
self._client = AtlassianBitbucket(
|
|
309
|
+
url=url, timeout=self._timeout, **auth_kwargs
|
|
310
|
+
)
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**Reference**: The SDK handles mode differences automatically based on URL and configuration.
|
|
314
|
+
|
|
315
|
+
### 10. Retry Logic
|
|
316
|
+
|
|
317
|
+
We implement exponential backoff for transient errors:
|
|
318
|
+
|
|
319
|
+
```python
|
|
320
|
+
@retry_with_backoff(max_retries=3, backoff_factor=1.0)
|
|
321
|
+
def create_repository(self, ...):
|
|
322
|
+
# Automatically retries on transport/rate limit errors
|
|
323
|
+
...
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Benefits**:
|
|
327
|
+
|
|
328
|
+
- ✅ Handles rate limiting gracefully
|
|
329
|
+
- ✅ Retries transient network errors
|
|
330
|
+
- ✅ Prevents unnecessary failures
|
|
331
|
+
|
|
332
|
+
## CLI Usage Examples
|
|
333
|
+
|
|
334
|
+
### Create Repository
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Using VDS CLI
|
|
338
|
+
uv run --project vds_cli vds-cli bitbucket repositories INSURANCE
|
|
339
|
+
|
|
340
|
+
# Or using orchestrator directly
|
|
341
|
+
cd vds-scripts/bitbucket_orchestrator
|
|
342
|
+
uv run --project bitbucket_orchestrator python -m vds_bitbucket_orchestrator.cli repositories INSURANCE
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Create Repository via Python
|
|
346
|
+
|
|
347
|
+
```python
|
|
348
|
+
from vds_bitbucket_orchestrator.client import BitbucketClient
|
|
349
|
+
from vds_bitbucket_orchestrator.config import load_settings
|
|
350
|
+
|
|
351
|
+
settings = load_settings(strict=True)
|
|
352
|
+
client = BitbucketClient(settings)
|
|
353
|
+
|
|
354
|
+
# Create repository (as we did for vds-ai-memory)
|
|
355
|
+
result = client.create_repository(
|
|
356
|
+
project_key="INSURANCE",
|
|
357
|
+
repository="vds-ai-memory",
|
|
358
|
+
forkable=False,
|
|
359
|
+
is_private=True
|
|
360
|
+
)
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Best Practices
|
|
364
|
+
|
|
365
|
+
1. **Always use the SDK methods**: Never make direct HTTP calls
|
|
366
|
+
1. **Use our wrapper**: Provides consistent error handling and logging
|
|
367
|
+
1. **Handle errors properly**: Use try/except with our error types
|
|
368
|
+
1. **Log operations**: All operations are automatically logged
|
|
369
|
+
1. **Respect rate limits**: Retry logic handles this automatically
|
|
370
|
+
1. **Check mode**: Cloud vs Server/DC differences are handled automatically
|
|
371
|
+
|
|
372
|
+
## Verification
|
|
373
|
+
|
|
374
|
+
To verify our implementation matches the SDK:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
# Check available SDK methods
|
|
378
|
+
cd vds-scripts/bitbucket_orchestrator
|
|
379
|
+
uv run --project bitbucket_orchestrator python -c "
|
|
380
|
+
from atlassian import Bitbucket
|
|
381
|
+
import inspect
|
|
382
|
+
methods = [m for m in dir(Bitbucket) if 'repo' in m.lower() and not m.startswith('_')]
|
|
383
|
+
print('\n'.join(sorted(methods)))
|
|
384
|
+
"
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## References
|
|
388
|
+
|
|
389
|
+
- **Official Documentation**:
|
|
390
|
+
[Atlassian Python API - BitBucket module](https://atlassian-python-api.readthedocs.io/bitbucket.html)
|
|
391
|
+
- **VDS Orchestrator**: `vds-scripts/bitbucket_orchestrator/`
|
|
392
|
+
- **CLI Usage**: `vds-scripts/bitbucket_orchestrator/README.md`
|
|
393
|
+
- **Repository**: `http://bitbucket.digital.vn/scm/insurance/vds-scripts.git`
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Bitbucket CLI Evaluation Report
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-01-28
|
|
4
|
+
**Evaluator**: Antigravity
|
|
5
|
+
**Scope**: `vds-cli bitbucket` vs Official SDK vs Modern Use Cases
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
The `vds-cli bitbucket` implementation is a robust, production-grade wrapper around the `atlassian-python-api` SDK. It exposes approximately **51%** of the SDK's functionality, focusing heavily on developer and platform engineering workflows (Repos, PRs, Permissions, Pipelines).
|
|
10
|
+
|
|
11
|
+
It outperforms standard "scripting" by providing uniform output (JSON/Markdown), integrated error handling, and cross-platform compatibility via `vds-cli`.
|
|
12
|
+
|
|
13
|
+
## 1. Feature Comparison
|
|
14
|
+
|
|
15
|
+
| Feature Category | Official SDK (`atlassian-python-api`) | `vds-cli bitbucket` | Status |
|
|
16
|
+
| :--- | :--- | :--- | :--- |
|
|
17
|
+
| **Repository CRUD** | Create, Get, Update, Delete, Fork | ✅ Fully Supported | Parity |
|
|
18
|
+
| **PR Management** | Create, Diff, Comment, Merge, Decline, Activities | ✅ Fully Supported | Parity (Enhanced with Diff/Markdown) |
|
|
19
|
+
| **Permissions** | Users, Groups, Repo, Project, Branch | ✅ Supported | Parity |
|
|
20
|
+
| **Pipelines** | List, Trigger, Log, Stop, Variables | ✅ Supported (Cloud) | Parity (Cloud) |
|
|
21
|
+
| **Branching** | Create, Delete, Models, Default Branch | ✅ Supported | Parity |
|
|
22
|
+
| **Code Insights** | Reports, Annotations | ✅ Supported (Cloud) | Parity (Cloud) |
|
|
23
|
+
| **Build Status** | Get Commit/Build Statuses (Server/DC) | ❌ **Missing** | **Gap** |
|
|
24
|
+
| **Search** | File Search, Code Search | ✅ Supported | Parity |
|
|
25
|
+
| **Snippets** | CRUD | ❌ Missing | Low Priority |
|
|
26
|
+
| **Admin** | License, System Info, User Management | ❌ Missing | Out of Scope |
|
|
27
|
+
|
|
28
|
+
## 2. "Modern Use Case" Evaluation
|
|
29
|
+
|
|
30
|
+
### ✅ Strengths
|
|
31
|
+
- **GitOps Ready**: Full support for creating PRs, managing branch permissions, and configuring webhooks via CLI makes it suitable for CI/CD automation.
|
|
32
|
+
- **Platform Engineering**: Robust permission management (`grant-group-repo`) allows automated onboarding and security compliance enforcement.
|
|
33
|
+
- **Developer Experience**: "Draft" PR support and rich Markdown reporting align with modern code review practices.
|
|
34
|
+
|
|
35
|
+
### ⚠️ Gaps & Opportunities
|
|
36
|
+
1. **CI/CD Integration (Server/DC)**:
|
|
37
|
+
- **Gap**: Lacks `get-build-status` for Bitbucket Server/Data Center. Developers cannot verify if a Jenkins/Bamboo build passed for a specific commit via CLI.
|
|
38
|
+
- **Impact**: Harder to script "merge if green" logic for Server environments.
|
|
39
|
+
- **SDK Support**: The `atlassian-python-api` SDK supports this via `get_build_status(commit, key=None, limit=None)`. This method is available in the SDK but not exposed in our CLI.
|
|
40
|
+
|
|
41
|
+
2. **Semantic Search**:
|
|
42
|
+
- **Gap**: Current search is keyword-based. Modern tools (like `grepai` in VDS) use vector search.
|
|
43
|
+
- **Recommendation**: Integrate `grepai` or similar for "Find code doing X" capabilities.
|
|
44
|
+
|
|
45
|
+
3. **Bulk Operations**:
|
|
46
|
+
- **Gap**: No native `for-each-repo` command.
|
|
47
|
+
- **Impact**: Updating descriptions or permissions across 50 repos requires external bash looping.
|
|
48
|
+
|
|
49
|
+
4. **Auto-Merge Strategies**:
|
|
50
|
+
- **Gap**: No "Merge when pipeline succeeds" flag/command.
|
|
51
|
+
- **Impact**: Users must poll for status (which is also missing for Server) and then merge.
|
|
52
|
+
|
|
53
|
+
## 3. Recommendations
|
|
54
|
+
|
|
55
|
+
1. **Implement `commit-status`**: Add a command to retrieve build statuses for a commit (critical for Server/DC CI pipelines). The underlying SDK method `get_build_status` is ready to use.
|
|
56
|
+
2. **Bulk Operations Pattern**: Document or implement a pattern for applying commands to multiple repositories (e.g., accepting a list of repos from stdin).
|
|
57
|
+
3. **Semantic Search Integration**: Leverage the existing `grepai-skill` for code search instead of relying solely on Bitbucket's native keyword search.
|
|
58
|
+
|
|
59
|
+
## 4. Conclusion
|
|
60
|
+
|
|
61
|
+
The current implementation is **Excellent** for its intended scope. It provides a safer, more structured alternative to direct API calls or `curl` scripts. Addressing the "Build Status" gap for Server/DC would bring it to near-complete parity for DevOps workflows.
|