
Asc Workflow
Define, validate, dry-run, execute, and resume repo-local App Store Connect automation lanes for TestFlight and release without clicking through ASC for every step.
Overview
asc workflow is an agent skill for the Ship phase that defines, validates, runs, resumes, and audits repo-local App Store Connect multi-step automations via asc and `.asc/workflow.json`.
Install
npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-workflowWhat is this skill?
- Authors and validates `.asc/workflow.json` with asc workflow validate
- Lists public workflows via asc workflow list and asc workflow list --all
- Dry-runs parameterized lanes with asc workflow run --dry-run and KEY:VALUE params
- Resumes failed runs with --resume and persisted outputs without re-passing params
- Streams step output to stderr while stdout stays machine-readable JSON
- 6-step documented end-to-end flow from author through resume
- Default workflow path `.asc/workflow.json`
Adoption & trust: 645 installs on skills.sh; 845 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You ship iOS builds but TestFlight and App Store release steps are fragile one-off scripts with no validate, dry-run, or resume story.
Who is it for?
Indie mobile devs using the asc CLI who want Git-tracked, resumable ASC lanes for TestFlight and release.
Skip if: Non-Apple stores, projects without asc CLI, or releases managed only in Xcode GUI with no `.asc/workflow.json`.
When should I use this skill?
You need lane-style ASC automation: validate, list, run, dry-run, or resume `.asc/workflow.json` workflows including TestFlight and release.
What do I get? / Deliverables
You get validated workflow files, dry-run previews, executed beta or release lanes, and resumable runs with persisted step outputs when a step fails.
- Validated workflow JSON ready for run
- Dry-run or executed workflow JSON result on stdout
- Resumed run reusing saved params and persisted outputs
Recommended Skills
Journey fit
Ship is the journey phase where binaries meet store gates; this skill is entirely about executing and auditing release/TestFlight workflows before users see builds. Launch subphase fits store submission and beta distribution workflows named explicitly for safe release and TestFlight in the skill description.
How it compares
Repo-local asc workflow lanes with resume semantics—not Fastlane Ruby lanes unless you already standardized on asc.
Common Questions / FAQ
Who is asc-workflow for?
Solo builders and small teams shipping iOS apps with the App Store Connect CLI who want validated, resumable automation in the repository.
When should I use asc-workflow?
Use it when authoring `.asc/workflow.json`, validating references, dry-running beta or release lanes, executing TestFlight distribution, or resuming a failed workflow run during Ship launch prep.
Is asc-workflow safe to install?
Workflows run trusted shell commands against your Apple credentials—review the Security Audits panel on this page and inspect `.asc/workflow.json` before asc workflow run in production.
SKILL.md
READMESKILL.md - Asc Workflow
# asc workflow Use this skill when you need lane-style automation inside the CLI using: - `asc workflow validate` - `asc workflow list` - `asc 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: ```bash asc workflow --help asc workflow validate --help asc workflow list --help asc workflow run --help ``` ## End-to-end flow 1. Author `.asc/workflow.json`. 2. Validate structure and references: ```bash asc workflow validate ``` 3. Discover public workflows: ```bash asc workflow list asc workflow list --all ``` 4. Preview execution: ```bash asc workflow run --dry-run beta BUILD_ID:123456789 GROUP_ID:abcdef ``` 5. Execute: ```bash asc workflow run beta BUILD_ID:123456789 GROUP_ID:abcdef ``` 6. If a recoverable run fails, resume with the run ID from the JSON result: ```bash 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"` - `run` shell command - `workflow` sub-workflow call - `name` label - `if` conditional var name - `with` env overrides for workflow-call steps - `outputs` map for JSON stdout extraction from named run steps ## 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: ```text ${steps.step_name.OUTPUT_NAME} ``` Rules: - A step that declares `outputs` must have a reference-safe `name`. - Outputs are allowed on `run` steps, 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: ```bash 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: ```text definition.env < workflow.env < CLI params ``` Sub-workflow call with `with`: ```text 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 ```json { "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 $