GithubHelp home page GithubHelp logo

pact-foundation / devrel Goto Github PK

View Code? Open in Web Editor NEW
39.0 15.0 6.0 37 KB

Developer Relations @ Pact - Your map to the Pact landscape for all-comers (maintainers, contributors, users, newbies)

Home Page: https://pact.io/

License: MIT License

consumer-driven-contracts contract-testing pact pact-broker pact-foundation pact-js pactflow pact-ruby devrel readme

devrel's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

devrel's Issues

Slack

Hey team!

The community Slack linked to from the docs only allows user registrations for emails under the domains dius.com.au, smartbear.com and ae.com:
image

Is this a mistake or have you restricted it for a reason? Is there another way to connect with the community?

Pactober Workshop 1 - Pact workshop (HTTP Pact)

Pactober Workshop 1 - Pact workshop (HTTP Pact)

Event Details

Item Description
๐Ÿ“… Date 3rd October
๐Ÿ• Time 15:00 BST / 10:00 EDT / 00:00 AEST
๐Ÿ“น Video Recording https://www.youtube.com/watch?v=Gx-R2Cn1HZE
Course https://docs.pact.io/university/introduction/00_1_Intro
Repo https://github.com/pact-foundation/pact-workshop-js

Background

Aims

Warmup for the start of Pactober, introducing users to the core concept of contract testing, and Pact.

Provide a workshop where we take users through the recommended Pact setup.

Agenda

  • Introduce users to contract testing and pact
  • Run the workshop, showing users how to implement contract testing with HTTP Pact using NodeJS as a guide

Video Conferencing Tooling

What video conferencing tools are users comfortable with, for open-source related projects.

Would users prefer to use OSS/FOSS tools, and have a strong preference to lean towards either one.

Which tools would you suggest?

Also what are peoples preferences for video communication

  • webinar style
  • group style

For personal meetings, I've always just grabbed a google meet, but I can imagine there will be restrictions for larger groups, and there may be concerns on AI, collecting data.

There are other options available to maintainers, through their employers, Zoom for example.

Both google meet/zoom are not OSS, and therefore may not be suitable for some members who simply won't use those platforms.

Just want to gauge interest. Do people care? I've often had to sign up to new platforms to watch a single event and then never used it again.

Pactober Workshop 2 - Pact workshop (Message Pact)

Pactober Workshop 2 - Pact workshop (Message Pact)

Event Details

Item Description
๐Ÿ“… Date 11th October
๐Ÿ• Time 15:00 BST / 10:00 EDT / 00:00 AEST
๐Ÿ“น Webinar link https://smartbear.zoom.us/j/92661543192
YouTube Link https://www.youtube.com/watch?v=81N25-4x27E

Background

Aims

Introduce users to the evolution of Microservices, and event based systems, and how this is handled by Pact.

Provide a workshop which builds on the previous CI/CD example but shows a messaging consumer and provider, to highlight the differences

Agenda

  • Introduce users to the concepts of Message Pact introduced in Pact Spec v3
  • Discuss some of the limitations of the current approach
    • V3 named diff providers
    • V4 spec introduces async/sync messages
    • V4 spec allows http / message interactions to exist in the same pact
    • Only checks message contents, not transports.
  • Run a CI/CD workshop, showing users how to reach Pact Nirvana with Message Pact

Alpine/Musl with Pact Rust based core, in Pact client libraries

Background

Many teams choose to run builds on Alpine Linux due to its tiny footprint, and smaller security surface area.

Guidance for Alpine users, has been stored on our docs site here

For Pact implementations that use the Ruby shared core

Support is available by installing glibc compatibility layers due the underlying runtime being built on centos7

https://github.com/pact-foundation/pact-ruby-standalone/wiki/Using-the-pact-ruby-standalone-with-Alpine-Linux-Docker

For Pact implementations that use the Rust shared core

Alpine or other musl based distros have not be supported due to

  1. Lack of musl based artifacts from pact-rust based projects
  2. Potential issues requiring the project to possibly be rebuilt against specific versions of Alpine / musl.

Point 1 is now addressed, partially for the FFI library.

Pact-Reference is now publishing musl based versions of the Pact-FFI as of 0.4.15

We would like to investigate creating musl variants of all the pact-reference (rust) based artifacts, and incorporating them into client libraries

Support Level

Any of the musl based artifacts should be considered somewhat experimental and you may encounter issues, as they have not been used for a long time. I would strongly advise these are not used in production workflows, unless you are handy and don't mind investigating issues yourself

We would gratefully ask that if issues are raised, that two things are provided

  1. A minimal reproducible example of a Docker image/file based on Alpine that recreates the issue
  2. A minimal reproducible example of a Docker image/file based on Debian that recreates the issue

