Code Monkey home page Code Monkey logo

pact_broker's Introduction

Pact Broker

Gem Version Build Status Join the chat at https://gitter.im/pact-foundation/pact_broker Code Climate Test Coverage Issue Count Dependency Status

The Pact Broker provides a repository for consumer driven contracts created using the pact gem.

It:

  • solves the problem of how to share pacts between consumer and provider projects
  • allows you to decouple your service release cycles
  • provides API documentation that is guaranteed to be up-to date
  • shows you real examples of how your services interact
  • allows you to visualise the relationships between your services

Features:

  • A RESTful API for publishing and retrieving pacts.
  • An embedded HAL browser for navigating the API.
  • Autogenerated documentation for each pact.
  • Dynamically generated network diagrams so you can visualise your microservice network.
  • Displays provider verificaton results so you know if you can deploy safely.
  • Provides badges to display pact verification statuses in your READMEs.
  • Enables a pact version to be tagged (ie. "prod") so a provider can verify itself against a fixed version of a pact to ensure backwards compatibility.
  • Provides webhooks to trigger a provider build when a consumer publishes a change to a pact.
  • View diffs between Pact versions so you can tell what expectations have changed.
  • Docker Pact Broker

How would I use the Pact Broker?

Step 1. Consumer CI build

  1. The consumer project runs its tests using the Pact library to provide a mock service.
  2. While the tests run, the mock service writes the requests and the expected responses to a JSON "pact" file - this is the consumer contract.
  3. The generated pact is then published to the Pact Broker. This is simply a PUT to a resource that specifies the consumer name and version, and the provider name. eg http://my-pact-broker/pacts/provider/Animal%20Service/consumer/Zoo%20App/version/1.0.0
  4. When a pact is published, a webhook in the Pact Broker kicks off a build of the provider project if the pact content has changed since the previous version.

Step 2. Provider CI build

  1. The provider has a verification task that is configured with the URL to retrieve the latest pact between itself and the consumer. eg http://my-pact-broker/pacts/provider/Animal%20Service/consumer/Zoo%20App/latest.
  2. The provider build runs the pact verification task, which retrieves the pact from the Pact Broker, replays each request against the provider, and checks that the responses match the expected responses.
  3. If the pact verification fails, the build fails. The Pact Broker CI Nerf Gun magically determines who caused the verification to fail, and shoots them.
  4. The results of the verification are published back to the Pact Broker by the pact verification tool, so the consumer team will know if the code they have written will work IRL.

If you don't have a Pact Broker CI Nerf Gun, you'll probably want to read about using pact when the consumer and provider are being written by different teams.

Documentation

See the wiki for documentation on the Pact Broker.

Support

  • Check the wiki first.
  • See if there is an existing or closed issue and raise a new issue if not.
  • See if there is an existing question on stackoverflow tagged with pact-broker, and ask a new question if not.
  • Have a chat to us on the Pact gitter.
  • Tweet us at @pact_up on the twitters.

Screenshots

Index


Autogenerated documentation

Paste the pact URL into a browser to view a HTML version of the pact.


Network diagram


HAL browser

Use the embedded HAL browser to navigate the API.


HAL documentation

Use the HAL browser to view documentation as you browse.


Usage

To have a play around on your local machine

  • Install ruby 2.2.0 or later and bundler >= 1.12.0
    • Windows users: get a Rails/Ruby installer from RailsInstaller and run it
    • unix users just use your package manager
  • Run git clone [email protected]:pact-foundation/pact_broker.git && cd pact_broker/example
  • Run bundle install
  • Run bundle exec rackup -p 8080
  • Open http://localhost:8080 and you should see a list containing the pact between the Zoo App and the Animal Service.
  • Click on the arrow to see the generated HTML documentation.
  • Click on either service to see an autogenerated network diagram.
  • Click on the HAL Browser link to have a poke around the API.
  • Click on the book icon under "docs" to view documentation related to a given relation.

For reals

Hosted

In a hurry? Hate having to run your own infrastructure? Check out the Hosted Pact Broker - it's fast, it's secure and it's free!

Container solutions

You can use the Pact Broker Docker container or Terraform on AWS

Rolling your own

  • Create a PostgreSQL (recommended) or MySQL (not recommended, see following note) database.
  • Note: It is recommended to use PostgreSQL as it will support JSON search features that are planned in the future, however MySQL the other semi supported database.
  • Install ruby 2.2.0 or later and bundler >= 1.12.0
  • Copy the example directory to the location you want to install the application.
  • Modify the config.ru and Gemfile as desired (eg. choose database driver gem, set your database credentials. Use the "pg" gem if using Postgres and the "mysql2" gem if using MySQL)
  • Please ensure you use encoding: 'utf8' in your Sequel options to avoid encoding issues.
  • For production usage, use a web application server like Phusion Passenger or Nginx to serve the Pact Broker application.
  • Deploy to your location of choice.

Upgrading

Please read the UPGRADING.md documentation before upgrading your Pact Broker, for information on the supported upgrade paths.

pact_broker's People

Contributors

alexdutton avatar andresf avatar bethesque avatar brunochauvet avatar cdent avatar col avatar dstine avatar dtsato avatar elgalu avatar enrique-ramirez avatar errm avatar factorypreset avatar fitzoh avatar gitter-badger avatar ismasan avatar jdrew1303 avatar joshco avatar khaliddermoumi avatar linclark avatar mefellows avatar mikekelly avatar plexus avatar sbrauer avatar sergei-matheson avatar smizell avatar taiki45 avatar tancnle avatar warnergodfrey avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.