Development Setup
Requirements
- Go 1.26 or higher
- Git
- (Optional) macOS for keychain integration testing
Clone and Build
Clone the repository and build the CLI:asc binary in the current directory.
Run Tests
Run the test suite:Optional Tooling
Install development tools:Integration Tests (Opt-in)
Integration tests hit the real App Store Connect API and are skipped by default. To run integration tests, set credentials in your environment:Headless Alternative
For CI/CD or headless environments, use base64-encoded keys:Local API Testing (Optional)
If you have App Store Connect API credentials, you can run real API calls locally:Credential Storage
Credentials are stored:- macOS: System keychain (when available)
- Fallback: Config file at
~/.asc/config.json(restricted permissions) - Repo-local:
./.asc/config.json(also supported)
.p8 files to the repository.
Local Validation
Run this checklist before opening a PR:Command Documentation
If you changed command/help text, regenerate documentation:docs/COMMANDS.md if it changed.
Pull Request Guidelines
Before Opening a PR
- Keep PRs small and focused: One logical change per PR
- Add or update tests: Cover new behavior and edge cases
- Update README: If behavior or scope changes
- Avoid committing credentials: No API keys or
.p8files - Run validation: Complete the local validation checklist above
PR Checklist
- Code formatted (
make format) - Linting passes (
make lint) - Tests pass (
ASC_BYPASS_KEYCHAIN=1 make test) - Command docs updated (
make generate-command-docs) - Build succeeds (
make build) - README updated (if needed)
- No secrets committed
Pre-commit Hook
Install local pre-commit hook to enforce checks automatically:PR Description
Include in your PR description:- What: What does this PR do?
- Why: Why is this change needed?
- How: How does it work?
- Testing: Commands run and key scenarios validated
- Breaking changes: Note any backward-incompatible changes
Development Workflow
Git Workflow
- Fork the repository
- Create a branch from
main: - Make changes and commit:
- Push to your fork:
- Open a PR against
main
Commit Message Style
Follow conventional commit format:feat:- New featurefix:- Bug fixrefactor:- Code refactoringtest:- Test additions/changesdocs:- Documentation changeschore:- Maintenance tasks
Testing Discipline
Test-Driven Development (TDD)
For bugs, refactors, and new features:- Start with a failing test that captures expected behavior
- Implement the fix or feature
- Verify the test passes
- Refactor if needed
Test Coverage
For new features:- CLI-level tests: Flags, output, errors, exit codes
- Unit tests: Core logic and edge cases
- Integration tests (optional): Real API calls
Test Patterns
Test realistic CLI invocation patterns:docs/TESTING.md.
CLI Implementation Checklist
When adding new commands:- Register in
internal/cli/registry/registry.go - Set
UsageFunc: shared.DefaultUsageFunc - Use
shared.ContextWithTimeoutfor HTTP requests - Validate required flags and test error messages
- Add
internal/cli/cmdtestcoverage - Use
httptestfor network payload tests - Update help text and examples
Architecture Guidelines
Architecture-First Development
Before implementing new commands/flags, produce a design note:- Command placement in existing taxonomy
- OpenAPI endpoint/schema validation
- UX shape: Flags, output formats, exit codes
- Backward compatibility and deprecation impact
- Test plan: RED → GREEN approach
Command Lifecycle
User-facing commands/flags follow lifecycle states:experimental- Early development, may changestable- Production-ready, backward compatibledeprecated- Scheduled for removal, migration path providedremoved- No longer available
- Warning text in help/output
- Tests covering old and new behavior
- Changelog entry with upgrade path
Security
Reporting Security Issues
Do NOT open public GitHub issues for security vulnerabilities. Report privately using GitHub Security Advisories: https://github.com/rudrankriyam/App-Store-Connect-CLI/security/advisories/new If you can’t use GitHub Security Advisories, contact the maintainer: https://github.com/rudrankriyamWhat to Include
- Clear description of vulnerability and potential impact
- Steps to reproduce (proof-of-concept if possible)
- Affected versions and platforms (macOS/Linux, Go version, etc.)
Supported Versions
Security updates are provided for:- Latest stable release
mainbranch
Wall of Apps
Wall content is generated bymake update-wall-of-apps. The generator reads docs/wall-of-apps.json and updates the Wall snippet in README.md.
Add Your App
- Fork the repository
- Run:
This updates
docs/wall-of-apps.jsonand syncsREADME.mdin one step. - Alternative: Edit
docs/wall-of-apps.jsondirectly, then run: - Commit all generated changes:
docs/wall-of-apps.jsonREADME.md
- Open a PR
Format
iOS, macOS, watchOS, tvOS, visionOS, Android, Web.
Note: If you only change the Wall table in README.md without updating docs/wall-of-apps.json, CI will fail the Wall generation check.
Additional Resources
Documentation
docs/GO_STANDARDS.md- Go coding standardsdocs/TESTING.md- Testing patterns and conventionsdocs/CONTRIBUTING.md- Detailed CLI development notesdocs/API_NOTES.md- API quirks and behaviorsCONTRIBUTING.md- This guide (root)
API Reference
- OpenAPI snapshot:
docs/openapi/latest.json - Endpoint index:
docs/openapi/paths.txt - API docs: https://sosumi.ai/documentation/appstoreconnectapi/
Getting Help
If you need help:- Check existing issues: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues
- Read documentation: Command reference, API notes, testing guide
- Ask in discussions: Open a GitHub discussion
- Open an issue: If you’ve found a bug or have a feature request
