First of all, thank you for contributing to MeiliSearch! The goal of this document is to provide everything you need to know in order to contribute to MeiliSearch and its different integrations.
- You're familiar with GitHub and the Pull Request(PR) workflow.
- You've read the MeiliSearch documentation and the README.
- You know about the MeiliSearch community. Please use this for help.
- Make sure that the contribution you want to make is explained or detailed in a GitHub issue! Find an existing issue or open a new one.
- Once done, fork the meilisearch-ruby repository in your own GitHub account. Ask a maintainer if you want your issue to be checked before making a PR.
- Create a new Git branch.
- Review the Development Workflow section that describes the steps to maintain the repository.
- Make your changes.
- Submit the branch as a PR pointing to the
master
branch of the main meilisearch-ruby repository. A maintainer should comment and/or review your Pull Request within a few days. Although depending on the circumstances, it may take longer.
We do not enforce a naming convention for the PRs, but please use something descriptive of your changes, having in mind that the title of your PR will be automatically added to the next release changelog.
$ bundle install
Each PR should pass the tests to be accepted.
# Tests
$ docker pull getmeili/meilisearch:latest # Fetch the latest version of MeiliSearch image from Docker Hub
$ docker run -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey --no-analytics=true
$ bundle exec rspec
To launch a specific folder or file:
$ bundle exec rspec spec/meilisearch/index/base_spec.rb
To launch a single test in a specific file:
$ bundle exec rspec spec/meilisearch/index/search_spec.rb -e 'does a basic search in index'
Each PR should pass the linter to be accepted.
# Check the linter errors
$ bundle exec rubocop lib/ spec/
# Auto-correct the linter errors
$ bundle exec rubocop -a lib/ spec/
If you think the remaining linter errors are acceptable, do not add any rubocop
in-line comments in the code.
This project uses a rubocop_todo.yml
file that is generated. Do not modify this file manually.
To update it, run the following command:
$ bundle exec rubocop --auto-gen-config
You can use the byebug
gem.
To create a breakpoint, just add this line in you code:
...
byebug
...
The byebug
gem is already imported in all the spec files.
But if you want to use it in the source files you need to add this line at the top of the file:
require 'byebug'
MeiliSearch tools follow the Semantic Versioning Convention.
For each PR merged on master
, a GitHub Action is running and updates the next release description as a draft release in the GitHub interface. If you don't have the right access to this repository, you will not be able to see the draft release until the release is published.
The draft release description is therefore generated and corresponds to all the PRs titles since the previous release. This means each PR should only do one change and the title should be descriptive of this change.
About this automation:
- As the draft release description is generated on every push on
master
, don't change it manually until the final release publishment. - If you don't want a PR to appear in the release changelogs: add the label
skip-changelog
. We suggest removing PRs updating the README or the CI (except for big changes). - If the changes you are doing in the PR are breaking: add the label
breaking-change
. In the release tag, the minor will be increased instead of the patch. The major will never be changed until MeiliSearch is stable. - If you did any mistake, for example the PR is already closed but you forgot to add a label or you misnamed your PR, don't panic: change what you want in the closed PR and run the job again.
More information about the Release Drafter, used to automate these steps.
Make a PR modifying the file lib/meilisearch/version.rb
with the right version.
VERSION = 'X.X.X'
Once the changes are merged on master
, you can publish the current draft release via the GitHub interface.
A GitHub Action will be triggered and push the package to RubyGems.
All changes must be made in a branch and submitted as PR. We do not enforce any branch naming style, but please use something descriptive of your changes.
As minimal requirements, your commit message should:
- be capitalized
- not finish by a dot or any other punctuation character (!,?)
- start with a verb so that we can read your commit message this way: "This commit will ...", where "..." is the commit message. e.g.: "Fix the home page button" or "Add more tests for create_index method"
We don't follow any other convention, but if you want to use one, we recommend this one.
Some notes on GitHub PRs:
- Convert your PR as a draft if your changes are a work in progress: no one will review it until you pass your PR as ready for review.
The draft PR can be very useful if you want to show that you are working on something and make your work visible. - The branch related to the PR must be up-to-date with
master
before merging. Bors will rebase your branch if it is not. Ask a maintainer to run it. - All PRs must be reviewed and approved by at least one maintainer.
- All PRs have to be squashed and merged.
- The PR title should be accurate and descriptive of the changes. The title of the PR will be indeed automatically added to the next release changelogs.
Thank you again for reading this through, we can not wait to begin to work with you if you made your way through this contributing guide ❤️