Note - The debian image, may not show the same behaviour, this will be useful to determine where there are bugs/issues or gaps in the musl implementation which can be communicated to others.

How to participate?

Drop a comment in this thread, or reach out via slack in #libpact_ffi-users

FFI

Investigate the possibility of incorporating into client libraries

Pact-Js-Core

Snags

  1. pact ruby standalone arm64 fail under qemu in GHA which fails test suite
  2. some inconsistent behaviour in node 16 (set /tmp cache) / 18 ( max sockets 1)
  3. prebuilds take a good while, but these could be limited to only running when the ffi, or native bindings are updated, or failing that just run on pull requests. regular test runs could just grab the latest pre build

Pact-JS

  • Pact-JS

Pact-PHP

Snags

  1. PHP can only load .so files, so requires converted .a musl library
  2. AMD64 musl images require shared-mime-info installing for consistent content type matching, ARM64 doesn't. If installed, they flip behaviour.
  3. Needs musl detection method in downloader/

Pact-Go

  • Pact-Go
    • Support for musl - delta
    • CI Test runs

Snags

  1. Some seg fauls, also occur on vanilla x86_64 build although not consistently reproducible.

Pact-Net

Snags

  1. .NET can only load .so files, so requires converted .a musl library
  2. ARM64 musl on GHA fails to build project, but passes on Cirrus
  3. Needs musl detection method in csproj file

add others

Mock Server CLI

Provider Verifier CLI

Stub Server CLI

Plugins

pact plugin cli

  • fork release
  • issue building existing x86_64 linux executable in CI (build with cross to retain known glibc version)
  • pact plugin driver rust
  • pact plugin driver jvm
  • support downloading non musl variants if not avail, via pact-plugin-cli (rust and jvm driver)

Pact-Protobuf-Plugin

Pact-csv-Plugin

Pact-matt plugin

Build with goreleaser and linked with musl, so existing binaries work with alpine.

  • support downloading non musl variants if not avail, via pact-plugin-cli (rust and jvm driver)

Client language FFI bindings that only support dynamic *.so libaries

For some languages, it is not possible to load a *.a static library.

  • PHP
  • Ruby
  • Others?

It is possible however to convert a .a file to a .so file.

ar -x libpact_ffi.a
gcc -shared *.o -o libpact_ffi.so
rm -f *.o

This shrinks our .a file from 115mb to a circa 41mb .so file, which looks inline with the size of the musl node prebuild for pact-js

Identify key Pact core assets - Update to Ruby 3.1 - Document Pact Universe

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

What happened?

  • pact-ruby-standlaone 2.0.0 was released
  • Issues identified by users / maintainers
    • Requirement to install libyaml-dev for debian based users
  • Error when writing pact files for pact-go-v1 where users are asked to pin the version of the standalone, but provided a script which returns the latest.

Root cause?

  • An error in pact_mock-service was reproducible in CI, when using Ruby 3.2.2
    • Downgrading to Ruby 3.1.2 resolved the issue.

What are we doing about it?

  • Set pact-ruby-standalone 2.0.0 release to pre-release rather than latest to avoid breaking existing users scripts
  • Updated pact-ruby-standalone install.sh script to allow users to fix to particular tag when downloading, over its previous behaviour of using latest
  • Updating all ruby gems to be tested from 2.7 through to 3.2 in CI across
    • macOS / windows / linux
      • x86_64 versions
    • macOS / linux
      • arm64 versions
  • Identifying the root cause of the error above, stopping us moving to 3.2 and looking to help resolve
  • Releasing pact-ruby-standalone with ruby 3.1.2
  • Releasing homebrew-pact-ruby-standalone with versioned revisions so you can switch between or pin in your CI

But aren't we moving to the rust core?

Yes! But we understand not all languages are there right now, and we don't have 100% feature parity in the pact-ruby-standalone package compared to the Rust reference core. There is actually very little, with potentially the only limitation being the pact_broker-client functionality.

Happy to be shown otherwise! If anyone is interested in build out CLI tools in Rust, we have some examples you can follow, if anyone wanted to make a Rust based implementation of the pact_broker-client. Whilst we know it has value, the core maintainers are busy delivering other features, and fixes to users, and therefore it isn't something we are likely to pick up soon, but we are always happy to guide.

Related issues

Repositories affected and associated PR's

Dependency chain releasing instructions

Note Some of these are out of date, or don't have release note pages, so will be captured for snagging

Ruby Goldberg Machine

