Skip to content

feat(cli): add testflight subcommand tree - #29

Closed
setoelkahfi wants to merge 9 commits into
mainfrom
development
Closed

setoelkahfi wants to merge 9 commits into
mainfrom
development

Conversation

@setoelkahfi

Copy link
Copy Markdown
Contributor

Summary

Adds asc testflight with three sub-trees:

  • testflight groups — list, get, add-build (CLI-only, writable)
  • testflight app-review-detail — get, update
  • testflight app-review-submissions — list, submit (CLI-only, irreversible)

New ASC domain modules (crates/aso)

Module Operations Tests
beta_group list, get, add-builds body serialisation, empty-array
beta_app_review_detail get, PATCH update deserialise, skip-None fields
beta_app_review_submission list, POST create filter-key pinning, body
beta_build_localization list, POST create, PATCH update round-trip, optional field omission

New MCP tools

Read-only operations exposed as MCP tools per the project policy:

  • testflight_beta_groups_list, testflight_beta_groups_get
  • testflight_beta_app_review_detail_get
  • testflight_beta_app_review_submissions_list

Writable / irreversible operations (add-build, submit, localization writes) are CLI-only.

CI

All gates pass locally: cargo fmt, clippy -D warnings, 92 tests, rustdoc -D warnings.

setoelkahfi and others added 5 commits October 11, 2026 20:53
…28)

Update the sitiai and klepon release-session plans to reflect what gh
stack #27 landed (#24 docs/list-builds-pagination -> #25 feat/signing-doctor
-> #26 feat/apps-await-processing):

- sitiai: add a 2025-10-11 progress callout; mark findings #2 (signing
  doctor, PR #25), #5 (await-processing, PR #26) and #6 (list_builds
  pagination doc, PR #24) as shipped; detail the await-processing CLI
  surface; note the upload.rs cluster (#3 + #1, #4 folded) is next.
- klepon: cross-link the two findings that built on its builds API
  (#6 pagination doc, #5 await-processing on BuildsApi::list_builds).

Co-authored-by: siGit Code v1.6.7-acp <noreply@sigit.si>
The `limit=200` on the builds collection reads like a ceiling, but
`list_all` follows Apple's `links.next` cursor until the collection is
exhausted. Spell out that 200 is the largest page ASC allows (fewer
round-trips), not the number of builds returned, so callers don't treat
the vector length as "the 200 most recent builds."

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
Add a read-only signing health check that cross-references the login
keychain against Apple's certificates and reports which ASC certificates
this machine can actually sign with (private key present locally).

- frontend: new keychain module + run_doctor, DoctorReport/DoctorCertificate
- cli: macOS-gated `asc signing doctor` subcommand, JSON output
- CLI-only (reads the login keychain); never transmits key material

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
Build the asc CLI for linux/windows/macOS (amd64 + arm64), checksum each
asset, and publish a GitHub release with auto-generated notes. Mirrors the
smbcloud-cli release-github.yml, trimmed to what ascapi needs: toolchain
pinned to stable (no rust-toolchain.toml here) and no OS-package-manager
fan-out (no homebrew/scoop/winget workflows in this repo yet).

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
Add `asc testflight` with three sub-trees:

- `testflight groups` — list, get, and add-build (CLI-only, writable)
- `testflight app-review-detail` — get and update
- `testflight app-review-submissions` — list and submit (CLI-only, irreversible)

Adds the supporting ASC domain modules in `crates/aso`:
- `beta_group`: list groups, get by id, add builds (body-serialisation tests)
- `beta_app_review_detail`: get + PATCH update (deserialise + skip-None tests)
- `beta_app_review_submission`: list + POST create (filter-key + body tests)
- `beta_build_localization`: list + POST create + PATCH update (round-trip tests)

Exposes the read-only operations as MCP tools:
- `testflight_beta_groups_list`, `testflight_beta_groups_get`
- `testflight_beta_app_review_detail_get`
- `testflight_beta_app_review_submissions_list`

Writable / irreversible operations (add-build, submit, localization writes)
are CLI-only per the project's destructive-op policy.

All CI gates pass: fmt, clippy -D warnings, 92 tests, rustdoc -D warnings.

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
@setoelkahfi setoelkahfi self-assigned this Oct 11, 2026
@setoelkahfi
setoelkahfi requested a review from paydii October 11, 2026 21:41

@sigit-code-review sigit-code-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change introduces a new asc testflight CLI subcommand tree with three main areas: beta groups (list, get, add-build), beta app review detail (get, update), and beta app review submissions (list, submit). Four new modules are added to the aso crate, each with their own API traits and tests. The MCP server exposes read-only operations for beta groups and beta app review detail as new tools, with appropriate request types and tool registration. The CLI and MCP code are updated to wire in these new commands and tools. The release workflow YAML is added for GitHub releases. All new code is covered by tests, and the CLI-only/writable operations are not exposed as MCP tools, matching the project policy. No prior findings are left open, and all new code is integrated cleanly with the existing structure.


Automated review by siGit Code Review · commit 0820c57 · see the review dashboard

setoelkahfi and others added 4 commits October 12, 2026 00:01
The `limit=200` on the builds collection reads like a ceiling, but
`list_all` follows Apple's `links.next` cursor until the collection is
exhausted. Spell out that 200 is the largest page ASC allows (fewer
round-trips), not the number of builds returned, so callers don't treat
the vector length as "the 200 most recent builds."

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
Keep both the new Testflight and Signing subcommands in crates/cli.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds `asc apps await-processing <APP_ID>`, which polls
GET /v1/builds?filter[app]={id} until the newest matching build
reaches a terminal state (VALID succeeds; INVALID/FAILED fail) or
times out. Flags: --version, --pre-release-version,
--interval (default 30s), --timeout (default 1800s).

The poll loop and pure classify()/AwaitConfig/AwaitOutcome live in
the shared frontend crate (await_processing.rs) so the behaviour is
testable and reusable; AwaitOutcome serializes without key material.

Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
feat(apps): add await-processing to poll builds to terminal state

@sigit-code-review sigit-code-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change introduces a new TestFlight subcommand tree to the CLI and corresponding ASC domain modules in the aso crate for beta groups, beta app review details, beta app review submissions, and beta build localizations. Each module provides async extension traits for the App Store Connect API, with comprehensive tests for serialization, deserialization, and edge cases. The MCP server exposes new read-only tools for listing beta groups and fetching beta app review details, with writable/irreversible operations intentionally CLI-only. The await_processing module provides a polling mechanism for build processing status, and a new keychain module implements a macOS-only 'signing doctor' that cross-checks local keychain certificates against those known to Apple. The release workflow for GitHub Actions is added. All previous findings appear addressed, and the new code is well-tested and documented. Reviewers should focus on the correctness of API interactions, the safety of irreversible operations, and the accuracy of the MCP tool boundaries.


Automated review by siGit Code Review · commit ce9e1ff · see the review dashboard

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant