Skip to main content

23 posts tagged with "oss"

View All Tags

ยท 12 min read

๐Ÿ‘‹ Hello, its July, it's scorching so I hope you've got an ice cream to accompany you this episode or maybe a brolly if you are stuck in a rain-shower!

For the keener of our readers, you may note we missed our June episode. I was on holiday ( a rare treat! ) which was spent mainly away from the keyboard, with the exception of a little flurry in pact-python.

Never fear, a double-dose of Pact Open Source updates are here!

OSS Updatesโ€‹

It has been a busy two months in the world of Pact, read on for updates on

  • Pact Docs
  • Pact Reference
  • Pact Net
  • Pact Go
  • Pact JS
  • Jest Pact
  • NestJS Pact
  • Pact Broker
  • Pact Python
  • Pact PHP
  • Pact in the community

Pact Docsโ€‹

The path to Pact Nirvana guide is now updated to cover

  • Branches
  • Recording Deployments
  • can-i-deploy --to-environment
  • contract_requiring_verification_published webhook
  • New diagrams courtesy of MermaidJS

Want to see can-i-merge functionality incorporated into the broker? Vote on this feature request

Pact-Referenceโ€‹

A raft of bug-fixes and features have been applied across the pact-reference project.

Features

Fixes

Latest Releases

Pact-Netโ€‹

The PactNet 5.0 RFC is complete with PactNet 5.0.0.beta.1 now released.

This bring in the ability to generate V4 Specification Pact's using the same API as V3 sync and async pacts and utilise combined pact files for both http and message based interactions. This removes the limitation requiring services which comprise of both http and message-based interactions to be named differently.

See the migration guide for upgrading to PactNet 5.x

Pact-Goโ€‹

Pact-Go V2 has officially been released, following an extended beta period. We are very grateful to our many early users who provided invaluable feedback.

You can check out the full release notes here

and for those migrating from v1, you can check out the migration guide here

This update replaces the pact-ruby core, with the pact-rust core, utilized through the pact_ffi library, bringing support for V3 and V4 Pact specifications and the ability to load pact-plugins to extend the capabilities of pact-go.

  • Supported platforms.
    • Linux x86_64 / arm64
    • MacOS x86_64 / arm64
    • Windows x86_64

Please note that Alpine Linux is not supported at this time.

New Featuresโ€‹

Pact-JSโ€‹

JavaScripters/TypeScripters/Nodemads

We listened to our community, who struggled with requiring python to install pact-js in order to get at that lovely rust pact-core functionality in pact-js v10 & v11 and pact-js-core v13

You can now find they both come fully charged with batteries included, meaning that supported platforms can use pact js v12 and pact-js-core v14 with --ignore-scripts true and no additional install time build requirements

In addition, the new releases now support versions of Node 16 and greater, CI testing has been dropped for earlier versions, and we explicitly set the engines value in the package.json of both pact-js and pact-js-core to honour this restriction. We would advise updating your projects to an in support LTS version, (Node 18 LTS is probably most sensible at this point and node 16 is due to EOL on 11th Sept 2023)

New Featuresโ€‹

  • Support for eachKey and eachValue matchers has been added to pact-js via pull #1303 which closes issue #952

Jest-Pactโ€‹

Updated to reference peer-dep of pact-js 12.x

NestJs-Pactโ€‹

Updated to reference peer-dep of pact-js 11.x and nest-js 10.x

Pact-Brokerโ€‹

Pagination support was added via pull #622

You can find the current documentation and supported endpoints here

A few performance enhancements were made at the same time.

Pact-Pythonโ€‹

Pact-Python 2.0.0 has been released

  • What does it contain?
    • ARM64 for both Linux & MacOS is now natively supported by Pact Python
    • Linux Support for x86 platforms (32-bit) has been dropped
    • The ruby standalone now runs the latest ruby 3.2.2 (big bump - from a deprecated Ruby 2.4)
    • Plus a few other fixes and enhancements from the community and maintainers.
  • Release notes
  • PyPi Release

Whats next for Pact-Python?

Pact-PHPโ€‹

Pact-PHP 9.0.0 has been released

  • What does it contain?
    • ARM64 for both Linux & MacOS is now natively supported by Pact PHP
    • Linux Support for x86 platforms (32-bit) has been dropped
    • The ruby standalone now runs the latest ruby 3.2.2 (big bump from a deprecated Ruby 2.4)
    • Plus a few other fixes and enhancements from the community and maintainers.
    • The CI Pipeline has dependabot hooked up, to ensure our dependencies stay up to date
    • Release documentation has been added to aid future maintainers
    • Support for PHP 7.4 has been dropped. You should be on 8 by now though, surely
  • Release Notes
  • Packagist Release

Whats next for Pact-PHP?

Oh Hi FFI :blobwave:

#326 Support for V3 / V4 + Plugins Via FFI

What is the current statusโ€‹

Pact-PHP does not currently support v3+ features of the rust core, in the mainline branch.

V3+ features are now available for beta testing in ffi branch, in a view to stabilise and release into the mainline.

We would <3 your support

How can I test this todayโ€‹

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

"pact-foundation/pact-php": "dev-ffi as 10.0.0"

How can I submit feedbackโ€‹

All feedback is gratefully received, positive feedback is great, as it allows us to ascertain how well the package is doing for users. Constructive criticism is okay too, but see the next section

  • Reply in this issue
  • Raise a new issue, clearly stating you are using the ffi branch

How can I contributeโ€‹

If you want to help improve Pact-PHP, read the DEVELOPING.md documentation, fork the repo and have a play!

Pact in the communityโ€‹

Pact-graph-networkโ€‹

We mentioned Guillaume Camus's pact-graph-network tool back in December. It's just been updated to support multiple target architectures, and now supports authentication mechanisms whether you have a basic auth protected Pact Broker, or a Bearer token protected PactFlow Broker.

So what are waiting for? Go forth and generate some broker charts, and why not share us your graphs via https://twitter.com/@pact_up or pact-slack.

Hello Joโ€‹

I imagine you've heard of Cucumber, the testing tool, not the veggie, If not, Cucumber is a tool for running automated acceptance tests guided by a technique called BDD (Behaviour-Driven Development), written in plain language called Gherkin. It has strong overlaps with our principles of contract testing and the Pact DSL, and is often part of a development teams tool-set alongside Pact for developing robust, quality systems. The similarities don't end there, it also has a thriving community which has been spearheaded by Jo Laing, across Slack and in many events across the globe.

That leads us nicely into what has Jo been up to this week!

Jo volunteered at AgileConf Scotland, where she was tasked with speaker support duties for a workshop.

A principles-based approach to create test automation strategies that work at scale, hosted by none other than Antonello Caboni (a Pact community speaker) & Nicola Sedgwick (a former CukenFest speaker). It's a smรถl ol' world.

The penny dropped as slides for contact testing appeared and Jo had to declare her new role in the Pact community.

jo_anton_agilescotland


So that leads me to announce to you, that I have the pleasure of inviting her to join me in my role as community shepherd, and know she will be helping to bring some organisation to the fold, including things like maintainer sessions and training, she has worked on the Cucumber school which is an incredible free resource to help those learn about BDD, I would โค๏ธ a Pact School - if such a thing would float users boats.

Community Corner - Olivier Picaudโ€‹

Autonomy within development teams is really valuable, tied with standardisation and goverance in an organisation, it can empower your teams. However it isn't all roses, it can also lead to fragmented tooling across the landscape, especially when developing microservice-based architectures in the dream of multiple protocols and languages all working in harmony. The landscape is always moving quickly but we are going to shine the spotlight on how open-source, both in terms of its tools, its users and contributors are helping to push things forward.

gRPC makes it easier to build high-performance microservices by providing generated service entrypoints in a variety of different languages. Bazel complements these efforts with a capable and fast polyglot build environment. Pact now offers the ability to test gRPC services via its extensible plugin mechanism, and it complements both gRPC and Bazel well, affording engineers the confidence to build applications in a stable repeatable manner, all whilst gaining that rich feedback from contract-testing.

We caught up with Olivier Picaud, who felt the draw, and utilised the power of open-source not only to power his journey of learning, but to share his progress, so that others can follow along. You can find his pull request showcasing his work here

Olivier Picaud

To learn monorepos, i put in place some grpc microservices using pact to validate interactions. Also, to facilitate the monorepo building, i am using Bazel and so i "bazelify" protobuf-plugin and pact-reference to get a >pact_verifier_cli and protobuf-plugin compiled from source --> Today, local consumer/provider testing is working well.

From Docker (and then from Kubernetes) i am trying to use the image you provide https://hub.docker.com/r/you54f/pact_verifier_cli, with the addition of protobuf-plugin from Bazel :) (still currently in dev)

EDIT1: Docker is not used anymore, it has been replaced by OCI images

