2015-09-20 13:28:06 +02:00
|
|
|
# servant - A Type-Level Web DSL
|
2014-12-08 10:56:02 +01:00
|
|
|
|
|
|
|
![servant](https://raw.githubusercontent.com/haskell-servant/servant/master/servant.png)
|
|
|
|
|
2015-09-20 14:01:59 +02:00
|
|
|
## Getting Started
|
2014-12-08 10:56:02 +01:00
|
|
|
|
2019-03-02 10:08:03 +01:00
|
|
|
We have a [tutorial](http://docs.servant.dev/en/stable/tutorial/index.html) that
|
2015-09-20 14:01:59 +02:00
|
|
|
introduces the core features of servant. After this article, you should be able
|
|
|
|
to write your first servant webservices, learning the rest from the haddocks'
|
|
|
|
examples.
|
2014-12-08 10:56:02 +01:00
|
|
|
|
2020-06-06 06:30:16 +02:00
|
|
|
The core documentation can be found [here](http://docs.servant.dev/).
|
2015-09-20 14:01:59 +02:00
|
|
|
Other blog posts, videos and slides can be found on the
|
2019-03-02 10:08:03 +01:00
|
|
|
[website](http://www.servant.dev/).
|
2015-08-17 23:50:42 +02:00
|
|
|
|
2015-09-20 14:01:59 +02:00
|
|
|
If you need help, drop by the IRC channel (#servant on freenode) or [mailing
|
|
|
|
list](https://groups.google.com/forum/#!forum/haskell-servant).
|
2015-09-20 13:28:06 +02:00
|
|
|
|
2015-08-17 23:50:42 +02:00
|
|
|
## Contributing
|
|
|
|
|
2016-01-07 00:53:17 +01:00
|
|
|
See `CONTRIBUTING.md`
|
2017-11-07 15:10:46 +01:00
|
|
|
|
|
|
|
## Release process outline (by phadej)
|
|
|
|
|
|
|
|
- Update changelog and bump versions in `master`
|
|
|
|
- `git log --oneline v0.12.. | grep 'Merge pull request'` is a good starting point (use correct previous release tag)
|
2019-02-18 15:58:54 +01:00
|
|
|
- Create a release branch, e.g. `release-0.13`
|
2017-11-07 15:10:46 +01:00
|
|
|
- Release branch is useful for backporting fixes from `master`
|
|
|
|
- Smoke test in [`servant-universe`](https://github.com/phadej/servant-universe)
|
|
|
|
- `git submodule foreach git checkout master` and `git submodule foreach git pull` to get newest of everything.
|
|
|
|
- `cabal new-build --enable-tests all` to verify that everything builds, and `cabal new-test all` to run tests
|
|
|
|
- It's a good idea to separate these steps, as tests often pass, if they compile :)
|
|
|
|
- See `cabal.project` to selectively `allow-newer`
|
|
|
|
- If some packages are broken, on your discretisation there are two options:
|
2020-06-06 06:43:51 +02:00
|
|
|
- Fix them and make PRs: it's a good idea to test against older `servant` version too.
|
2017-11-07 15:10:46 +01:00
|
|
|
- Temporarily comment out broken package
|
|
|
|
- If you make a commit for `servant-universe`, you can use it as submodule in private projects to test even more
|
|
|
|
- When ripples are cleared out:
|
|
|
|
- `git tag -s` the release
|
|
|
|
- `git push --tags`
|
|
|
|
- `cabal sdist` and `cabal upload`
|
2018-01-17 17:53:02 +01:00
|
|
|
|
|
|
|
## travis
|
|
|
|
|
|
|
|
`.travis.yml` is generated using `make-travis-yml` tool, in
|
|
|
|
[multi-ghc-travis](https://github.com/haskell-hvr/multi-ghc-travis) repository.
|
|
|
|
|
|
|
|
To regenerate the script use (*note:* atm you need to comment `doc/cookbook/` packages).
|
|
|
|
|
2019-09-29 13:16:47 +02:00
|
|
|
```sh
|
2018-01-17 17:53:02 +01:00
|
|
|
runghc ~/Documents/other-haskell/multi-ghc-travis/make_travis_yml_2.hs regenerate
|
|
|
|
```
|
|
|
|
|
2020-06-06 06:30:16 +02:00
|
|
|
In case Travis jobs fail due to a dependency failing to build, you can temporarily
|
|
|
|
add `constraints` to the `cabal.project` file, and regenerate the `.travis.yml`.
|
|
|
|
For example, the following will disallow a single `troublemaker-13.37` package version:
|
2018-01-17 17:53:02 +01:00
|
|
|
|
|
|
|
```
|
|
|
|
constraints:
|
|
|
|
troublemaker <13.37 && > 13.37
|
|
|
|
```
|
2019-09-29 13:16:47 +02:00
|
|
|
|
2020-06-06 06:43:51 +02:00
|
|
|
## TechEmpower framework benchmarks
|
2019-09-29 13:16:47 +02:00
|
|
|
|
2020-06-06 06:30:16 +02:00
|
|
|
We develop and maintain the servant TFB entry in https://github.com/haskell-servant/FrameworkBenchmarks/
|
2019-09-29 13:16:47 +02:00
|
|
|
|
|
|
|
To verify (i.e. compile and test that it works)
|
|
|
|
|
|
|
|
```sh
|
|
|
|
./tfb --mode verify --test servant servant-beam servant-psql-simple --type json plaintext db fortune
|
|
|
|
```
|
|
|
|
|
|
|
|
To compare with `warp`
|
|
|
|
|
|
|
|
```sh
|
|
|
|
./tfb --mode benchmark --test warp servant servant-beam servant-psql-simple --type json plaintext db fortune
|
|
|
|
```
|
|
|
|
|
|
|
|
To compare with `reitit` (Clojure framework)
|
|
|
|
|
|
|
|
```sh
|
|
|
|
./tfb --mode benchmark --test reitit reitit-async reitit-jdbc servant servant-beam servant-psql-simple --type json plaintext db fortune
|
|
|
|
```
|
|
|
|
|
2020-06-06 06:30:16 +02:00
|
|
|
You can see the visualised results at https://www.techempower.com/benchmarks/#section=test
|