π 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β
- Event Page - https://pact.io/pactober/2023/sam-newman
J.B Rainsbergerβ
- Event Page - https://pact.io/pactober/2023/jb-rainsberger
Seb Roseβ
- Event Page - https://pact.io/pactober/2023/seb-rose
Bas Dijkstraβ
- Event Page - https://pact.io/pactober/2023/fireside-chat
Lewis Prescottβ
- Event Page - https://pact.io/pactober/2023/fireside-chat
Dave Farleyβ
- Event Page - https://pact.io/pactober/2023/fireside-chat
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.
- Pactober Workshop 1 - CI/CD workshop (HTTP Pact)
- Pactober Workshop 2 - CI/CD workshop (Message Pact)
- Pactober Workshop 3 - CI/CD workshop (Plugin Pact)
- Pactober Workshop 4 - Maintainer/contributor workshop How Pact is built
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.
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.
- chore: migrate to pyproject.toml and hatch
- style: add pre-commit hooks and editorconfig
- Fix existing examples
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?
- fix: Allow matching string values using content type matching rule
- chore: renable aarch64-unknown-linux-gnu
- feat: Add ffi function pactffi_with_multipart_file_v2
Pact PHPβ
Tien Vo has been busy again, bringing more features to the ffi
branch
- chore: reorganize examples (create separate directory for each example)
- Use Rust FFI #12: Binary
- Use Rust FFI #13: Multipart
- Use Rust FFI #14: Xml example
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.
- breaking: Upgrades Postgres & Common Chart Dependency
- feat: bumped the version of the Pact Broker to 2.112.0-pactbroker2.107.1 (using the new docker tagging naming convention)
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
- https://github.com/pact-foundation/pact-support/pull/99
- https://github.com/pact-foundation/pact-ruby/pull/298
- https://github.com/pact-foundation/pact_broker-client/pull/142
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.