Skip to content

Commit 56577bf

Browse files
authored
Improve the README and add CONTRIBUTING.md (#31)
* Add contributing.md * Update README * Update Cargo.toml * Fix Getting Started in README
1 parent b85f3c8 commit 56577bf

File tree

3 files changed

+187
-29
lines changed

3 files changed

+187
-29
lines changed

CONTRIBUTING.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Contributing
2+
3+
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.
4+
5+
<!-- MarkdownTOC autolink="true" style="ordered" indent=" " -->
6+
7+
- [Assumptions](#assumptions)
8+
- [How to Contribute](#how-to-contribute)
9+
- [Development Workflow](#development-workflow)
10+
- [Git Guidelines](#git-guidelines)
11+
12+
<!-- /MarkdownTOC -->
13+
14+
## Assumptions
15+
16+
1. **You're familiar with [GitHub](https://github.com) and the [Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)(PR) workflow.**
17+
2. **You've read the MeiliSearch [documentation](https://docs.meilisearch.com) and the [README](/README.md).**
18+
3. **You know about the [MeiliSearch community](https://docs.meilisearch.com/resources/contact.html). Please use this for help.**
19+
20+
## How to Contribute
21+
22+
1. Make sure that the contribution you want to make is explained or detailed in a GitHub issue! Find an [existing issue](https://github.com/meilisearch/meilisearch-rust/issues/) or [open a new one](https://github.com/meilisearch/meilisearch-rust/issues/new).
23+
2. Once done, [fork the meilisearch-rust repository](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) in your own GitHub account. Ask a maintainer if you want your issue to be checked before making a PR.
24+
3. [Create a new Git branch](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-and-deleting-branches-within-your-repository).
25+
4. Review the [Development Workflow](#workflow) section that describes the steps to maintain the repository.
26+
5. Make your changes.
27+
6. [Submit the branch as a PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork) pointing to the `master` branch of the main meilisearch-rust repository. A maintainer should comment and/or review your Pull Request within a few days. Although depending on the circumstances, it may take longer.<br>
28+
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](https://github.com/meilisearch/meilisearch-rust/releases/).
29+
30+
## Development Workflow
31+
32+
### Tests
33+
34+
All the tests are documentation tests.<br>
35+
Since they are all making operations on the MeiliSearch server, running all the tests simultaneously would cause panics.
36+
37+
To run the tests one by one, run:
38+
39+
```bash
40+
# Tests
41+
$ docker pull getmeili/meilisearch:latest # Fetch the latest version of MeiliSearch image from Docker Hub
42+
$ docker run -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey --no-analytics
43+
$ cargo test -- --test-threads=1
44+
```
45+
46+
Each PR should pass the tests to be accepted.
47+
48+
### Release Process
49+
50+
MeiliSearch tools follow the [Semantic Versioning Convention](https://semver.org/).
51+
52+
#### Automated Changelogs
53+
54+
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](https://github.com/meilisearch/meilisearch-rust/releases). 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.
55+
56+
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.
57+
58+
About this automation:
59+
- As the draft release description is generated on every push on `master`, don't change it manually until the final release publishment.
60+
- 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).
61+
- 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](https://github.com/meilisearch/MeiliSearch) is stable.
62+
- 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.
63+
64+
*More information about the [Release Drafter](https://github.com/release-drafter/release-drafter), used to automate these steps.*
65+
66+
#### How to Publish the Release
67+
68+
Make a PR modifying the file [`Cargo.toml`](/Cargo.toml) with the right version.
69+
70+
```ruby
71+
version = "X.X.X"
72+
```
73+
74+
Once the changes are merged on `master`, you can publish the current draft release via the [GitHub interface](https://github.com/meilisearch/meilisearch-rust/releases).
75+
76+
A GitHub Action will be triggered and push the package to [crates.io](https://crates.io/crates/meilisearch-sdk).
77+
78+
## Git Guidelines
79+
80+
### Git Branches
81+
82+
All changes must be made in a branch and submitted as PR.
83+
We do not enforce any branch naming style, but please use something descriptive of your changes.
84+
85+
### Git Commits
86+
87+
As minimal requirements, your commit message should:
88+
- be capitalized
89+
- not finish by a dot or any other punctuation character (!,?)
90+
- start with a verb so that we can read your commit message this way: "This commit will ...", where "..." is the commit message.
91+
e.g.: "Fix the home page button" or "Add more tests for create_index method"
92+
93+
We don't follow any other convention, but if you want to use one, we recommend [this one](https://chris.beams.io/posts/git-commit/).
94+
95+
### GitHub Pull Requests
96+
97+
Some notes on GitHub PRs:
98+
- [Convert your PR as a draft](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/changing-the-stage-of-a-pull-request) if your changes are a work in progress: no one will review it until you pass your PR as ready for review.<br>
99+
The draft PR can be very useful if you want to show that you are working on something and make your work visible.
100+
- The branch related to the PR must be **up-to-date with `master`** before merging. You need to [rebase your branch](https://gist.github.com/curquiza/5f7ce615f85331f083cd467fc4e19398) if it is not.
101+
- All PRs must be reviewed and approved by at least one maintainer.
102+
- All PRs have to be **squashed and merged**.
103+
- 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 changlogs](https://github.com/meilisearch/meilisearch-rust/releases/).
104+
105+
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 ❤️

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ name = "meilisearch-sdk"
33
version = "0.2.0"
44
authors = ["Mubelotix <[email protected]>"]
55
edition = "2018"
6-
description = "MeiliSearch Rust SDK. MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine."
6+
description = "Rust wrapper for the MeiliSearch API. MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine."
77
license = "MIT"
88
readme = "README.md"
9-
repository = "https://github.com/Mubelotix/meilisearch-sdk"
9+
repository = "https://github.com/meilisearch/meilisearch-sdk"
1010

1111
[dependencies]
1212
serde_json = "1.0"

README.md

Lines changed: 80 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,80 @@
1-
# meilisearch-sdk (WIP) [![Latest Version]][crates.io]
2-
[Latest Version]: https://img.shields.io/crates/v/meilisearch-sdk
3-
[crates.io]: https://crates.io/crates/meilisearch-sdk
1+
<p align="center">
2+
<img src="https://res.cloudinary.com/meilisearch/image/upload/v1587402338/SDKs/meilisearch_rust.svg" alt="MeiliSearch-Dotnet" width="200" height="200" />
3+
</p>
44

5-
MeiliSearch-sdk is an async client for [MeiliSearch](https://www.meilisearch.com/) written in Rust.
6-
[MeiliSearch](https://www.meilisearch.com/) is a powerful, fast, open-source, easy to use and deploy search engine.
7-
Both searching and indexing are highly customizable.
8-
Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box.
5+
<h1 align="center">MeiliSearch Rust SDK (WIP)</h1>
6+
7+
<h4 align="center">
8+
<a href="https://github.com/meilisearch/MeiliSearch">MeiliSearch</a> |
9+
<a href="https://www.meilisearch.com">Website</a> |
10+
<a href="https://blog.meilisearch.com">Blog</a> |
11+
<a href="https://twitter.com/meilisearch">Twitter</a> |
12+
<a href="https://docs.meilisearch.com">Documentation</a> |
13+
<a href="https://docs.meilisearch.com/faq">FAQ</a>
14+
</h4>
15+
16+
<p align="center">
17+
<a href="https://crates.io/crates/meilisearch-sdk"><img src="https://img.shields.io/crates/v/meilisearch-sdk.svg" alt="crates.io"></a>
18+
<a href="https://github.com/meilisearch/meilisearch-rust/actions"><img src="https://github.com/meilisearch/meilisearch-rust/workflows/Test/badge.svg?branch=master" alt="Tests"></a>
19+
<a href="https://github.com/meilisearch/meilisearch-rust/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-informational" alt="License"></a>
20+
<a href="https://github.com/meilisearch/MeiliSearch/discussions" alt="Discussions"><img src="https://img.shields.io/badge/github-discussions-red" /></a>
21+
<a href="https://slack.meilisearch.com"><img src="https://img.shields.io/badge/slack-MeiliSearch-blue.svg?logo=slack" alt="Slack"></a>
22+
</p>
23+
24+
<p align="center">⚡ Lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine MeiliSearch client written in Rust</p>
25+
26+
**MeiliSearch Rust** is a client for **MeiliSearch** written in Rust. **MeiliSearch** is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box.
927

1028
### Table of Contents
29+
1130
- [🔧 Installation](#-installation)
1231
- [🚀 Getting Started](#-getting-started)
13-
- [🌐 Running in the browser with WASM](#-running-in-the-browser-with-wasm)
1432
- [🤖 Compatibility with MeiliSearch](#-compatibility-with-meilisearch)
15-
- [Running the tests](#running-the-tests)
33+
- [🎬 Examples](#-examples)
34+
- [🌐 Running in the Browser with WASM](#-running-in-the-browser-with-wasm)
35+
- [⚙️ Development Workflow and Contributing](#️-development-workflow-and-contributing)
1636

1737
## 🔧 Installation
1838

19-
This crate requires a MeiliSearch server to run. See [here](https://docs.meilisearch.com/guides/advanced_guides/installation.html#download-and-launch) to install and run MeiliSearch.
39+
To use `meilisearch-sdk`, add this to your `Cargo.toml`:
2040

21-
Then, put `meilisearch-sdk = "0.1"` in your Cargo.toml, as usual.
41+
```toml
42+
[dependencies]
43+
meilisearch-sdk = "0.2"
44+
```
2245

23-
Since this crate is async, you have to run your program in the tokio runtime (cf the example below). You will need `tokio = { version = "0.2", features=["macros"] }` in your Cargo.toml. When targetting Wasm, the browser will replace tokio.
46+
The following optional dependencies may also be useful:
47+
48+
```toml
49+
tokio = { version = "0.2", features = ["macros"] }
50+
serde = { version="1.0", features = ["derive"] }
51+
```
52+
53+
Since this crate is async, you have to run your program in the [tokio](https://crates.io/crates/tokio) runtime. When targetting Wasm, the browser will replace tokio.
2454

2555
Using this crate is possible without [serde](https://crates.io/crates/serde), but a lot of features require serde.
26-
Add `serde = {version="1.0", features=["derive"]}` in your Cargo.toml.
56+
57+
### Run a MeiliSearch Instance
58+
59+
This crate requires a MeiliSearch server to run.
60+
61+
There are many easy ways to [download and run a MeiliSearch instance](https://docs.meilisearch.com/guides/advanced_guides/installation.html#download-and-launch).
62+
63+
For example, if you use Docker:
64+
```bash
65+
$ docker pull getmeili/meilisearch:latest # Fetch the latest version of MeiliSearch image from Docker Hub
66+
$ docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey
67+
```
68+
69+
NB: you can also download MeiliSearch from **Homebrew** or **APT**.
70+
2771

2872
## 🚀 Getting Started
2973

3074
Here is a quickstart for a search request (please follow the [installation](#-installation) steps before)
3175

3276
```rust
33-
use meilisearch_sdk::{document::*, indexes::*, client::*, search::*};
77+
use meilisearch_sdk::{document::*, client::*, search::*};
3478
use serde::{Serialize, Deserialize};
3579

3680
#[derive(Serialize, Deserialize, Debug)]
@@ -54,7 +98,7 @@ async fn main() {
5498
let client = Client::new("http://localhost:7700", "masterKey");
5599

56100
// Get the index called "books"
57-
let mut books = client.get_or_create("books").await.unwrap();
101+
let books = client.get_or_create("books").await.unwrap();
58102

59103
// Add some books in the index
60104
books.add_documents(&[
@@ -78,23 +122,32 @@ Output:
78122
[Book { book_id: 4, title: "Harry Potter and the Half-Blood Prince" }]
79123
```
80124

81-
## 🌐 Running in the browser with WASM
125+
## 🤖 Compatibility with MeiliSearch
82126

83-
This crate fully supports WASM. The only difference between the WASM and the native version is that the native version has one more variant (Error::Http) in the Error enum. That should not matter so much but we could add this variant in WASM too.
84-
However, making a program intended to run in a web browser requires a **very** different design than a CLI program. To see an example of a simple Rust web app using meilisearch, see the [tutorial (not available yet)]().
127+
This package is compatible with the following MeiliSearch versions:
128+
- `v0.12.X`
129+
- `v0.11.X`
85130

86-
WARNING: `meilisearch-sdk` will panic if no Window is available (ex: Web extension).
131+
## 🎬 Examples
87132

88-
## 🤖 Compatibility with MeiliSearch
133+
_TODO_
134+
135+
## 🌐 Running in the Browser with WASM
136+
137+
This crate fully supports WASM.
138+
139+
The only difference between the WASM and the native version is that the native version has one more variant (`Error::Http`) in the Error enum. That should not matter so much but we could add this variant in WASM too.
140+
141+
However, making a program intended to run in a web browser requires a **very** different design than a CLI program. To see an example of a simple Rust web app using MeiliSearch, see the [tutorial (not available yet)]().
142+
143+
WARNING: `meilisearch-sdk` will panic if no Window is available (ex: Web extension).
89144

90-
This crate is currently supporting MeiliSearch v11.0 and will be maintained.
145+
## ⚙️ Development Workflow and Contributing
91146

92-
## Running the tests
147+
Any new contribution is more than welcome in this project!
93148

94-
All the tests are documentation tests.
95-
Since they are all making operations on the MeiliSearch server, running all the tests simultaneously would cause panics.
96-
To run the tests one by one, run `cargo test -- --test-threads=1`.
149+
If you want to know more about the development workflow or want to contribute, please visit our [contributing guidelines](/CONTRIBUTING.md) for detailed instructions!
97150

98-
Current version: 0.1.4
151+
<hr>
99152

100-
License: MIT
153+
**MeiliSearch** provides and maintains many **SDKs and Integration tools** like this one. We want to provide everyone with an **amazing search experience for any kind of project**. If you want to contribute, make suggestions, or just know what's going on right now, visit us in the [integration-guides](https://github.com/meilisearch/integration-guides) repository.

0 commit comments

Comments
 (0)