[PR #510] [MERGED] feat(shots): add Koubou framing and screenshot review workflow #583

Closed
opened 2026-02-26 22:31:38 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/510
Author: @rudrankriyam
Created: 2/13/2026
Status: Merged
Merged: 2/14/2026
Merged by: @rudrankriyam

Base: mainHead: feat/shots-capture-mvp


📝 Commits (10+)

  • 1efc944 feat(shots): add asc shots capture with maestro and simctl providers
  • da514d5 feat(shots): switch to AXe workflows and add framing
  • cd0daac feat(shots): add frame device discovery command
  • e460bf9 feat(shots): normalize framed images to upload sizes
  • 5b7f310 Use shared screenshots provider constant (#512)
  • 857a127 feat(shots): switch framing to Koubou and add review workflow
  • f71700c Fix shots bundle-id capture targeting and run override ordering
  • a496a19 Fix shots frame/review config metadata and cleanup bugs
  • 644219f Fix shots run relaunch and koubou stderr JSON parsing
  • 98b5d00 Fix shots frame config filename device and remove dead exports (#516)

📊 Changes

40 files changed (+6095 additions, -0 deletions)

View changed files

📝 .gitignore (+3 -0)
📝 ASC.md (+1 -0)
📝 go.mod (+1 -0)
📝 go.sum (+2 -0)
internal/cli/cmdtest/shots_capture_test.go (+134 -0)
internal/cli/cmdtest/shots_frame_test.go (+449 -0)
internal/cli/cmdtest/shots_frames_list_devices_test.go (+69 -0)
internal/cli/cmdtest/shots_review_generate_test.go (+155 -0)
internal/cli/cmdtest/shots_review_open_approve_test.go (+215 -0)
internal/cli/cmdtest/shots_run_test.go (+155 -0)
📝 internal/cli/docs/templates/ASC.md (+1 -0)
📝 internal/cli/registry/registry.go (+2 -0)
internal/cli/shots/shots.go (+46 -0)
internal/cli/shots/shots_capture.go (+84 -0)
internal/cli/shots/shots_frame.go (+167 -0)
internal/cli/shots/shots_frame_test.go (+44 -0)
internal/cli/shots/shots_frames.go (+31 -0)
internal/cli/shots/shots_frames_list_devices.go (+37 -0)
internal/cli/shots/shots_review.go (+35 -0)
internal/cli/shots/shots_review_approve.go (+68 -0)

...and 20 more files

📄 Description

Summary

  • deliver the full asc shots workflow on this branch:
    • shots capture
    • shots run
    • shots frame
    • shots frames list-devices
    • shots review generate|open|approve
  • switch shots frame execution to a Koubou YAML pipeline (kou generate) while preserving existing CLI ergonomics (--input, --device, and new --config support)
  • keep framed output aligned to App Store upload expectations and expose frame-device discovery for agent-friendly automation
  • add static review artifacts for QA:
    • manifest.json for structured checks (status/size/approval)
    • index.html for side-by-side visual review
    • approved.json management through shots review approve
  • fix bundle-ID targeting in shots capture by launching the requested app before screenshot capture
  • fix shots run override ordering so --bundle-id can satisfy plans that omit app.bundle_id
  • harden shots run external command output handling so JSON parsing reads stdout cleanly and still includes stderr details on failures
  • include provider-constant cleanup (screenshots.ProviderAXe) from merged follow-up
  • update command registration/docs/examples and add focused CLI/internal tests for all new flows

Included file scope

  • internal/cli/shots/* (review commands + frame/capture/run updates)
  • internal/cli/cmdtest/*shots* (capture/run/frame/review coverage)
  • internal/screenshots/* (capture/plan/run/frame/review logic and tests)
  • command wiring/docs updates (internal/cli/registry/registry.go, ASC.md, internal/cli/docs/templates/ASC.md, .gitignore)

Test plan

  • pre-commit suite (format, lint, short tests) on commit
  • go test ./internal/screenshots
  • go test ./internal/cli/cmdtest -run "TestShotsReviewGenerate|TestShotsReviewOpen|TestShotsReviewApprove|TestShotsRun|TestShotsFrame|TestShotsFramesListDevices"
  • go test ./internal/cli/shots
  • go build -o /tmp/asc .
  • smoke checks:
    • /tmp/asc shots review generate ...
    • /tmp/asc shots review open --dry-run ...
    • /tmp/asc shots review approve --all-ready ...

Notes

  • shots frame requires kou installed (pip install koubou or brew install bitomule/tap/koubou).
  • screenshot upload remains explicit via asc assets screenshots upload --path ... --device-type ....

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/510 **Author:** [@rudrankriyam](https://github.com/rudrankriyam) **Created:** 2/13/2026 **Status:** ✅ Merged **Merged:** 2/14/2026 **Merged by:** [@rudrankriyam](https://github.com/rudrankriyam) **Base:** `main` ← **Head:** `feat/shots-capture-mvp` --- ### 📝 Commits (10+) - [`1efc944`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/1efc94440480fe97dc7ceb97d68a0e6e596e43da) feat(shots): add asc shots capture with maestro and simctl providers - [`da514d5`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/da514d554c5f49b83360852ff590ea1bb52ba8d4) feat(shots): switch to AXe workflows and add framing - [`cd0daac`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/cd0daacf29904f87871b9ece94936e38fc46a0d1) feat(shots): add frame device discovery command - [`e460bf9`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/e460bf935c9cb3c64bbe1bf7233582aba4ef02ba) feat(shots): normalize framed images to upload sizes - [`5b7f310`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/5b7f3102357b45da4fc46c9c4d51730eb9f05e72) Use shared screenshots provider constant (#512) - [`857a127`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/857a1279b947084609f88540c77c38f4bc864f18) feat(shots): switch framing to Koubou and add review workflow - [`f71700c`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/f71700c8f1dab58c18ca442e5d786a8fee1e73c6) Fix shots bundle-id capture targeting and run override ordering - [`a496a19`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/a496a198d7de7bb6cd9a2c638246ad80658be1c4) Fix shots frame/review config metadata and cleanup bugs - [`644219f`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/644219f46cfc63354870542c43a4543869fe33b7) Fix shots run relaunch and koubou stderr JSON parsing - [`98b5d00`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/98b5d006cd2bdad5ecbf0a588269184ba9ad9b69) Fix shots frame config filename device and remove dead exports (#516) ### 📊 Changes **40 files changed** (+6095 additions, -0 deletions) <details> <summary>View changed files</summary> 📝 `.gitignore` (+3 -0) 📝 `ASC.md` (+1 -0) 📝 `go.mod` (+1 -0) 📝 `go.sum` (+2 -0) ➕ `internal/cli/cmdtest/shots_capture_test.go` (+134 -0) ➕ `internal/cli/cmdtest/shots_frame_test.go` (+449 -0) ➕ `internal/cli/cmdtest/shots_frames_list_devices_test.go` (+69 -0) ➕ `internal/cli/cmdtest/shots_review_generate_test.go` (+155 -0) ➕ `internal/cli/cmdtest/shots_review_open_approve_test.go` (+215 -0) ➕ `internal/cli/cmdtest/shots_run_test.go` (+155 -0) 📝 `internal/cli/docs/templates/ASC.md` (+1 -0) 📝 `internal/cli/registry/registry.go` (+2 -0) ➕ `internal/cli/shots/shots.go` (+46 -0) ➕ `internal/cli/shots/shots_capture.go` (+84 -0) ➕ `internal/cli/shots/shots_frame.go` (+167 -0) ➕ `internal/cli/shots/shots_frame_test.go` (+44 -0) ➕ `internal/cli/shots/shots_frames.go` (+31 -0) ➕ `internal/cli/shots/shots_frames_list_devices.go` (+37 -0) ➕ `internal/cli/shots/shots_review.go` (+35 -0) ➕ `internal/cli/shots/shots_review_approve.go` (+68 -0) _...and 20 more files_ </details> ### 📄 Description ## Summary - deliver the full `asc shots` workflow on this branch: - `shots capture` - `shots run` - `shots frame` - `shots frames list-devices` - `shots review generate|open|approve` - switch `shots frame` execution to a Koubou YAML pipeline (`kou generate`) while preserving existing CLI ergonomics (`--input`, `--device`, and new `--config` support) - keep framed output aligned to App Store upload expectations and expose frame-device discovery for agent-friendly automation - add static review artifacts for QA: - `manifest.json` for structured checks (status/size/approval) - `index.html` for side-by-side visual review - `approved.json` management through `shots review approve` - fix bundle-ID targeting in `shots capture` by launching the requested app before screenshot capture - fix `shots run` override ordering so `--bundle-id` can satisfy plans that omit `app.bundle_id` - harden `shots run` external command output handling so JSON parsing reads stdout cleanly and still includes stderr details on failures - include provider-constant cleanup (`screenshots.ProviderAXe`) from merged follow-up - update command registration/docs/examples and add focused CLI/internal tests for all new flows ## Included file scope - `internal/cli/shots/*` (review commands + frame/capture/run updates) - `internal/cli/cmdtest/*shots*` (capture/run/frame/review coverage) - `internal/screenshots/*` (capture/plan/run/frame/review logic and tests) - command wiring/docs updates (`internal/cli/registry/registry.go`, `ASC.md`, `internal/cli/docs/templates/ASC.md`, `.gitignore`) ## Test plan - [x] pre-commit suite (format, lint, short tests) on commit - [x] `go test ./internal/screenshots` - [x] `go test ./internal/cli/cmdtest -run "TestShotsReviewGenerate|TestShotsReviewOpen|TestShotsReviewApprove|TestShotsRun|TestShotsFrame|TestShotsFramesListDevices"` - [x] `go test ./internal/cli/shots` - [x] `go build -o /tmp/asc .` - [x] smoke checks: - `/tmp/asc shots review generate ...` - `/tmp/asc shots review open --dry-run ...` - `/tmp/asc shots review approve --all-ready ...` ## Notes - `shots frame` requires `kou` installed (`pip install koubou` or `brew install bitomule/tap/koubou`). - screenshot upload remains explicit via `asc assets screenshots upload --path ... --device-type ...`. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-26 22:31:38 +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#583
No description provided.