Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collab with tienvx: use ffi #257

Conversation

Lewiscowles1986
Copy link
Collaborator

@Lewiscowles1986 Lewiscowles1986 commented May 28, 2022

@Lewiscowles1986 Lewiscowles1986 force-pushed the collab/tienvx/use-ffi branch 3 times, most recently from 3caff99 to 225b3da Compare May 28, 2022 03:56
Last release Jan 2021... Has shared objects not shipped with. Goodbye.
@mmoll
Copy link
Contributor

mmoll commented Sep 3, 2022

@Lewiscowles1986 this needs a rebase, but would be good to go otherwise, correct?

@Lewiscowles1986
Copy link
Collaborator Author

@mmoll it was working if this what what you are asking. I'll get it rebased and then we'll see if anything has changed.

@Lewiscowles1986
Copy link
Collaborator Author

After rebase this doesn't pass. No clear error message about why.
Bumped versions, in-case that might solve. No clearer error message, still inconsistent fails between runs.
Only composer.json addition now is the ffi extension.

master also won't pass (as in 0 of 10 runs) so something isn't right here.

Are there perhaps undocumented extensions or setup needed? I noticed a lot of amphp in composer.json. Usually that needs threading PHP.

In-between runs I am deleting the pact folder to ensure that every test is freshly downloading dependencies. Ubuntu 20.04, all updates running distro PHP 7.4.

@Lewiscowles1986
Copy link
Collaborator Author

1) PhpPact\Standalone\Broker\BrokerTest::describeVersion
Exception: PactPHP Process returned non-zero exit code: 1

/home/lewis/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Runner/ProcessRunner.php:132
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Coroutine.php:118
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Internal/Placeholder.php:149
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Coroutine.php:123
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Internal/Placeholder.php:149
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Deferred.php:52
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/byte-stream/lib/ResourceInputStream.php:101
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Loop/NativeDriver.php:183
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Loop/NativeDriver.php:96
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Loop/Driver.php:138
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Loop/Driver.php:72
/home/lewis/projects/pact-foundation/pact-php/vendor/amphp/amp/lib/Loop.php:95
/home/lewis/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Runner/ProcessRunner.php:138
/home/lewis/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Broker/Broker.php:195
/home/lewis/projects/pact-foundation/pact-php/tests/PhpPact/Standalone/Broker/BrokerTest.php:57

@mmoll
Copy link
Contributor

mmoll commented Sep 4, 2022

The runner gets Pacticipant version not found but I have no idea how to debug/fix this further.

diff --git a/src/PhpPact/Standalone/Runner/ProcessRunner.php b/src/PhpPact/Standalone/Runner/ProcessRunner.php
index bcd8325..4b60ed5 100644
--- a/src/PhpPact/Standalone/Runner/ProcessRunner.php
+++ b/src/PhpPact/Standalone/Runner/ProcessRunner.php
@@ -129,7 +129,7 @@ class ProcessRunner
             $logger->debug("Exit code: {$this->getExitCode()}");
 
             if ($this->getExitCode() !== 0) {
-                throw new \Exception("PactPHP Process returned non-zero exit code: {$this->getExitCode()}");
+                throw new \Exception("PactPHP Process returned non-zero exit code: {$this->output}");
             }
 
             Loop::stop();

@Lewiscowles1986
Copy link
Collaborator Author

Lewiscowles1986 commented Sep 4, 2022

I'll be honest. Most of my problem with this is that I'm not very interested in getting to the bottom of it.

The FFI library should be less flaky than the sub-process approach taken by the PHP code now, but this PR doesn't remove all the sub-process nonsense, nor make it more clear about errors. I ran the command that is reporting as failed. It's exit code is 0. Keep in mind I'm checked out master in $HOME/projects/pact-foundation/pact-php

$HOME/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Installer/../../../../pact/bin/pact-broker list-latest-pact-versions --output=json --broker-base-url=https://test.pactflow.io --broker-username=dXfltyFMgNOFZAxr8io9wJ37iUpY42M --broker-password=O5AIZWxelWbLvqMd8PkAVycBJh2Psyg1

RE: the edit to get output, I think going a few lines up and placing it within the debug might be closer to the intent. Filling exceptions with intricate details is a smell, that will only make it harder to deal with logging and troubleshooting. At least in an explicit debug log message it should never reach logs off a developer computer.