EDIT2: Tests are not running from Docker images anymore, but directly from the build via pact_verifier_cli and pact-protobuf-plugins. To ensure a deterministic build, pact_verifier_cli and pact-protobuf-plugin are compiled "just in time" during build process (or use cache if already built).

EDIT3: Idea for the community : providing a "rules_pact" Bazel rule --> to use directly Pact from Bazel projects with pact_verifier_cli and other Pact tools as embedded toolchains ?

See here:

What I learned and still learning is :

  • improving cohesion of teams by pulling them in a monorepo structure
  • improving local development and determinism by providing one tool and the necessary toolchains for different platforms coming with the monorepo --> pact-reference and pact-protobuf-plugin was "bazelifed" for this purpose
  • optimizing test strategy (and notably with pact-grpc) to provide enough confidence to just run health checks when products are deployed. providing an unique pipeline to build / test / release and deploy using gitops magic monorepo's components in less than 10 minutes to accelerate feedback (incremental builds are amazed for this purpose)
  • I am currently migrating to bazel 6.0 because they use a new way of dealing with dependencies and then i will need to realign my fork to your master to pull out few updates that you made guys :) and then continuing to provide an end-to-end flow (i do not have an cli for instance to "play" with the entire product)

It's also very nice to participate to the community, i've participate to few others bazel-project by testing PR, providing feedback and red tests :)

Thanks Olivier for taking the time to share with us. It's exciting to hear about pull requests dropping in other areas outside of Pact as part of this effort. I hope this empowers others to take on journeys of discovery through code, through collaboration, as that is how our open source ecosystem is enriched.

Are you using Bazel in your organisation? Are you building tooling on top of pact-reference? Why not let us know! We could bring it into the codebase as part of an external builds directory as suggested by Ron so don't by shy!

Pactoberโ€‹

Celebrating Pact's 10 Year Milestone

2023 marks 10 years of Pact Open Source. To celebrate, during the month of October โ€“ which weโ€™ve coined Pactober โ€“ weโ€™re facilitating community events across the globe to celebrate and acknowledge the journey and look forward to the future of Pact.

Be sure to bookmark our Pactober event page where you can register to keep up to date, or to join us in hosting an event. We want to bring you all in to the celebrations, and help bring more contributors to the Pact family and help it live for another 10 years and beyond

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.

ยท 9 min read

It's May, the sunshine โ˜€๏ธ is upon us, and you might be reading this in the park ๐Ÿž๏ธ. If you are, watch out, theres a cyclist ๐Ÿšดcoming. ๐Ÿ›Ž๏ธ ๐Ÿ›Ž๏ธ

Phew, that was close. Right, well now we are sorted, we've got some goodies lined up for this month, as the city of open-source never sleeps.

OSS Updatesโ€‹

Pact-Netโ€‹

Repo Slack

V4 of Pact-Net is about to support V4 of the Pact-Specification.

The OCD gods have been appeased. You can all rest easy now, thanks to Adam Rodger.

Pact-PHPโ€‹

  • pact-php ffi-dev branch
    • Tien Vo has been working hard on ffi support in pact-php and we are grateful to have had a couple more reviewers join the party. We've wanted to make it easier to consume, for beta testing, in order to get feedback from users, who may be more familiar in their own codebase, than pact-php's. You can read more details about it in this PR on how you can get involved.

Pact-Pythonโ€‹

  • pact-python has put out a deprecation notice, noting that CI testing will soon be switched off for Python 3.6.
    • You can check the Python EOL dates and get prepared. 3.7 will be dropping support shortly, so you might as well take the time to jump up to 3.11 whilst you are there.

Pact-JSโ€‹

  • pact-js & pact-js-core have put out deprecation notices, noting that CI testing will soon be switched off for Node 14.
    • You can check the Node EOL dates and get prepared. 16 will be dropping support shortly, so you might as well take the time to jump up to 18 which is the latest LTS but also check that you are compatible with 20, the upcoming LTS
  • pact-js-core will soon come will batteries included - PR
    • All supported platform/arch combo's for libpact_ffi will come pre-packaged in pact-js-core and pact-js, this means users will be able to
    • npm install @pact-foundation/pact --ignore-scripts
    • Not require a full developer tool-chain included Python to run node-gyp in order to generate the required node bindings. We'll do the grunt work, so you don't have to.

Pact-Brokerโ€‹

pulls stars

As the Pact-Broker nears its birthday, it decided that it better get ready. You'll now find the latest pact_broker and pact_broker-docker projects have been upgrades to support Ruby 3.2, and pact_broker-docker now comes in the following flavours via this PR.

size: amd64 size: arm64 size: arm

New Tagging Formatโ€‹

On 3 May 2023, the format of the docker tag changed from starting with the Pact Broker gem version (2.107.0.1), to ending with the Pact Broker gem version (2.107.1-pactbroker2.107.1). Read about the new versioning scheme here.

Docker Multi-Arch Infoโ€‹

You'll be able to pull multi-arch builds for arm/arm64 machines soon, by adding the -multi flag to your pact_broker tag.

By default, vanilla tags, are built only for amd64

docker run --platform=linux/amd64 --rm -it --entrypoint /bin/sh pactfoundation/pact-broker:latest -c 'uname -sm'

returns

Linux x86_64

We need some binfmt emulators, to run multi-arch. - Thanks to tonistiigi for his project.

Note: You only need the binfmt emulators, if you plan on running a non-native image. Unless you are testing, you wouldn't normally want to do this :)

docker run --privileged --rm tonistiigi/binfmt --install all

We can now run multi-arch images

docker run --platform=linux/arm64 --rm -it --entrypoint /bin/sh pactfoundation/pact-broker:latest-multi -c 'uname -sm'
docker run --platform=linux/amd64 --rm -it --entrypoint /bin/sh pactfoundation/pact-broker:latest-multi -c 'uname -sm'
docker run --platform=linux/arm/v7 --rm -it --entrypoint /bin/sh pactfoundation/pact-broker:latest-multi -c 'uname -sm'

returns

Linux aarch64
Linux x86_64
Linux armv7l

Armageddon - Go Forth and multi-manifestโ€‹

info

Why not drop into your favourite repo, and see if you can help them build multi-platform images, it's simpler than you might think.

Prepare your docker builder

docker buildx create --platform linux/arm64,linux/arm/v8,linux/amd64 --name multi_arch_builder
docker buildx use multi_arch_builder

Building your own multi-arch images

Note: (this will push the multi-manifest image to Dockerhub), remove push=true if you don't want to.

  • Replace DOCKER_IMAGE_ORG_AND_NAME & TAG with your required values
docker buildx build --platform=linux/amd64,linux/arm64,linux/arm \
--output=type=image,push=true \
-t ${DOCKER_IMAGE_ORG_AND_NAME}:${TAG} .

Pact-Ruby-Cliโ€‹

pulls stars

Not to be outshone, by the Pact Broker Docker, Pact Ruby Cli now comes in the following flavours

size: amd64 size: arm64 size: arm

New Tagging Formatโ€‹

On 23rd May 2023, introduced in this PR , the format of the docker tag changed from ending with the Pact Cli Gem version (0.51.0.4), where .4 noted a change to the one of the packaged gems, to ending with the Pact Cli gem version (0.52.0-pactcli0.52.0). Read about the new versioning scheme here.

Alpine 3.18 & Ruby 3.2.2โ€‹

Alpine 3.18 is out, and Pact-Ruby-Cli is now up to date

Pact-Ruby-Standaloneโ€‹

pact-ruby-standalone 2.0.1 is out!

but most importantly, the latest Ruby runtime, and native arm64 architecture.

Supported Platformsโ€‹

Ruby is not required on the host platform, Ruby 3.2.2 is provided in the distributable.

OSRubyArchitectureSupported
MacOS3.2.2x86_64โœ…
MacOS3.2.2aarch64 (arm64)โœ…
Linux3.2.2x86_64โœ…
Linux3.2.2aarch64 (arm64)โœ…
Windows3.2.2x86_64โœ…
Windows3.2.2x86โœ…
Windows3.2.2aarch64 (arm64)๐Ÿšง

๐Ÿšง - Tested under emulation mode x86 / x86_64 in Windows on ARM

You'll see the roll out of improved CLI documentation on our main site, more distribution methods and a slicker experience overall soon.

Pact FFIโ€‹

Pact Pluginsโ€‹

Pact Erlangโ€‹

Oh yeah, you heard that right!

With thanks to community contributor Priyaranjan Mudliar, Pact-Erlang is alive.

It describes itself as

An OTP library for contract testing using pact and generating consumer pacts

and is proudly using the new Pact Rust core, via the FFI. We've been pleased to help guide Priyaranjan along the journey, its a first pass and doesn't contain a full feature-set. Be sure to drop him a โญ on his repo to show your support, and even better, if your an Erlang user, why not give it a go.

Check out the repo here https://github.com/silverblaze404/pact-erlang

Pact Broker Clientโ€‹

Cucumber community contributor David Goss paid us a visit and dropped a fix in whilst he was there.

