Skip to main content

Pact Open Source Update โ€” May 2024

ยท 12 min read

๐Ÿ‘‹ It's May, and time is flying as we move into the 2nd half of the year. I'll be bringing you the usual updates from the world of Pact in the last month.

Pact OSS Updatesโ€‹

General Updatesโ€‹

  • Alpine is now supported in the pact-reference core
  • The builds are static, and therefore the single binary works across musl or glibc based distros (excluding ffi)
  • pact_ffi library comes in both static *.a & shared *.so variants for musl, depending on the consuming client libraries requirements for ffi interop
libraryalpine supportversion
pact_ffiโœ…- x86_64 .a from 0.2.4
- aarch64 .a from 0.4.15
- .so from 0.4.17
pact_mock_server_cliโœ…- 1.0.5
pact_verifier_cliโœ…- 1.1.1
pact-stub-serverโœ…- 0.6.0
pact-plugin-cliโœ…- 0.1.2
pact-protobuf-pluginโœ…- 0.3.15
pact-csv-pluginโœ…- 0.0.6

Specific language updatesโ€‹

PHPโ€‹

Pact-PHP V10 Beta Releaseโ€‹

The v10 Beta release has landed due to an epic amount of work from Tien Vo Xuan and Lewis Cowles

Check out the release notes here

Anyone can start testing pact-php with pact_ffi code by updating their composer.json

"pact-foundation/pact-php": "10.0.0-beta1"

This bring a raft of features to the Pact-PHP ecosystem including V4 Pact Specification support, access to the Pact Plugin ecosystem and huge speed benefits over the 9.x Ruby based release.

You can see a full range of examples here

Pact-PHP Alpine Supportโ€‹

You'll also be pleased to know, that the 10.0.0-beta1 is the first of the client libraries to support Alpine! ๐ŸŽ‰

Pact-PHP - Slackโ€‹

Chat to us in: #pact-php.

Pact-Referenceโ€‹

Pact-Reference - Pact FFIโ€‹

0.4.20 of libpact_ffi was released

This release allows optional query parameter values, as well as fixing a pesky warning that was cluttering users consoles. It also pins our shared library to glibc 2.23 for linux gnu targets (non-musl). This allows users of RHEL8 and other older supported distros to still utilise the pact_ffi library, as well as those on later distributions.

Pact-Reference - Pact Mock Serverโ€‹

Ron has started a redesign/rewrite for a V2 version of the Pact Reference Mock Server, and would find it easier to support multiple versions with branches it the crate is not in a mono-repo (pact-reference).

Therefore the action was taken to move it from its home in pact-reference to its own repository

You can find it here https://github.com/pact-foundation/pact-core-mock-server

  • The pact_mock_server code resides here
  • The pact_mock_server_cli code resides here

Pact-Reference - Pact Stub Serverโ€‹

A couple of features dropped to

Pact-Reference - Pact Stub Server - Dockerโ€‹

Pact-Reference - Pact Stub Server - Docker - Supported Platformsโ€‹

Multi-platform images are available, and can be used cross-platform by setting the platform flag.

  • --platform=linux/amd64
  • --platform=linux/arm64
  docker run --platform=linux/arm64 -t -p 8080:8080 -v "$(pwd)/pacts/:/app/pacts" pactfoundation/pact-stub-server -p 8080 -d pacts
Pact-Reference - Pact Stub Server - Docker - Supported Registriesโ€‹

Docker images are published to multiple registries

Pact-Reference - Pact Stub Server - Supported Platformsโ€‹

OSArchitectureSupportedPact Stub Server Version
OSXx86_64โœ…All
Linuxx86_64โœ…All
Windowsx86_64โœ…All
OSXarm64โœ…>=0.5.2
Linuxarm64โœ…>=0.5.2
Windowsarm64โœ…>=0.6.0
Alpinex86_64โœ…>=0.6.0
Alpinearm64โœ…>=0.6.0

Note: From v0.6.0, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-Reference - Slackโ€‹

Chat with us in: #pact-rust.

Pact-Pluginsโ€‹

A couple of features dropped to

Pact-Plugin-CLI - Supported Platformsโ€‹

OSArchitectureSupportedPact Plugin CLI Version
OSXx86_64โœ…All
Linuxx86_64โœ…All
Windowsx86_64โœ…All
OSXarm64โœ…All
Linuxarm64โœ…>=0.0.4
Windowsarm64โœ…>=0.1.2
Alpinex86_64โœ…>=0.1.2
Alpinearm64โœ…>=0.1.2

Note: From v0.1.2, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-CSV-Plugin - Supported Platformsโ€‹

OSArchitectureSupportedPact CSV Plugin Version
OSXx86_64โœ…All
Linuxx86_64โœ…All
Windowsx86_64โœ…All
OSXarm64โœ…>=0.0.1
Linuxarm64โœ…>=0.0.4
Windowsarm64โœ…>=0.0.6
Alpinex86_64โœ…>=0.0.6
Alpinearm64โœ…>=0.0.6

Note: From v0.0.6, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-Protobuf-Pluginโ€‹

A couple of features dropped to

And we saw a community fix from new contributor Eric Muller in this PR

Pact-Protobuf-Plugin - Supported Platformsโ€‹

OSArchitectureSupportedPact Protobuf Plugin Version
OSXx86_64โœ…All
Linuxx86_64โœ…All
Windowsx86_64โœ…All
OSXarm64โœ…All
Linuxarm64โœ…>=0.1.11
Windowsarm64โœ…>=0.3.15
Alpinex86_64โœ…>=0.1.9
Alpinearm64โœ…>=0.3.15

