hurl/CONTRIBUTING.md

5.2 KiB

Hurl Contributing Guide

Thank you for investing time in our project!

Issues

Whether you have discovered a bug, want a new feature in Hurl, or change code, please fill an issue or start a discussion before any PR. We like to discuss things before implementation and want to be sure that:

  • Any new features are coherent with Hurl core values.
  • You don't waste time on a feature that will not fit Hurl.
  • All options have been considered if possible.
  • We try to minimize dependencies and import new crates parsimoniously.

We really want to be focused and consider any new features carefully before committing to it. A new idea can be really relevant to you and we understand it; that's said, we try to reflect on every aspect (maintainability, feature fitting with future evolutions etc...). Don't be too harsh on us if we postpone your proposal, it's for the sake of Hurl!

Hurl Core Values

  • Hurl is a first class citizen CLI tool, fast and reliable.
  • Hurl is a cherry on the top of curl. What you can do with curl, you could do it with Hurl.
  • Hurl file format is text plain, loosely based on HTTP.
  • Hurl is multiplatform, working on Linux, macOS, Windows.

How Can You Help ?

  • Installing / Packet managers: bundle Hurl for a particular packet manager is welcome. Currently, we built binaries for Linux, macOS, Windows and we support a narrow set of packet manager. More would be better!.
  • IDE Support: everything from color syntax (in VSCode, Vim, IntelliJ, TextMate etc...) would be a good idea. An integrated way to run Hurl file would be cool also.
  • Documentation is a never finished work and could be always improved. Don't hesitate to clarify, even fix typos etc...
  • Report bugs: if possible some simple repro steps with hurl --version, name of the platform etc... PR for bugs fixes are really appreciated. If there is an integration test that complement it, it's the cherry on the cake.

Pull Requests

  • Create a new Git branch, don't use master branch for PR.
  • All Git commits are required to be signed and marked as "Verified": signed with a GPG, SSH, or S/MIME that is successfully verified by GitHub.
  • All tests must be green before merge. Our CI/CD will run a test suite to insure everything is OK.
  • Hurl Git history is linear, so we may rebase your PR on your fork before final merge.

Build and Test

Hurl is a Rust project, so you will need the Rust toolchain to build it. You can check the Hurl build documentation to see how to build locally the latest version (master branch).

Once your setup is ready, just build the project:

$ cargo build
   Compiling hurl_core v2.0.0-SNAPSHOT (/Users/jc/Documents/Dev/hurl/packages/hurl_core)
   ...
   Compiling hurlfmt v2.0.0-SNAPSHOT (/Users/jc/Documents/Dev/hurl/packages/hurlfmt)
   Compiling hurl v2.0.0-SNAPSHOT (/Users/jc/Documents/Dev/hurl/packages/hurl)
    Finished dev [unoptimized + debuginfo] target(s) in 2.53s

To run unit tests, you can run:

$ cargo test --lib

Hurl has a big suite of integration tests. To run the integration tests, you'll need Python 3.6+. You can use a virtual environment and install the dependencies needed by the tests suite:

$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install --requirement bin/requirements-frozen.txt 

Then, you can launch our local server (used to test Hurl features):

$ cd integration
$ python3 server.py >server.log 2>&1 &
$ python3 ssl/server.py >server-ssl.log 2>&1 &
$ squid_conf="http_access allow all\nhttp_port 3128\nrequest_header_add From-Proxy Hello\nreply_header_add From-Proxy Hello"
$ (echo "${squid_conf}" | squid -d 2 -N -f /dev/stdin > proxy.log 2>&1) &
$ jobs
[1]    running    python3 server.py > server.log 2>&1
[2]  - running    python3 ssl/server.py > server-ssl.log 2>&1
[3]  + running    echo "${squid_conf}" | squid -d 2 -N -f /dev/stdin > proxy.log 2>&1

You can check the integration README for more details

Now, you can follow these steps when you make changes:

  1. Build cargo build
  2. Run Clippy cargo clippy
  3. Format cargo fmt
  4. Run units tests cargo test --lib
  5. Run integration tests cd integration && python3 integration.py

Et voilà 🎉!