Thank you for considering contributing to CardScannerApp! Please read this guide to understand our development process and how you can contribute effectively.
- Use the GitHub Issues tracker
- Include steps to reproduce, expected behavior, and actual behavior
- Add screenshots if applicable
- Label as "bug"
- Use the GitHub Issues tracker
- Label as "enhancement"
- Describe the feature and its benefits
- Consider if it aligns with the project roadmap
- Fork the repository
- Create a new branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests to ensure nothing is broken
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Node.js v18 or later
- npm or yarn
- Xcode (for iOS)
- Android Studio (for Android)
- Git
git clone https://github.com/Sensible-Analytics/CardScannerApp.git
cd CardScannerApp
npm install
cd ios && pod install && cd ..We use Semantic Versioning (MAJOR.MINOR.PATCH):
- MAJOR: Incompatible API changes or major redesigns
- MINOR: New features in backward-compatible manner
- PATCH: Bug fixes and minor improvements
-
Update Version Numbers
- Update
package.jsonversion - Update
app.jsonversion - Update
ios/andandroid/version if needed
- Update
-
Prepare Release Notes
- Document changes in release notes
- Update CHANGELOG.md if maintained
-
Generate Release Artifacts
# Build iOS release (requires Xcode) npm run release:ios # Build Android release npm run release:android # Verify artifacts npm run release:verify
-
Create Git Tag and Release
git tag -a v1.0.0 -m "Version 1.0.0" git push origin v1.0.0 -
Submit to App Stores
- Upload to App Store Connect (iOS)
- Upload to Google Play Console (Android)
- Complete store listings
- Submit for review
See app-store-listing.md for detailed store listing requirements and guidelines.
Required assets:
- Screenshots for all required device sizes
- App icons in various sizes
- Privacy policy URL
- Store descriptions and keywords
- Feature graphics
Assets should be placed in the store-assets/ directory structure.
Our CI/CD pipeline includes:
- CI Workflow: Runs tests on every push and pull request
- Android Build: Builds and tests Android app
- iOS Build: Builds and tests iOS app
- Release Workflow: Creates GitHub releases with artifacts when tags are pushed
To trigger a release:
- Ensure all tests pass on main branch
- Create and push a version tag:
git tag -a v1.0.0 -m "Version 1.0.0" - Push tag:
git push origin v1.0.0 - GitHub Actions will automatically build and create a release
# Unit tests
npm test
# E2E tests (iOS)
npm run detox:test -- --configuration ios.sim
# E2E tests (Android)
npm run detox:test -- --configuration android.emu
# Linting
npm run lint
# TypeScript
npm run tsc --noEmit- Use strict mode (enabled in tsconfig.json)
- Prefer interfaces over types for object shapes
- Use functional components with hooks
- Export interfaces/types when they're public
- Use StyleSheet.create() for styles
- Always provide accessibilityLabel for interactive elements
- Use Platform.OS for platform-specific code when needed
- Use FlatList for long lists of data
- Write unit tests for utility functions
- Write E2E tests for user flows
- Follow AAA pattern: Arrange, Act, Assert
- Mock external dependencies appropriately
- Write clear, descriptive commit messages
- Reference issue numbers when applicable (e.g., "Fixes #123")
- Keep commits focused on single changes
- Use conventional commit format when possible
- All PRs require at least one approval
- CI must pass (tests, lint, build)
- No breaking changes without discussion
- Documentation updated when needed
- Squash and merge preferred for feature branches
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
If you need help:
- Check existing issues for similar problems
- Ask in the GitHub Discussions
- Refer to the documentation in /docs
- As a last resort, open a new issue
Thank you for contributing to CardScannerApp!