Contributing Guide
How to contribute to the App Store Connect CLI projectThanks for your interest in contributing to the App Store Connect CLI! This guide will help you get started with development, testing, and submitting contributions.
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