๐ 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
library | alpine support | version |
---|---|---|
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.
feat: optional query parameter values
fix: downgrade JSON parsing from warn to debug in from_integration_json_v2
chore: build linux x86_64 ffi against glibc 2.23
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
Pact-Reference - Pact Stub Serverโ
A couple of features dropped to
- Reduce binary size of all executables
- Build Linux executables statically built with
musl
- Add Windows Arm64 Support
- Publish images to Github Container Registry
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โ
OS | Architecture | Supported | Pact Stub Server Version |
---|---|---|---|
OSX | x86_64 | โ | All |
Linux | x86_64 | โ | All |
Windows | x86_64 | โ | All |
OSX | arm64 | โ | >=0.5.2 |
Linux | arm64 | โ | >=0.5.2 |
Windows | arm64 | โ | >=0.6.0 |
Alpine | x86_64 | โ | >=0.6.0 |
Alpine | arm64 | โ | >=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
- Reduce binary size of all executables
- Build Linux executables statically built with
musl
- Add Windows Arm64 Support
Pact-Plugin-CLI - Supported Platformsโ
OS | Architecture | Supported | Pact Plugin CLI Version |
---|---|---|---|
OSX | x86_64 | โ | All |
Linux | x86_64 | โ | All |
Windows | x86_64 | โ | All |
OSX | arm64 | โ | All |
Linux | arm64 | โ | >=0.0.4 |
Windows | arm64 | โ | >=0.1.2 |
Alpine | x86_64 | โ | >=0.1.2 |
Alpine | arm64 | โ | >=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โ
OS | Architecture | Supported | Pact CSV Plugin Version |
---|---|---|---|
OSX | x86_64 | โ | All |
Linux | x86_64 | โ | All |
Windows | x86_64 | โ | All |
OSX | arm64 | โ | >=0.0.1 |
Linux | arm64 | โ | >=0.0.4 |
Windows | arm64 | โ | >=0.0.6 |
Alpine | x86_64 | โ | >=0.0.6 |
Alpine | arm64 | โ | >=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
- Reduce binary size of all executables
- Build Linux executables statically built with
musl
- Add Windows Arm64 Support
And we saw a community fix from new contributor Eric Muller in this PR
Pact-Protobuf-Plugin - Supported Platformsโ
OS | Architecture | Supported | Pact Protobuf Plugin Version |
---|---|---|---|
OSX | x86_64 | โ | All |
Linux | x86_64 | โ | All |
Windows | x86_64 | โ | All |
OSX | arm64 | โ | All |
Linux | arm64 | โ | >=0.1.11 |
Windows | arm64 | โ | >=0.3.15 |
Alpine | x86_64 | โ | >=0.1.9 |
Alpine | arm64 | โ | >=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
- fix: update standalone to 2.4.4
- This updates to Ruby 3.3.1
- fix: update pact-ffi to 0.4.20
- fix: node doesn't run .bat files on windows
- This may have caused this issue: https://github.com/pact-foundation/pact-js-core/issues/506. Are you affected? Let us know in the issue, or drop us a PR to resolve.
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โ
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โ
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โ
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! ๐
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