Skip to content

feat(cli): add positional slug shortcuts for publish workflows #47

Description

@copieman

Summary

The ship CLI already supports targeting apps by slug via --app-slug and SHIP_APP_SLUG. A useful next step is to make the common publish flows even shorter by accepting a positional slug as shorthand.

Proposed UX

Support full publish with a positional slug:

ship <slug>
ship publish <slug>

Support partial/status/validation flows with a positional slug:

ship publish metadata <slug>
ship publish screenshots <slug>
ship publish app <slug>
ship publish status <slug>
ship publish validate <slug>

Preserve existing explicit targeting:

ship publish --app-id <uuid>
ship publish --app-slug <slug>
ship publish <slug> --platform ios

Why

  • The public CLI already supports slug-based targeting, but the most common path is still fairly verbose.
  • Positional slug syntax makes publish commands easier to remember and faster to type.
  • It gives the CLI a cleaner “happy path” while keeping --app-id and --app-slug available for explicit workflows.

Scope

  • Add positional slug support to the root command for full publish.
  • Add positional slug support to publish and the publish-related subcommands.
  • Keep --app-id, --app-slug, and platform filtering working as they do today.
  • Update help text and README examples to document the shorthand flows.

Acceptance Criteria

  • ship <slug> triggers a full publish for the matching app.
  • ship publish <slug> triggers a full publish for the matching app.
  • metadata, screenshots, app, status, and validate accept <slug> as an optional positional argument.
  • Existing --app-id and --app-slug flows continue to work.
  • Platform selection still works with shorthand commands.
  • The CLI returns clear validation errors when the user supplies conflicting identifiers.
  • README and command examples reflect the new shorthand syntax.

Notes

  • There is already a local prototype branch for this UX: feature/slug-publish-shortcuts.
  • The issue should describe the desired public behavior, not commit us to the exact prototype implementation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions