Skip to main content

Pact Open Source Update — September 2023

· 11 min read

👋 Hello, it's September, and we are a week away from Pactober - A celebration of 10 years of Pact.

I'll be letting you know what you can look forward to, recapping this month's activities in our repos, and introducing a new starter to PactFlow, who is living the dream - getting to work on open-source - as their job. Feel inspired? Join us! We are always hiring.

Pactober

We've been squirrelling away behind the scenes organising Pactober's main event on the 10th October and we are pleased to announce some of our stellar speakers.

Your links for reference:

Want to attend?

We will be providing links in Slack, but for all the latest updates, be sure to fill out our Pactober registration form

Speakers

Just some of our fantastic line-up that you will hear from over the month.

Sam Newman

J.B Rainsberger

Seb Rose

Bas Dijkstra

Lewis Prescott

Dave Farley

Got something to say?

Love Pact as much as Jameshd?

Why not shout about it, in whatever way suits you and we will be sure to feature it throughout Pactober’s Birthday session.

Ways you can do this

  • Fill out the Pactober registration form
  • Catch up with us in Slack
  • 👋 Send a 30s video wishing Pact a happy birthday, telling us a short story, or a written message to either Matt Fellows, Jo Laing or I (Yousaf) and we'll ❤️ you forever
  • Find us in GitHub, in our DevRel repository

Pactober Builders

During Pactober, we'd love to invite you to help build something on our roadmap, take part in a Bug-Bash or in our Doc-Drive.

Need some inspiration?

We've got plenty of requests on our Canny roadmap, and although many are not planned, you can see from the votes, as to how well received it may be from the community.

Alternatively, we can look at outstanding issues and PR's as they can often serve as a good source of inspiration, or things that can easily be sewn up.

Finally, don't forget to check out more ways you can help, https://docs.pact.io/contributing if any of these take your fancy?

You can find your fellow builders over in the #pactober-builders channel in Slack.

Pactober Workshops

We already have a few Pact HTTP based workshops, in a few languages, listed here.

I'll be hosting four sessions throughout Pactober, walking users through the existing workshop, and running some all new ones in the process.

We will need to build out workshops for Message & Plugin Pact, and also our various existing workshops, could do with some love, to utilise the latest features and versions of not only Pact but the client language itself.

We would love any support in helping work on these, but if not, and you just fancy participating along with others during the workshops, then feel free to join me!

OSS Updates

It has been another busy month in the world of Pact, I've pulled out some changes from the community to showcase in our latest round of Open Source updates.

  • PactFlow's New Starter, and what it means for you
    • Pact Python
  • Pact Rust
  • Pact PHP
  • Pact Plugins
  • Pact Broker
  • Pact Broker Client
  • Pact JS
  • Pact Broker Chart
  • Feature requests
    • Dont Massl the Hoff (Massl based authentication)

PactFlow's New Starter, and what it means for you

We ❤️ open source. We created Pactflow because we wanted to create a sustainable avenue to work on open source projects, and solve big problems that benefit a global developer community. Instead of the train rides, late nights and weekends where most of our contributions previously originated, this would be our day job.

We said that back in 2021. It would be awesome to work on an open-source project, and get paid for it, as part of your job. For me, its a dream come true. We've wanted to share that opportunity with others, especially as Pact grows in popularity, and gaining active maintainers is a challenge for many an open-source project, even those much larger than our own. Just look at Curls contributor graph!

We also are actutely aware that some of our libraries are suffering from bit-rot, languishing whilst each client implementations native language comes out with new features, and additions, that could be utilised, and they are missing core Pact features, implemented in Rust but not delivered in the client library, which causes struggles in documentating a cohesive Pact experience, in your own multi-language/multi-protocol landscapes.

That being said, we are proud to be able to announce a new starter to the PactFlow family, and by default extension, the Pact Family, who will help alleviate some of that burden. Enter Josh.

Joshua Ellis

We've been honoured to have Joshua Ellis enter the team, based in Australia, he will be working closely with Beth, Matt and Ron, and comes with a distinguished history, and open source background.

Joshua Ellis

I have an academic background in theoretical particle physics. I am the developer of the LaTeX package TikZ-Feynman to draw Feynman diagrams, and spent the majority of my PhD creating a Rust library to help solve Boltzmann equations to calculate the evolution of particle number densities during the Big Bang. I also did a one year stint in KPMG’s Data & Cloud team, helping architect and build cloud infrastructure, data pipelines, and helping new recruits get up to speed with DevOps and coding.

