This document contains information and guidelines about contributing to this project. Please read it before you start participating.
See also: Contributor Covenant Code of Conduct
Detailed documentation for contributors is available in the Contributing folder:
- Architecture Overview - Core components and system design
- Macro Processing Pipeline - Class hierarchy and code generation
- Coding Strategies - Implementation patterns and helper systems
- Build Plugin System - Plugin architecture and integration
- Testing and Development - Testing methodology and best practices
- Troubleshooting - Common issues and solutions
You can contribute by fixing bugs or adding new features. For larger code changes, we first recommend:
- Review the Architecture Overview to understand the system
- Discuss your proposed changes in our Github issues
- Read the relevant documentation in the Contributing folder
- Submit your pull request with appropriate tests (see Testing)
- Linux, Mac OS (preferred), or Windows.
- Git
- Swift
- Optional
- Xcode and CocoaPods, to test CocoaPods integration
- Node, to use helper scripts in package.json folder.
This repository contains necessary configurations and extensions required for development in VSCode.
For development in Xcode you have to set METACODABLE_CI environment variable. You can do so by launching Xcode with following command:
open $PATH_TO_XCODE_INSTALLATION --env METACODABLE_CI=1
# i.e. open /Applications/Xcode.app --env METACODABLE_CI=1Important
Make sure that Xcode is not running before this command executed. Otherwise, this command will have no effect.
GitHub action is already setup to run tests on pull requests targeting main branch. For detailed testing instructions and methodology, see our Testing Guide.
To run tests locally and reduce usage of GitHub runners:
| Test category | With Node | Manually |
|---|---|---|
| SPM integration | Run npm run test |
Run METACODABLE_CI=true swift test |
| CocoaPods integration (Requires Xcode) | Run npm run pod-lint |
Run pod lib lint --no-clean --allow-warnings |
By making a contribution to this project, I certify that:
- The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
- The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
- The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
- I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.