Contributing guidelines

Codacy quality grade Codacy code coverage

Thanks for taking the time to contribute!

This project is simpler than most, so it’s a good place to start contributing to the open source community, even if you’re a newbie.

We are accepting these sorts of changes and requests:

We are not accepting things that should be done in your own wrapper code:

If you have general interest in contributing, but are not sure where to start, please contact us and we can help to find work in an area of interest.

Reporting bugs and feature requests

If you suspect a problem, please report a bug Issue with a detailed description of the problem, steps to reproduce, code samples, and any reference materials. For enhancements, create a feature Issue.

Use the Discussions area for general ideation and help/usage questions.

Project management

Developing

Testing

Performance benchmarking

Running the performance benchmark application in Release mode will produce benchmark performance data that we include on our documentation site.

# from /tests/performance folder
# run all performance benchmarks
dotnet run -c Release

# run individual performance benchmark
dotnet run -c Release --filter *.GetAdx

Documentation

This site uses Jekyll construction with Front Matter. Our documentation site code is in the docs folder. Build the site locally to test that it works properly. See Ruby Jekyll documentation for initial setup.

# from /docs folder
bundle install
bundle exec jekyll serve --livereload

The site will be available at http://127.0.0.1:4000.

When adding or updating indicators:

Accessibility testing

# from /docs folder
npx pa11y-ci \
  --yes
  --sitemap http://127.0.0.1:4000/sitemap.xml \
  --config ./.pa11yci

Submitting changes

By submitting changes to this repo you are also acknowledging and agree to the terms in both the Developer Certificate of Origin (DCO) 1.1 and the Apache 2.0 license. These are standard open-source terms and conditions.

When ready, submit a Pull Request with a clear description of what you’ve done and why it’s important.

Pull Request naming convention

Pull Request titles must follow the Conventional Commits format: type: Subject where:

Examples: feat: Add RSI indicator, fix: Resolve calculation error in MACD, docs: Update API documentation

Always write a clear log message for your commits. One-line messages are fine for most changes.

After a Pull Request is reviewed, accepted, and [squash] merged to the default branch, we may batch changes before publishing a new package version to the public NuGet repository. Please be patient with turnaround time.

Code reviews and administration

If you want to contribute administratively, do code reviews, or provide general user support, we’re also currently seeking a few core people to help. Please contact us if interested.

Standards and design guidelines

GitHub Copilot and AI development

This repository is optimized for GitHub Copilot and coding agents with:

When using GitHub Copilot:

Versioning

We use GitVersion for automated semantic versioning. Version numbers are automatically generated based on branch names, commit messages, and Git history.

Component Format Description
Major x.-.- Breaking changes. Use +semver: major in commit message.
Minor -.x.- New features, backward compatible. Use +semver: minor in commit message.
Patch -.-.x Bug fixes, documentation. Use +semver: patch (or default auto-increment).
Suffix -label.N Pre-release identifier. Automatically set based on branch and build type.

Branch-based versioning

GitVersion automatically determines version suffixes based on the branch:

Controlling version increments

Add semver tags to PR merge commit messages to control version bumps:

Example merge commit: feat: Add new indicator (+semver: minor)

Creating preview releases from stable branches

To publish a preview/pre-release version from main or v2 (normally stable branches), create a Git tag with the desired suffix before triggering deployment:

# Create preview tag
git tag 2.8.0-preview.1
git push origin 2.8.0-preview.1

# Then trigger manual workflow deployment with preview=true

GitVersion will honor the tag’s pre-release suffix. This approach works for any pre-release label (preview, rc, beta, alpha).

Package deployment and tagging

Packages are deployed via two separate GitHub Actions workflows:

CI Package deploy (automatic)

Trigger: Push to main or v* branches

Workflow: .github/workflows/deploy-package-github.yml

Production package deploy (manual)

Trigger: Creating a GitHub Release

Workflow: .github/workflows/deploy-package-nuget.yml

Version examples

Scenario Trigger Version Registry Notes
CI build Push to main 2.7.2-ci.1234 GitHub Packages Run 1234
CI build Push to main 2.7.2-ci.1235 GitHub Packages Run 1235 (next commit)
CI build Push to v3 3.0.0-ci.567 GitHub Packages Run 567
Production Release tag 2.8.0 2.8.0 nuget.org Stable version
Production Release tag 3.0.0-preview.2 3.0.0-preview.2 nuget.org Preview version
Draft release Release tag 2.8.1 (draft) 2.8.1 None (dry-run) Build only, no deploy

For technical details, see:

License

License

This repository uses a standard Apache 2.0 open-source license. It enables open-source community development by protecting the project and contributors from certain legal risks while allowing the widest range of uses, including in closed source software. Please review the license before using or contributing to the software.

Contact info

Start a new discussion or submit an issue if it is publicly relevant. You can also direct message @daveskender.

Thanks, Dave Skender