We love your input! We want to make contributing to SDGScript as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
SDGScript aims to make programming more sustainable and socially responsible by integrating the UN Sustainable Development Goals into the development process. Every contribution helps build tools that promote environmental awareness and social impact in software development.
We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.
Fork the repository and create your branch from main.
- If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Follow our coding standards (see below).
npm install
npm run build
npm test
npm run lintPull requests are the best way to propose changes to the codebase. We actively welcome your pull requests:
- Fork the repo and create your branch from
main. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue that pull request!
- Use TypeScript for all new code
- Follow existing code style and patterns
- Use meaningful variable and function names
- Add JSDoc comments for public APIs
- Include SDGs annotations where appropriate
/**
* @sdg Goal13 ClimateAction
* @carbonBudget 0.5kWh
* @description Efficiently process climate data
*/
function processClimateData(data: ClimateData[]): ProcessedData {
// Implementation
}We follow the Conventional Commits specification:
feat: add new SDG annotation parser
fix: resolve memory leak in resource tracker
docs: update contributing guidelines
test: add unit tests for analyzer
When contributing code, consider the environmental and social impact:
- ⚡ Energy Efficiency: Optimize algorithms for lower power consumption
- 🌱 Resource Conservation: Minimize memory usage and network calls
- ♿ Accessibility: Ensure features work for all users
- 📚 Education: Include clear documentation and examples
We use GitHub issues to track public bugs. Report a bug by opening a new issue.
Great Bug Reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- Be specific!
- Give sample code if you can
- What you expected would happen
- What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
We welcome feature requests! Please use our feature request template and include:
- SDGs Alignment: How does this feature contribute to sustainable development?
- Use Case: Real-world scenarios where this would be useful
- Implementation Ideas: Any thoughts on how it could be implemented
- Alternatives: Other solutions you've considered
We use labels to categorize and prioritize issues:
bug- Something isn't workingenhancement- New feature or requestdocumentation- Improvements or additions to documentationgood first issue- Good for newcomers
sdg:goal7- Clean Energy relatedsdg:goal13- Climate Action relatedsdg:goal4- Education relatedsdg:goal5- Gender Equality relatedsdg:goal12- Responsible Consumption related
priority:high- Critical issuespriority:medium- Important but not urgentpriority:low- Nice to have
Understanding the project structure will help you contribute effectively:
sdgscript/
├── packages/
│ ├── core/ # AST analysis and transformation
│ ├── cli/ # Command-line interface
│ ├── eslint-plugin/ # ESLint integration
│ ├── runtime/ # Runtime monitoring
│ └── vscode-extension/ # VS Code extension
├── examples/ # Usage examples
├── docs/ # Documentation
└── .github/ # GitHub templates and workflows
We maintain high test coverage to ensure reliability:
# Run all tests
npm test
# Run tests with coverage
npm run test:coverage
# Run specific test suite
npm run test packages/core
# Run integration tests
npm run test:integration- Unit Tests: Test individual functions and classes
- Integration Tests: Test component interactions
- CLI Tests: Test command-line interface
- Example Tests: Verify examples work correctly
Good documentation is crucial for adoption:
- Code Comments: Use JSDoc for all public APIs
- README Updates: Keep installation and usage instructions current
- Examples: Add practical examples for new features
- API Documentation: Update type definitions and descriptions
Releases are handled by maintainers:
- Version bump following Semantic Versioning
- Update CHANGELOG.md
- Create GitHub release with release notes
- Publish to npm registry
- Update documentation
By submitting a pull request or contribution, you agree to the following:
You grant the project founder a non-exclusive, irrevocable, worldwide, royalty-free license to use, modify, sublicense, and relicense your contribution, including the right to incorporate it into dual-licensed or commercial versions of the project.
This ensures that the project can grow sustainably while preserving creator rights.
If you are contributing on behalf of a company or organization, please contact us in advance.
- 🗣️ GitHub Discussions: For questions and general discussion
- 🐛 GitHub Issues: For bug reports and feature requests
- 📧 Email: jobs.fumiya@pm.me for private inquiries
By contributing, you agree that your contributions will be licensed under the MIT License.
Contributors are recognized in:
- The project README
- Release notes
- GitHub contributors list
- Optional mention in project documentation
Thank you for helping make software development more sustainable! 🌍✨