If you are like Homer and often leave a trailing slash on your PACT_BROKER_BASE_URL or --broker-base-url values, consider yourself sorted.

You may notice some improved next steps when publishing provider contracts, and highlighted URL's, hopefully indicating to the user, useful next steps.

We hope this helps, please try it out and let us know!

Pact Ecosystemsโ€‹

I've been introducing a fellow Dev Rel colleague to the history of Pact and vastness of the estate. We've been working through a few things, so we thought it would be awesome to share some of the outcomes so far.

Aimโ€‹

  • Identify all Ruby codebases which need updating to Ruby 3.1 or higher
  • Identify all consumers of ruby codebases
  • Document "Rube Goldberg" machine for
    • Pact Ruby Reference Core as referenced here in the dependency graph of doom
    • Pact Rust Reference Core
  • Update to at least, Ruby 3.1, preferably Ruby 3.2 across all affected repos
  • Update all affected repos
  • Test all affected repos

Why?โ€‹

  • Users of our pact-ruby-standalone project, have been stuck on a packaged Ruby 2.4 run-time due to the build system traveling-ruby, being out-of-maintainence. It has been revived by your very own Devo Avo, into the 21st century with
    • Update to Ruby 3.1.2 & 3.2.2
    • Support for Arm64 Darwin
    • Support for Aarch64 Linux
    • Support for x86 and x64 windows

Rube Goldbergโ€‹

Beth often refers to the Ruby Goldberg machine, in a nod to Rube Goldberg.

image

Wondered what it looks like?

You can see our newly published Pact Ecosystem page here

Pacticipate in our Ecosystemโ€‹

Sorry Beth!

Did you know, we've used many CI systems here at Pact, now using GitHub Actions extensively, after migrating from Travis CI when they stopped being so friendly towards open-sourcerers. That has been great for x86_64 / Intel Architectures, but we've had a missing link, namely Arm64/Aarch64 architecture, for those of use with shiny new Macs, or perhaps using some cheaper cloud hardware like AWS Graviton's or Oracle clouds free tier offering.

We've documented some details about our CI systems in a new contributing page, on our docs site, you can check them out here

did you know?