graph TD;
    pact-support;
    pact-support-->pact-mock_service;
    pact-support-->pact-message;
    pact-mock_service-->pact-message;
    pact-message-->pact-provider-verifier;
    pact-->pact-provider-verifier;
    pact_broker-client;
    pact-->pact-ruby-standalone;
    pact-mock_service-->pact-ruby-standalone;
    pact-support-->pact-ruby-standalone;
    pact-provider-verifier-->pact-ruby-standalone;
    pact_broker-client-->pact-ruby-standalone;
    pact-message-->pact-ruby-standalone;
    pact-->pact-ruby-cli;
    pact-ruby-standalone-->homebrew-pact-ruby-standalone;
    pact-ruby-standalone-->pact-python;
    pact-ruby-standalone-->pact-php;
    pact-ruby-standalone-->pact-node-->pact-js-v9;
    pact-ruby-standalone-->pact-js-core-->pact-js-v10
    pact-js-v9-->jest-pact;
    pact-js-v9-->mocha-pact;
    pact-js-v9-->nestjs-pact;
    pact-js-v10-->jest-pact;
    pact-js-v10-->nestjs-pact;
    pact-ruby-standalone-->pact-go-v1;
    pact-ruby-standalone-->pact-net;
    pact-ruby-standalone-->pact-consumer-swift;

Ruby Standalone Consumers Goldberg Machine

graph TD;
    pact-->pact-ruby-standalone;
    pact-mock_service-->pact-ruby-standalone;
    pact-support-->pact-ruby-standalone;
    pact-provider-verifier-->pact-ruby-standalone;
    pact_broker-client-->pact-ruby-standalone;
    pact-message-->pact-ruby-standalone;
    pact-ruby-standalone-->homebrew-pact-ruby-standalone;
    pact-ruby-standalone-->pact-python;
    pact-ruby-standalone-->pact-php;
    pact-ruby-standalone-->pact-node-->pact-js-v9;
    pact-ruby-standalone-->pact-js-core-->pact-js-v10
    pact-js-v9-->jest-pact;
    pact-js-v9-->mocha-pact;
    pact-js-v9-->nestjs-pact;
    pact-js-v10-->jest-pact;
    pact-js-v10-->nestjs-pact;
    pact-ruby-standalone-->pact-go-v1;
    pact-ruby-standalone-->pact-net;
    pact-ruby-standalone-->pact-consumer-swift;

Rust Goldberg machine

graph TD;
    pact_cli;
    pact_models-->pact_cli;
    pact_matching-->pact_cli;
    pact_consumer;
    pact_models-->pact_consumer;
    pact_matching-->pact_consumer;
    pact_mock_server-->pact_consumer;
    pact_ffi;
    pact_matching-->pact_ffi;
    pact_models-->pact_ffi;
    pact_mock_server-->pact_ffi;
    pact_verifier-->pact_ffi;
    pact_matching;
    pact_models-->pact_matching;
    pact_mock_server;
    pact_matching-->pact_mock_server;
    pact_models-->pact_mock_server;
    pact_mock_server_cli;
    pact_matching-->pact_mock_server_cli;
    pact_models-->pact_mock_server_cli;
    pact_mock_server-->pact_mock_server_cli;
    pact_models;
    pact_verifier;
    pact_matching-->pact_verifier;
    pact_models-->pact_verifier;
    pact-plugin-driver-->pact_verifier;
    pact_verifier_cli;
    pact_models-->pact_verifier_cli;
    pact_verifier-->pact_verifier_cli;
    pact_wasm;
    pact_models-->pact_wasm;
    pact-plugin-driver;
    pact_models-->pact-plugin-driver;
    pact_ffi-->pact-js-core-->pact-js-v10;
    pact-js-v10-->jest-pact;
    pact_ffi-->pact-net-v4;
    pact_ffi-->pact-go-v2;
    pact_ffi-->pact-swift-->pact-swift-examples;
    pact_ffi-->pact-dart;
    pact_ffi-->pact-cplusplus;
    pact_mock_server-->pact_elixir;

Rust FFI Consumers Goldberg machine

graph TD;
    pact_ffi;
    pact_ffi-->pact-js-core-->pact-js-v10;
    pact-js-v10-->jest-pact;
    pact_ffi-->pact-net-v4;
    pact_ffi-->pact-go-v2;
    pact_ffi-->pact-swift-->pact-swift-examples;
    pact_ffi-->pact-dart;
    pact_ffi-->pact-cplusplus;

Java Goldberg machine

graph TD;
    pact_jvm;
    pact_jvm-->pact4s;

Pact Ruby Standalone Consumers

Versions

Tested using

Test runs

Pactober Workshop 3 - CI/CD workshop (Plugin Pact)

Pactober Workshop 3 - CI/CD workshop (Plugin Pact)

Event Details

Item Description
๐Ÿ“… Date 17th October
๐Ÿ• Time 15:00 BST / 10:00 EDT / 00:00 AEST
๐Ÿ“น Webinar link https://smartbear.zoom.us/j/94793760632
YouTube Link https://www.youtube.com/watch?v=0FpzPRSf2VA