I'm a big fan of open source software and collaboration, and love to automate everything and anything; even if it sometimes takes me longer to automate the task than to actually do it 😅 Outside of work, my wife and I love finding good food spots in Melbourne. We have a small rescue dog called Cooper (no idea what breed he is), and if I’m not at my computer, you’ll either find me cooking something (perhaps in my smoker), playing piano or trying to learn the cello, or getting a coffee.

So what will Josh be working on?

Proficient in Python and Rust, we will see him help bring Pact-Python up to modern standards, and implement Pact V4 functionality, in a production ready manner, rather than my hack it to get something working xD.

I have recently onboarded with SmartBear, and my focus to begin with will be the Python code. I'm looking forward to working with you all, and improving the Python code! In particular, I will be building upon the amazing work done in #367 to get pact-python working with the Rust core. As a bit of ground work, I have created two issues above to get my feet wet, before tackling the much larger task of supporting V4 fully.

In any case, please feel free to message me with any ideas, or just to say hi :blobwave:

Josh has been tackling the build system and examples for starters, check out the progress, and even better, why not drop us a review, he would love the feedback, and gives him a chance to connect with you all.

Long live Python, Long live pact, long live Pact-Python!

Love Pact? Want to join the team? Why not give us a shout!

Pact Rust

We were meant to have done some rust stuff, but we've been too busy laughing at this interview with a senior rust developer

But seriously though, what's been happening?

Pact PHP

Tien Vo has been busy again, bringing more features to the ffi branch

The last one could do with some eyes, and we would still love to know if you have tested this out. Please let us know in the #pact-php channel or via GitHub.

Pact Plugins

Rohit G Krishnan has been trying out the Pact plugin framework, and raised a PR to fix a bug. Find it, fork it, fix it. The beauty of open-source! Thanks a bunch!

Pact Broker

Beth introduced a branch endpoint, supporting GET & DELETE in this PR

Expect to see this extend into the Pact Broker client, to let you interrogate the Pact Broker for pacticipants by branch

Pact Broker Client

Utilising the above change, was the Pact Broker client, for provider-contract publishing.

Whilst the above PR, and pactflow command, is for integrating with closed-source tool PactFlow, please be reminded that this can serve as a useful pointer for implementing your own provider driven contract flow, in an open source broker.

Check out an example repo https://github.com/pactflow/pactflow-jsonschema-example and supporting blog post https://pactflow.io/blog/contract-testing-using-json-schemas-and-open-api-part-2/

With a bit of tinkering, you can agument your workflows with https://github.com/pactflow/swagger-mock-validator, itself a fork of Atlassians original

I've been thinking about how we could potentially create an extendable mechanism, whereby users could provide their own provider schemes, for alternate sources, other than OpenAPI, such as AsyncAPI.

If this floats your boat, why not join us, as a Pactober builder, or just give us a shout.

Pact-JS

Mat Dodgson delivered a fix: MessageConsumerPact merge pact file correctly

Pact Broker Chart

Love Kubernetes and Helm?

Chris J Burns & Sherif Ayad have got your back.

Dont Massl the Hoff

A feature request landed for Providing MASSL based auth support

This is to add the support on adding a 'cert' and a 'key', regarding a self-hosted Broker that requires a 'cert' and a 'key'. This will make the availability to call the 'Pact::VerificationTask' adding the 'cert' and 'key' to interact with the Self-Hosted Broker.

As an example: -

--cert /path/to/client/cert.pem --key /path/to/client/key.pem

NB:- - I don't think it will be cli opts, but rather environment variables, to match the existing conventions for using TLS

PR's

Thanks to Lluís Xavier Casals Garcia for raising and Gerald Molina for the PR's

Pact in the wild

Open edX

Open edX is a community-driven, open-source project powering edX.org and thousands of other online education sites around the world.

We couldn't be more proud to see they are using Pact in their projects, and have written a brilliant post for their engineers. You can read it here

It also features Dawoud Sheraz, who we mentioned earlier in the year about his talk at Python Web Conf. The video is referenced in the above post, but you can watch it here

GitLab

GitLab are using Pact and have written some great documentation to support its use in their project.

If you haven't tried about GitLab, why not look at testing it out, you can run the community edition for free, on your local machine, see the existing Pact tests (and run them) for yourself.

Community Events

Are you hosting events about Pact? Why not let us know?

We can't wait for you to get involved, whether you attend one of the sessions throughout the month of Pactober, or you decide to host something yourself. Long live Pact and its awesome community!

Dont forget that throughout October, we will be providing links in Slack, but for all the latest updates, be sure to fill out our Pactober registration form

Thats a wrap

That’s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi — Developer Advocate at PactFlow and Community Shepherd at Pact.