You can drop into any repository with a .github/workflows/*.yml or .cirrus.yml file and run the CI systems workflows ephemerally on your own machine.

๐Ÿฑโ€๐Ÿ’ป Local Machine - GitHub Actionsโ€‹

  1. Download Act
  2. Download Docker (or Podman)

Linux workflowsโ€‹

act --container-architecture linux/amd64

๐Ÿฑโ€๐Ÿ’ป Local Machine - Cirrus CLIโ€‹

  1. Download Cirrus CLI
  2. Download Docker (or Podman)
  3. If on an arm64 mac, download tart.run

Linux or MacOS workflowsโ€‹

cirrus run --output github-actions

Community Corner - Adam Coxโ€‹

Adam Cox

If you've been around our GitHub repos or Slack, over the last couple of months, you can be sure to have seen Adam Cox's name pop up.

Well this month, we have an absolute treat. We have the pleasure of opening a new community corner section on our site, dedicated to your voice.

We are equally as honoured to help the community put a name to the face, as we speak to Adam Cox about his journey at Sky, from introducing Pact to the team, to adventures with embedded devices, websockets, and how the Pact Plugin framework is helping them push the envelope.

Be sure to check it our here

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.

ยท 6 min read

Welcome all, Yousaf here, your Pact Community Shepherd. This month Iโ€™ll be sharing all the good things happening in the world of Pact.

OSS Updatesโ€‹

Pact Broker on Kubernetesโ€‹

Chris Burns, has been maintaining the pact-broker-chart repository, which is currently the easiest way to run a Pact Broker on Kubernetes.

He's just hooked it up to the Pact documentation site and you can find the page in its new home here https://docs.pact.io/pact_broker/kubernetes

Pact-Netโ€‹

Pact-Netizens

got some goodies for you, wouldn't mind some eyes across them :)

I think we may in the very near future, to consolidate all the things.

PS. I have to say, the DSL is pact-net 4.x is quite nice, and the delta between 3.x -> 4.x isn't bad at all, especially once you've got one test converted, the rest is relatively plain sailing. Great work Adam!

If you want to build out your own workshop to share with others, please do join in!

Pact Brokerโ€‹

ARM64 & ARM builds of the Pact Broker are brewing, you can check them out here

I have proposed we publish multi-manifest builds with the $TAG-multi prefix so it is an opt-in arrangement until we get further feedback.

Pact Broker CLIโ€‹

Good things, come in two's! Plus Beth made common scripts across the libraries many moons ago which means applying changes in one repo can easily be applied across others

Pact Ruby Standaloneโ€‹

Well okay, maybe there are like busses and they come in three.

The current state of packaging Ruby applications, hasn't kept up with the times, and it's left our pact-ruby-standalone package, stuck on Ruby 2.4.x

The maintainer of the build system wrote about it a few years back https://www.joyfulbikeshedding.com/blog/2021-01-06-the-future-of-traveling-ruby.html

Traveling Ruby hasn't seen updates for quite a while now, but it's still being used. Yesterday, the author of the Pact contract testing framework asked me to do a new release, because he needed a bug fix for supporting paths that contain spaces. So I gave it a try. Predictably, the build system is broken due to all the changes in Linux and macOS the past few years, and fixing it all takes a lot of effort.

It leaves our current state of play of support like this.

OSRubyArchitectureSupported
MacOS2.4.xx86_64โœ…
MacOS2.4.xaarch64 (arm64)๐Ÿšง
Linux2.4.xx86_64โœ…
Linux2.4.xaarch64 (arm64)โŒ
Windows2.4.xx86_64โœ…
Windows2.4.xx86โŒ
Windows2.4.xaarch64 (arm64)๐Ÿšง

๐Ÿšง are supported under emulation.

Due to open source, the build system being available on GitHub, the power of ARM processors (via M1/M2 processors found in Apple machines), and leaps and bounds in virtualization / emulation technologies, it's really easy to spin up ephemeral build boxes, than ever before. The build systems themselves are still incredibly complex, but thankfully I managed to munge a few community forks, into one gotta-build-em all solution.

You can check out the current PR here

This means our support table will possibly extend now to

OSRubyArchitectureSupported
MacOS3.2.2x86_64โœ…
MacOS3.2.2aarch64 (arm64)โœ…
Linux3.2.2x86_64โœ…
Linux3.2.2aarch64 (arm64)โœ…
Windows3.2.2x86_64โœ…
Windows3.2.2x86โœ…
Windows3.2.2aarch64 (arm64)๐Ÿšง

I have got some very alpha arm64 osx and linux standalone packages you can trial

https://github.com/YOU54F/pact-ruby-standalone/releases/tag/v3.1.2.2-alpha

Note these aren't official builds so your mileage might vary and you shouldn't rely on them at the moment until we get some feedback

HomeBrewโ€‹

Our Homebrew repo now supports installing the x86_64 ruby standalone on Linux

https://github.com/pact-foundation/homebrew-pact-ruby-standalone

brew tap pact-foundation/pact-ruby-standalone
brew install pact-ruby-standalone
OSArchitectureSupported
OSXx86_64โœ…
OSXaarch64 (arm)๐Ÿšง
Linuxx86_64โœ…

You'll need rosetta on M1/M2 Mac's until we get my PR's merged, watch this space

Windows usersโ€‹

We are sorry, we've probably not given you as much love as we should have been. I've long been a windows fan boi, but got a Mac with work in 2015, and rarely fire the windows machine up for anything other than games. I did set it up for devvin' a while back and was incredibly surprised at how awesome the experience is now, and for everything else there is WSL2. That is how I felt about MacOS when I first joined the party.

Anyway, it could be better! Want the pact-ruby-standalone, but don't want to manually unzip a file, I mean cmon' sheesh, it's not the 90's and is Clippy even still a thing?

I've got your back. And because you might be a Scoop VS Choco, kinda person, I've got you both covered.

Let me know if these work, and we can move them under the Pact-Foundation!

Scoopโ€‹

scoop bucket add pact https://github.com/you54f/scoop scoop install pact

https://github.com/YOU54F/scoop

Chocoโ€‹

choco install pact --version=0.0.1

https://github.com/YOU54F/choco

SmartBear Supportedโ€‹

We spoke last month about what SmartBear supported means for Pact on our newly published page. We started engaging with our core maintainer group and are listening intently to the feedback before we share it out with the wider contributor group to get your valued input.

We all want to ensure Pact is here forever!

Thatโ€™s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi โ€” Developer Advocate at PactFlow and Community Shepherd at Pact.

ยท 12 min read

Welcome all, Yousaf here, your Pact Community Shepherd. This month Iโ€™ll be sharing all the good things happening in the world of Pact.

So sit back, relax, and join me for some contract testing in the wild. Hear from community experts and some of the latest initiatives in the Pact ecosystem.

Another month, another milestoneโ€‹

In case you missed it, Pact is 10 this year. In our last POST, we celebrated Pact coming into existence with the first implementation on February 19, 2013.

As we roll into April, we celebrate Ron Holhousenโ€™s (Pact-JVM/Rust core maintainer + PactFlow co-founder) first commit on April 3, 2013.

Rons first Pact commit

We are glad you stuck around, Ron, to help drive the Pact V3 & V4 Specification, the Rust core, and the Pact Plugin Framework, amongst others.

You can check out a young Ron in the early days spreading the news about Pact-JVM at this Melbourne meetup and Ron back in 2021 priming the community on what was in store for Pact V4 and beyond.

So while we are talking about memorable moments, itโ€™s not all about looking into the past. Weโ€™d love to celebrate all the achievements to date, with the people that helped make it, and where Pact is going in the future. Weโ€™ve been planning ideas for our Pact 10th birthday, and weโ€™d love to share our overall aims.

  • Contributor engagement: a thriving open source community is one that provides value to contributors and users of the software, alike. This milestone is an opportunity for us to share with the world the great aspects of Pact and to attract and excite new contributors and friends to the ecosystem
  • Awareness: contract testing is becoming well adopted across the software development landscape but thereโ€™s still a way to go โ€“ our hope with this milestone event is to further grow awareness of contract testing
  • Celebration: and of course, we want to celebrate 10 years of Pact in a fun way! Itโ€™s so important to us that we acknowledge the founders, maintainers, contributors, and community who have put in time and energy to make Pact what it is today

We would like to invite our own community to be a part of it โ€“ as a participant or to lend a hand to host a local event/meet up or speak on a specific topic. If you are interested, please get in touch at yousaf.nabi@smartbear.com or find me on Pact Slack.

Missed our last one? You can catch up with our last community event here.

Events for your calendarโ€‹

Python Web Conf

  • March 13 โ€“ 17 โ€“ Online: Syed Muhammad Dawoud Sheraz Ali (Software Engineer - Arbisoft) spoke at Python Web Conf 2023 with his talk, โ€œWhy you should contract test your microservices.โ€ - He covered the need for contract testing and how Pact can help in that. Weโ€™ll keep an eye out for the video and share on our community videos page.

DevBcn

  • July 3 โ€“ 5 โ€“ Barcelona, Spain: Join Eric Deandra (Senior Principal Developer Advocate, Red Hat) and Holly Cummins (Senior Principal Software Engineer, Red Hat) as they demonstrate, through a test-driven development approach, how the combination of Pact contract testing and Quarkus developer joy can help prevent your microservices from breaking in production. You can check out more details on the Barcelona Developers conference here.

Are you running an event featuring Pact this year? Let us know, and we can help promote it. If you want to build your brand profile, get in touch at yousaf.nabi@smartbear.com or find me on Pact Slack.

Eye candy โ€“ community content to tune intoโ€‹

EdinburghJS February โ€™23 Meetup โ€“ Testing services with Pactโ€‹

I grew up in Edinburgh, and I know the folks there are very active in agile meetups, so it was awesome to see Pact make an appearance at EdinburghJS:

  • EdinburghJS February โ€™23 Meetup โ€“ Testing services with Pact โ€“ watch here

Quarkus Insights #117: Contract Testing with Pact and Quarkusโ€‹

If you canโ€™t wait for Holly and Ericโ€™s conference talk in July, you can get a piece of their wisdom showcasing Pact and Quarkus, this time in a live insight session:

  • Quarkus Insights #117: Contract Testing with Pact and Quarkus โ€“ watch here

Contract Testing of HTTP Services using Pact.NETโ€‹

The team at Execute Automation show .NET users how to get started with Pact

  • Contract Testing of HTTP Services using Pact.NET โ€“ watch here

Pact theory, frontend, and backend applicationโ€‹

This three-part Pact chronicle covering Pact theory, frontend, and backend application from Kirill Ushakov is a must-watch for Pact newbies:

  • Consumer Driven Contract Testing with Pact โ€“ Theory โ€“ watch here
  • Consumer Driven Contract Testing with Pact โ€“ Frontend โ€“ watch here
  • Consumer Driven Contract Testing with Pact โ€“ Backend โ€“ watch here

Consumer-driven contract testing using Pact with Javaโ€‹

Helmut Siegel introduces Java and Pact in this 12 minute video

  • Consumer-driven contract testing using Pact โ€“ watch here

Hot reads โ€“ I spy, with my APIโ€‹

Matt Post

Matt Fellows wrote a piece for NordicAPI about the future of API contract testing and how the Pact Plugin Framework (which we launched late 2022) is there to support practitioners build with confidence. Read it here.

Frank Post

Weโ€™ve all seen ChatGPT in the news, as it has become a living room conversation piece. Frank Kilcommins explores what AI means for the future of APIs in this blog.

Pact community cornerโ€‹

This month, I caught up with Tien Vo, who has been helping bring the Rust core to Pact-PHP, about why Pact caught his eye, what brought him to contributing, and how we can help him out!

Tien Vo

What brought you to using Pact in the first place?

I heard about Pact from my ex-employer. AFAIK they are still not using Pact. I was introduced to microservices architecture long ago. Till today, it is complex to me. Too many techniques, too many tools need to be learned. But I think I need to find the answer for this question first: how to prevent someone from changing the code in a provider, and it breaks the consumers.

I tried to learn Pact via Pact-PHP, but I think itโ€™s quite old at that time (only support v2, while other projects migrated to v3 and supported FFI). So I think I will contribute to Pact-PHP and hope I can learn something while doing that.

We see youโ€™ve been doing some PRs in the pact-php project. How have you found the experience?

I have a confession to make: I donโ€™t have real experience working with Pact/contract testing before working with pact-php. All I know are theories I read from Pactโ€™s documents and YouTube/posts. Thatโ€™s why I am starting a personal project so I can test new pact-php code and get some experience from it.

Is there anything that the community could do to help you?

I hope someone with real experience on pact/contract testing can test the new pact-php code early to find some problems with it.

Do you have any advice for those wanting to get involved in open source?

I think patience is very important while working/using any open source projects. We mostly contribute using our free time. So donโ€™t expect a bug to be fixed soon, a question will be answered soon, so a PR will be reviewed and merged soon.

When youโ€™re not behind a computer, what are you doing?

I hope a day has 48 hours so I can sit on the computer more. So many things that I need to learn. The more I learn, the less I think I know. Just kidding, I hope I have more time to play with my kid, relax, and watch films on Netflix.

Thanks, Tien, the community is really grateful for your time and efforts. If you want to help Tien and the Pact-PHP community out, why not take a look at some of the PRs.

While we love people jumping into the code, if you are new to Pact, we would always recommend running through some starter material first:

If youโ€™re more familiar with Pact, and donโ€™t see a workshop in your favored language, why not help us create one following the other workshops as a guide.

Itโ€™s a great way to share your skills back to the community. A PHP workshop may have helped get Tien up to speed far more quickly. Visit our how to contribute page to learn more or contact us via Pact Slack.

OSS Updatesโ€‹

We are pleased to have just launched a SmartBear DevRel OSS metrics repository.

You can check out Pact & PactFlowโ€™s entry, which currently shows

  • Stars
  • Forks
  • PR Opened & Merged (split by community and maintainers)
  • Issue & discussion Participation
  • Slack activity

We are very proud of our thriving community and want to make sure we keep giving back to you in valuable ways. Feel free to let us know what you think.

Pact V4 Supportโ€‹

Weโ€™ve just raised two new cards on the PactFlow roadmap to help support V3/V4 Pact specification & Plugin support to both Pact-Python and Pact-Net as we understand that unblocking Python and .NET users to be able to utilize our newest feature-set will be invaluable, especially as many of you operate with multiple languages in your microservice stacks.

Pact-Rustโ€‹

Pact FFI v0.4.0 was released, adding FFI functions for plugin authors to parse Pact JSON and get matching rule.

Pact Protobufsโ€‹

gRPC metadata is now supported in v0.3.0+

A big thanks to early users of the plugin, who have provided invaluable feedback:

Amongst others!

If youโ€™ve tried out any of our Pact Plugins, or built your own: Let us know!

If you havenโ€™t, try out building your own plugin: hereโ€™s a workshop to get you started.

The community is after plugins too!: See the Pact Roadmap filtered by plugins for ideas.

Pact-JSโ€‹

Timothy Jones is again providing quality-of-life improvements for TypeScript users. We really appreciate your work, and those who take the time to provide great bug reports and root-cause identification (and sometimes fixes) as this greatly aids us as maintainers, who have a large estate to cover.

We do have an ask of our users. We updated Pact-JS to the latest Rust core, and it still includes the Ruby binaries so that users can programmatically use the Pact-CLI tools. We are considering removing them, but it would have an impact, depending on your workflow.

Many users are using this API for pact publishing, and it is re-exported by Pact-JS. There should be a discussion on whether it is acceptable to remove the programmatic use of Pact before merging.

If we find a lot of users are, it might be worth considering backing the existing broker API with the Rust implementation instead of removing it. We would love your thoughts in this discussion.

Our current recommendation for publishing pacts is to use the Pact CLI tools directly, as these will get the latest updates and not have to wait for a Pact client library to incorporate the changes.

Pact-Pythonโ€‹

Serghei Iakovlev recently joined the pact-python community and has dropped a raft of PRs to help bring pact-python up to speed. We would love to get our fellow #pythonistas across these, so if you can offer any support from a review or testing perspective, join us in our pact-python Slack channel, or see our pinned call out for maintainers and support of the v3 Pact specification to register your interest

You can check out his Python consumer and provider examples, which are listed on our community projects page.

Serghei Example Project

Have you built a sample project and want to share with the community? You can edit the page and add your own.

SmartBear Supportedโ€‹

You might have seen the label smartbear-supported or a comment that looks like this cropping up across our open source repos and be wondering what it means.

Screenshot 2023-03-20 at 15 04 05

SB Supported Comment

Last year, PactFlow was acquired last year by SmartBear.

We wrote about what that meant for the OSS Pact Framework then (read it here).

SmartBear wants to be true to that promise and part of that is allowing our engineers time to spend in the open source during their work hours. We want to foster an environment where open source contributions are welcomed, valued, and rewarded, and as we know Pact is integral to the future success of PactFlow. It is also part of its inherent heart, we know that we need to spend time defining our full feature set, and spending SmartBear supported time in bringing those languages to parity. This will benefit our complete user base, whether you choose to use your own Pact Broker, or one provided by PactFlow.

You can read more about what SmartBear supported means for Pact on our newly published page.

Itโ€™s better with friendsโ€‹

We would love to give a big shout out to our friends at Sngular, who have partnered with PactFlow since the early days and have helped clients implement Pact, PactFlow, and quality engineeering at scale.

Particular praise goes to Francisco Moreno Sanz, Juan Monzรณn Fabregat, Alejandro Pena Lorenzo & Alma Miller.

We are proud to let you know that they have been recognized as the Best Newcomer partner by SmartBear. Read more about it and Sngular here.

Sngular Award

Some great contributions so far:

Thatโ€™s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi โ€” Developer Advocate at PactFlow and Community Shepherd at Pact.

ยท 4 min read

Welcome all, itโ€™s February, we are live, and this is another update from the Pact Open Source team.

Letโ€™s Pact Party like itโ€™s 1999โ€‹

2023 marks a special celebration for Pact, 10 years since the first commit brought it to life.

first commit

Read more about the history to date here

We intend to celebrate that fact with the people who helped make it great, the community, its maintainers and advocates. We want to help make it an experience that you wonโ€™t forget, but we also want it to help bring in new contributors and ideas to the field.

Keen to get involved?โ€‹

If you would be up for hosting a community event around Pact and contract testing in your local area, contact the team and we can arrange a Pact Party Pack, with some materials to help make the meeting a success.

If you have a story to share, or wish to host or attend these sessions, register your interest by contacting yousaf.nabi@smartbear.com or reach out to us in Slack.

Help build your personal brand with Pactโ€‹

We would love to help you amplify your voice and give you a creative outlet to share the wonderful work that you do. We can help amplify your personal brand and are always on the lookout for new content like:

Community PRs merged ๐Ÿš€โ€‹

December and January are usually quiet months, but we saw several features and fixes provided by the community.

Check out a selection of the merged ones below.

Big thanks to everyone, especially if you arenโ€™t individually called out.

Pact Broker Chartโ€‹

This is picking up traction, thanks to Chris Burns for bringing this into the pact-foundation. A number of users have brought in improvements.

Pact JSโ€‹

Fixesโ€‹

Pact JVMโ€‹

Featsโ€‹

Fixesโ€‹

Pact Goโ€‹

Featsโ€‹

Pact PHPโ€‹

With <3 to Tien Vo Xuan and others, we now have Rust support in Pact-PHP

See the next section for how you can help him and other pact-php users, with some other PRโ€™s awaiting review

Pact NETโ€‹

Pact Docsโ€‹

Jest Pactโ€‹

Community PRs awaiting review โ€“ we would appreciate your eyesโ€‹

โ€œGiven enough eyeballs, all bugs are shallow.โ€

Itโ€™s true. We would love your support in helping review any of these PRs, as would the authors. These have all come from the community.

Pact PHPโ€‹

Rustโ€‹

Community fixesโ€‹

Community Enhancementsโ€‹

Pact Goโ€‹

Community Postsโ€‹

  • Barry Irvine from GoCity, wrote a great post about Pact contract testing in Android. you can read it here

Getting involved with Pactโ€‹

We have <3 for all our contributors and maintainers โ€“ we have reached the heights of today because of the hours and work many people have put into the Pact ecosystem.

Getting involved with an open source project โ€“ Pact or otherwise โ€“ can be extremely rewarding and allow you to give back to a community in a meaningful way. If youโ€™re passionate about Pact, you can find a way to get involved here.

That's all for now, catch you next month!

  • Yousaf Nabi โ€” Developer Advocate at PactFlow and Community Shepherd at Pact.

ยท 10 min read

โณ And just like that, 2023 draws nearโ€‹

We at the Pact team love nothing more than making microservices testing easier, our community and churning out the code. This year has been no exception. As many of you have wrapped up for your christmas break, we thought we would take some time to reflect on the year and the communities achievements.

Pact Open Source Community Surveyโ€‹

Our new survey is now open! The purpose of this survey is a pulse check on the community. In order to serve you in the best possible way, we'd love to understand how you use Pact and engage in our ecosystem. If you have contributed to any Pact Open Source projects or have engaged with Pact social media and Slack chats, you are welcome to share us your thoughts! The data collected in this survey is anonymous. We intend to use the data to better serve you and to promote the Pact community. Complete the survey here.

Brought to Life through Visualizationsโ€‹

Earlier in the year we mentioned we rolled out Orbit.love to help us track activities across the Pact Foundation's many open doors.

I would login into GitHub, Slack, YouTube, Slack Overflow, Twitter, check my emails, all before I could get down to any work. I imagine the story is much the same for our maintainers, when they get that precious free time to code, it can be exhausting. Orbit gives me a single view I can go to every day, and see who is posting asking for help, or where the activity is, so I can come jump in a help out.

Weโ€™re still in the process of determining the most effective usage and views of the data, in a wider context rather than just helping us on the day to day. We are thinking about ways we can expose the dataset (as itโ€™s all publicly available information from GitHub), so that you can tell us what you make of it. Think of it as an interactive state of open-source survey if you will! The good news is that weโ€™ll be doing so together with our friends over at the Cucumber and Swagger communities. We even hope to extend it over the SmartBear GitHub account too.

Pact community engagement in 2022โ€‹

Community growth in 2022โ€‹

We saw over 3,000 of you interacting with us via our open source channels, and introduced 2.7k more into the fold.

The 2022 community heroes.โ€‹

Thank you for participating in the Pact community, we couldnโ€™t do it without you.

We really couldn't resist taking a look at what organizations are using (and we hope loving) Pact. The list below is ordered by organization employee count.

We're a small team at Pact, so we also rely and appreciate contributions by teams and individuals leveraging Pact. Below is a list of organizations ordered by the active members using Pact who have interacted with our public repos. In most cases, these are individual people, or small teams often giving back improvements to the Pact framework from time out in the field. Why not read some of their testimonials and case studies here and add one of your own ๐Ÿฅฐ

Community growth since 2013โ€‹

We looked back on the history as Pact, as we near 10 years, over 12 thousand of you have followed along.

I wrote an interactive history lesson of Pact which you can check out here

Big innovations: the Pact Plugin Frameworkโ€‹

We were pleased to launch the Pact Plugin Framework to the masses. As with all our major initiatives, it is true to our open source roots and we hope that unlock new capabilities to a community of builders.

Our first plugin provides support for testing gRPC with Pact, and Pacts core, built in Rust, provides a Foreign Function Interface, unlocking Pactโ€™s capabilities in supporting languages.We look forward to 2023 and the introduction of Pactโ€™s feature-set to a few more languages, some of which are waiting to be built.

Hopefully by you!

In the meantime, why not get powered by Pact plugins and create your own?

Find out how to get started

Supporters of Pactโ€‹

Pactโ€™s biggest sponsor got even bigger this year.

SbHeartPact

Pact arose while PactFlow's Co-Founders Beth Skurrie, Ron Holshausen and Matt Fellows were employed by Australian technology consultancy, DiUS, supporting companies of all sizes to transition to cloud-native application development and to accelerate their digital initiatives.

PactFlow is now part of a much wider quality initiative after being acquired by SmartBear. We care so much for OSS and are so pleased that SmartBear has a strong and demonstrated commitment to OSS โ€” as proven through the support and scale of Cucumber and Swagger. Through our partnership, we will be able to take contract testing to new heights and help deliver key milestones in Pactโ€™s OSS roadmap, and bring closer alignments between our now larger family of open source tools, and smooth pathways between our open source and commercial tools. Providing you a seamless, and wonderful experience, whichever tool you are using.

We are always on the look-out for new contributors, across any of our languages, and if you have interest or have used Swagger, Cucumber or BDD principles in the past, we would love to hear from you. Drop me a note in Slack.

We would also love to wish our DiUS family thanks for all the support, and helping us reach bigger heights, and ultimately help more people. We'll slip an extra shrimp on the barbie for you.

What's in store for Pact in 2023?โ€‹

With a successful 2022 under our belts, I am so excited for what 2023 has instore! You can check out Canny, our public feature board for the latest run down on upcoming initiatives.

If you feel like something is missing, why not request it, or come talk to us in our Slack?

Big call outs to get excited aboutโ€‹

  • Pact Plugin ecosystem โ€“ we look forward to helping the community build plugins for the most requested content and transport types
  • V4 + Plugin support in all Pact foundation supported languages
  • Support networks provided to help the community build new plugins, and language implementations
  • Improved governance and project planning
    • The Pact project is depended on, by millions. In order to improve the quality of life for maintainers and contributors, we would like to bring some best practice open source engineers principles to the Pact project, to help it evolve in a vendor neutral fashion, and live for many years for come.
  • Revised documentation, training materials and examples
    • We are on a journey to help not only simplify the adoption of contract testing, but with SmartBearโ€™s support, to help provide you patterns and techniques to building quality, scalable software, that moves as quickly as your customers do. We would love your support in helping to smooth the path.
  • Help us design real-world example applications, that we can use to demonstrate not just Pact, but other testing tools, to show you can pick n mix your way to success.
  • More community events
    • Pact's 10th Birthday Bash
    • Local Pact community events
    • SmartBear Dev Relsโ€™ Celebration of open source
    • Hackathons
    • Code Alongs
    • Summer of Source
    • CukenFest - A BDD Conference
    • Pact + Swagger + Cucumber meetups

Pact Almanac 2022โ€‹

I always love the idea of Almanacโ€™s, probably from being sucked into Back to the Future as a kid!

image

So here is my go, a veritable buffet, corralling of some of the best bits of the year, mainly in your own words. There is so much good juice out there, for this Devo Avo to squeeze. I wonโ€™t focus on any of the big milestones centrally in the project, but rather your individual contributions and wins, you can go through our blogs bi-monthly updates, or check the GitHub repoโ€™s themselves for an immutable source of truth. ๐Ÿ•ต๏ธ

Januaryโ€‹

Febโ€‹

Marโ€‹

  • Lewis Prescott, the Pactman himself, started his blog series and Podcast dedicated to our favourite topic with some of the players in the industry helping you calm the chaos.

Aprโ€‹

Mayโ€‹

  • Marie Drake again, delivering a contract testing 101 at her previous employer Zoopla where she evangelised Pact, she now works as a Developer Advocate as k6.io and is always putting out great content.
  • Tamerlan Gudabayev delivers a great post that helps what contract testing is, and where it fits in in your testing lifecycle.

Juneโ€‹

Julyโ€‹

  • Bas Dijkstra has been helping individuals, teams and organisations build quality systems for years with automation. This in-depth 6-parter are words from a sage.

Augโ€‹

Whilst this feature in a Pact Broker, exists only in PactFlow (our commercial sponsor and guardian) the source code is open source and lives here for the underlying tool. If you want to help make improvements or use it to aid and augment your testing efforts with your OSS Broker, or if you use other mechanisms bar a broker to share pacts. If you do, we would love to what you are up to!

Septโ€‹

Octโ€‹

Novโ€‹

Decโ€‹

Pact Broker Graph

Pact saves the holidays, by ensuring those in charge of getting the turkeys to your table are deploying safely!

If you've done something great, and want to share it, get it listed - the site is open source and you can edit any page, we want to give you a platform to help amplify your voice!

Maybe there is time to get one last in before crimbo! No, only joking, thatโ€™s a wrap for this year's Pact Open Source Almanac, pop your feet up, enjoy your puds and hope to see your name in the book next year.

ยท 13 min read

Did you know, Pact is nearly 10 years old!

As the de-facto leader in contract-testing, the eco-system has grown to be vast, just take a look below

image

However today, I am going to take you on a little journey of how it came to be, and show you what is to come.

TL;DRโ€‹

A lot happens in 10 years. Weโ€™ve seen it all here at Pact, from the proliferation of micro services, to ever increasing protocols likeย Protobufs,ย GraphQL, transports such asย gRPC,ย Websocketsย andย MQTT,ย EventDrivenArchitecturesย and data pipelines or emerging standards such asย OpenAPI, AsyncAPIย andย CloudEvents.

As we launch our Pact Plugin Framework bringing you new possibilities to the Pact eco-system, Iโ€™d like to invite you to try an interactive history lesson of Pact, from past, to present and beyond!

Pact and the Pact-Plugin Framework will unlock the possibility of testing multiple transport and content types. You will see Pact used for gRPC, Protobuf and CSV based messages. Hope it feeds your imagination of the possiblities, it certainly has for me!

image

If it piques your interest, you should sign up for our upcoming webinar to hear more about our exciting news and what it means for you and the software development community.

The birth of Pact Rubyโ€‹

Pact was originally written by a development team at realestate.com.au in 2013, born out of trying to solve the problem of how to do integration testing for their new Ruby microservices architecture. They threw together a codebase that was to become the first Pact implementation.

git add . && git commit -m 'Gem skeleton' && git push by James Fraser

Screenshot 2022-11-16 at 14 16 59

Ron Holshausen (at the time at DiUS, still one of the present day maintainers of Pact, and co-founder of PactFlow), first commit came shortly after.

Screenshot 2022-11-16 at 14 27 47

A few months later Beth Skurrie (then at DiUS, still one of the present day maintainers of Pact and co-founder of PactFlow ), joined one of the teams that was working with the Pact authors' team.

She had recently seen a talk by J.B.Rainsberger entitled "Integration tests are a scam", which promoted the concept of "collaboration" and "contract" tests, so she was immediately interested when she was introduced to Pact.

J. B. has since softed his message, as have we, I think we all mellow as we get older :)

Beth's first commit in Pact Ruby

Screenshot 2022-11-16 at 14 33 02

After trying (as most people do) to convince the authors that the provider should be the contract writer, she was soon convinced by Brent Snook, one of the original authors of Pact, of the value of consumer driven contracts. At this stage, she realised that what was missing in the current implementation was the ability to run the same request under different conditions, and "provider states" were born.

Viva la Pact Brokerโ€‹

Screenshot 2022-11-16 at 14 28 48

What the heck is a Pact Broker anyway, Saf?โ€‹

The Pact Broker (as Pact was) being written to solve our own problem, which was trying to coordinate pact versions between projects.

It is an application that allows you to release customer value quickly and confidently by deploying your services independently and avoiding the bottleneck of integration tests, introducing a pact matrix.

It looks a little like this

image

By testing the Pact Matrix, you can be confident to deploy any service at any time, because your standalone CI tests have told you whether or not you are backwards compatible โ€“ no โ€œcertification environmentโ€ needed. And when there are multiple services in a context, this approach scales linearly, not exponentially like the certification environment approach.

Preaching the messageโ€‹

Soon after, Beth decided that Pact idea was the best thing since sliced bread, and she hasn't stopped yacking on about it since. Hear Beth, Jon Eaves from REA and Evan Bottcher from ThoughtWorks speak at YOW!2014 in this YouTube video

Want a bit more of Beth? we told you she couldn't stop yakking

Ron began spreading the message, read a blog post from 2014 here

The birth of Pact JVMโ€‹

Pact spread around the codebases in the wider program of work at realestate.com.au, until it hit its first Java microservice. realestate.com.au had many JVM projects, so a group of DiUS consultants (including Ron Holshausen again) started the pact-jvm project on a hack day.

Screenshot 2022-11-16 at 14 37 32

Ron raised his first issue, https://github.com/pact-foundation/pact-jvm/issues/31, which led to his first PR

Screenshot 2022-11-16 at 14 43 27

You can watch a talk from Ron here talking about pact and Pact JVM

Like all grown up frameworks, processes are needed, and a Pact Specification was born.

Beth penned the first Pact test cases, which came to be Pact Specification v1.0.0

Screenshot 2022-11-16 at 14 45 42

It was at this stage that the authors realised that the Rubyisms in the format were going to have to be replaced by a non-language specific format, and the idea of the v2 pact-specification arose on Mar 27, 2014 though it would take a while (just over a year) before it became reality.

Screenshot 2022-11-16 at 14 53 18

Soon it became obvious that Javascript UIs would benefit greatly from using Pact with their backend APIs.

After tossing around the idea of implementing Pact yet again in another language, a decision was made to wrap the Ruby implementation (which was packaged as a standalone executable) to avoid the maintenance burden and potential of implementation mismatches. This became the pattern that was used for most of the following Pact implementations. Each language implemented a Pact DSL and mock service/verifier client, and called out to the Ruby mock service process/verifier in the background. The original Ruby JSON syntax was often used between the native clients and the mock service, as it was simpler to implement, however, the mock service took care of writing the actual pact in the v2 format.

The birth of Pact JSโ€‹

Three versions of Pact-JS have existed, Fuying created the first commit of DiUS/pact-consumer-js-dsl. A familiar face Beth pops along for her first commit.

A few days apart, DiUS/pactjs0 was created, the first commit by Jeff Cann. Ron dropped his first commit ultimately deprecating it a little while later.

Enter Matt Fellows, dropping his first commit. A man of many talents, Matt is still one of the present day maintainers of Pact, as well as co-founding PactFlow.

It's funny, JavaScript is akin to the bus service, you wait for ages and then three turn up at once ๐Ÿคฏ.

Enter the still current Library, Pact-JS. It's first commit by Tarcio Saraiva.

A few months later, Pact-JS became the sole library going forward

This multi-language capability gave us the ability to start building cross-platform contract testing suites, as demonstrated below with JSON/HTTP interactions in laser focus

image

You can out HTTP based Pact in our interactive tutorial here, in either Java or JavaScript

Pact proliferates - Lead by exampleโ€‹

Since the implementation of the v2 format, newer features have been added, and the v3 and v4 formats add support for handing multiple provider states, messaging, and 'generators'.

One of the strengths of Pact is its specification, allowing anybody to create a new language binding in an interoperable way. Whilst this has been great at unifying compatibility, the sprawl of languages makes it hard to add significant new features/behaviour into the framework quickly (e.g. GraphQL or Protobuf support).

Wrapping the Ruby implementation allowed new languages to implement Pact quickly, however, it had its downsides. The standalone package worked by bundling the entire Ruby runtime with the codebase using Travelling Ruby, so it was large (~9MB). The native libraries also had to deal with the mock service process management, which could be fiddly on different platforms. It also made it difficult to run consumer tests in parallel, as each mock service process could only handle one thread at a time. The Ruby implementation was also lagging behind in feature development compared to the JVM, as Beth was spending more time on the Pact Broker.

To provide a single Pact implementation that could be used by all the required languages, the decision was made to create a reference implementation in Rust, that could be wrapped by each client language using FFI. The distributable package will be orders of magnitude smaller, and make it easier to run tests in parallel and avoid the process management issues, we have been slowly moving to our Rust core which solves many of the challenges that bundling Ruby presented.

It is worth noting that the "shared core" approach has largely been a successful exercise in this regard. There are many data points, but the implementation of WIP/Pending pacts was released (elapsed, not effort) in just a few weeks for the libraries that wrapped Ruby. In most cases, an update of the Ruby "binaries", mapping flags from the language specific API to dispatch to the underlying Ruby process, a README update and a release was all that was required. In many cases, new functionality is still published with an update to the Ruby binary, which has been automated through a script.

Beth often refers to the Ruby Goldberg machine, in a nod to Rube Goldberg.

image

We would love your engineering support in bringing efficiencies to our CI/CD processes used in our open source projects, or your artistic skills, if someone fancies drawing a Pact Rube Goldberg machine <3

Moving beyond HTTPโ€‹

But, the industry has continued to innovate since Pact was created in 2013, and RESTful microservices are only one of the key use cases these days - protocols such as Protobufs and Graphql, transports such as TCP, UDP and HTTP/2 and interaction modes (e.g. streaming or server initiated) are starting to become the norm. Standards such as AsyncAPI and CloudEvent are also starting to emerge.

image

For example, Pact has been a rather HTTP centric library, and the mixed success in retrofitting "message support" into all languages shows that extensions outside of this boundary aren't trivial, and in some respects are a second class citizen.

The reason is simple: HTTP doesn't change very often, so once a language has implemented a sensible DSL for it and integrated to the core, it's more a matter of fine tuning things. Adding message pact is a paradigm shift relative to HTTP, and requires a whole new developer experience of authoring tests, integrating to the core and so on, for the language author to consider.

You can read more about non-HTTP messaging with Pact ๐Ÿ”— here

Please note this one is a pet-project work in progress but it does show off message testing in various pact languages (Java, JS, .NET, PHP, Python & Ruby)

image

Pact Plugin Philosophyโ€‹

Being able to mix and match protocol, transport and interaction mode would be helpful in expanding the use cases.

Further, being able to add custom contract testing behaviour for bespoke use cases would be helpful in situations where we can't justify the effort to build into the framework itself (custom protocols in banking such as AS2805 come to mind).

To give some sense of magnitude to the challenge, this table showed some of the Pact deficiencies across popular microservice deployments as of a couple of years ago

https://user-images.githubusercontent.com/53900/103729694-1e7e1400-5035-11eb-8d4e-641939791552.png

So the pact plug-in eco system was born, a way to allow new transport types, content matchers/generators and more to easily be added to the pact framework, without needing to wait for the core maintainers to roll it out. You can create your own, for public, private or commercial consumption!

image

Enough blurb, show me da codeโ€‹

Whilst it may be quite technical for some, others will relish the possibilities this will unlock. If you want something or see a use case, but arenโ€™t quite sure how to put it to reality, try out our demos and give us a shout via ๐Ÿ”— canny, our feature request board, or ๐Ÿ”— slack

To prove how easy it was, and as a nice little nod back to the Grandmother of Pact, Ruby. Your very own devo avo put his money where his mouth is and built his own.

Try out our pact plug-in framework hereโ€‹

This will allow you to see Pact and the Pact-Plugin Framework to test multiple transport and content types. You will see Pact used for gRPC, Protobuf and CSV based messages. Hope it feeds your imagination of the possiblities, it certainly has for me!

And to anchor it back to a picture you probably know from our Pact docs, plugins just sit in the middle and help extend the capabalities

image

Choose Possibilities, Choose plugins, Choose Pact!

A thank you to those who got us hereโ€‹

ยท 3 min read

Pact with more power โ€“ introducing the Pact Plugin Frameworkโ€‹

Today we share the news that your favourite contract testing framework comes Pact with more power! The new Pact Plugin Framework completes the missing piece to help development teams apply contract testing all their API technologies and use cases.

note

Replay the launch webinar to hear Matt and Yousaf explain the Pact Plugin Framework

Why we built the Pact Plugin Frameworkโ€‹

Loved by thousands of development teams globally, Pact was originally created to support the rise of RESTful microservices and has since expanded to support asynchronous messaging, becoming the defacto API contract testing solution.

As architectures have evolved, organisations find that the existing Pact contract testing framework may not support all of their use cases.

The industry has continued to innovate since Pact was created in 2013, and RESTful microservices are now only one of the key use cases today. According to SmartBearโ€™s 2021 State of Quality report, we are seeing the growth of:

  • Protocols such as Protobufs and GraphQL (80% of organisations run multi-protocol and more than 60% of organisations manage three or more)
  • Transports such as gRPC, Websockets and MQTT
  • Newer interaction models such as streaming, async or server push
  • Event Driven Architectures and data pipelines
  • Emerging standards such as AsyncAPI and CloudEvent

Pact Plugin Framework now liveโ€‹

The Pact maintainers have been acutely aware of the changing trends โ€“ we blogged about the idea for the Pact Plugin Framework in 2021 and have been actively chipping award at the roadmap item to enable developers everywhere to use contract testing where they previously couldnโ€™t.

Hats off to Ronald Holshausen who undertook the mammoth task of standing up the Framework. With this, development teams can now harness the power of contract testing where they previously couldnโ€™t, applying it to unique and emerging use cases and technologies - no matter the scale or the language, transport, protocol or content type.

How this new capability worksโ€‹

Pact may have been applied to one team or application using RESTful microservices but another using GraphQL, have been unable to get the complete benefits of contract testing. The Plugin Framework is the answer โ€“ developers can build plugins for their custom needs, whether they open source the plugin or keep it closed source for in house only usage.

For those familiar with Pact, this is a substantial innovation. By having a single generic interface, the Plugin Framework side steps the problems of requiring the input of core maintainers to support a new feature and its constituent concepts that must be built into each client language.

Read the full use case for the Plugin Framework is explained in detail on the GitHub issue.

Getting startedโ€‹

If youโ€™re as excited by this new feature as we are, you can:

  1. Replay the launch webinar to hear Matt and Yousaf explain the Pact Plugin Framework
  2. Build your own plugin for any use case you and your team require โ€“ visit the guide to writing your own plugin
  3. Try out a pre-made plugin - visit the implementation guide for GPRC

ยท 6 min read

Welcome to the October Pact Open Source update! Iโ€™ve got some great things to share this month โ€“ new PRs, some awesome community members writing and talking about contract testing, plus a sneak peak of our upcoming Pact Plugin Framework launch! Letโ€™s get into it.

Summary of the good stuffโ€‹

Merged PRsโ€‹

It's been a busy couple of months, and the PRs have been coming thick and fast. Here's a roundup of the top merged PRs.

PRs awaiting reviewโ€‹

You don't have to start writing code to get involved. There's always a raft of open pull requests eagerly awaiting review. You can check out the full list here, but I've pulled out some of the juiciest ones, which will make a big impact when they land. Any help on these would be greatly appreciated!

Updates to documentation and learning materialsโ€‹

The following documentation is now live, or updated on the site:

  • Pact-Specification
    • All about the spec. Learn the history, philosophy, implementation support, migration notes, and more.
    • See it ๐Ÿ‘‰ here
  • Pact-Plugins
    • The Pact plugins docs are now syncing from their readme, and displayed alongside our other Pact tooling.
    • Join us for the official launch next month
  • Webhook template library
    • Updated to use the new contract requiring verification published event. We'd love your help to add new ones to the list!
    • See them ๐Ÿ‘‰ here
  • Branch support in Client libraries
    • The list has been updated to show the latest state of play.
    • See it ๐Ÿ‘‰ here
  • Community Repos
    • We've got a new showcase for Pact based repos in the wild. List yours here.
    • See them ๐Ÿ‘‰ here
  • New articles
  • New workflow recommendations
    • A large scale migration of the docs, to use our new recommended configuration
    • See it in action in the updated CI/CD workshop ๐Ÿ‘‰ here

Community corner - member shout outsโ€‹

Paulo Gonรงalvesโ€‹

We know it can be difficult to visualise the path to Pact Nirvana, the recommend CI/CD setup for your Pact integrations. Contributors have been adding their valuable experiences from lessons learnt in the field.

Paulo Gonรงalves did just that in this repository. It exemplifies the best implementations of contract testing, reaching Pact Nirvana and having control via pipeline and pact-broker in a completely reliable way. This provides security to deploy quickly, safely, and more frequently.

Please give the repository a star โญ as this is a great motivator for Paulo to continue to create quality software content, which is 100% free to use!

PLUS extra kudos to Paulo, who delivered a contract testing workshop entirely in Portuguese for our Portuguese-speaking friends!

Eric Deandrea and Holly Cumminsโ€‹

Many thanks to Eric Deandrea and Holly Cummins, who co-delivered a fantastic, funny talk at Devoxx Belgium on "How to avoid common pitfalls with modern microservices testing". I enjoyed watching this, and think challenging mental models is a wonderful way to break down an often complex and misunderstood subject

Holly has been particularly active whilst she worked in the IBM Garage, so it's wonderful to see her delivering fantastic talks.

Liran Talโ€‹

A talented Developer Advocate, Liran Tal at Snyk is a long-time friend of the Pact Open Source Foundation. He often tours the conference circuit in his easily recognizable green hat.

Liran created the incredible Comprehensive Guide to Contract Testing APIs in a Service Oriented Architecture". He's also the author of awesome-contract-testing because, as you already know, contract testing is AWESOME! ๐Ÿ‘Œ And because we love videos, I recommend his talk Consumer-Driven Contract: A better approach for API Testing from APIdays Barcelona.

Thank you to all our community members. The effort you put into our community is appreciated!

Become a contributorโ€‹

As the Pact Community Shepherd, I'm dedicated to making it as easy as possible to get involved in the Pact Open Source Project.

There's no minimum time commitment, but we highly value regular, committed contributions, as these make the Pact OSS vibrant and healthy.

Not sure where to start?

With the impending official launch of the Pact Plugins Framework, we're on the lookout for enthusiasts who want to build their own profile and be a part of the future of Pact. We're looking for individual people or teams interested in extending Pact by creating a plugin

  • such as Avro or GraphQL content type or a Websockets transport.

If this sounds like something you'd like to know more about, join us next month at our launch event to learn about the Plugin Framework and how you can get involved. You can checkout the details and register ๐Ÿ‘‰ here

Whether you've participated before or are ready to take the first plunge, the team and I are here to support you! Need extra convincing? I wrote about why participating in OSS projects is awesome, for DevPro Journal!

You can also read our Pact Open contributing page to learn about the different ways to get involved in Open Source, no matter what role or skillset you hold.

That's all for now. Catch you on Slack!

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

ยท 5 min read

Welcome to the Pact Open Source August 2022 update!

I have some awesome updates for you this month!

โ€ŒAs always, thanks to all of the contributors who have made this happen, if you havenโ€™t been mentioned here but wish to appear in a later update, feel free to reach out to me on Slack.

Pact JSโ€‹

Pact JS 10.x.x is now live

Get it here ๐Ÿ‘‰: https://github.com/pact-foundation/pact-js

Summary of the good stuffโ€‹

  • Speed! - Itโ€™s quick, blisteringly quick. Youโ€™ve probably heard people talk about just how good Rust is, they werenโ€™t wrong.
  • Full support for binary payloads (both HTTP and Async) and multi-part uploads
  • For Async, the ability to specify and verify message metadata
  • XML support
  • Ability to create and verify both v2 and v3 specification pacts
  • Support for all v3 matchers and generators, and other v3 items (such as multiple provider states with parameters)
  • Improved support for Hypermedia APIs such as HAL and Siren through url and arrayContaining
  • Support for dynamic IDs in requests via provider state injected values (fromProviderState matcher)
  • arrayContaining and eachKeyLike matchers for improved array matching
  • Ability to modify request bodies and headers during verification (via requestFilter on the provider)

Docsโ€‹

Community corner โ€“ member shout outsโ€‹

Big props to the many who have helped make Pact-JS such a success, but we wanted to take a moment to give a shout out for a few whose contributions have really propelled adoption and the beta, into GA. We of course, can't forget Matt Fellows who is a machine that never sleeps, each contribution, helps Matt get 5 more minutes with the kids. Save a Matt, make a contribution.

Ron Holshausenโ€‹

Ron has been diligently plugging away at the Rust core, a Pact implementation written in Rust. It supports the V3 Pact specification and V4 Pact specification and provides shared libraries that can be used in other languages via foreign function interfaces (FFI).

It has now been adopted in Pact-JVM, Pact.Net, Pact-JS and Pact-Go, and although we are still ironing out issues, we are so grateful for the time Ron spends in trying to improve the landscape. Iโ€™ll let Ron explain some of the journey

One of the strengths of Pact is its specification, allowing anybody to create a new language binding in an interoperable way. Whilst this has been great at unifying compatibility, the sprawl of languages makes it hard to add significant new features/behaviour into the framework quickly (e.g. GraphQL or Protobuf support).

We have attempted to combat this time-to-market problem, by focussing on a shared implementation (the "shared core") in many of the languages. We initially bundled Ruby, because it was convenient, but have been slowly moving to our Rust core which solves many of the challenges that bundling Ruby presented.

The "shared core" approach can only take us so far, and we need another mechanism for extending behaviour outside of the responsibilities of this core. This is where I see a plugin approach working with our "shared core" model.

Tim Jonesโ€‹

Pact-JS wouldnโ€™t be half of what it is today, without Tim Jones. Outside of the PactFlow co-founders and myself, Tim has the most GitHub and Slack contributions of anyone in the Pact community, it really is staggering. He always delivers gems of well thought advice with a smile, and is an absolute delight to work with. He took a well earned break from being a full-time Pact maintainer earlier this year, but if youโ€™ve had the time to visit the Pact Slack group, youโ€™ve probably seen him armed with Timโ€™s Tech Tidbits, which we all need to encourage him to make into a YouTube series.

Aligntechโ€‹

What has the team at Aligntech been up to? Sponsoring some of the initial implementation and XML!

Much respect to Aligntech for sponsoring the initial implementation of Pact JS v3 and XML support, we are proud to show them on our website, along with other great companies and contributors who have helped Pact become as widely adopted as it is today.

Check out Aligntech and the great work they do.

Artur Neumannโ€‹

Thanks to Artur Neumann for driving beta adoption and usage (via owncloud) and providing an incredible amount of feedback on the Pact V3 release. One look at the pact-js issues and PR list shows Artur's energy in raising issues in the V3 beta, or dropping in helping contributions to the codebase.

This feedback is critical in helping us improve the tooling for all of our users, and is also highly rewarding, seeing something youโ€™ve created or had a hand in, helping others, even if it's not quite right.

Become a contributorโ€‹

If youโ€™re passionate about Open Source, Pact or a specific language, get involved as a maintainer. Thereโ€™s no minimum time commitment and you can get involved on your own terms. One thing that does make the Pact OSS so great is regular, committer contributions.

Read our Contributing page to find out many of the different ways you can get involved in Open Source, no matter what role, or skillset you hold.

That's all for now, catch you next month!

  • Yousaf Nabi โ€” Developer Advocate at PactFlow and Community Shepherd at Pact.