Output of the command (formatted "pretty" JSON)
{
    "pacts": [
        {
            "createdAt": "2022-08-29T19:22:49+00:00",
            "_embedded": {
                "consumer": {
                    "name": "consumer",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-master+0.b438195.SNAPSHOT.esrimopc",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-master+0.b438195.SNAPSHOT.esrimopc",
                                    "href": "https://test.pactflow.io/pacticipants/consumer/versions/10.1.2-master%2B0.b438195.SNAPSHOT.esrimopc"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/consumer"
                        }
                    }
                },
                "provider": {
                    "name": "provider",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/provider"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/provider/consumer/consumer/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/provider/consumer/consumer/version/10.1.2-master%2B0.b438195.SNAPSHOT.esrimopc"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-30T05:33:17+00:00",
            "_embedded": {
                "consumer": {
                    "name": "e2e Consumer Example",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-master+40.fa4248c",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-master+40.fa4248c",
                                    "href": "https://test.pactflow.io/pacticipants/e2e%20Consumer%20Example/versions/10.1.2-master%2B40.fa4248c"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/e2e%20Consumer%20Example"
                        }
                    }
                },
                "provider": {
                    "name": "e2e Provider Example",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/e2e%20Provider%20Example"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/e2e%20Provider%20Example/consumer/e2e%20Consumer%20Example/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/e2e%20Provider%20Example/consumer/e2e%20Consumer%20Example/version/10.1.2-master%2B40.fa4248c"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T00:17:46+00:00",
            "_embedded": {
                "consumer": {
                    "name": "Foo",
                    "_embedded": {
                        "version": {
                            "number": "1.0.0",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "1.0.0",
                                    "href": "https://test.pactflow.io/pacticipants/Foo/versions/1.0.0"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Foo"
                        }
                    }
                },
                "provider": {
                    "name": "Bar",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Bar"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Bar/consumer/Foo/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Bar/consumer/Foo/version/1.0.0"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T13:03:48+00:00",
            "_embedded": {
                "consumer": {
                    "name": "GettingStartedOrderWeb",
                    "_embedded": {
                        "version": {
                            "number": "1.0.0",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "1.0.0",
                                    "href": "https://test.pactflow.io/pacticipants/GettingStartedOrderWeb/versions/1.0.0"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/GettingStartedOrderWeb"
                        }
                    }
                },
                "provider": {
                    "name": "GettingStartedOrderApi",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/GettingStartedOrderApi"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/GettingStartedOrderApi/consumer/GettingStartedOrderWeb/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/GettingStartedOrderApi/consumer/GettingStartedOrderWeb/version/1.0.0"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T13:45:41+00:00",
            "_embedded": {
                "consumer": {
                    "name": "GraphQLConsumer",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-e2eexamplematchers+44.9cb6e9d.SNAPSHOT.fv-az290-930",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-e2eexamplematchers+44.9cb6e9d.SNAPSHOT.fv-az290-930",
                                    "href": "https://test.pactflow.io/pacticipants/GraphQLConsumer/versions/10.1.2-e2eexamplematchers%2B44.9cb6e9d.SNAPSHOT.fv-az290-930"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/GraphQLConsumer"
                        }
                    }
                },
                "provider": {
                    "name": "GraphQLProvider",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/GraphQLProvider"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/GraphQLProvider/consumer/GraphQLConsumer/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/GraphQLProvider/consumer/GraphQLConsumer/version/10.1.2-e2eexamplematchers%2B44.9cb6e9d.SNAPSHOT.fv-az290-930"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T19:18:19+00:00",
            "_embedded": {
                "consumer": {
                    "name": "Jest-Consumer-Example",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-master+4.628111a.SNAPSHOT.Yousafs-MacBook-Pro",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-master+4.628111a.SNAPSHOT.Yousafs-MacBook-Pro",
                                    "href": "https://test.pactflow.io/pacticipants/Jest-Consumer-Example/versions/10.1.2-master%2B4.628111a.SNAPSHOT.Yousafs-MacBook-Pro"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Jest-Consumer-Example"
                        }
                    }
                },
                "provider": {
                    "name": "Jest-Provider-Example",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Jest-Provider-Example"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Jest-Provider-Example/consumer/Jest-Consumer-Example/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Jest-Provider-Example/consumer/Jest-Consumer-Example/version/10.1.2-master%2B4.628111a.SNAPSHOT.Yousafs-MacBook-Pro"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-24T16:04:27+00:00",
            "_embedded": {
                "consumer": {
                    "name": "katacoda-cid-consumer-js-v3",
                    "_embedded": {
                        "version": {
                            "number": "1.0.0-someconsumersha",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "1.0.0-someconsumersha",
                                    "href": "https://test.pactflow.io/pacticipants/katacoda-cid-consumer-js-v3/versions/1.0.0-someconsumersha"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/katacoda-cid-consumer-js-v3"
                        }
                    }
                },
                "provider": {
                    "name": "katacoda-cid-provider-js-v3",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/katacoda-cid-provider-js-v3"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/katacoda-cid-provider-js-v3/consumer/katacoda-cid-consumer-js-v3/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/katacoda-cid-provider-js-v3/consumer/katacoda-cid-consumer-js-v3/version/1.0.0-someconsumersha"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T12:02:07+00:00",
            "_embedded": {
                "consumer": {
                    "name": "Matching Service V3",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-e2eexamplematchers+43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-e2eexamplematchers+43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro",
                                    "href": "https://test.pactflow.io/pacticipants/Matching%20Service%20V3/versions/10.1.2-e2eexamplematchers%2B43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Matching%20Service%20V3"
                        }
                    }
                },
                "provider": {
                    "name": "Animal Profile Service V3",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/Animal%20Profile%20Service%20V3"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Animal%20Profile%20Service%20V3/consumer/Matching%20Service%20V3/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/Animal%20Profile%20Service%20V3/consumer/Matching%20Service%20V3/version/10.1.2-e2eexamplematchers%2B43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T12:01:24+00:00",
            "_embedded": {
                "consumer": {
                    "name": "MyJSMessageConsumer",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-e2eexamplematchers+43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-e2eexamplematchers+43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro",
                                    "href": "https://test.pactflow.io/pacticipants/MyJSMessageConsumer/versions/10.1.2-e2eexamplematchers%2B43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/MyJSMessageConsumer"
                        }
                    }
                },
                "provider": {
                    "name": "MyJSMessageProvider",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/MyJSMessageProvider"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/MyJSMessageProvider/consumer/MyJSMessageConsumer/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/MyJSMessageProvider/consumer/MyJSMessageConsumer/version/10.1.2-e2eexamplematchers%2B43.349aaf7.SNAPSHOT.Yousafs-MacBook-Pro"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-31T03:20:12+00:00",
            "_embedded": {
                "consumer": {
                    "name": "NestJS Consumer Example",
                    "_embedded": {
                        "version": {
                            "number": "aeff11-main+aeff11",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "aeff11-main+aeff11",
                                    "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example/versions/aeff11-main%2Baeff11"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example"
                        }
                    }
                },
                "provider": {
                    "name": "NestJS Provider Example",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Provider%20Example"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example/version/aeff11-main%2Baeff11"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-31T03:20:09+00:00",
            "_embedded": {
                "consumer": {
                    "name": "NestJS Consumer Example Pas",
                    "_embedded": {
                        "version": {
                            "number": "aeff11-main+aeff11",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "aeff11-main+aeff11",
                                    "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example%20Pas/versions/aeff11-main%2Baeff11"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example%20Pas"
                        }
                    }
                },
                "provider": {
                    "name": "NestJS Provider Example",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Provider%20Example"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pas/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pas/version/aeff11-main%2Baeff11"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-31T03:20:10+00:00",
            "_embedded": {
                "consumer": {
                    "name": "NestJS Consumer Example Pass",
                    "_embedded": {
                        "version": {
                            "number": "aeff11-main+aeff11",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "aeff11-main+aeff11",
                                    "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example%20Pass/versions/aeff11-main%2Baeff11"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Consumer%20Example%20Pass"
                        }
                    }
                },
                "provider": {
                    "name": "NestJS Provider Example",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/NestJS%20Provider%20Example"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pass/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pass/version/aeff11-main%2Baeff11"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-30T12:12:48+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-cypress",
                    "_embedded": {
                        "version": {
                            "number": "28669a49080d16cfb62291c1a10d55b431d61474",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "28669a49080d16cfb62291c1a10d55b431d61474",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-cypress/versions/28669a49080d16cfb62291c1a10d55b431d61474"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-cypress"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-postman",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-postman"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-cypress/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-cypress/version/28669a49080d16cfb62291c1a10d55b431d61474"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:28:04+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-mountebank",
                    "_embedded": {
                        "version": {
                            "number": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank/versions/b95313e17c1ef667fa016888005b4f18ad5301fa"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-dredd",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-dredd"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-mountebank/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-mountebank/version/b95313e17c1ef667fa016888005b4f18ad5301fa"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:28:06+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-mountebank",
                    "_embedded": {
                        "version": {
                            "number": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank/versions/b95313e17c1ef667fa016888005b4f18ad5301fa"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-postman",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-postman"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-mountebank/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-mountebank/version/b95313e17c1ef667fa016888005b4f18ad5301fa"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:27:33+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-mountebank",
                    "_embedded": {
                        "version": {
                            "number": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "b95313e17c1ef667fa016888005b4f18ad5301fa",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank/versions/b95313e17c1ef667fa016888005b4f18ad5301fa"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-mountebank"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-restassured",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-restassured"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-mountebank/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-mountebank/version/b95313e17c1ef667fa016888005b4f18ad5301fa"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:31:50+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-nock",
                    "_embedded": {
                        "version": {
                            "number": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock/versions/d259955a83c5d6cb5c6ac9a45494265958795c42"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-dredd",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-dredd"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-nock/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-nock/version/d259955a83c5d6cb5c6ac9a45494265958795c42"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:32:10+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-nock",
                    "_embedded": {
                        "version": {
                            "number": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock/versions/d259955a83c5d6cb5c6ac9a45494265958795c42"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-postman",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-postman"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-nock/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-nock/version/d259955a83c5d6cb5c6ac9a45494265958795c42"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-23T16:31:52+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-nock",
                    "_embedded": {
                        "version": {
                            "number": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "d259955a83c5d6cb5c6ac9a45494265958795c42",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock/versions/d259955a83c5d6cb5c6ac9a45494265958795c42"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-nock"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-restassured",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-restassured"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-nock/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-nock/version/d259955a83c5d6cb5c6ac9a45494265958795c42"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T16:16:53+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-bi-directional-consumer-playwright",
                    "_embedded": {
                        "version": {
                            "number": "bb8e1fd5801fc4a47ad43bf36cbfc6a8b71a08ee",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "bb8e1fd5801fc4a47ad43bf36cbfc6a8b71a08ee",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-playwright/versions/bb8e1fd5801fc4a47ad43bf36cbfc6a8b71a08ee"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-consumer-playwright"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-bi-directional-provider-postman",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-bi-directional-provider-postman"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-playwright/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-playwright/version/bb8e1fd5801fc4a47ad43bf36cbfc6a8b71a08ee"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-26T14:38:28+00:00",
            "_embedded": {
                "consumer": {
                    "name": "pactflow-example-consumer-python-sns",
                    "_embedded": {
                        "version": {
                            "number": "1314555c463287bf55f835fddbb36c9782b52264",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "1314555c463287bf55f835fddbb36c9782b52264",
                                    "href": "https://test.pactflow.io/pacticipants/pactflow-example-consumer-python-sns/versions/1314555c463287bf55f835fddbb36c9782b52264"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-consumer-python-sns"
                        }
                    }
                },
                "provider": {
                    "name": "pactflow-example-provider-js-sns",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/pactflow-example-provider-js-sns"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-provider-js-sns/consumer/pactflow-example-consumer-python-sns/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/pactflow-example-provider-js-sns/consumer/pactflow-example-consumer-python-sns/version/1314555c463287bf55f835fddbb36c9782b52264"
                    }
                ]
            }
        },
        {
            "createdAt": "2022-08-29T19:19:23+00:00",
            "_embedded": {
                "consumer": {
                    "name": "SNSPactEventConsumer",
                    "_embedded": {
                        "version": {
                            "number": "10.1.2-master+0.b438195.SNAPSHOT.esrimopc",
                            "_links": {
                                "self": {
                                    "title": "Version",
                                    "name": "10.1.2-master+0.b438195.SNAPSHOT.esrimopc",
                                    "href": "https://test.pactflow.io/pacticipants/SNSPactEventConsumer/versions/10.1.2-master%2B0.b438195.SNAPSHOT.esrimopc"
                                }
                            }
                        }
                    },
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/SNSPactEventConsumer"
                        }
                    }
                },
                "provider": {
                    "name": "SNSPactEventProvider",
                    "_links": {
                        "self": {
                            "href": "https://test.pactflow.io/pacticipants/SNSPactEventProvider"
                        }
                    }
                }
            },
            "_links": {
                "self": [
                    {
                        "href": "https://test.pactflow.io/pacts/provider/SNSPactEventProvider/consumer/SNSPactEventConsumer/latest"
                    },
                    {
                        "href": "https://test.pactflow.io/pacts/provider/SNSPactEventProvider/consumer/SNSPactEventConsumer/version/10.1.2-master%2B0.b438195.SNAPSHOT.esrimopc"
                    }
                ]
            }
        }
    ],
    "_links": {
        "self": {
            "href": "https://test.pactflow.io/pacts/latest"
        },
        "pb:pacts": [
            {
                "href": "https://test.pactflow.io/pacts/provider/provider/consumer/consumer/latest",
                "title": "Latest pact between consumer and provider"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/e2e%20Provider%20Example/consumer/e2e%20Consumer%20Example/latest",
                "title": "Latest pact between e2e Consumer Example and e2e Provider Example"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Bar/consumer/Foo/latest",
                "title": "Latest pact between Foo and Bar"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/GettingStartedOrderApi/consumer/GettingStartedOrderWeb/latest",
                "title": "Latest pact between GettingStartedOrderWeb and GettingStartedOrderApi"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/GraphQLProvider/consumer/GraphQLConsumer/latest",
                "title": "Latest pact between GraphQLConsumer and GraphQLProvider"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Jest-Provider-Example/consumer/Jest-Consumer-Example/latest",
                "title": "Latest pact between Jest-Consumer-Example and Jest-Provider-Example"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/katacoda-cid-provider-js-v3/consumer/katacoda-cid-consumer-js-v3/latest",
                "title": "Latest pact between katacoda-cid-consumer-js-v3 and katacoda-cid-provider-js-v3"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Animal%20Profile%20Service%20V3/consumer/Matching%20Service%20V3/latest",
                "title": "Latest pact between Matching Service V3 and Animal Profile Service V3"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/MyJSMessageProvider/consumer/MyJSMessageConsumer/latest",
                "title": "Latest pact between MyJSMessageConsumer and MyJSMessageProvider"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example/latest",
                "title": "Latest pact between NestJS Consumer Example and NestJS Provider Example"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pas/latest",
                "title": "Latest pact between NestJS Consumer Example Pas and NestJS Provider Example"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pass/latest",
                "title": "Latest pact between NestJS Consumer Example Pass and NestJS Provider Example"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-cypress/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-cypress and pactflow-example-bi-directional-provider-postman"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-dredd"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-postman"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-restassured"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-dredd"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-postman"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-restassured"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-playwright/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-playwright and pactflow-example-bi-directional-provider-postman"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-provider-js-sns/consumer/pactflow-example-consumer-python-sns/latest",
                "title": "Latest pact between pactflow-example-consumer-python-sns and pactflow-example-provider-js-sns"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/SNSPactEventProvider/consumer/SNSPactEventConsumer/latest",
                "title": "Latest pact between SNSPactEventConsumer and SNSPactEventProvider"
            }
        ],
        "pacts": [
            {
                "href": "https://test.pactflow.io/pacts/provider/provider/consumer/consumer/latest",
                "title": "Latest pact between consumer and provider",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/e2e%20Provider%20Example/consumer/e2e%20Consumer%20Example/latest",
                "title": "Latest pact between e2e Consumer Example and e2e Provider Example",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Bar/consumer/Foo/latest",
                "title": "Latest pact between Foo and Bar",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/GettingStartedOrderApi/consumer/GettingStartedOrderWeb/latest",
                "title": "Latest pact between GettingStartedOrderWeb and GettingStartedOrderApi",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/GraphQLProvider/consumer/GraphQLConsumer/latest",
                "title": "Latest pact between GraphQLConsumer and GraphQLProvider",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Jest-Provider-Example/consumer/Jest-Consumer-Example/latest",
                "title": "Latest pact between Jest-Consumer-Example and Jest-Provider-Example",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/katacoda-cid-provider-js-v3/consumer/katacoda-cid-consumer-js-v3/latest",
                "title": "Latest pact between katacoda-cid-consumer-js-v3 and katacoda-cid-provider-js-v3",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/Animal%20Profile%20Service%20V3/consumer/Matching%20Service%20V3/latest",
                "title": "Latest pact between Matching Service V3 and Animal Profile Service V3",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/MyJSMessageProvider/consumer/MyJSMessageConsumer/latest",
                "title": "Latest pact between MyJSMessageConsumer and MyJSMessageProvider",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example/latest",
                "title": "Latest pact between NestJS Consumer Example and NestJS Provider Example",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pas/latest",
                "title": "Latest pact between NestJS Consumer Example Pas and NestJS Provider Example",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/NestJS%20Provider%20Example/consumer/NestJS%20Consumer%20Example%20Pass/latest",
                "title": "Latest pact between NestJS Consumer Example Pass and NestJS Provider Example",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-cypress/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-cypress and pactflow-example-bi-directional-provider-postman",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-dredd",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-postman",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-mountebank/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-mountebank and pactflow-example-bi-directional-provider-restassured",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-dredd/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-dredd",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-postman",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-restassured/consumer/pactflow-example-bi-directional-consumer-nock/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-nock and pactflow-example-bi-directional-provider-restassured",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-bi-directional-provider-postman/consumer/pactflow-example-bi-directional-consumer-playwright/latest",
                "title": "Latest pact between pactflow-example-bi-directional-consumer-playwright and pactflow-example-bi-directional-provider-postman",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/pactflow-example-provider-js-sns/consumer/pactflow-example-consumer-python-sns/latest",
                "title": "Latest pact between pactflow-example-consumer-python-sns and pactflow-example-provider-js-sns",
                "name": "DEPRECATED - please use the pb:pacts relation"
            },
            {
                "href": "https://test.pactflow.io/pacts/provider/SNSPactEventProvider/consumer/SNSPactEventConsumer/latest",
                "title": "Latest pact between SNSPactEventConsumer and SNSPactEventProvider",
                "name": "DEPRECATED - please use the pb:pacts relation"
            }
        ],
        "curies": [
            {
                "name": "pb",
                "href": "https://test.pactflow.io/doc/{rel}?context=pacts",
                "templated": true
            }
        ]
    }
}

warning
Update: It looks like I was seeing the incorrect thing before.

$HOME/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Installer/../../../../pact/bin/pact-broker describe-version --pacticipant=Animal%20Profile%20Service --output=json --broker-base-url=https://test.pactflow.io --broker-username=dXfltyFMgNOFZAxr8io9wJ37iUpY42M --broker-password=O5AIZWxelWbLvqMd8PkAVycBJh2Psyg1

Gets the error message Pacticipant version not found

This reads like it's a downstream system failure, which makes this test not fit for purpose.

@Lewiscowles1986
Copy link
Collaborator Author

Utterly abysmal... Someone never heard of stable URL's

$HOME/projects/pact-foundation/pact-php/src/PhpPact/Standalone/Installer/../../../../pact/bin/pact-broker describe-version --pacticipant=Animal%20Profile%20Service --output=json --broker-base-url=https://test.pactflow.io --broker-username=dXfltyFMgNOFZAxr8io9wJ37iUpY42M --broker-password=O5AIZWxelWbLvqMd8PkAVycBJh2Psyg1 -v -l
Command output
opening connection to test.pactflow.io:443...
opened
starting SSL for test.pactflow.io:443...
SSL established
<- "GET / HTTP/1.1\r\nAccept: application/hal+json, application/json\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nUser-Agent: Ruby\r\nAuthorization: Basic ZFhmbHR5Rk1nTk9GWkF4cjhpbzl3SjM3aVVwWTQyTTpPNUFJWld4ZWxXYkx2cU1kOFBrQVZ5Y0JKaDJQc3lnMQ==\r\nConnection: close\r\nHost: test.pactflow.io\r\n\r\n"
-> "HTTP/1.1 200 OK\r\n"
-> "Date: Sun, 04 Sep 2022 17:41:46 GMT\r\n"
-> "Content-Type: application/hal+json;charset=utf-8\r\n"
-> "Content-Length: 4413\r\n"
-> "Connection: close\r\n"
-> "Vary: Accept\r\n"
-> "Server: Webmachine-Ruby/1.6.0 Rack/1.3\r\n"
-> "X-Pact-Broker-Version: 2.102.2\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "Strict-Transport-Security: max-age=63072000; includeSubDomains; preload\r\n"
-> "X-Pact-Broker-Git-Sha: dcb59203\r\n"
-> "X-Pactflow-Git-Sha: 08240e2d3\r\n"
-> "X-Request-Id: 1ffdfab51a447c5ae3c153e44ef5739f\r\n"
-> "\r\n"
reading 4413 bytes...
-> "{\"_links\":{\"self\":{\"href\":\"https://test.pactflow.io\",\"title\":\"Index\",\"templated\":false},\"pb:publish-pact\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/consumer/{consumer}/version/{consumerApplicationVersion}\",\"title\":\"Publish a pact\",\"templated\":true},\"pb:publish-contracts\":{\"href\":\"https://test.pactflow.io/contracts/publish\",\"title\":\"Publish contracts\",\"templated\":false},\"pb:latest-pact-versions\":{\"href\":\"https://test.pactflow.io/pacts/latest\",\"title\":\"Latest pact versions\",\"templated\":false},\"pb:tagged-pact-versions\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/consumer/{consumer}/tag/{tag}\",\"title\":\"All versions of a pact for a given consumer, provider and consumer version tag\",\"templated\":false},\"pb:pacticipants\":{\"href\":\"https://test.pactflow.io/pacticipants\",\"title\":\"Pacticipants\",\"templated\":false},\"pb:pacticipant\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}\",\"title\":\"Fetch pacticipant by name\",\"templated\":true},\"pb:latest-provider-pacts\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/latest\",\"title\":\"Latest pacts by provider\",\"templated\":true},\"pb:latest-provider-pacts-with-tag\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/latest/{tag}\",\"title\":\"Latest pacts for provider with the specified tag\",\"templated\":true},\"pb:provider-pacts-with-tag\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/tag/{tag}\",\"title\":\"All pact versions for the provider with the specified consumer version tag\",\"templated\":true},\"pb:provider-pacts\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}\",\"title\":\"All pact versions for the specified provider\",\"templated\":true},\"pb:latest-version\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}/latest-version\",\"title\":\"Latest pacticipant version\",\"templated\":true},\"pb:latest-tagged-version\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}/latest-version/{tag}\",\"title\":\"Latest pacticipant version with the specified tag\",\"templated\":true},\"pb:webhooks\":{\"href\":\"https://test.pactflow.io/webhooks\",\"title\":\"Webhooks\",\"templated\":false},\"pb:webhook\":{\"href\":\"https://test.pactflow.io/webhooks/{uuid}\",\"title\":\"Webhook\",\"templated\":true},\"pb:integrations\":{\"href\":\"https://test.pactflow.io/integrations\",\"title\":\"Integrations\",\"templated\":false},\"pb:pacticipant-version-tag\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}/versions/{version}/tags/{tag}\",\"title\":\"Get, create or delete a tag for a pacticipant version\",\"templated\":true},\"pb:pacticipant-branch-version\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}/branches/{branch}/versions/{version}\",\"title\":\"Get or add/create a pacticipant version for a branch\",\"templated\":true},\"pb:pacticipant-version\":{\"href\":\"https://test.pactflow.io/pacticipants/{pacticipant}/versions/{version}\",\"title\":\"Get, create or delete a pacticipant version\",\"templated\":true},\"pb:metrics\":{\"href\":\"https://test.pactflow.io/metrics\",\"title\":\"Get Pact Broker metrics\"},\"pb:can-i-deploy-pacticipant-version-to-tag\":{\"href\":\"https://test.pactflow.io/can-i-deploy?pacticipant={pacticipant}\\u0026version={version}\\u0026to={tag}\",\"title\":\"Determine if an application version can be safely deployed to an environment identified by the given tag\",\"templated\":true},\"pb:can-i-deploy-pacticipant-version-to-environment\":{\"href\":\"https://test.pactflow.io/can-i-deploy?pacticipant={pacticipant}\\u0026version={version}\\u0026environment={environment}\",\"title\":\"Determine if an application version can be safely deployed to an environment\",\"templated\":true},\"pb:provider-pacts-for-verification\":{\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/for-verification\",\"title\":\"Pact versions to be verified for the specified provider\",\"templated\":true},\"beta:provider-pacts-for-verification\":{\"name\":\"beta\",\"href\":\"https://test.pactflow.io/pacts/provider/{provider}/for-verification\",\"title\":\"DEPRECATED - please use pb:provider-pacts-for-verification\",\"templated\":true},\"curies\":[{\"name\":\"pb\",\"href\":\"https://test.pactflow.io/doc/{rel}?context=index\",\"templated\":true},{\"name\":\"beta\",\"href\":\"https://test.pactflow.io/doc/{rel}?context=index\",\"templated\":true}],\"pb:environment\":{\"title\":\"Environment\",\"href\":\"https://test.pactflow.io/environments/{uuid}\",\"templated\":true},\"pf:user-allocations\":{\"href\":\"https://test.pactflow.io/tenant/limits\",\"title\":\"User Allocations\",\"templated\":false}}}"
read 4413 bytes
Conn close
opening connection to test.pactflow.io:443...
opened
starting SSL for test.pactflow.io:443...
SSL established
<- "GET /pacticipants/Animal%2520Profile%2520Service/latest-version HTTP/1.1\r\nAccept: application/hal+json, application/json\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nUser-Agent: Ruby\r\nAuthorization: Basic ZFhmbHR5Rk1nTk9GWkF4cjhpbzl3SjM3aVVwWTQyTTpPNUFJWld4ZWxXYkx2cU1kOFBrQVZ5Y0JKaDJQc3lnMQ==\r\nConnection: close\r\nHost: test.pactflow.io\r\n\r\n"
-> "HTTP/1.1 404 Not Found\r\n"
-> "Date: Sun, 04 Sep 2022 17:41:47 GMT\r\n"
-> "Content-Type: application/hal+json;charset=utf-8\r\n"
-> "Content-Length: 67\r\n"
-> "Connection: close\r\n"
-> "Vary: Accept\r\n"
-> "Server: Webmachine-Ruby/1.6.0 Rack/1.3\r\n"
-> "X-Pact-Broker-Version: 2.102.2\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "Strict-Transport-Security: max-age=63072000; includeSubDomains; preload\r\n"
-> "X-Pact-Broker-Git-Sha: dcb59203\r\n"
-> "X-Pactflow-Git-Sha: 08240e2d3\r\n"
-> "X-Request-Id: 4df4cdc901dce1ba86cac801fa69866a\r\n"
-> "\r\n"
reading 67 bytes...
-> "{\"error\":\"No pacticipant with name 'Animal Profile Service' found\"}"
read 67 bytes
Conn close
Pacticipant version not found

reading 67 bytes...
-> "{"error":"No pacticipant with name 'Animal Profile Service' found"}"
read 67 bytes
Conn close
Pacticipant version not found

@YOU54F
Copy link
Member

YOU54F commented Sep 7, 2022

Hey dude,

Merged master into this and set off a build on another branch

https://github.com/pact-foundation/pact-php/actions/runs/3008301582

I needed to download an arm64 version of the libpact_ffi.dylib file, as it is grabbing the x64 version by default, after that all tests passing locally.

❯ file pact/libpact_ffi.dylib
pact/libpact_ffi.dylib: Mach-O 64-bit dynamically linked shared library arm64

Your work really is appreciated, especially as you have hit a few roadblocks

@Lewiscowles1986
Copy link
Collaborator Author

Hey @YOU54F I've encountered this issue recently too. It seems a fair problem as this lib takes the responsibility to download the binaries. (which I think is wrong). php_uname may be of assistance here. To be honest though, I'm closing this as I'm just not interested in it.

@mmoll
Copy link
Contributor

mmoll commented Sep 10, 2022

next try: #270

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants