4.0 KiB
Contributing to SDKMAN! CLI
Thank you for your interest in contributing to SDKMAN! CLI. We greatly value the feedback and contributions of our users.
Important Notice
This project is in maintenance mode. We are only accepting bug fixes at this time, as SDKMAN! CLI is being rewritten in Rust. New features and enhancements will not be accepted.
Code of Conduct
This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to info@sdkman.io.
How to Contribute
Before You Start
We distinguish between:
- Bug Reports: Issues with existing functionality
- Support Requests: Questions about usage
We prefer to have a conversation on SDKMAN Discord before creating new issues if you're unsure how to categorize your request. Join our Help channel to discuss.
Reporting Bugs
- Search existing issues to avoid duplicates
- Use the issue template when creating a new issue via our GitHub Issue Tracker
- Provide detailed information including:
- Steps to reproduce the issue
- Expected behavior
- Actual behavior
- Your environment (OS, shell, Java version)
- Relevant logs or error messages
Note: Issues that don't follow the template may be closed.
Submitting Pull Requests
Pull requests are always welcome but must follow these guidelines:
Prerequisites
- Link to an issue: Every PR must reference a valid GitHub issue
- Discuss first: Talk about your proposed fix on Discord or in the issue before starting work
- Keep it small: Small, focused PRs are strongly preferred over large changes
- Include tests: Each PR should include passing tests that prove its validity (where feasible)
Development Setup
-
Install required tools:
sdk env install # Install JDK 11 from .sdkmanrc sdk env # Switch to correct SDK versions -
Verify your setup:
./gradlew test
Development Workflow
- Fork the repository and create a new branch from
master - Make your changes following our code standards
- Write or update tests to cover your changes
- Run the test suite to ensure everything passes:
./gradlew test - Commit your changes using clear, descriptive commit messages
- Push to your fork and submit a pull request
Pull Request Guidelines
- Fill in the PR template completely
- Link back to the GitHub issue by replacing
#XXXwith the issue number - Ensure all tests pass
- Keep commits focused and atomic
- Write clear commit messages in imperative mood (e.g., "fix user login bug")
- Be responsive to feedback during code review
Testing Requirements
- All bug fixes must include a test that would have caught the bug
- Tests should follow the existing Cucumber BDD pattern
- Tests should cover both happy path and edge cases
- Run
./gradlew testto verify all tests pass
Code Standards
- Follow the existing code style in bash scripts
- Use meaningful variable and function names
- Add comments for complex logic
- Avoid introducing new dependencies without discussion
- Ensure backward compatibility
Getting Help
- Join our Discord server for questions
- Check existing issues and discussions
- Read the documentation in the repository
Project Structure
src/main/bash/- Core bash scripts implementing SDKMAN commandssrc/test/groovy/- Groovy test code using Spock frameworksrc/test/resources/features/- Cucumber feature files (BDD tests)
Recognition
Contributors will be recognized in our release notes and commit history. We appreciate your efforts to make SDKMAN! better!
Questions?
If you have questions about contributing, feel free to ask on Discord or open a discussion on GitHub.