Skip to content

Contributing to FuryMesh

Thank you for your interest in contributing to FuryMesh! This document provides guidelines and instructions for contributing to the project.

Code of Conduct

By participating in this project, you agree to abide by our Code of Conduct. Please read it before contributing.

Getting Started

Prerequisites

  • Go 1.18 or higher
  • Git
  • Basic understanding of P2P networks and distributed systems

Setting Up the Development Environment

  1. Fork the repository on GitHub
  2. Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/furymesh.git
cd furymesh
  1. Add the original repository as an upstream remote:
git remote add upstream https://github.com/TFMV/furymesh.git
  1. Install dependencies:
go mod download

Development Workflow

Branching Strategy

  • main - stable releases
  • develop - development branch
  • Feature branches - named as feature/your-feature-name
  • Bugfix branches - named as bugfix/issue-description

Creating a New Feature

  1. Sync your local repository with the upstream:
git checkout develop
git pull upstream develop
  1. Create a new branch for your feature:
git checkout -b feature/your-feature-name
  1. Make your changes and commit them with clear, descriptive messages:
git commit -m "Add feature: description of your feature"
  1. Push your branch to your fork:
git push origin feature/your-feature-name
  1. Create a Pull Request from your fork to the develop branch of the main repository

Code Style

FuryMesh follows the standard Go style guidelines. Please ensure your code:

  • Is formatted with gofmt
  • Passes golint and go vet
  • Includes appropriate comments and documentation
  • Has meaningful variable and function names

Testing

All new features and bug fixes should include tests. Run the test suite with:

go test ./...

For more comprehensive testing, including integration tests:

make test

Pull Request Process

  1. Ensure your code follows the style guidelines and passes all tests
  2. Update the documentation if necessary
  3. Include a clear description of the changes in your PR
  4. Link any related issues in your PR description
  5. Wait for a maintainer to review your PR
  6. Address any feedback from the review
  7. Once approved, a maintainer will merge your PR

Documentation

Documentation is crucial for FuryMesh. If you're adding a new feature, please update:

  • Code comments
  • README.md (if applicable)
  • Documentation in the docs/ directory

To build and preview the documentation locally:

cd python/furymesh
mkdocs serve

Then visit http://localhost:8000 in your browser.

Reporting Bugs

When reporting bugs, please include:

  • A clear, descriptive title
  • Steps to reproduce the issue
  • Expected behavior
  • Actual behavior
  • FuryMesh version
  • Operating system and version
  • Any relevant logs or error messages

Feature Requests

Feature requests are welcome! Please provide:

  • A clear description of the feature
  • The motivation behind the feature
  • Potential implementation details (if you have ideas)

Community

Join our community channels to discuss development:

License

By contributing to FuryMesh, you agree that your contributions will be licensed under the project's MIT License.