[GH-ISSUE #585] feat: Add app dashboard command (asc status) #158

Closed
opened 2026-02-26 21:33:50 +03:00 by kerem · 0 comments
Owner

Originally created by @rudrankriyam on GitHub (Feb 17, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/585

Summary

Add a first-class dashboard command that answers: “what’s the current state of my app release pipeline?”

Proposed entrypoint:

asc status --app "APP_ID"

This should be a single JSON payload (plus table/markdown views) that aggregates the most useful operational signals:

  • latest build processing state
  • TestFlight distribution/beta review state (if relevant)
  • latest App Store version state + phased release state
  • in-flight submissions (and blockers)

Why this matters

Today, answering “are we good to ship?” requires stitching together multiple commands (and remembering which ones):

  • asc builds latest / asc builds info
  • asc testflight ...
  • asc submit status / asc review ...
  • asc versions ...

A single dashboard command improves:

  • CI/CD ergonomics (one command, one artifact)
  • on-call/ops speed (no spelunking)
  • agent workflows (less tool-use chatter)

Current state (verified)

  • There is no root asc status dashboard.
  • Narrow status commands exist in specific domains (e.g. asc auth status, asc submit status, asc notarization status, asc xcode-cloud status).
  • Output patterns are already solid (JSON-first, --output table|markdown, --pretty).

Proposed UX

Command

asc status --app "APP_ID" [flags]

Flags (proposal):

  • --app (required; respects ASC_APP_ID)
  • --include (optional; comma-separated sections)
    • values: builds,testflight,appstore,submission,review,phased-release,links
    • default: a sensible subset (everything except any expensive sections)
  • --output json|table|markdown (default json)
  • --pretty (when json)

Non-goals (phase 1):

  • no mutations
  • no interactive prompts

Output model (JSON)

A single deterministic object, shaped roughly like:

{
  "app": {"id":"123","bundleId":"com.example.app","name":"My App"},
  "builds": {"latest": {"id":"...","version":"1.2.3","buildNumber":"45","processingState":"PROCESSING"}},
  "testflight": {"latestDistributedBuildId":"...","betaReviewState":"..."},
  "appstore": {"version":"1.2.3","state":"READY_FOR_SALE"},
  "submission": {"inFlight": false, "blockingIssues": []},
  "links": {"appstoreconnect":"https://appstoreconnect.apple.com/..."}
}

Notes:

  • Stable key ordering in table/markdown output.
  • Deterministic sorting where arrays exist.
  • Each section should be independently omittable via --include.

Implementation notes

  • Implement as a new top-level command (internal/cli/status/), or as apps status if you prefer keeping all app-centric features under apps.
  • Use bounded concurrency for independent fetches.
  • Reuse existing client methods; avoid shelling out to other asc commands.
  • Respect ASC_TIMEOUT via shared.ContextWithTimeout.

Test plan (TDD-first)

  • cmdtests:
    • asc status --help exists
    • missing --app returns exit usage (2)
    • output is valid JSON by default and parses
    • --include builds only includes builds section
  • unit tests:
    • response shaping/deterministic ordering
    • section filtering

Acceptance criteria

  • asc status exists and is self-documenting.
  • Default output is minified JSON; --pretty indents.
  • --include reliably filters sections.
  • Deterministic output suitable for CI artifacts.
  • make test passes.
Originally created by @rudrankriyam on GitHub (Feb 17, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/585 ## Summary Add a first-class *dashboard* command that answers: “what’s the current state of my app release pipeline?” Proposed entrypoint: ```bash asc status --app "APP_ID" ``` This should be a **single JSON payload** (plus table/markdown views) that aggregates the most useful operational signals: - latest build processing state - TestFlight distribution/beta review state (if relevant) - latest App Store version state + phased release state - in-flight submissions (and blockers) ## Why this matters Today, answering “are we good to ship?” requires stitching together multiple commands (and remembering which ones): - `asc builds latest` / `asc builds info` - `asc testflight ...` - `asc submit status` / `asc review ...` - `asc versions ...` A single dashboard command improves: - CI/CD ergonomics (one command, one artifact) - on-call/ops speed (no spelunking) - agent workflows (less tool-use chatter) ## Current state (verified) - There is no root `asc status` dashboard. - Narrow status commands exist in specific domains (e.g. `asc auth status`, `asc submit status`, `asc notarization status`, `asc xcode-cloud status`). - Output patterns are already solid (JSON-first, `--output table|markdown`, `--pretty`). ## Proposed UX ### Command ```bash asc status --app "APP_ID" [flags] ``` Flags (proposal): - `--app` (required; respects `ASC_APP_ID`) - `--include` (optional; comma-separated sections) - values: `builds,testflight,appstore,submission,review,phased-release,links` - default: a sensible subset (everything except any expensive sections) - `--output json|table|markdown` (default json) - `--pretty` (when json) Non-goals (phase 1): - no mutations - no interactive prompts ### Output model (JSON) A single deterministic object, shaped roughly like: ```json { "app": {"id":"123","bundleId":"com.example.app","name":"My App"}, "builds": {"latest": {"id":"...","version":"1.2.3","buildNumber":"45","processingState":"PROCESSING"}}, "testflight": {"latestDistributedBuildId":"...","betaReviewState":"..."}, "appstore": {"version":"1.2.3","state":"READY_FOR_SALE"}, "submission": {"inFlight": false, "blockingIssues": []}, "links": {"appstoreconnect":"https://appstoreconnect.apple.com/..."} } ``` Notes: - Stable key ordering in table/markdown output. - Deterministic sorting where arrays exist. - Each section should be independently omittable via `--include`. ## Implementation notes - Implement as a new top-level command (`internal/cli/status/`), or as `apps status` if you prefer keeping all app-centric features under `apps`. - Use bounded concurrency for independent fetches. - Reuse existing client methods; avoid shelling out to other `asc` commands. - Respect `ASC_TIMEOUT` via `shared.ContextWithTimeout`. ## Test plan (TDD-first) - [ ] cmdtests: - [ ] `asc status --help` exists - [ ] missing `--app` returns exit usage (2) - [ ] output is valid JSON by default and parses - [ ] `--include builds` only includes builds section - [ ] unit tests: - [ ] response shaping/deterministic ordering - [ ] section filtering ## Acceptance criteria - [ ] `asc status` exists and is self-documenting. - [ ] Default output is minified JSON; `--pretty` indents. - [ ] `--include` reliably filters sections. - [ ] Deterministic output suitable for CI artifacts. - [ ] `make test` passes.
kerem 2026-02-26 21:33:50 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#158
No description provided.