asc-workflow
rudrankriyam/app-store-connect-cli-skills
Define and run multi-step App Store Connect automations with lane-style workflows and step outputs.
What is asc-workflow?
Manage repo-local automation workflows using `.asc/workflow.json` with the `asc workflow` CLI. Validate, list, run, resume, and audit multi-step processes including TestFlight and App Store release workflows with conditional execution and JSON output extraction.
- Validate workflow structure and references with `asc workflow validate`
- List available public and private workflows with `asc workflow list`
- Execute workflows with `asc workflow run`, supporting dry-run preview and resumable runs
- Extract and reference step outputs using JSON path queries like `${steps.step_name.OUTPUT_NAME}`
- Support conditional step execution based on environment variables or runtime parameters
- Pass runtime parameters via `KEY:VALUE` syntax with environment precedence rules
How to install asc-workflow
npx skills add https://github.com/rudrankriyam/app-store-connect-cli-skills --skill asc-workflow- `.asc/workflow.json` file in repo root or custom path
- Valid `asc` CLI authentication (verify with `asc auth status`)
- Familiarity with shell commands and JSON structure
How to use asc-workflow
- 1.Create or edit `.asc/workflow.json` with workflow definitions, steps, and environment variables
- 2.Run `asc workflow validate` to check syntax and references
- 3.Run `asc workflow list` to discover available workflows
- 4.Run `asc workflow run --dry-run <name> [PARAMS]` to preview execution without side effects
- 5.Run `asc workflow run <name> [PARAMS]` to execute the workflow
- 6.If a step fails, resume with `asc workflow run <name> --resume "<run-id>"` using the ID from the JSON result
Use cases
- Automate TestFlight distribution by resolving latest builds and adding them to groups
- Stage and submit App Store versions with validation, metadata, and review submission steps
- Chain multiple `asc` commands with conditional logic and output passing between steps
- Resume interrupted workflows from a saved run ID without re-running completed steps
- Dry-run complex release workflows before executing them against production
- iOS/macOS developers automating App Store Connect releases
- DevOps engineers building CI/CD pipelines for app distribution
- Teams managing TestFlight beta testing workflows
- Release managers coordinating multi-step app submission processes
asc-workflow FAQ
Add an `outputs` map to a named `run` step with JSON path keys (e.g., `"BUILD_ID": "$.data.id"`). Reference the output in later steps using `${steps.step_name.OUTPUT_NAME}`. The step command must emit JSON on stdout.
Yes, add `"if": "VAR_NAME"` to a step. It executes only if the variable is truthy (1, true, yes, y, on). The variable is looked up in merged workflow env/params first, then the process environment.
Use `asc workflow run <name> --resume "<run-id>"` with the run ID from the previous JSON result. Do not pass extra KEY:VALUE params; the saved workflow file, params, and persisted outputs are reused.
For main workflow runs: `definition.env < workflow.env < CLI params`. For sub-workflow calls with `with`: `sub-workflow env < caller env and params < step with`.
Yes, use a step with `"workflow": "workflow_name"` and optionally `"with"` to override env variables for that sub-workflow call.
Full instructions (SKILL.md)
Source of truth, from rudrankriyam/app-store-connect-cli-skills.
name: asc-workflow
description: Define, validate, run, resume, and audit repo-local multi-step automations with current asc workflow and .asc/workflow.json, including step outputs and safe release/TestFlight workflows.
asc workflow
Use this skill when you need lane-style automation inside the CLI using:
asc workflow validateasc workflow listasc workflow run
Workflows are repo-local automation files. They run trusted shell commands, stream step output to stderr, and keep stdout as machine-readable JSON.
Command discovery
Always verify flags with:
asc workflow --help
asc workflow validate --help
asc workflow list --help
asc workflow run --help
End-to-end flow
- Author
.asc/workflow.json. - Validate structure and references:
asc workflow validate
- Discover public workflows:
asc workflow list
asc workflow list --all
- Preview execution:
asc workflow run --dry-run beta BUILD_ID:123456789 GROUP_ID:abcdef
- Execute:
asc workflow run beta BUILD_ID:123456789 GROUP_ID:abcdef
- If a recoverable run fails, resume with the run ID from the JSON result:
asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Do not pass extra KEY:VALUE params with --resume; the saved workflow file, params, and persisted outputs are reused.
File location and format
- Default path:
.asc/workflow.json - Override path:
asc workflow run --file ./path/to/workflow.json <name> - JSONC comments are supported.
- Top-level hooks:
before_all,after_all,error - Workflow keys:
description,private,env,steps - Step forms:
- string shorthand:
"echo hello" runshell commandworkflowsub-workflow callnamelabelifconditional var namewithenv overrides for workflow-call stepsoutputsmap for JSON stdout extraction from named run steps
- string shorthand:
Outputs
Run steps can declare outputs. The command must emit JSON on stdout, so pass --output json for asc commands that produce outputs.
Output references use:
${steps.step_name.OUTPUT_NAME}
Rules:
- A step that declares
outputsmust have a reference-safename. - Outputs are allowed on
runsteps, not workflow-call steps. - Output-producing names must be unique across workflows that can execute together in the same run graph.
- Persisted outputs are stored in workflow run state, so do not map secrets into outputs.
Runtime params
asc workflow run <name> [KEY:VALUE ...] supports both separators:
asc workflow run beta VERSION:2.1.0
asc workflow run beta VERSION=2.1.0
Repeated keys are last-write-wins. In shell commands, reference params through shell expansion like $VERSION.
Env precedence
Main workflow run:
definition.env < workflow.env < CLI params
Sub-workflow call with with:
sub-workflow env < caller env and params < step with
Conditionals
Add "if": "VAR_NAME" to a step. Truthy values are 1, true, yes, y, and on, case-insensitive. Lookup checks merged workflow env/params first, then process environment.
Example workflow
{
"env": {
"APP_ID": "123456789",
"VERSION": "1.0.0",
"GROUP_ID": ""
},
"before_all": "asc auth status",
"after_all": "echo workflow_done",
"error": "echo workflow_failed",
"workflows": {
"beta": {
"description": "Resolve the latest build and distribute it to TestFlight",
"steps": [
{
"name": "resolve_build",
"run": "asc builds info --app $APP_ID --latest --platform IOS --output json",
"outputs": {
"BUILD_ID": "$.data.id"
}
},
{
"name": "list_groups",
"run": "asc testflight groups list --app $APP_ID --limit 20 --output json"
},
{
"name": "add_build_to_group",
"if": "GROUP_ID",
"run": "asc builds add-groups --build-id ${steps.resolve_build.BUILD_ID} --group $GROUP_ID"
}
]
},
"release": {
"description": "Validate, stage, and submit an App Store version",
"steps": [
{
"name": "validate",
"run": "asc validate --app $APP_ID --version $VERSION --platform IOS --output json"
},
{
"name": "stage",
"run": "asc release stage --app $APP_ID --version $VERSION --build $BUILD_ID --metadata-dir ./metadata/version/$VERSION --confirm --output json"
},
{
"name": "submit",
"if": "SUBMIT_FOR_REVIEW",
"run": "asc review submit --app $APP_ID --version $VERSION --build $BUILD_ID --confirm --output json"
}
]
},
"publish-appstore": {
"description": "High-level upload plus App Store review submission",
"steps": [
{
"name": "publish",
"run": "asc publish appstore --app $APP_ID --ipa ./build/MyApp.ipa --version $VERSION --wait --submit --confirm --output json"
}
]
}
}
}
Useful invocations
asc workflow validate | jq -e '.valid == true'
asc workflow list --pretty
asc workflow list --all --pretty
asc workflow run --dry-run beta BUILD_ID:123 GROUP_ID:grp_abc
asc workflow run beta BUILD_ID:123 GROUP_ID:grp_abc | jq -e '.status == "ok"'
asc workflow run release BUILD_ID:123 SUBMIT_FOR_REVIEW:true
asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Safety rules
- Treat
.asc/workflow.jsonlike code; only run trusted workflow files. - Avoid running workflows from untrusted PRs with secrets.
- Keep workflow files in version control.
- Validate first, dry-run next, then run.
- Use explicit IDs and
--confirmfor mutating steps. - Use
asc validate,asc release stage,asc review submit, andasc publish appstore; do not use removed submission commands.
Related skills
More from rudrankriyam/app-store-connect-cli-skills and the wider catalog.

asc-xcode-build
Build, archive, and export Xcode projects for App Store Connect upload with version/build number management.

asc-app-create-ui
Create App Store Connect app records via browser automation when API is unavailable.

asc-aso-audit
Run offline ASO audits on App Store metadata and surface keyword gaps via Astro MCP.

asc-build-lifecycle
Track build processing, find latest builds, and clean up old builds with App Store Connect CLI.

liteparse
Fast, local document extraction via `lit` CLI—parse once, search cheaply with disciplined patterns.

mem
Store and retrieve memories with full-text search across sessions using local SQLite.