Note: From v0.3.15, All Linux executables are statically built with musl and are designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-Protobuf-Plugin - Slackโ€‹

Have you tried out Pact Plugins yet? What's stopping you?

Chat with us in: #pact-plugins.

Golangโ€‹

Pact-go:

v2.0.5 is out which includes Janez Justin's change we spoke about last month and updates several dependencies in the project.

Chat with us in: #pact-go.

Pact-JSโ€‹

Pact JS Core saw a few new fixes, which thanks to npm's package resolution and our use of a caret in our dependency of @pact-foundation/pact-core in @pact-foundation/pact, means you will pull in the latest fixes, without a new release of @pact-foundation/pact

Pact-JS - Alpine supportโ€‹

A pull request has gone in to bring alpine/musl support to pact-js-core and pact-js. It will close this open RFC.

Please feel free to take a look, drop a review, or a comment to say that this is a feature you would like!

If you'd rather wait until its released, please try it out in your projects and let us know how you get on.

Pact-JS - Slackโ€‹

Chat with us in: #pact-js.

Pythonโ€‹

Pact-Python:

Pact Pythons core maintainer has been enjoying a well-earned holiday for the last month, and in true open-source style, 2 new contributors arrived, wanting to get involved in extending the Pact Rust FFI support in Pact-Python.

Shout outs go to David Rettie & Val Kolovos, who are getting involved. It all started with a question

hello! I'm interested in putting some time into helping out with the pact V3/ffi tasks. I've been familiarising myself with the codebase and work done so far, I'm wondering if any other contributors or maintainers would like to have a call to help me get on the right track ?

Val dove in head first and naturally came up against a few blockers, questions are always welcome, especially as the help often paves the way for others.

I'm currently working to implement the v3 message_consumer.feature test. I've made pretty good progress, but I just got stuck on generators. I haven't been able to find anything in any of the other languages, so I was hoping someone here might be able to point me in the right direction.

Val has currently assigned himself to one of the tasks: Add support and example for a message consumer test using Rust engine and we wish him luck!

If you want to get involved, don't forget, we have a Pact Compatibility suite which is a set of BDD style tests to check compatibility between Pact implementations. There are full implementations in JVM, and Rust, with Tien over in Pact-PHP using it to guide and validate his Pact Rust core based implementation of Pact-PHP.

Chat to us in: #pact-python.

Community Eventsโ€‹

Praveen Erode Mohanasundaram - Contract Testing: The Key to Unlocking E2E Testing Bottlenecks in CI/CD pipelinesโ€‹

Long time Pact advocate and community contributor Praveen Erode Mohanasundaram spoke at Devoxx UK about Contract Testing: The Key to Unlocking E2E Testing Bottlenecks in CI/CD pipelines.

I'll let Praveen give an overview of his talk

As organisations embrace microservices architecture to achieve rapid, independent deployments, they often encounter obstacles that impede these benefits. A common challenge is an overreliance on traditional end-to-end testing strategies, which, while providing confidence, can slow deployment, create dependencies, and limit team autonomy.

Drawing from the transformative journey at Discover Financial Services, where we navigated the challenges of modernising systems into a microservices architecture, this presentation will delve into the hurdles encountered, the pivotal role of contract testing in overcoming these challenges, various contract testing strategies and open source tools, and our evolutionary path towards embracing contract testing. Join me to discover how this approach became the catalyst for removing bottlenecks in our CI/CD pipeline, unlocking the true potential of microservices for unparalleled agility and success

Interested? Well lucky for you, you can catch the video on YouTube ๐Ÿ“บ

TestGuild - Getting the Most Out of Open Source with Yousaf Nabiโ€‹

TestGuild Yousaf Podcast

I recently spoke with Joe Colantonio about all things open-source, you can check it out via multiple mediums via the links on the TestGuild site, whether you prefer watching a video or listening to a podcast, Joe has got you covered.

Pact Showcasing at the GitHub Open Source Fair @ The Merge - Berlinโ€‹

OpenSource Fair

THE MERGE is a developer experience conference brought to you by GitButler, a dev tool company founded by the co-founder of GitHub. They are bringing together technical founders and execs from companies such as GitHub, Sentry, Heroku, and Tauri to discuss all things developer tools and the communities they built around them.

There will also be an Open Source Fair where 24 selected projects will get the chance to showcase!

We are proud to announce that Pact was selected, so we will be there spreading the Pact love far and wide.

If your in Berlin, June 13th-14th, why not come and talk to us!

Book updates - Contract Testing in Actionโ€‹

Contract Testing In Action book cover

Another 4 chapters have just dropped for the book Contract Testing in Action on Manning, written by Marie Cruz and Lewis Prescott.

If you are new to Pact, be sure to check it out! ๐ŸŽ‰

info

๐Ÿฅท Don't forget!

You can use CTA45 between April 29 to July 30 to save 45% ๐Ÿค‘

๐ŸŽฅ If you want to give the book some promotion, or offer a quote, reach out to Marie, Lewis or myself

Thats a wrapโ€‹

Want to carry on the conversation? Sign up here to join our Slack community, where you will be amongst over 5.5k other users. It's a safe place to ask questions, and a great place to share the awesome work you are doing in the Pact ecosystem.

Whatever you are up to, let us know, and we can look to get you featured in the Pact post.

See you next month folks!

Cheers, Saf