Aims

Introduce the concepts of multi-protocol systems, and how the pact-plugin framework was developed to enable users to extend Pact to cover use cases that may not be applicable to all end users.

Provide a workshop which builds on the previous CI/CD example but shows a gRPC consumer and provider, to highlight the differences

Agenda

  • Introduce users to the concepts of the Pact Plugin framework introduced in Pact Spec v4
  • Discuss some of the benefits/limitations of the pact-plugin approach
  • Run a CI/CD workshop, showing users how to reach Pact Nirvana with Plugin Pacts (probably gRPC area calculator)

Pact - 5 minute getting started guide in each language

Update https://docs.pact.io/5-minute-getting-started-guide

Pact Language Implementations - Ensure sustainable CI process

  • Document all language implementations to cover, and add to list
  • Vulnerability scans
  • Dependency updates
  • ensure tests exist
  • ensure tests are isolated and do not depend on external setup
  • ensure CI build process
  • ensure CI test process
  • ensure CI release process
  • enable CI canary release process
  • enable scheduled build triggers
  • build external getting-started repo
  • trigger example repositories on CI releases

Publish images to GitHub Container Registry

Pactober Workshops

Placeholder for workshop content.

Happy to incorporate feedback, or for suggesting of content topics etc.

Pactober Workshop 1 - CI/CD workshop (HTTP Pact)

Aims

Warmup for the start of Pactober, introducing users to the core concept of contract testing, and Pact.

Provide a workshop where we take users through the recommended Pact setup.

Agenda

  • Introduce users to contract testing and pact
  • Run a CI/CD workshop, showing users how to reach Pact Nirvana with HTTP Pact

Pactober Workshop 2 - CI/CD workshop (Message Pact)

Aims

Introduce users to the evolution of Microservices, and event based systems, and how this is handled by Pact.

Provide a workshop which builds on the previous CI/CD example but shows a messaging consumer and provider, to highlight the differences

Agenda

  • Introduce users to the concepts of Message Pact introduced in Pact Spec v3
  • Discuss some of the limitations of the current approach
    • V3 named diff providers
    • V4 spec introduces async/sync messages
    • V4 spec allows http / message interactions to exist in the same pact
    • Only checks message contents, not transports.
  • Run a CI/CD workshop, showing users how to reach Pact Nirvana with Message Pact

Pactober Workshop 3 - CI/CD workshop (Plugin Pact)

Aims

Introduce the concepts of multi-protocol systems, and how the pact-plugin framework was developed to enable users to extend Pact to cover use cases that may not be applicable to all end users.

Provide a workshop which builds on the previous CI/CD example but shows a gRPC consumer and provider, to highlight the differences

Agenda

  • Introduce users to the concepts of the Pact Plugin framework introduced in Pact Spec v4
  • Discuss some of the benefits/limitations of the pact-plugin approach
  • Run a CI/CD workshop, showing users how to reach Pact Nirvana with Plugin Pacts (probably gRPC area calculator)

Pactober Workshop 4 - Maintainer/contributor workshop How Pact is built

Aims

Introduce interested users into how Pact is built, distributed and used by client languages, by using our previous workshop examples as use cases.

This would be more aimed at maintainer/contributors, or those interested in the internals of Pact. This could be useful for users in languages who are unfamiliar with Rust (which our Pact reference core is written in)

Agenda

  • Introduce users to the Pact reference core and the FFI approach
  • Discuss some of the benefits/limitations of the new approach compared to the Pact ruby implementation.
  • Run a workshop showing how to the FFI is leveraged in our 3 tests used in the CI/CD workshop
    • HTTP Pact
    • Message Pact
    • Plugin Pact

Pactober Workshop 4 - Maintainer/contributor workshop How Pact is built

Pactober Workshop 4 - Maintainer/contributor workshop How Pact is built

Event Details

Item Description
๐Ÿ“… Date 24th October
๐Ÿ• Time 15:00 BST / 10:00 EDT / 00:00 AEST
๐Ÿ“น Webinar link https://smartbear.zoom.us/j/92261666792
YouTube Link https://www.youtube.com/watch?v=QIza-D-f7DI

Aims

Introduce interested users into how Pact is built, distributed and used by client languages, by using our previous workshop examples as use cases.

This would be more aimed at maintainer/contributors, or those interested in the internals of Pact. This could be useful for users in languages who are unfamiliar with Rust (which our Pact reference core is written in)

Agenda

  • Introduce users to the Pact reference core and the FFI approach
  • Discuss some of the benefits/limitations of the new approach compared to the Pact ruby implementation.
  • Run a workshop showing how to the FFI is leveraged in our 3 tests used in the CI/CD workshop
    • HTTP Pact
    • Message Pact
    • Plugin Pact

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.