Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ and Base versions are tracked in the repo-root `VERSION` file.

### Fixed

- Pretty-printed workspace JSON output for `basectl workspace status`, `check`,
and `doctor`.
- Fixed `basectl gh` authentication diagnostics to include the underlying
`gh auth status` output when GitHub access fails.
- Converted `bootstrap.sh` away from shell strict mode to explicit command
Expand Down
7 changes: 4 additions & 3 deletions cli/python/base_projects/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from base_projects.workspace_manifest import WorkspaceManifestError
from base_projects.workspace_reports import ManifestEntry
from base_projects.workspace_reports import ProjectDiscoveryError
from base_projects.workspace_reports import dumps_json
from base_projects.workspace_reports import print_workspace_check
from base_projects.workspace_reports import print_workspace_doctor
from base_projects.workspace_reports import print_workspace_status
Expand Down Expand Up @@ -256,7 +257,7 @@ def workspace_status_command(
return 1

if output_format == "json":
print(json.dumps(workspace_status_to_json(workspace_root, statuses, manifest), separators=(",", ":")))
print(dumps_json(workspace_status_to_json(workspace_root, statuses, manifest)))
else:
print_workspace_status(workspace_root, statuses, manifest)

Expand All @@ -282,7 +283,7 @@ def workspace_check_command(
return 1

if output_format == "json":
print(json.dumps(workspace_check_to_json(workspace_root, results, manifest), separators=(",", ":")))
print(dumps_json(workspace_check_to_json(workspace_root, results, manifest)))
else:
print_workspace_check(workspace_root, results, manifest)

Expand All @@ -308,7 +309,7 @@ def workspace_doctor_command(
return 1

if output_format == "json":
print(json.dumps(workspace_doctor_to_json(workspace_root, results, manifest), separators=(",", ":")))
print(dumps_json(workspace_doctor_to_json(workspace_root, results, manifest)))
else:
print_workspace_doctor(workspace_root, results, manifest)

Expand Down
2 changes: 2 additions & 0 deletions cli/python/base_projects/tests/test_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,8 @@ def test_workspace_status_supports_json_format(self) -> None:
payload = json.loads(stdout)
self.assertEqual(status, 0)
self.assertEqual(stderr, "")
self.assertTrue(stdout.startswith("{\n"))
self.assertIn(' "workspace": ', stdout)
self.assertEqual(payload["workspace"], str(workspace.resolve()))
self.assertEqual(payload["project_count"], 1)
self.assertEqual(payload["projects"][0]["name"], "demo")
Expand Down
6 changes: 6 additions & 0 deletions cli/python/base_projects/tests/test_workspace_checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ def test_workspace_check_manifest_supports_json_format(self) -> None:
projects_by_repo = {project["repository"]: project for project in payload["projects"]}
self.assertEqual(status, 1)
self.assertEqual(stderr, "")
self.assertTrue(stdout.startswith("{\n"))
self.assertIn(' "workspace": ', stdout)
self.assertEqual(payload["schema_version"], 1)
self.assertEqual(payload["status"], "error")
self.assertEqual(payload["workspace_manifest"]["name"], "demo-suite")
Expand Down Expand Up @@ -239,6 +241,8 @@ def test_workspace_check_supports_json_format(self) -> None:
payload = json.loads(stdout)
self.assertEqual(status, 1)
self.assertEqual(stderr, "")
self.assertTrue(stdout.startswith("{\n"))
self.assertIn(' "workspace": ', stdout)
self.assertEqual(payload["schema_version"], 1)
self.assertEqual(payload["workspace"], str(workspace.resolve()))
self.assertEqual(payload["status"], "error")
Expand Down Expand Up @@ -269,6 +273,8 @@ def test_workspace_doctor_supports_json_format(self) -> None:
payload = json.loads(stdout)
self.assertEqual(status, 1)
self.assertEqual(stderr, "")
self.assertTrue(stdout.startswith("{\n"))
self.assertIn(' "workspace": ', stdout)
self.assertEqual(payload["schema_version"], 1)
self.assertEqual(payload["workspace"], str(workspace.resolve()))
self.assertEqual(payload["projects"][0]["checks"][0]["id"], "BASE-P050")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ def test_workspace_status_manifest_supports_json_format(self) -> None:
projects_by_repo = {project["repository"]: project for project in payload["projects"]}
self.assertEqual(status, 1)
self.assertEqual(stderr, "")
self.assertTrue(stdout.startswith("{\n"))
self.assertIn(' "workspace": ', stdout)
self.assertEqual(payload["workspace"], str(workspace.resolve()))
self.assertEqual(payload["workspace_manifest"]["path"], str(manifest_path.resolve()))
self.assertEqual(payload["workspace_manifest"]["name"], "demo-suite")
Expand Down
2 changes: 1 addition & 1 deletion cli/python/base_projects/workspace_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -778,4 +778,4 @@ def workspace_manifest_entries(workspace_root: Path) -> tuple[ManifestEntry, ...


def dumps_json(payload: dict[str, Any]) -> str:
return json.dumps(payload, separators=(",", ":"))
return json.dumps(payload, indent=2)
Loading