├── VERSION ├── Rakefile ├── packaging ├── bundler-config ├── pact-publish.rb ├── pact-mock-service.rb ├── pact-stub-service.rb ├── Gemfile ├── pact.bat ├── pactflow.bat ├── pact-broker.bat ├── pact-message.bat ├── pact-publish.bat ├── pact-mock-service.bat ├── pact-stub-service.bat ├── pact-provider-verifier.bat ├── generate_readme_contents.rb ├── pact-message.rb ├── pactflow.rb ├── pact.sh ├── pact-broker.sh ├── pactflow.sh ├── pact-message.sh ├── pact-publish.sh ├── pact-mock-service.sh ├── pact-stub-service.sh ├── pact-provider-verifier.sh ├── pact-provider-verifier.rb ├── pact-broker.rb ├── RELEASE_NOTES.md.template ├── pact.rb ├── Gemfile.lock └── README.md.template ├── renovate.json ├── support └── pact-ruby-standalone-windows-test.json ├── Gemfile ├── RELEASING.md ├── script ├── update-and-release.sh ├── release.sh ├── update.sh ├── open-prs-for-wrapper-implementations.sh ├── prepare-release-in-github-workflow.sh ├── prepare-manual-release-in-github-workflow.sh ├── trigger-release.sh ├── update-in-github-workflow.sh ├── docker-functions ├── dispatch-gem-released.sh ├── test.sh └── unpack-and-test.sh ├── .github ├── workflows │ ├── smartbear-issue-label-added.yml │ ├── triage.yml │ ├── update.yml │ ├── build.yml │ ├── release.yml │ └── manual_release.yml └── ISSUE_TEMPLATE.md ├── Dockerfile-release-base ├── Dockerfile-bundle-base ├── .gitignore ├── Dockerfile-package-base ├── Dockerfile.alpine.x64 ├── Dockerfile.ubuntu ├── Dockerfile.debian.slim ├── Dockerfile.alpine.arm64 ├── Gemfile.lock ├── LICENSE ├── tasks ├── release.rake └── package.rake ├── install.sh ├── DEVELOPING.md ├── README.md └── CHANGELOG.md /VERSION: -------------------------------------------------------------------------------- 1 | 2.5.7 -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | Dir.glob('./tasks/**/*.rake').each { |task| load task } 2 | -------------------------------------------------------------------------------- /packaging/bundler-config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: . 2 | BUNDLE_WITHOUT: development 3 | BUNDLE_DISABLE_SHARED_GEMS: '1' 4 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /support/pact-ruby-standalone-windows-test.json: -------------------------------------------------------------------------------- 1 | { 2 | "accountName": "MichelBoudreau", 3 | "projectSlug": "pact-ruby-standalone-windows-test" 4 | } 5 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://rubygems.org' 2 | 3 | gem 'rake', '~> 13.0' 4 | gem 'octokit', '~> 10.0' 5 | gem 'conventional-changelog', '~> 1.3' 6 | gem 'bump', '~> 0.5' 7 | -------------------------------------------------------------------------------- /packaging/pact-publish.rb: -------------------------------------------------------------------------------- 1 | puts "ERROR: The `pact-publish` command has been moved to `pact-broker publish`. We apologise for any inconvenience caused." 2 | exit(1) 3 | -------------------------------------------------------------------------------- /RELEASING.md: -------------------------------------------------------------------------------- 1 | # Releasing 2 | 3 | Run: 4 | 5 | chruby 3.3.9 #or whatever your version manager is 6 | script/release.sh [major|minor|patch] # default is minor 7 | -------------------------------------------------------------------------------- /script/update-and-release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | ./script/update.sh 6 | 7 | if git log -1 | grep "feat(gems)"; then 8 | ./script/release.sh $1 9 | else 10 | echo "No gems updated, not releasing" 11 | fi 12 | -------------------------------------------------------------------------------- /.github/workflows/smartbear-issue-label-added.yml: -------------------------------------------------------------------------------- 1 | name: SmartBear Supported Issue Label Added 2 | 3 | on: 4 | issues: 5 | types: 6 | - labeled 7 | 8 | jobs: 9 | call-workflow: 10 | uses: pact-foundation/.github/.github/workflows/smartbear-issue-label-added.yml@master 11 | secrets: inherit 12 | -------------------------------------------------------------------------------- /.github/workflows/triage.yml: -------------------------------------------------------------------------------- 1 | name: Triage Issue 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | - labeled 8 | pull_request: 9 | types: 10 | - labeled 11 | 12 | jobs: 13 | call-workflow: 14 | uses: pact-foundation/.github/.github/workflows/triage.yml@master 15 | secrets: inherit 16 | -------------------------------------------------------------------------------- /packaging/pact-mock-service.rb: -------------------------------------------------------------------------------- 1 | require 'pact/mock_service/cli' 2 | 3 | class Thor 4 | module Base 5 | module ClassMethods 6 | 7 | def basename 8 | # chomps the trailing .rb so it doesn't show in the help text 9 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 10 | end 11 | end 12 | end 13 | end 14 | 15 | Pact::MockService::CLI.start 16 | -------------------------------------------------------------------------------- /packaging/pact-stub-service.rb: -------------------------------------------------------------------------------- 1 | require 'pact/stub_service/cli' 2 | 3 | class Thor 4 | module Base 5 | module ClassMethods 6 | 7 | def basename 8 | # chomps the trailing .rb so it doesn't show in the help text 9 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 10 | end 11 | end 12 | end 13 | end 14 | 15 | Pact::StubService::CLI.start 16 | -------------------------------------------------------------------------------- /Dockerfile-release-base: -------------------------------------------------------------------------------- 1 | FROM --platform=linux/amd64 ruby:3.3.9-alpine 2 | 3 | # Installation path 4 | ENV HOME=/app 5 | WORKDIR $HOME 6 | 7 | RUN set -ex && \ 8 | adduser -h $HOME -s /bin/false -D -S -G root ruby && \ 9 | chmod g+w $HOME && \ 10 | apk add --update --no-cache make gcc libc-dev git 11 | 12 | RUN gem install bundler -v "~> 2.5" 13 | COPY Gemfile Gemfile.lock $HOME/ 14 | RUN bundle install --no-cache 15 | -------------------------------------------------------------------------------- /Dockerfile-bundle-base: -------------------------------------------------------------------------------- 1 | FROM --platform=linux/amd64 ruby:3.3.9-alpine 2 | 3 | # Installation path 4 | ENV HOME=/app 5 | WORKDIR $HOME 6 | 7 | RUN set -ex && \ 8 | adduser -h $HOME -s /bin/false -D -S -G root ruby && \ 9 | chmod g+w $HOME && \ 10 | apk add --update --no-cache make gcc libc-dev 11 | 12 | RUN gem install bundler -v "~> 2.5" 13 | COPY packaging/Gemfile packaging/Gemfile.lock $HOME/ 14 | RUN bundle install --no-cache 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | InstalledFiles 7 | _yardoc 8 | coverage 9 | lib/bundler/man 10 | pkg 11 | rdoc 12 | spec/reports 13 | test/tmp 14 | test/version_tmp 15 | tmp 16 | *.swp 17 | .bin 18 | tags 19 | .rbenv-version 20 | spec/pacts 21 | .rvmrc 22 | *.iml 23 | .rakeTasks 24 | *~ 25 | .ruby-gemset 26 | .ruby-version 27 | log 28 | .idea 29 | reports 30 | build 31 | 32 | vendor/bundle/ 33 | pact 34 | .DS_Store -------------------------------------------------------------------------------- /packaging/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem "pact", "1.67.3" 4 | gem "pact-message", "0.11.1" 5 | gem "pact-mock_service", "3.12.3" 6 | gem "pact-provider-verifier", "1.39.1" 7 | gem "pact_broker-client", "1.77.0" 8 | gem "webrick", "1.9.1" 9 | # see https://stdgems.org/ for versions to lock to 10 | # we require gem locking for gems with native extensions 11 | # due to lack of windows support 12 | gem "json", "2.7.2" 13 | gem "bigdecimal", "3.1.5" 14 | gem "fiddle", "1.1.2" -------------------------------------------------------------------------------- /script/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | source script/docker-functions 5 | 6 | docker-build-release-base 7 | git pull origin master 8 | bump-version $1 9 | generate-changelog 10 | git add VERSION CHANGELOG.md 11 | VERSION=$(cat VERSION) 12 | git commit -m "chore(release): version ${VERSION} 13 | [ci-skip]" 14 | git push origin master 15 | TAG="v${VERSION}" 16 | git tag -a ${TAG} -m "chore(release): version ${VERSION}" && git push origin ${TAG} 17 | echo "Releasing from https://github.com/pact-foundation/pact-standalone" 18 | -------------------------------------------------------------------------------- /Dockerfile-package-base: -------------------------------------------------------------------------------- 1 | FROM --platform=linux/amd64 ruby:3.3.9-slim 2 | 3 | RUN apt-get update && apt-get install -y \ 4 | curl \ 5 | zip \ 6 | && apt-get clean && rm -rf /var/lib/apt/lists/* 7 | 8 | ENV HOME=/app 9 | WORKDIR $HOME 10 | 11 | RUN useradd --create-home --home-dir $HOME user \ 12 | && mkdir -p $HOME \ 13 | && chown -R user:user $HOME 14 | 15 | RUN gem install bundler:2.5.18 16 | RUN bundle install 17 | COPY Rakefile README.md Gemfile Gemfile.lock VERSION $HOME/ 18 | COPY tasks $HOME/tasks 19 | COPY packaging $HOME/packaging 20 | RUN bundle exec rake package -------------------------------------------------------------------------------- /packaging/pact.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pactflow.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pactflow.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pact-broker.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-broker.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pact-message.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-message.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pact-publish.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-publish.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pact-mock-service.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-mock-service.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /packaging/pact-stub-service.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-stub-service.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /Dockerfile.alpine.x64: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | WORKDIR ../ 4 | 5 | ARG TARGET_ARCH 6 | ARG PACT_CLI_VERSION 7 | ARG TARGET_ARCH=${TARGET_ARCH:-arm64} 8 | ARG PACT_CLI_VERSION=${PACT_CLI_VERSION:-2.0.1} 9 | 10 | RUN apk --no-cache add gcompat libc6-compat 11 | RUN wget -q https://github.com/pact-foundation/pact-standalone/releases/download/v${PACT_CLI_VERSION}/pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 12 | && tar xzf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 13 | && rm -rf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 14 | && ln -s /pact/bin/* /usr/local/bin 15 | 16 | ENTRYPOINT ["pact-mock-service"] -------------------------------------------------------------------------------- /Dockerfile.ubuntu: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | WORKDIR ../ 4 | 5 | ARG TARGET_ARCH 6 | ARG PACT_CLI_VERSION 7 | ARG TARGET_ARCH=${TARGET_ARCH:-arm64} 8 | ARG PACT_CLI_VERSION=${PACT_CLI_VERSION:-2.0.1} 9 | 10 | RUN apt update --yes && apt install wget --yes 11 | RUN wget -q https://github.com/pact-foundation/pact-standalone/releases/download/v${PACT_CLI_VERSION}/pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 12 | && tar xzf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 13 | && rm -rf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 14 | && ln -s /pact/bin/* /usr/local/bin 15 | 16 | ENTRYPOINT ["pact-mock-service"] -------------------------------------------------------------------------------- /Dockerfile.debian.slim: -------------------------------------------------------------------------------- 1 | FROM debian:13-slim 2 | 3 | WORKDIR ../ 4 | 5 | ARG TARGET_ARCH 6 | ARG PACT_CLI_VERSION 7 | ARG TARGET_ARCH=${TARGET_ARCH:-arm64} 8 | ARG PACT_CLI_VERSION=${PACT_CLI_VERSION:-2.0.1} 9 | 10 | RUN apt update --yes && apt install wget --yes 11 | RUN wget -q https://github.com/pact-foundation/pact-standalone/releases/download/v${PACT_CLI_VERSION}/pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 12 | && tar xzf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 13 | && rm -rf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 14 | && ln -s /pact/bin/* /usr/local/bin 15 | 16 | ENTRYPOINT ["pact-mock-service"] -------------------------------------------------------------------------------- /packaging/pact-provider-verifier.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SET RUNNING_PATH=%~dp0 4 | CALL :RESOLVE "%RUNNING_PATH%\.." ROOT_PATH 5 | 6 | :: Tell Bundler where the Gemfile and gems are. 7 | set "BUNDLE_GEMFILE=%ROOT_PATH%\lib\vendor\Gemfile" 8 | set BUNDLE_IGNORE_CONFIG= 9 | set RUBYGEMS_GEMDEPS= 10 | set BUNDLE_APP_CONFIG= 11 | set BUNDLE_FROZEN=1 12 | 13 | :: Run the actual app using the bundled Ruby interpreter, with Bundler activated. 14 | @"%ROOT_PATH%\lib\ruby\bin\ruby.bat" -E UTF-8 -rbundler/setup -I "%ROOT_PATH%\lib\app\lib" "%ROOT_PATH%\lib\app\pact-provider-verifier.rb" %* 15 | 16 | GOTO :EOF 17 | 18 | :RESOLVE 19 | SET %2=%~f1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /Dockerfile.alpine.arm64: -------------------------------------------------------------------------------- 1 | FROM arm64v8/alpine 2 | 3 | WORKDIR ../ 4 | 5 | ARG TARGET_ARCH 6 | ARG PACT_CLI_VERSION 7 | ARG TARGET_ARCH=${TARGET_ARCH:-arm64} 8 | ARG PACT_CLI_VERSION=${PACT_CLI_VERSION:-2.0.1} 9 | 10 | RUN apk --no-cache add gcompat libc6-compat 11 | 12 | RUN wget -q https://github.com/pact-foundation/pact-standalone/releases/download/v${PACT_CLI_VERSION}/pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 13 | && tar xzf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 14 | && rm -rf pact-${PACT_CLI_VERSION}-linux-${TARGET_ARCH}.tar.gz \ 15 | && ln -s /pact/bin/* /usr/local/bin 16 | 17 | ENTRYPOINT ["pact-mock-service"] -------------------------------------------------------------------------------- /script/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source script/docker-functions 4 | 5 | git pull origin master 6 | git checkout packaging/Gemfile.lock 7 | docker-build-bundle-base 8 | output=$(bundle-update) 9 | echo "${output}" 10 | updated_pact_gems=$(echo "${output}" | grep "pact" | grep "(was " | cut -d " " -f 2 -f 3 | uniq | ruby -e 'puts ARGF.read.split("\n").join(", ")') 11 | 12 | git add packaging/Gemfile.lock 13 | 14 | if [ -n "${updated_pact_gems}" ]; then 15 | commit_message="feat(gems): update to ${updated_pact_gems}" 16 | else 17 | commit_message="feat(gems): update non-pact gems" 18 | fi 19 | 20 | git commit -m "${commit_message}" 21 | 22 | docker-build-bundle-base 23 | -------------------------------------------------------------------------------- /script/open-prs-for-wrapper-implementations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -Eeuo pipefail 2 | 3 | VERSION=$(cat VERSION) 4 | 5 | if [ -e ../pact-js-cli/script/create-pr-to-update-pact-ruby-standalone.sh ]; then 6 | pushd ../pact-js-cli 7 | script/create-pr-to-update-pact-ruby-standalone.sh $VERSION 8 | fi 9 | 10 | if [ -e ../pact-net/script/create-pr-to-update-pact-ruby-standalone.sh ]; then 11 | pushd ../pact-net 12 | script/create-pr-to-update-pact-ruby-standalone.sh $VERSION 13 | fi 14 | 15 | if [ -e ../pact-python/script/create-pr-to-update-pact-ruby-standalone.sh ]; then 16 | pushd ../pact-python 17 | script/create-pr-to-update-pact-ruby-standalone.sh $VERSION 18 | fi 19 | 20 | if [ -e ../pact-php/script/create-pr-to-update-pact-ruby-standalone.sh ]; then 21 | pushd ../pact-php 22 | script/create-pr-to-update-pact-ruby-standalone.sh $VERSION 23 | fi 24 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | addressable (2.8.7) 5 | public_suffix (>= 2.0.2, < 7.0) 6 | bump (0.10.0) 7 | conventional-changelog (1.3.0) 8 | faraday (2.13.1) 9 | faraday-net_http (>= 2.0, < 3.5) 10 | json 11 | logger 12 | faraday-net_http (3.4.1) 13 | net-http (>= 0.5.0) 14 | json (2.12.2) 15 | logger (1.7.0) 16 | net-http (0.6.0) 17 | uri 18 | octokit (10.0.0) 19 | faraday (>= 1, < 3) 20 | sawyer (~> 0.9) 21 | public_suffix (6.0.2) 22 | rake (13.3.0) 23 | sawyer (0.9.2) 24 | addressable (>= 2.3.5) 25 | faraday (>= 0.17.3, < 3) 26 | uri (1.0.3) 27 | 28 | PLATFORMS 29 | ruby 30 | 31 | DEPENDENCIES 32 | bump (~> 0.5) 33 | conventional-changelog (~> 1.3) 34 | octokit (~> 10.0) 35 | rake (~> 13.0) 36 | 37 | BUNDLED WITH 38 | 2.5.18 39 | -------------------------------------------------------------------------------- /script/prepare-release-in-github-workflow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -Eeuo pipefail 4 | 5 | INCREMENT="${INCREMENT:-patch}" 6 | 7 | bundle exec bump $INCREMENT --no-commit 8 | bundle exec rake generate_changelog 9 | version=$(cat VERSION) 10 | tag="v${version}" 11 | 12 | echo "version=${version}" >> $GITHUB_OUTPUT 13 | echo "tag=${tag}" >> $GITHUB_OUTPUT 14 | echo "increment=${INCREMENT}" >> $GITHUB_OUTPUT 15 | 16 | bundle exec rake package 17 | pushd pkg; for file in *.{zip,gz}; do sha1sum -b "$file" > "${file}.checksum"; done; popd; 18 | cat pkg/*.checksum > pkg/pact-`cat VERSION`.checksum 19 | 20 | bundle exec rake generate_release_notes[$tag] 21 | cp build/README.md README.md 22 | git add VERSION CHANGELOG.md README.md 23 | git commit -m "chore(release): version ${version} 24 | [ci-skip]" 25 | git tag -a ${tag} -m "chore(release): version ${version}" 26 | git push origin ${tag} 27 | git push origin master 28 | -------------------------------------------------------------------------------- /packaging/generate_readme_contents.rb: -------------------------------------------------------------------------------- 1 | require 'erb' 2 | require 'pact/version' 3 | require 'pact/message/version' 4 | require 'pact/mock_service/version' 5 | require 'pact/support/version' 6 | require 'pact/provider_verifier/version' 7 | require 'pact_broker/client/version' 8 | 9 | pact_mock_service_usage = `bundle exec pact-mock-service help` + `bundle exec pact-mock-service help service` 10 | pact_stub_service_usage = `bundle exec pact-stub-service help` 11 | pact_provider_verifier_usage = `bundle exec pact-provider-verifier help` 12 | pact_publish_usage = `bundle exec pact-broker help publish` 13 | pact_broker_can_i_deploy_usage = `bundle exec pact-broker help can-i-deploy` 14 | pact_docs_usage = `bundle exec pact help docs` 15 | pact_message_usage = `bundle exec pact-message help` 16 | pactflow_publish_provider_contract_usage = `bundle exec pactflow help publish-provider-contract` 17 | puts ERB.new(ARGF.read).result(binding) 18 | -------------------------------------------------------------------------------- /packaging/pact-message.rb: -------------------------------------------------------------------------------- 1 | require 'pact/message/cli' 2 | 3 | class Thor 4 | module Base 5 | module ClassMethods 6 | 7 | def basename 8 | # chomps the trailing .rb so it doesn't show in the help text 9 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 10 | end 11 | end 12 | end 13 | end 14 | 15 | # Travelling Ruby sets its own CA cert bundle in lib/ruby/bin/ruby_environment 16 | # and creates backup environment variables for the original SSL_CERT values. 17 | # Restore the original values here *if they are present* so that we can connect to 18 | # a broker with a custom SSL certificate. 19 | 20 | if ENV['ORIG_SSL_CERT_DIR'] && ENV['ORIG_SSL_CERT_DIR'] != '' 21 | ENV['SSL_CERT_DIR'] = ENV['ORIG_SSL_CERT_DIR'] 22 | end 23 | 24 | if ENV['ORIG_SSL_CERT_FILE'] && ENV['ORIG_SSL_CERT_FILE'] != '' 25 | ENV['SSL_CERT_FILE'] = ENV['ORIG_SSL_CERT_FILE'] 26 | end 27 | 28 | Pact::Message::CLI.start -------------------------------------------------------------------------------- /packaging/pactflow.rb: -------------------------------------------------------------------------------- 1 | require 'pactflow/client/cli/pactflow' 2 | 3 | class Thor 4 | module Base 5 | module ClassMethods 6 | 7 | def basename 8 | # chomps the trailing .rb so it doesn't show in the help text 9 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 10 | end 11 | end 12 | end 13 | end 14 | 15 | # Travelling Ruby sets its own CA cert bundle in lib/ruby/bin/ruby_environment 16 | # and creates backup environment variables for the original SSL_CERT values. 17 | # Restore the original values here *if they are present* so that we can connect to 18 | # a broker with a custom SSL certificate. 19 | 20 | if ENV['ORIG_SSL_CERT_DIR'] && ENV['ORIG_SSL_CERT_DIR'] != '' 21 | ENV['SSL_CERT_DIR'] = ENV['ORIG_SSL_CERT_DIR'] 22 | end 23 | 24 | if ENV['ORIG_SSL_CERT_FILE'] && ENV['ORIG_SSL_CERT_FILE'] != '' 25 | ENV['SSL_CERT_FILE'] = ENV['ORIG_SSL_CERT_FILE'] 26 | end 27 | 28 | Pactflow::Client::CLI::Pactflow.start 29 | -------------------------------------------------------------------------------- /script/prepare-manual-release-in-github-workflow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Requires $VERSION and $INCREMENT 4 | 5 | set -Eeuo pipefail 6 | 7 | set -x 8 | 9 | # bundle exec bump set $VERSION --no-commit # this is buggy. it puts a 1 on the end of the version number 10 | printf $VERSION > VERSION 11 | bundle exec rake generate_changelog 12 | tag="v${VERSION}" 13 | 14 | echo "version=${VERSION}" >> $GITHUB_OUTPUT 15 | echo "tag=${tag}" >> $GITHUB_OUTPUT 16 | echo "increment=${INCREMENT}" >> $GITHUB_OUTPUT 17 | 18 | bundle exec rake package 19 | pushd pkg; for file in *.{zip,gz}; do sha1sum -b "$file" > "${file}.checksum"; done; popd; 20 | cat pkg/*.checksum > pkg/pact-`cat VERSION`.checksum 21 | 22 | bundle exec rake generate_release_notes[$tag] 23 | cp build/README.md README.md 24 | git add VERSION CHANGELOG.md README.md 25 | git commit -m "chore(release): version ${VERSION} 26 | [ci-skip]" 27 | git tag -a ${tag} -m "chore(release): version ${VERSION}" 28 | git push origin ${tag} 29 | git push 30 | -------------------------------------------------------------------------------- /packaging/pact.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pact.rb" "$@" 30 | -------------------------------------------------------------------------------- /packaging/pact-broker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-broker.rb" "$@" -------------------------------------------------------------------------------- /packaging/pactflow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pactflow.rb" "$@" 30 | -------------------------------------------------------------------------------- /packaging/pact-message.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-message.rb" "$@" 30 | -------------------------------------------------------------------------------- /packaging/pact-publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rbundler/setup -rreadline -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-publish.rb" "$@" 30 | -------------------------------------------------------------------------------- /.github/workflows/update.yml: -------------------------------------------------------------------------------- 1 | name: Update 2 | 3 | on: 4 | repository_dispatch: 5 | types: 6 | - gem-released 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v5 13 | with: 14 | fetch-depth: 0 15 | 16 | - uses: ruby/setup-ruby@v1.264.0 17 | with: 18 | ruby-version: 3.3.9 19 | 20 | - name: Set up environment 21 | run: | 22 | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" 23 | git config --global user.name "${GITHUB_ACTOR}" 24 | git config --global push.default current 25 | bundler -v 26 | bundle install 27 | 28 | - name: Update Gemfile 29 | run: script/update-in-github-workflow.sh 30 | env: 31 | RELEASED_GEM_NAME: ${{ github.event.client_payload.name }} 32 | RELEASED_GEM_VERSION: ${{ github.event.client_payload.version }} 33 | 34 | - name: Trigger release 35 | uses: peter-evans/repository-dispatch@v4 36 | with: 37 | token: ${{ secrets.GHTOKENFORRELEASEDISPATCH }} 38 | event-type: release-triggered 39 | -------------------------------------------------------------------------------- /packaging/pact-mock-service.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-mock-service.rb" "$@" 30 | -------------------------------------------------------------------------------- /packaging/pact-stub-service.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rreadline -rbundler/setup -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-stub-service.rb" "$@" 30 | -------------------------------------------------------------------------------- /packaging/pact-provider-verifier.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | SOURCE="$0" 5 | while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink 6 | TARGET="$(readlink "$SOURCE")" 7 | START="$( echo "$TARGET" | cut -c 1 )" 8 | if [ "$START" = "/" ]; then 9 | SOURCE="$TARGET" 10 | else 11 | DIR="$( dirname "$SOURCE" )" 12 | SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 13 | fi 14 | done 15 | RDIR="$( dirname "$SOURCE" )" 16 | DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" 17 | 18 | # Figure out where this script is located. 19 | LIBDIR="$(cd "$DIR" && cd ../lib && pwd)" 20 | 21 | # Tell Bundler where the Gemfile and gems are. 22 | export BUNDLE_GEMFILE="$LIBDIR/vendor/Gemfile" 23 | unset BUNDLE_IGNORE_CONFIG 24 | unset RUBYGEMS_GEMDEPS 25 | unset BUNDLE_APP_CONFIG 26 | export BUNDLE_FROZEN=1 27 | 28 | # Run the actual app using the bundled Ruby interpreter, with Bundler activated. 29 | exec "$LIBDIR/ruby/bin/ruby" -E UTF-8 -rbundler/setup -rreadline -I "$LIBDIR/app/lib" "$LIBDIR/app/pact-provider-verifier.rb" "$@" 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Pact Foundation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packaging/pact-provider-verifier.rb: -------------------------------------------------------------------------------- 1 | # This removes ruby specific language from the output and ensures 2 | # the output can be parsed cleanly by wrapper languages 3 | ENV['PACT_EXECUTING_LANGUAGE'] ||= 'unknown' 4 | 5 | # Travelling Ruby sets its own CA cert bundle in lib/ruby/bin/ruby_environment 6 | # and creates backup environment variables for the original SSL_CERT values. 7 | # Restore the original values here *if they are present* so that we can connect to 8 | # a broker with a custom SSL certificate. 9 | 10 | if ENV['ORIG_SSL_CERT_DIR'] && ENV['ORIG_SSL_CERT_DIR'] != '' 11 | ENV['SSL_CERT_DIR'] = ENV['ORIG_SSL_CERT_DIR'] 12 | end 13 | 14 | if ENV['ORIG_SSL_CERT_FILE'] && ENV['ORIG_SSL_CERT_FILE'] != '' 15 | ENV['SSL_CERT_FILE'] = ENV['ORIG_SSL_CERT_FILE'] 16 | end 17 | 18 | require 'pact/provider_verifier/cli/verify' 19 | 20 | class Thor 21 | module Base 22 | module ClassMethods 23 | 24 | def basename 25 | # chomps the trailing .rb so it doesn't show in the help text 26 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 27 | end 28 | end 29 | end 30 | end 31 | 32 | 33 | Pact::ProviderVerifier::CLI::Verify.start 34 | -------------------------------------------------------------------------------- /script/trigger-release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Script to trigger release of gem via the pact-foundation/release-gem action 4 | # Requires a Github API token with repo scope stored in the 5 | # environment variable GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES 6 | 7 | : "${GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES:?Please set environment variable GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES}" 8 | 9 | if [ -n "$1" ]; then 10 | increment="\"${1}\"" 11 | else 12 | increment="null" 13 | fi 14 | 15 | repository_slug=$(git remote get-url $(git remote show) | cut -d':' -f2 | sed 's/\.git//') 16 | 17 | output=$(curl -v -X POST https://api.github.com/repos/${repository_slug}/dispatches \ 18 | -H 'Accept: application/vnd.github.everest-preview+json' \ 19 | -H "Authorization: Bearer $GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES" \ 20 | -d "{\"event_type\": \"release-triggered\", \"client_payload\": {\"increment\": ${increment}}}" 2>&1) 21 | 22 | if ! echo "${output}" | grep "HTTP\/.* 204" > /dev/null; then 23 | echo "$output" | sed "s/${GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES}/********/g" 24 | echo "Failed to trigger release" 25 | exit 1 26 | else 27 | echo "Release workflow triggered" 28 | fi 29 | 30 | echo "See https://github.com/${repository_slug}/actions?query=workflow%3A%22Release%22" 31 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: ["ubuntu-latest"] 17 | runs-on: ${{ matrix.os }} 18 | steps: 19 | - uses: actions/checkout@v5 20 | - uses: ruby/setup-ruby@v1.264.0 21 | with: 22 | ruby-version: 3.3.9 23 | - name: Set up environment 24 | run: bundle install 25 | - name: Build 26 | run: bundle exec rake package 27 | - name: Show standalone packages 28 | run: ls pkg 29 | - name: Upload standalone packages 30 | uses: actions/upload-artifact@v4 31 | with: 32 | name: pkg 33 | path: pkg 34 | test: 35 | defaults: 36 | run: 37 | shell: ${{ matrix.shell }} 38 | needs: [build] 39 | strategy: 40 | fail-fast: false 41 | matrix: 42 | os: ["windows-latest","ubuntu-latest","macos-latest"] 43 | shell: ["sh","bash"] 44 | runs-on: ${{ matrix.os }} 45 | steps: 46 | - uses: actions/checkout@v5 47 | - name: Download all workflow run artifacts 48 | uses: actions/download-artifact@v4 49 | - name: test ${{ matrix.os }} package 50 | run: ./script/unpack-and-test.sh 51 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Pre issue-raising checklist 2 | 3 | I have already (please mark the applicable with an `x`): 4 | 5 | * [ ] Upgraded to the latest version of the relevant libraries 6 | * [ ] Checked to see if the issue has already been raised 7 | * [ ] Created an executable example that demonstrates the issue using either: 8 | * a Dockerfile 9 | * a fork of https://github.com/pact-foundation/pact-ruby-standalone-e2e-example 10 | * a Git repository with a Travis or Appveyor (or similar) build 11 | * a gist with all the relevant code and full instructions on how to run it 12 | 13 | ## Software versions 14 | 15 | * **pact library:** eg pact-js 1.2.3 16 | * **pact-ruby-standalone:** eg 2.3.1-1 17 | * **OS**: e.g. Mac OSX 10.11.5 18 | 19 | ## Expected behaviour 20 | 21 | Please complete... 22 | 23 | ## Actual behaviour 24 | 25 | Please complete... 26 | 27 | ## Steps to reproduce 28 | 29 | Your bug will be fixed in our free time, so help us to help you, and make it as easy as possible for us to reproduce the issue. Issues that take longer to reproduce are less likely to be fixed quickly. Please provide a Dockerfile or git repository + build, with instructions on how to reproduce the issue. 30 | 31 | ## Relevent log files 32 | 33 | Please ensure you set logging to `DEBUG` and attach any relevant log files here (or link from a gist). 34 | -------------------------------------------------------------------------------- /packaging/pact-broker.rb: -------------------------------------------------------------------------------- 1 | require 'pact_broker/client/cli/broker' 2 | 3 | if ENV['PACT_BROKER_DISABLE_SSL_VERIFICATION'] == 'true' || ENV['PACT_DISABLE_SSL_VERIFICATION'] == 'true' 4 | require 'openssl' 5 | OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 6 | $stderr.puts "WARN: SSL verification has been disabled by a dodgy hack (reassigning the VERIFY_PEER constant to VERIFY_NONE). You acknowledge that you do this at your own risk!" 7 | end 8 | 9 | class Thor 10 | module Base 11 | module ClassMethods 12 | 13 | def basename 14 | # chomps the trailing .rb so it doesn't show in the help text 15 | File.basename($PROGRAM_NAME).split(" ").first.chomp(".rb") 16 | end 17 | end 18 | end 19 | end 20 | 21 | # Travelling Ruby sets its own CA cert bundle in lib/ruby/bin/ruby_environment 22 | # and creates backup environment variables for the original SSL_CERT values. 23 | # Restore the original values here *if they are present* so that we can connect to 24 | # a broker with a custom SSL certificate. 25 | 26 | if ENV['ORIG_SSL_CERT_DIR'] && ENV['ORIG_SSL_CERT_DIR'] != '' 27 | ENV['SSL_CERT_DIR'] = ENV['ORIG_SSL_CERT_DIR'] 28 | end 29 | 30 | if ENV['ORIG_SSL_CERT_FILE'] && ENV['ORIG_SSL_CERT_FILE'] != '' 31 | ENV['SSL_CERT_FILE'] = ENV['ORIG_SSL_CERT_FILE'] 32 | end 33 | 34 | PactBroker::Client::CLI::Broker.start 35 | -------------------------------------------------------------------------------- /script/update-in-github-workflow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -Eeuo 4 | 5 | set -x 6 | 7 | cd packaging 8 | 9 | bundle install --path vendor 10 | 11 | if [ -n "${RELEASED_GEM_NAME}" ] && [ -n "${RELEASED_GEM_VERSION}" ]; then 12 | echo "Updating $RELEASED_GEM_NAME version to $RELEASED_GEM_VERSION in Gemfile" 13 | find_pattern="gem \"${RELEASED_GEM_NAME}\".*" 14 | replacement_value="gem \"${RELEASED_GEM_NAME}\", \"${RELEASED_GEM_VERSION}\"" 15 | cat Gemfile | sed -e "s/${find_pattern}/${replacement_value}/" > Gemfile.tmp 16 | mv Gemfile.tmp Gemfile 17 | 18 | set +e 19 | n=0 20 | until [ "$n" -ge 10 ] 21 | do 22 | gem install "${RELEASED_GEM_NAME}" -v "${RELEASED_GEM_VERSION}" && break 23 | n=$((n+1)) 24 | echo "Waiting for ${RELEASED_GEM_NAME} version ${RELEASED_GEM_VERSION} to become available..." 25 | sleep 10 26 | done 27 | set -e 28 | fi 29 | 30 | bundle update 31 | 32 | if [ -z "$(git diff Gemfile Gemfile.lock)" ]; then 33 | echo "No gems updated. Exiting." 34 | exit 1 35 | fi 36 | 37 | updated_pact_gems=$(git diff Gemfile.lock | grep '^+ [a-zA-Z]' | grep pact | grep '(' | sed -e "s/+ *//" | paste -sd "," - | sed -e 's/,/, /g') || true 38 | 39 | if [ -n "${updated_pact_gems}" ]; then 40 | commit_message="feat(gems): update to ${updated_pact_gems}" 41 | else 42 | commit_message="feat(gems): update non-pact gems" 43 | fi 44 | 45 | git add Gemfile Gemfile.lock 46 | git commit -m "${commit_message}" 47 | git push 48 | -------------------------------------------------------------------------------- /script/docker-functions: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | IMAGE=pact-standalone-bundle-base 4 | RELEASE_IMAGE=pact-standalone-release-base 5 | PACKAGE_IMAGE=pact-standalone-package-base 6 | 7 | function docker-build-bundle-base() { 8 | docker build . -f Dockerfile-bundle-base -t ${IMAGE} 9 | } 10 | 11 | function docker-build-release-base() { 12 | docker build . -f Dockerfile-release-base -t ${RELEASE_IMAGE} 13 | } 14 | 15 | function docker-build-package-base() { 16 | docker build . -f Dockerfile-package-base -t ${PACKAGE_IMAGE} 17 | } 18 | 19 | function on-docker() { 20 | docker run --platform=linux/amd64 --rm -v ${PWD}:/app $IMAGE:latest sh -c "$@" 21 | } 22 | 23 | function on-release-docker() { 24 | docker run --platform=linux/amd64 --rm -v ${PWD}:/app $RELEASE_IMAGE:latest sh -c "$@" 25 | } 26 | 27 | function bundle-update() { 28 | rm -rf tmp 29 | docker run --platform=linux/amd64 --rm -v ${PWD}/tmp:/tmp/gemfile ${IMAGE}:latest sh -c "bundle update && cp Gemfile.lock /tmp/gemfile" 30 | mv tmp/Gemfile.lock packaging/ 31 | } 32 | function pkg_copy() { 33 | rm -rf tmp pkg 34 | docker run --platform=linux/amd64 --rm -v ${PWD}/tmp:/tmp/pkg ${PACKAGE_IMAGE}:latest sh -c "bundle exec rake package && cp -r pkg /tmp/pkg" 35 | mv tmp/pkg pkg/ 36 | } 37 | 38 | function bump-version() { 39 | on-release-docker "bundle exec bump ${1:-minor} --no-commit" 40 | } 41 | 42 | function generate-changelog() { 43 | on-release-docker "bundle exec rake generate_changelog" 44 | } 45 | -------------------------------------------------------------------------------- /script/dispatch-gem-released.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Script to trigger release of gem via the pact-foundation/release-gem action 4 | # Requires a Github API token with repo scope stored in the 5 | # environment variable GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES 6 | 7 | : "${GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES:?Please set environment variable GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES}" 8 | 9 | if [ -n "$1" ]; then 10 | name="\"${1}\"" 11 | else 12 | name="null" 13 | fi 14 | 15 | if [ -n "$2" ]; then 16 | version="\"${2}\"" 17 | else 18 | version="null" 19 | fi 20 | 21 | if [ -n "$3" ]; then 22 | increment="\"${3}\"" 23 | else 24 | increment="null" 25 | fi 26 | 27 | repository_slug=$(git remote get-url origin | cut -d':' -f2 | sed 's/\.git//') 28 | 29 | output=$(curl -v https://api.github.com/repos/${repository_slug}/dispatches \ 30 | -H 'Accept: application/vnd.github.everest-preview+json' \ 31 | -H "Authorization: Bearer $GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES" \ 32 | -d "{\"event_type\": \"gem-released\", \"client_payload\": {\"name\": ${name}, \"version\" : ${version}, \"increment\" : ${increment}}}" 2>&1) 33 | 34 | if ! echo "${output}" | grep "HTTP\/.* 204" > /dev/null; then 35 | echo "$output" | sed "s/${GITHUB_ACCESS_TOKEN_FOR_PF_RELEASES}/********/g" 36 | echo "Failed to trigger release" 37 | exit 1 38 | else 39 | echo "Release workflow triggered" 40 | fi 41 | 42 | echo "See https://github.com/${repository_slug}/actions?query=workflow%3A%22Release%22" 43 | -------------------------------------------------------------------------------- /packaging/RELEASE_NOTES.md.template: -------------------------------------------------------------------------------- 1 | # Pact standalone executables 2 | 3 | This package contains the Ruby implementations of the Pact Mock Service, Pact Provider Verifier and Pact Broker Client, packaged with Traveling Ruby so that they can be run from the command line without a Ruby installation. 4 | 5 | ## Installation of 6 | 7 | ### Linux and MacOS 8 | 9 | ``` 10 | curl -fsSL https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh | PACT_CLI_VERSION=v bash 11 | ``` 12 | 13 | ### MacOS 14 | 15 | #### x86_64 16 | 17 | ``` 18 | curl -LO https://github.com/pact-foundation/pact-standalone/releases/download//pact--osx-x86_64.tar.gz 19 | tar xzf pact--osx-x86_64.tar.gz 20 | ``` 21 | 22 | #### arm64 23 | 24 | ``` 25 | curl -LO https://github.com/pact-foundation/pact-standalone/releases/download//pact--osx-arm64.tar.gz 26 | tar xzf pact--osx-arm64.tar.gz 27 | ``` 28 | 29 | ### Linux 30 | 31 | #### x86_64 32 | 33 | ``` 34 | curl -LO https://github.com/pact-foundation/pact-standalone/releases/download//pact--linux-x86_64.tar.gz 35 | tar xzf pact--linux-x86_64.tar.gz 36 | ``` 37 | 38 | #### arm64 39 | 40 | ``` 41 | curl -LO https://github.com/pact-foundation/pact-standalone/releases/download//pact--linux-arm64.tar.gz 42 | tar xzf pact--linux-arm64.tar.gz 43 | ``` 44 | 45 | ### Windows 46 | 47 | #### x86_64 48 | 49 | ``` 50 | curl -LO https://github.com/pact-foundation/pact-standalone/releases/download//pact--windows-x86_64.zip 51 | unzip pact--windows-x86_64.zip 52 | ``` -------------------------------------------------------------------------------- /tasks/release.rake: -------------------------------------------------------------------------------- 1 | RELEASE_NOTES_TEMPLATE_PATH = "packaging/RELEASE_NOTES.md.template" 2 | RELEASE_NOTES_PATH = "build/RELEASE_NOTES.md" 3 | README_PATH = "build/README.md" 4 | 5 | desc 'Generate change log' 6 | task :generate_changelog do 7 | require 'conventional_changelog' 8 | version = File.read('VERSION') 9 | ConventionalChangelog::Generator.new.generate! version: "v#{version}" 10 | end 11 | 12 | desc 'Generate release notes' 13 | task :generate_release_notes, [:tag] do | t, args | 14 | require 'fileutils' 15 | FileUtils.mkdir_p File.dirname(RELEASE_NOTES_PATH) 16 | tag = args[:tag] 17 | readme_content = File.read(README_PATH) 18 | release_notes_template = File.read(RELEASE_NOTES_TEMPLATE_PATH) 19 | release_notes_content = release_notes_template.gsub("", tag) 20 | release_notes_content = release_notes_content.gsub("", VERSION) 21 | File.open(RELEASE_NOTES_PATH, "w") do |file| 22 | file << release_notes_content 23 | file << "\n\n" 24 | file << readme_content 25 | end 26 | end 27 | 28 | desc 'Upload release notes' 29 | task :upload_release_notes, [:repository_slug, :tag] do |t, args | 30 | require 'octokit' 31 | stack = Faraday::RackBuilder.new do |builder| 32 | builder.response :logger do | logger | 33 | logger.filter(/(Authorization: )(.*)/,'\1[REMOVED]') 34 | end 35 | builder.use Octokit::Response::RaiseError 36 | builder.adapter Faraday.default_adapter 37 | end 38 | Octokit.middleware = stack 39 | 40 | access_token = ENV['GITHUB_ACCESS_TOKEN'] || ENV.fetch('GITHUB_TOKEN') 41 | repository_slug = args[:repository_slug] 42 | tag = args[:tag] 43 | release_name = "#{PACKAGE_NAME}-#{VERSION}" 44 | 45 | client = Octokit::Client.new(access_token: access_token) 46 | release_notes_content = File.read(RELEASE_NOTES_PATH) 47 | release = client.release_for_tag repository_slug, tag 48 | client.update_release release.url, name: release_name, body: release_notes_content 49 | end 50 | -------------------------------------------------------------------------------- /script/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | set -eu # This needs to be here for windows bash, which doesn't read the #! line above 3 | 4 | detected_os=$(uname -sm) 5 | echo detected_os = $detected_os 6 | BINARY_OS=${BINARY_OS:-} 7 | BINARY_ARCH=${BINARY_ARCH:-} 8 | FILE_EXT=${FILE_EXT:-} 9 | 10 | if [ "$BINARY_OS" == "" ] || [ "$BINARY_ARCH" == "" ] ; then 11 | case ${detected_os} in 12 | 'Darwin arm64') 13 | BINARY_OS=osx 14 | BINARY_ARCH=arm64 15 | ;; 16 | 'Darwin x86' | 'Darwin x86_64' | "Darwin"*) 17 | BINARY_OS=osx 18 | BINARY_ARCH=x86_64 19 | ;; 20 | "Linux aarch64"* | "Linux arm64"*) 21 | BINARY_OS=linux 22 | BINARY_ARCH=arm64 23 | ;; 24 | 'Linux x86_64' | "Linux"*) 25 | BINARY_OS=linux 26 | BINARY_ARCH=x86_64 27 | ;; 28 | "Windows"* | "MINGW64"*) 29 | BINARY_OS=windows 30 | BINARY_ARCH=x86_64 31 | ;; 32 | *) 33 | echo "Sorry, os not determined" 34 | exit 1 35 | ;; 36 | esac; 37 | fi 38 | 39 | if [ "$BINARY_OS" != "windows" ] ; then PATH_SEPERATOR=/ ; else PATH_SEPERATOR=\\; fi 40 | PATH_TO_BIN=.${PATH_SEPERATOR}pkg${PATH_SEPERATOR}pact${PATH_SEPERATOR}bin${PATH_SEPERATOR} 41 | 42 | tools=( 43 | pact 44 | pact-broker 45 | pact-message 46 | pact-mock-service 47 | pact-provider-verifier 48 | pact-stub-service 49 | pactflow 50 | pact-plugin-cli 51 | pact-stub-server 52 | pact_verifier_cli 53 | pact_mock_server_cli 54 | ) 55 | 56 | test_cmd="" 57 | for tool in ${tools[@]}; do 58 | echo testing $tool 59 | if [ "$BINARY_OS" = "windows" ] ; then FILE_EXT=.bat; fi 60 | if [ "$BINARY_OS" = "windows" ] && ([ "$tool" = "pact-plugin-cli" ] || [ "$tool" = "pact-stub-server" ] || [ "$tool" = "pact_verifier_cli" ] || [ "$tool" = "pact_mock_server_cli" ]) ; then FILE_EXT=.exe ; fi 61 | if [ "$tool" = "pact_verifier_cli" ] || [ "$tool" = "pact-mock-service" ]; then test_cmd="--help" ; fi 62 | echo executing ${tool}${FILE_EXT} 63 | ${PATH_TO_BIN}${tool}${FILE_EXT} ${test_cmd}; 64 | done -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_dispatch: 5 | repository_dispatch: 6 | types: 7 | - release-triggered 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v5 13 | with: 14 | fetch-depth: 0 15 | 16 | - uses: ruby/setup-ruby@v1.264.0 17 | with: 18 | ruby-version: 3.3.9 19 | 20 | - name: Set up environment 21 | run: | 22 | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" 23 | git config --global user.name "${GITHUB_ACTOR}" 24 | git config --global push.default current 25 | bundler -v 26 | bundle install 27 | 28 | - name: Prepare release 29 | id: prepare 30 | run: script/prepare-release-in-github-workflow.sh 31 | env: 32 | INCREMENT: ${{ github.event.client_payload.increment }} 33 | 34 | - name: Create release 35 | uses: ncipollo/release-action@v1 36 | with: 37 | name: pact-${{ steps.prepare.outputs.version }} 38 | tag: ${{ steps.prepare.outputs.tag }} 39 | artifacts: pkg/* 40 | bodyFile: build/RELEASE_NOTES.md 41 | token: ${{ secrets.GITHUB_TOKEN }} 42 | outputs: 43 | version: ${{ steps.prepare.outputs.version }} 44 | increment: ${{ steps.prepare.outputs.increment }} 45 | 46 | notify-released: 47 | needs: release 48 | strategy: 49 | matrix: 50 | repository: [pact-foundation/pact-js-cli, pact-foundation/homebrew-pact-standalone] 51 | runs-on: ubuntu-latest 52 | steps: 53 | - name: Notify ${{ matrix.repository }} of gem release 54 | uses: peter-evans/repository-dispatch@v4 55 | with: 56 | token: ${{ secrets.GHTOKENFORRELEASEDISPATCH }} 57 | repository: ${{ matrix.repository }} 58 | event-type: pact-standalone-released 59 | client-payload: | 60 | { 61 | "version": "${{ needs.release.outputs.version }}", 62 | "increment": "${{ needs.release.outputs.increment }}" 63 | } 64 | -------------------------------------------------------------------------------- /script/unpack-and-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | set -eu # This needs to be here for windows bash, which doesn't read the #! line above 3 | 4 | detected_os=$(uname -sm) 5 | echo detected_os = $detected_os 6 | BINARY_OS=${BINARY_OS:-} 7 | BINARY_ARCH=${BINARY_ARCH:-} 8 | FILE_EXT=${FILE_EXT:-} 9 | 10 | if [ "$BINARY_OS" == "" ] || [ "$BINARY_ARCH" == "" ] ; then 11 | case ${detected_os} in 12 | 'Darwin arm64') 13 | BINARY_OS=osx 14 | BINARY_ARCH=arm64 15 | ;; 16 | 'Darwin x86' | 'Darwin x86_64' | "Darwin"*) 17 | BINARY_OS=osx 18 | BINARY_ARCH=x86_64 19 | ;; 20 | "Linux aarch64"* | "Linux arm64"*) 21 | BINARY_OS=linux 22 | BINARY_ARCH=arm64 23 | ;; 24 | 'Linux x86_64' | "Linux"*) 25 | BINARY_OS=linux 26 | BINARY_ARCH=x86_64 27 | ;; 28 | "Windows"* | "MINGW64"*) 29 | BINARY_OS=windows 30 | BINARY_ARCH=x86_64 31 | ;; 32 | *) 33 | echo "Sorry, os not determined" 34 | exit 1 35 | ;; 36 | esac; 37 | fi 38 | 39 | if [[ "$BINARY_OS" == "windows" ]]; then 40 | FILE_EXT=".zip" 41 | fi 42 | 43 | cd pkg 44 | rm -rf pact 45 | ls 46 | 47 | if [ "$BINARY_OS" != "windows" ]; then tar xvf *$BINARY_OS-$BINARY_ARCH.tar.gz; else unzip *$BINARY_OS-$BINARY_ARCH.zip; fi 48 | if [ "$BINARY_OS" != "windows" ] ; then PATH_SEPERATOR=/ ; else PATH_SEPERATOR=\\; fi 49 | PATH_TO_BIN=.${PATH_SEPERATOR}pact${PATH_SEPERATOR}bin${PATH_SEPERATOR} 50 | 51 | tools=( 52 | pact 53 | pact-broker 54 | pact-message 55 | pact-mock-service 56 | pact-provider-verifier 57 | pact-stub-service 58 | pactflow 59 | pact-plugin-cli 60 | pact-stub-server 61 | pact_verifier_cli 62 | pact_mock_server_cli 63 | ) 64 | 65 | test_cmd="" 66 | for tool in ${tools[@]}; do 67 | echo testing $tool 68 | if [ "$BINARY_OS" = "windows" ] ; then FILE_EXT=.bat; fi 69 | if [ "$BINARY_OS" = "windows" ] && ([ "$tool" = "pact-plugin-cli" ] || [ "$tool" = "pact-stub-server" ] || [ "$tool" = "pact_verifier_cli" ] || [ "$tool" = "pact_mock_server_cli" ]) ; then FILE_EXT=.exe ; fi 70 | if [ "$tool" = "pact_verifier_cli" ] || [ "$tool" = "pact-mock-service" ]; then test_cmd="--help" ; fi 71 | echo executing ${tool}${FILE_EXT} 72 | ${PATH_TO_BIN}${tool}${FILE_EXT} ${test_cmd}; 73 | done -------------------------------------------------------------------------------- /.github/workflows/manual_release.yml: -------------------------------------------------------------------------------- 1 | name: Manual release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: 'Version of the pact-standalone package to be released' 8 | required: true 9 | type: string 10 | increment: 11 | description: 'The increment for this version' 12 | required: true 13 | type: choice 14 | default: minor 15 | options: 16 | - major 17 | - minor 18 | - patch 19 | - pre 20 | notify_released: 21 | description: 'Notify downstream project of release' 22 | required: false 23 | type: boolean 24 | default: true 25 | 26 | jobs: 27 | release: 28 | runs-on: ubuntu-latest 29 | permissions: 30 | contents: write 31 | steps: 32 | - uses: actions/checkout@v5 33 | with: 34 | fetch-depth: 0 35 | 36 | - uses: ruby/setup-ruby@v1.264.0 37 | with: 38 | ruby-version: 3.3.9 39 | 40 | - name: Set up environment 41 | run: | 42 | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" 43 | git config --global user.name "${GITHUB_ACTOR}" 44 | git config --global push.default current 45 | bundler -v 46 | bundle install 47 | 48 | - name: Prepare manual release 49 | id: prepare 50 | run: script/prepare-manual-release-in-github-workflow.sh 51 | env: 52 | INCREMENT: ${{ github.event.inputs.increment }} 53 | VERSION: ${{ github.event.inputs.version }} 54 | 55 | - name: Create release 56 | uses: ncipollo/release-action@v1 57 | with: 58 | name: pact-${{ steps.prepare.outputs.version }} 59 | tag: ${{ steps.prepare.outputs.tag }} 60 | artifacts: pkg/* 61 | bodyFile: build/RELEASE_NOTES.md 62 | token: ${{ secrets.GITHUB_TOKEN }} 63 | outputs: 64 | version: ${{ steps.prepare.outputs.version }} 65 | increment: ${{ steps.prepare.outputs.increment }} 66 | 67 | notify-released: 68 | if: ${{ github.event.inputs.notify_released == 'true' }} 69 | needs: release 70 | strategy: 71 | matrix: 72 | repository: [pact-foundation/pact-js-cli, pact-foundation/homebrew-pact-standalone] 73 | runs-on: ubuntu-latest 74 | steps: 75 | - name: Notify ${{ matrix.repository }} of gem release 76 | uses: peter-evans/repository-dispatch@v4 77 | with: 78 | token: ${{ secrets.GHTOKENFORRELEASEDISPATCH }} 79 | repository: ${{ matrix.repository }} 80 | event-type: pact-standalone-released 81 | client-payload: | 82 | { 83 | "version": "${{ needs.release.outputs.version }}", 84 | "increment": "${{ needs.release.outputs.increment }}" 85 | } 86 | -------------------------------------------------------------------------------- /packaging/pact.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | INTERNAL_APP = ARGV[0].to_s 5 | FILENAME = File.basename($PROGRAM_NAME).split.first.chomp(".rb") 6 | 7 | case ARGV[0] 8 | when "pact" 9 | ARGV.shift 10 | require "pact/cli" 11 | Pact::CLI.start 12 | when "pactflow" 13 | ARGV.shift 14 | require "pactflow/client/cli/pactflow" 15 | Pactflow::Client::CLI::Pactflow.start 16 | when "stub-service" 17 | ARGV.shift 18 | require "pact/stub_service/cli" 19 | Pact::StubService::CLI.start 20 | when "provider-verifier" 21 | ARGV.shift 22 | ENV["PACT_EXECUTING_LANGUAGE"] ||= "unknown" 23 | require "pact/provider_verifier/cli/verify" 24 | Pact::ProviderVerifier::CLI::Verify.start 25 | when "mock-service" 26 | ARGV.shift 27 | require "pact/mock_service/cli" 28 | Pact::MockService::CLI.start 29 | when "message" 30 | ARGV.shift 31 | require "pact/message/cli" 32 | Pact::Message::CLI.start 33 | when "broker", "pact-broker" 34 | ARGV.shift 35 | require "pact_broker/client/cli/broker" 36 | if ENV["PACT_BROKER_DISABLE_SSL_VERIFICATION"] == "true" || ENV["PACT_DISABLE_SSL_VERIFICATION"] == "true" 37 | require "openssl" 38 | OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 39 | warn " 40 | WARN: SSL verification has been disabled by a dodgy hack 41 | (reassigning the VERIFY_PEER constant to VERIFY_NONE). 42 | You acknowledge that you do this at your own risk! 43 | " 44 | end 45 | PactBroker::Client::CLI::Broker.start 46 | when 'plugin' 47 | ARGV.shift 48 | output = `#{File.expand_path("../../bin/pact-plugin-cli", __dir__)} #{ARGV.join(" ")}` 49 | exit_status = $?.exitstatus 50 | puts output 51 | exit(exit_status) 52 | when 'verifier' 53 | ARGV.shift 54 | output = `#{File.expand_path("../../bin/pact_verifier_cli", __dir__)} #{ARGV.join(" ")}` 55 | exit_status = $?.exitstatus 56 | puts output 57 | exit(exit_status) 58 | when 'mock-server' 59 | ARGV.shift 60 | IO.popen([File.expand_path("../../bin/pact_mock_server_cli", __dir__), *ARGV], err: [:child, :out]) do |io| 61 | while (line = io.gets) 62 | $stdout.write(line) 63 | end 64 | exit_status = Process.wait2(io.pid)[1].exitstatus 65 | exit(exit_status) 66 | end 67 | when 'stub-server' 68 | ARGV.shift 69 | IO.popen([File.expand_path("../../bin/pact-stub-server", __dir__), *ARGV], err: [:child, :out]) do |io| 70 | while (line = io.gets) 71 | $stdout.write(line) 72 | end 73 | exit_status = Process.wait2(io.pid)[1].exitstatus 74 | exit(exit_status) 75 | end 76 | else 77 | puts "available commands:" 78 | puts "__________________" 79 | puts "#{FILENAME} help" 80 | puts "#{FILENAME} pact" 81 | puts "#{FILENAME} pactflow" 82 | puts "#{FILENAME} stub-server" 83 | puts "#{FILENAME} verifier" 84 | puts "#{FILENAME} mock-server" 85 | puts "#{FILENAME} message" 86 | puts "#{FILENAME} broker" 87 | puts "#{FILENAME} pact-broker" 88 | puts "#{FILENAME} plugin" 89 | puts "#{FILENAME} stub-service (legacy)" 90 | puts "#{FILENAME} provider-verifier (legacy)" 91 | puts "#{FILENAME} mock-service (legacy)" 92 | end -------------------------------------------------------------------------------- /packaging/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | awesome_print (1.9.2) 5 | base64 (0.3.0) 6 | bigdecimal (3.1.5) 7 | csv (3.3.5) 8 | diff-lcs (1.6.2) 9 | dig_rb (1.0.1) 10 | expgen (0.1.1) 11 | parslet 12 | faraday (2.14.0) 13 | faraday-net_http (>= 2.0, < 3.5) 14 | json 15 | logger 16 | faraday-net_http (3.4.1) 17 | net-http (>= 0.5.0) 18 | faraday-retry (2.3.2) 19 | faraday (~> 2.0) 20 | fiddle (1.1.2) 21 | find_a_port (1.0.1) 22 | httparty (0.23.2) 23 | csv 24 | mini_mime (>= 1.0.0) 25 | multi_xml (>= 0.5.2) 26 | json (2.7.2) 27 | jsonpath (1.1.5) 28 | multi_json 29 | logger (1.7.0) 30 | mini_mime (1.1.5) 31 | mize (0.6.1) 32 | multi_json (1.17.0) 33 | multi_xml (0.7.2) 34 | bigdecimal (~> 3.1) 35 | net-http (0.7.0) 36 | uri 37 | ostruct (0.6.3) 38 | pact (1.67.3) 39 | jsonpath (~> 1.0) 40 | pact-mock_service (~> 3.0, >= 3.3.1) 41 | pact-support (~> 1.21, >= 1.21.2) 42 | rack 43 | rack-proxy 44 | rack-test (>= 0.6.3, < 3.0.0) 45 | rainbow (~> 3.1) 46 | rspec (~> 3.0) 47 | string_pattern (~> 2.0) 48 | thor (>= 0.20, < 2.0) 49 | webrick (~> 1.8) 50 | zeitwerk (~> 2.3) 51 | pact-message (0.11.1) 52 | pact-mock_service (~> 3.1) 53 | pact-support (~> 1.8) 54 | thor (>= 0.20, < 2.0) 55 | pact-mock_service (3.12.3) 56 | find_a_port (~> 1.0.1) 57 | json 58 | pact-support (~> 1.16, >= 1.16.4) 59 | rack (>= 3.0, < 4.0) 60 | rackup (~> 2.0) 61 | rspec (>= 2.14) 62 | thor (>= 0.19, < 2.0) 63 | webrick (~> 1.8) 64 | pact-provider-verifier (1.39.1) 65 | faraday (~> 2.5) 66 | faraday-retry (~> 2.2) 67 | json (> 1.8) 68 | ostruct 69 | pact (~> 1.59) 70 | pact-message (~> 0.5) 71 | rack (>= 3.0, < 4.0) 72 | rack-reverse-proxy-pact 73 | rackup (~> 2.0) 74 | rspec (~> 3.5) 75 | rspec_junit_formatter (~> 0.3) 76 | pact-support (1.21.2) 77 | awesome_print (~> 1.9) 78 | diff-lcs (~> 1.5) 79 | expgen (~> 0.1) 80 | jsonpath (~> 1.0) 81 | rainbow (~> 3.1.1) 82 | string_pattern (~> 2.0) 83 | pact_broker-client (1.77.0) 84 | base64 (~> 0.2) 85 | dig_rb (~> 1.0) 86 | httparty (>= 0.21.0, < 1.0.0) 87 | ostruct 88 | rake (~> 13.0) 89 | table_print (~> 1.5) 90 | term-ansicolor (~> 1.7) 91 | thor (>= 0.20, < 2.0) 92 | parslet (2.0.0) 93 | rack (3.2.4) 94 | rack-proxy (0.7.7) 95 | rack 96 | rack-reverse-proxy-pact (1.0.2) 97 | rack (>= 3.0, < 4.0) 98 | rack-proxy (~> 0.6, >= 0.6.1) 99 | rackup (~> 2.0) 100 | rack-test (2.2.0) 101 | rack (>= 1.3) 102 | rackup (2.2.1) 103 | rack (>= 3) 104 | rainbow (3.1.1) 105 | rake (13.3.1) 106 | regexp_parser (2.11.3) 107 | rspec (3.13.2) 108 | rspec-core (~> 3.13.0) 109 | rspec-expectations (~> 3.13.0) 110 | rspec-mocks (~> 3.13.0) 111 | rspec-core (3.13.6) 112 | rspec-support (~> 3.13.0) 113 | rspec-expectations (3.13.5) 114 | diff-lcs (>= 1.2.0, < 2.0) 115 | rspec-support (~> 3.13.0) 116 | rspec-mocks (3.13.7) 117 | diff-lcs (>= 1.2.0, < 2.0) 118 | rspec-support (~> 3.13.0) 119 | rspec-support (3.13.6) 120 | rspec_junit_formatter (0.6.0) 121 | rspec-core (>= 2, < 4, != 2.12.0) 122 | string_pattern (2.3.0) 123 | regexp_parser (~> 2.5, >= 2.5.0) 124 | sync (0.5.0) 125 | table_print (1.5.7) 126 | term-ansicolor (1.11.3) 127 | tins (~> 1) 128 | thor (1.4.0) 129 | tins (1.45.0) 130 | bigdecimal 131 | mize (~> 0.6) 132 | sync 133 | uri (1.1.1) 134 | webrick (1.9.1) 135 | zeitwerk (2.7.3) 136 | 137 | PLATFORMS 138 | aarch64-linux 139 | arm64-darwin 140 | arm64-darwin-20 141 | arm64-darwin-21 142 | arm64-darwin-22 143 | arm64-darwin-23 144 | ruby 145 | x64-mingw32 146 | x86_64-darwin 147 | x86_64-darwin-20 148 | x86_64-darwin-21 149 | x86_64-darwin-22 150 | x86_64-darwin-23 151 | x86_64-linux 152 | 153 | DEPENDENCIES 154 | bigdecimal (= 3.1.5) 155 | fiddle (= 1.1.2) 156 | json (= 2.7.2) 157 | pact (= 1.67.3) 158 | pact-message (= 0.11.1) 159 | pact-mock_service (= 3.12.3) 160 | pact-provider-verifier (= 1.39.1) 161 | pact_broker-client (= 1.77.0) 162 | webrick (= 1.9.1) 163 | 164 | BUNDLED WITH 165 | 2.5.18 166 | -------------------------------------------------------------------------------- /packaging/README.md.template: -------------------------------------------------------------------------------- 1 | # Pact Standalone 2 | 3 | ![Build](https://github.com/pact-foundation/pact-standalone/workflows/Build/badge.svg) 4 | 5 | Creates a standalone pact command line executable containing 6 | 7 | - The rust pact implementation via cargo executables 8 | - The ruby pact implementation via Traveling Ruby 9 | 10 | ## Package contents 11 | 12 | This version (<%= ENV.fetch('VERSION') %>) of the Pact standalone executables package contains: 13 | 14 | * pact gem <%= Pact::VERSION %> 15 | * pact-mock_service gem <%= Pact::MockService::VERSION %> 16 | * pact-support gem <%= Pact::Support::VERSION %> 17 | * pact-provider-verifier gem <%= Pact::ProviderVerifier::VERSION %> 18 | * pact_broker-client gem <%= PactBroker::Client::VERSION %> 19 | * pact-message gem <%= Pact::Message::VERSION %> 20 | * [pact_mock_server_cli](https://github.com/pact-foundation/pact-core-mock-server/tree/main/pact_mock_server_cli) 21 | * [pact-stub-server](https://github.com/pact-foundation/pact-stub-server) 22 | * [pact_verifier_cli](https://github.com/pact-foundation/pact-reference/tree/master/rust/pact_verifier_cli) 23 | * [pact-plugin-cli](https://github.com/pact-foundation/pact-plugins/tree/main/cli) 24 | 25 | Binaries will be extracted into `pact/bin`: 26 | 27 | ``` 28 | ./pact/bin/ 29 | ├── pact (central entry point to all binaries) 30 | ├── pact-broker 31 | ├── pactflow 32 | ├── pact_mock_server_cli 33 | ├── pact-stub-server 34 | ├── pact_verifier_cli 35 | ├── pact-plugin-cli 36 | ├── pact-message (legacy) 37 | ├── pact-mock-service (legacy) 38 | ├── pact-provider-verifier (legacy) 39 | └── pact-stub-service (legacy) 40 | ``` 41 | 42 | ### Windows Users 43 | 44 | Please append `.bat` to any of the provided ruby-based binaries 45 | 46 | eg. 47 | 48 | ```ps1 49 | .\pact\bin\pact-broker.bat 50 | ``` 51 | 52 | Please append `.exe` to any of the provided rust based binaries 53 | 54 | eg. 55 | 56 | ```ps1 57 | .\pact\bin\pact_mock_server_cli.exe 58 | ``` 59 | 60 | ## Installation 61 | 62 | See the [release page][releases]. 63 | 64 | [releases]: https://github.com/pact-foundation/pact-standalone/releases 65 | 66 | ## Supported Platforms 67 | 68 | Ruby is not required on the host platform, Ruby 3.3.9 is provided in the distributable. 69 | 70 | | OS | Ruby | Architecture | Supported | 71 | | -------| ------- | ------------ | --------- | 72 | | MacOS | 3.3.9 | x86_64 | ✅ | 73 | | MacOS | 3.3.9 | aarch64 (arm64)| ✅ | 74 | | Linux | 3.3.9 | x86_64 | ✅ | 75 | | Linux | 3.3.9 | aarch64 (arm64)| ✅ | 76 | | Windows| 3.3.9 | x86_64 | ✅ | 77 | | Windows| 3.3.9 | aarch64 (arm64)| 🚧 | 78 | 79 | 🚧 - Tested under emulation mode x86_64 in Windows on ARM 80 | 81 | ## Usage 82 | 83 | 84 | ### pact-mock-service 85 | 86 | ``` 87 | <%= pact_mock_service_usage %> 88 | ``` 89 | 90 | 91 | ### pact-stub-service 92 | 93 | ``` 94 | <%= pact_stub_service_usage %> 95 | ``` 96 | 97 | 98 | ### pact-provider-verifier 99 | 100 | To connect to a Pact Broker that uses custom SSL cerificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 101 | 102 | ``` 103 | <%= pact_provider_verifier_usage %> 104 | ``` 105 | 106 | 107 | ### pact-broker client 108 | 109 | To connect to a Pact Broker that uses custom SSL cerificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 110 | 111 | 112 | #### publish 113 | 114 | ``` 115 | <%= pact_publish_usage %> 116 | ``` 117 | 118 | 119 | #### can-i-deploy 120 | 121 | ``` 122 | <%= pact_broker_can_i_deploy_usage %> 123 | ``` 124 | 125 | 126 | 127 | 128 | ### pactflow client 129 | 130 | #### publish-provider-contract 131 | 132 | ``` 133 | <%= pactflow_publish_provider_contract_usage %> 134 | ``` 135 | 136 | ### pact 137 | 138 | 139 | #### docs 140 | ``` 141 | <%= pact_docs_usage %> 142 | ``` 143 | 144 | ### pact-message 145 | 146 | ``` 147 | <%= pact_message_usage %> 148 | ``` 149 | 150 | ## Troubleshooting 151 | 152 | ### SSL 153 | 154 | To connect to a Pact Broker that uses custom SSL certificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 155 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | ## Tested with https://www.shellcheck.net/ 3 | # Usage: (install latest) 4 | # $ curl -fsSL https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh | sh 5 | # or 6 | # $ wget -q https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh -O- | sh 7 | # 8 | # Usage: (install fixed version) - pass PACT_CLI_VERSION=v eg PACT_CLI_VERSION=v1.92.0 or set as an env var 9 | # $ curl -fsSL https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh | PACT_CLI_VERSION=v1.92.0 sh 10 | # or 11 | # $ wget -q https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh -O- | PACT_CLI_VERSION=v1.92.0 sh 12 | # 13 | if [ "$tag" ]; then 14 | echo "setting $tag as PACT_CLI_VERSION for legacy reasons" 15 | PACT_CLI_VERSION="$tag" 16 | fi 17 | 18 | if [ -z "$PACT_CLI_VERSION" ]; then 19 | PACT_CLI_VERSION=$(basename "$(curl -fs -o/dev/null -w "%{redirect_url}" https://github.com/pact-foundation/pact-standalone/releases/latest)") 20 | echo "Thanks for downloading the latest release of pact-standalone $PACT_CLI_VERSION." 21 | echo "-----" 22 | echo "Note:" 23 | echo "-----" 24 | echo "You can download a fixed version by setting the PACT_CLI_VERSION environment variable eg PACT_CLI_VERSION=v1.92.0" 25 | echo "example:" 26 | echo "curl -fsSL https://raw.githubusercontent.com/pact-foundation/pact-standalone/master/install.sh | PACT_CLI_VERSION=v1.92.0 sh" 27 | else 28 | echo "Thanks for downloading pact-standalone $PACT_CLI_VERSION." 29 | fi 30 | 31 | PACT_CLI_VERSION_WITHOUT_V=${PACT_CLI_VERSION#v} 32 | MAJOR_PACT_CLI_VERSION=$(echo "$PACT_CLI_VERSION_WITHOUT_V" | cut -d '.' -f 1) 33 | 34 | case $(uname -sm) in 35 | 'Linux x86_64') 36 | os='linux-x86_64' 37 | ;; 38 | 'Linux aarch64') 39 | if [ "$MAJOR_PACT_CLI_VERSION" -lt 2 ]; then 40 | echo "Sorry, you'll need to install the pact-standalone manually." 41 | exit 1 42 | else 43 | os='linux-arm64' 44 | fi 45 | ;; 46 | 'Darwin arm64') 47 | if [ "$MAJOR_PACT_CLI_VERSION" -lt 2 ]; then 48 | os='osx' 49 | else 50 | os='osx-arm64' 51 | fi 52 | ;; 53 | 'Darwin x86' | 'Darwin x86_64') 54 | if [ "$MAJOR_PACT_CLI_VERSION" -lt 2 ]; then 55 | os='osx' 56 | else 57 | os='osx-x86_64' 58 | fi 59 | ;; 60 | "Windows"* | "MINGW64"*) 61 | if [ "$MAJOR_PACT_CLI_VERSION" -lt 2 ]; then 62 | os='win32' 63 | else 64 | os='windows-x86_64' 65 | fi 66 | ;; 67 | *) 68 | echo "Sorry, you'll need to install the pact-standalone manually." 69 | exit 1 70 | ;; 71 | esac 72 | 73 | case $os in 74 | 'windows'* | 'win32') 75 | filename="pact-${PACT_CLI_VERSION#v}-${os}.zip" 76 | ;; 77 | 'osx'* | 'linux'*) 78 | filename="pact-${PACT_CLI_VERSION#v}-${os}.tar.gz" 79 | ;; 80 | esac 81 | 82 | echo "-------------" 83 | echo "Downloading:" 84 | echo "-------------" 85 | (curl -sLO https://github.com/pact-foundation/pact-standalone/releases/download/"${PACT_CLI_VERSION}"/"${filename}" && echo downloaded "${filename}") || (echo "Sorry, you'll need to install the pact-standalone manually." && exit 1) 86 | case $os in 87 | 'windows'* | 'win32') 88 | (unzip "${filename}" && echo unarchived "${filename}") || (echo "Sorry, you'll need to unarchived the pact-standalone manually." && exit 1) 89 | ;; 90 | 'osx'* | 'linux'*) 91 | (tar xzf "${filename}" && echo unarchived "${filename}") || (echo "Sorry, you'll need to unarchived the pact-standalone manually." && exit 1) 92 | ;; 93 | esac 94 | (rm "${filename}" && echo removed "${filename}") || (echo "Sorry, you'll need to remove the pact-standalone archive manually." && exit 1) 95 | 96 | echo "pact-standalone ${PACT_CLI_VERSION} installed to $(pwd)/pact" 97 | echo "-------------------" 98 | echo "available commands:" 99 | echo "-------------------" 100 | PROJECT_NAME=pact-cli 101 | PACT_CLI_BIN_PATH=${PWD}/pact/bin/ 102 | 103 | ls -1 "$PACT_CLI_BIN_PATH" 104 | 105 | 106 | if [ "$GITHUB_ENV" ]; then 107 | echo "Added the following to your path to make ${PROJECT_NAME} available:" 108 | echo "" 109 | echo "PATH=$PACT_CLI_BIN_PATH:\${PATH}" 110 | echo "PATH=$PACT_CLI_BIN_PATH:${PATH}" >>"$GITHUB_ENV" 111 | elif [ "$CIRRUS_CI" ]; then 112 | echo "Added the following to your path to make ${PROJECT_NAME} available:" 113 | echo "" 114 | echo "PATH=$PACT_CLI_BIN_PATH:\${PATH}" 115 | echo "PATH=$PACT_CLI_BIN_PATH:${PATH}" >>"$CIRRUS_ENV" 116 | else 117 | echo "Add the following to your path to make ${PROJECT_NAME} available:" 118 | echo "--- Linux/MacOS/Windows Bash Users --------" 119 | echo "" 120 | echo " PATH=$PACT_CLI_BIN_PATH:\${PATH}" 121 | fi 122 | -------------------------------------------------------------------------------- /DEVELOPING.md: -------------------------------------------------------------------------------- 1 | ## Packaging 2 | 3 | pact-standalone is packaged with `traveling-ruby` 4 | 5 | ### Building the `traveling-ruby` runtime 6 | 7 | 1. Build the traveling ruby runtime 8 | 1. `git clone git@github.com:YOU54F/traveling-ruby.git` 9 | 2. `git checkout ci` 10 | 11 | For macOS - it will build for arm64 or x86_64 depending on your processor 12 | 13 | cd osx 14 | rake stash_conflicting_paths 15 | rake --trace 16 | rake unstash_conflicting_paths 17 | 18 | For macOS x86_64 on an m1 machine 19 | 20 | sudo softwareupdate --install-rosetta --agree-to-license 21 | cd osx 22 | rake stash_conflicting_paths 23 | arch -x86_64 rake --trace 24 | rake unstash_conflicting_paths 25 | 26 | For Linux 27 | 28 | These are built via docker images, using [Phusions Holy Build Box](https://github.com/phusion/holy-build-box) so don't have to be built on a linux host. You can skip the `rake image` step, and it will pull from the image from Dockerhub 29 | 30 | For Linux x86_64 31 | 32 | cd linux 33 | ARCHITECTURES="x86_64" rake image 34 | ARCHITECTURES="x86_64" rake 35 | 36 | For Linux arm64 37 | 38 | cd linux 39 | ARCHITECTURES="arm64" rake image 40 | ARCHITECTURES="arm64" rake 41 | 42 | For Windows 43 | 44 | These dont package ruby gems, just the ruby runtime. 45 | 46 | Script is designed to run on Linux, but can be run on macOS or windows. 47 | 48 | 1. macOS users will need `7zz` as an alias for `7z` - `brew install sevenzip` 49 | 2. linux users will need `7z` 50 | 3. windows users will need a `bash` shell, or prefix commands with `bash -c 'command'` 51 | 1. You'll also need to modify the commands below, for the necessary version 52 | 2. Happy to accept a PR to make it more powershell/cmd prompt friendly 53 | 54 | For windows x86_64 55 | 56 | cd windows 57 | bash -c 'mkdir -p cache output/3.3.9' 58 | bash -c './build-ruby -a x86 -r 3.3.9 cache output/3.3.9' 59 | bash -c './package -r traveling-ruby-20230428-3.3.9-x86-windows.tar.gz output/3.3.9' 60 | 61 | For windows x86 62 | 63 | bash -c 'mkdir -p cache output/3.3.9' 64 | bash -c './build-ruby -a x86_64 -r 3.3.9 cache output/3.3.9' 65 | bash -c './package -r traveling-ruby-20230428-3.3.9-x86_64-windows.tar.gz output/3.3.9' 66 | 67 | ### Building the pact-standalone packages 68 | 69 | The following steps are the same, whether you are using the published traveling-ruby binaries, or you have built your own 70 | 71 | Setup your gems 72 | 73 | bundle install 74 | 75 | Build all the pact-standalone packages 76 | 77 | bundle exec rake package 78 | 79 | Build only selected platforms 80 | 81 | bundle exec rake package:linux:arm64 82 | bundle exec rake package:linux:x64 83 | bundle exec rake package:osx:arm64 84 | bundle exec rake package:osx:x64 85 | bundle exec rake package:windows:x64 86 | bundle exec rake package:windows:x86 87 | 88 | #### Using your own built `traveling-ruby` packages 89 | 90 | 1. in `tasks/package.rake` 91 | 1. comment out the `download_runtime` line, for whichever binary you don't want to want to download from the uploaded source but instead, use your own 92 | 93 | ```ruby 94 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do 95 | # download_runtime(TRAVELING_RUBY_VERSION, "linux-x86_64") 96 | end 97 | 98 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-arm64.tar.gz" do 99 | # download_runtime(TRAVELING_RUBY_VERSION, "linux-arm64") 100 | end 101 | 102 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-x86_64.tar.gz" do 103 | # download_runtime(TRAVELING_RUBY_VERSION, "osx-x86_64") 104 | end 105 | 106 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-arm64.tar.gz" do 107 | # download_runtime(TRAVELING_RUBY_VERSION, "osx-arm64") 108 | end 109 | 110 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-windows-x86_64.tar.gz" do 111 | # download_runtime(TRAVELING_RUBY_VERSION, "windows-x86_64") 112 | end 113 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-windows-x86.tar.gz" do 114 | # download_runtime(TRAVELING_RUBY_VERSION, "windows-x86") 115 | end 116 | ``` 117 | 118 | 2. Copy your built `traveling-ruby` package into the `build` folder 119 | 3. Ensure the version number in `tasks/package.rake` matches your package name 120 | 1. eg 121 | 1. `traveling-ruby-20230508-3.3.9-linux-arm64.tar.gz` 122 | 123 | ```ruby 124 | TRAVELING_RUBY_VERSION = "20230508-3.3.9" 125 | ``` 126 | 127 | 4. Run `bundle exec rake package` as before 128 | 129 | ## Supported Platforms 130 | 131 | | OS | Ruby | Architecture | Supported | 132 | | -------| ------- | ------------ | --------- | 133 | | OSX | 3.3.9 | x86_64 | ✅ | 134 | | OSX | 3.3.9 | aarch64 (arm)| ✅ | 135 | | Linux | 3.3.9 | x86_64 | ✅ | 136 | | Linux | 3.3.9 | aarch64 (arm)| ✅ | 137 | | Windows| 3.3.9 | x86_64 | ✅ | 138 | | Windows| 3.3.9 | x86 | ✅ | 139 | | Windows| 3.3.9 | aarch64 (via x86 emulation) | ✅ | 140 | 141 | ## Testing 142 | 143 | We aim to support testing locally on all platforms, as well as using automated CI scripts. 144 | 145 | We suggest avoiding putting logic out of CI workflow yaml files and instead prefer shell files. 146 | 147 | We believe it makes testing locally so much easier. 148 | 149 | > The workflow files should just contain code that wires the CI platform into your own scripts. 150 | 151 | Because of this, you'll find a `script` folder in this repo, with all of the relevant commands. 152 | 153 | For the CI runs, check the following 154 | 155 | - `./github/workflows` folder for github action jobs 156 | - `.cirrus.yml` workflow for cirrus-ci jobs 157 | 158 | Github Actions is used to build, audit, test and push multi-arch images to DockerHub. 159 | 160 | Cirrus CI is used to build an arm64 image, and run the integration tests against it. 161 | 162 | ### Running as the CI system locally 163 | 164 | You should be able to run the steps shown in the CI workflows, from your local machine. 165 | 166 | - GitHub Actions 167 | - [Act](https://github.com/nektos/act) (all hosts) 168 | 169 | #### Run the test workflow 170 | 171 | `act --container-architecture linux/amd64 -W .github/workflows/build.yml --artifact-server-path tmp` -------------------------------------------------------------------------------- /tasks/package.rake: -------------------------------------------------------------------------------- 1 | # For Bundler.with_unbundled_env 2 | require 'bundler/setup' 3 | 4 | PACKAGE_NAME = "pact" 5 | VERSION = File.read('VERSION').strip 6 | TRAVELING_RUBY_VERSION = "20250625-3.3.9" 7 | TRAVELING_RUBY_PKG_DATE = TRAVELING_RUBY_VERSION.split("-").first 8 | TRAVELING_RB_VERSION = TRAVELING_RUBY_VERSION.split("-").last 9 | RUBY_COMPAT_VERSION = TRAVELING_RB_VERSION.split(".").first(2).join(".") + ".0" 10 | RUBY_MAJOR_VERSION = TRAVELING_RB_VERSION.split(".").first.to_i 11 | RUBY_MINOR_VERSION = TRAVELING_RB_VERSION.split(".")[1].to_i 12 | PLUGIN_CLI_VERSION = "0.1.3" # https://github.com/pact-foundation/pact-plugins/releases 13 | MOCK_SERVER_CLI_VERSION = "1.0.6" # https://github.com/pact-foundation/pact-core-mock-server/releases 14 | VERIFIER_CLI_VERSION = "1.2.0" # https://github.com/pact-foundation/pact-reference/releases 15 | STUB_SERVER_CLI_VERSION = "0.6.2" # https://github.com/pact-foundation/pact-stub-server/releases 16 | 17 | desc "Package pact-standalone for OSX, Linux x86_64 and windows x86_64" 18 | task :package => ['package:linux:x86_64','package:linux:arm64', 'package:osx:x86_64', 'package:osx:arm64','package:windows:x86_64'] 19 | 20 | namespace :package do 21 | namespace :linux do 22 | desc "Package pact-standalone for Linux x86_64" 23 | task :x86_64 => [:bundle_install, "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz"] do 24 | create_package(TRAVELING_RUBY_VERSION, "linux-x86_64", "linux-x86_64", :unix) 25 | end 26 | 27 | desc "Package pact-standalone for Linux arm64" 28 | task :arm64 => [:bundle_install, "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-arm64.tar.gz"] do 29 | create_package(TRAVELING_RUBY_VERSION, "linux-arm64", "linux-arm64", :unix) 30 | end 31 | end 32 | 33 | namespace :osx do 34 | desc "Package pact-standalone for OS X x86_64" 35 | task :x86_64 => [:bundle_install, "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-x86_64.tar.gz"] do 36 | create_package(TRAVELING_RUBY_VERSION, "osx-x86_64", "osx-x86_64", :unix) 37 | end 38 | 39 | desc "Package pact-standalone for OS X arm64" 40 | task :arm64 => [:bundle_install, "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-arm64.tar.gz"] do 41 | create_package(TRAVELING_RUBY_VERSION, "osx-arm64", "osx-arm64", :unix) 42 | end 43 | end 44 | namespace :windows do 45 | desc "Package pact-standalone for windows x86_64" 46 | task :x86_64 => [:bundle_install, "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-windows-x86_64.tar.gz"] do 47 | create_package(TRAVELING_RUBY_VERSION, "windows-x86_64", "windows-x86_64", :windows) 48 | end 49 | end 50 | desc "Install gems to local directory" 51 | task :bundle_install do 52 | if RUBY_VERSION !~ /^#{RUBY_MAJOR_VERSION}\.#{RUBY_MINOR_VERSION}\./ 53 | abort "You can only 'bundle install' using Ruby #{TRAVELING_RB_VERSION}, because that's what Traveling Ruby uses. \n You are using Ruby #{RUBY_VERSION}." 54 | end 55 | sh "rm -rf build/tmp" 56 | sh "mkdir -p build/tmp" 57 | sh "cp packaging/Gemfile packaging/Gemfile.lock build/tmp/" 58 | sh "mkdir -p build/tmp/lib/pact/mock_service" 59 | # sh "cp lib/pact/mock_service/version.rb build/tmp/lib/pact/mock_service/version.rb" 60 | Bundler.with_unbundled_env do 61 | sh "cd build/tmp && env bundle lock --add-platform x64-mingw32 && bundle config set --local path '../vendor' && env BUNDLE_DEPLOYMENT=true bundle install" 62 | generate_readme 63 | end 64 | sh "rm -rf build/tmp" 65 | sh "rm -rf build/vendor/*/*/cache/*" 66 | end 67 | 68 | task :generate_readme do 69 | Bundler.with_unbundled_env do 70 | sh "mkdir -p build/tmp" 71 | sh "cp packaging/Gemfile packaging/Gemfile.lock build/tmp/" 72 | sh "cd build/tmp && env BUNDLE_IGNORE_CONFIG=1 bundle install --path ../vendor --without development" 73 | generate_readme 74 | end 75 | end 76 | end 77 | 78 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do 79 | download_runtime(TRAVELING_RUBY_VERSION, "linux-x86_64") 80 | end 81 | 82 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-arm64.tar.gz" do 83 | download_runtime(TRAVELING_RUBY_VERSION, "linux-arm64") 84 | end 85 | 86 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-x86_64.tar.gz" do 87 | download_runtime(TRAVELING_RUBY_VERSION, "osx-x86_64") 88 | end 89 | 90 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx-arm64.tar.gz" do 91 | download_runtime(TRAVELING_RUBY_VERSION, "osx-arm64") 92 | end 93 | 94 | file "build/traveling-ruby-#{TRAVELING_RUBY_VERSION}-windows-x86_64.tar.gz" do 95 | download_runtime(TRAVELING_RUBY_VERSION, "windows-x86_64") 96 | end 97 | def create_package(version, source_target, package_target, os_type) 98 | package_dir = "#{PACKAGE_NAME}" 99 | package_name = "#{PACKAGE_NAME}-#{VERSION}-#{package_target}" 100 | sh "rm -rf #{package_dir}" 101 | sh "mkdir #{package_dir}" 102 | sh "mkdir -p #{package_dir}/lib/app" 103 | sh "mkdir -p #{package_dir}/bin" 104 | sh "cp build/README.md #{package_dir}" 105 | sh "cp packaging/pact*.rb #{package_dir}/lib/app" 106 | 107 | # sh "cp -pR lib #{package_dir}/lib/app" 108 | sh "mkdir #{package_dir}/lib/ruby" 109 | sh "tar -xzf build/traveling-ruby-#{version}-#{source_target}.tar.gz -C #{package_dir}/lib/ruby" 110 | # From https://curl.se/docs/caextract.html 111 | sh "cp packaging/cacert.pem #{package_dir}/lib/ruby/lib/ca-bundle.crt" 112 | 113 | case os_type 114 | when :unix 115 | Dir.chdir('packaging'){ Dir['pact*.sh'] }.each do | name | 116 | sh "cp packaging/#{name} #{package_dir}/bin/#{name.chomp('.sh')}" 117 | end 118 | when :windows 119 | sh "cp packaging/pact*.bat #{package_dir}/bin" 120 | else 121 | raise "We don't serve their kind (#{os_type}) here!" 122 | end 123 | 124 | sh "cp -pR build/vendor #{package_dir}/lib/" 125 | sh "cp packaging/Gemfile packaging/Gemfile.lock #{package_dir}/lib/vendor/" 126 | sh "mkdir #{package_dir}/lib/vendor/.bundle" 127 | sh "cp packaging/bundler-config #{package_dir}/lib/vendor/.bundle/config" 128 | 129 | if package_target.include? 'windows' 130 | sh "sed -i.bak '37s/^/#/' #{package_dir}/lib/ruby/lib/ruby/#{RUBY_COMPAT_VERSION}/bundler/stub_specification.rb" 131 | else 132 | sh "sed -i.bak '41s/^/#/' #{package_dir}/lib/ruby/lib/ruby/site_ruby/#{RUBY_COMPAT_VERSION}/bundler/stub_specification.rb" 133 | end 134 | remove_unnecessary_files package_dir 135 | install_plugin_cli package_dir, package_target 136 | install_mock_server_cli package_dir, package_target 137 | install_verifier_cli package_dir, package_target 138 | install_stub_server_cli package_dir, package_target 139 | 140 | if !ENV['DIR_ONLY'] 141 | sh "mkdir -p pkg" 142 | 143 | if os_type == :unix 144 | sh "tar -czf pkg/#{package_name}.tar.gz #{package_dir}" 145 | else 146 | sh "zip -9rq pkg/#{package_name}.zip #{package_dir}" 147 | end 148 | 149 | sh "rm -rf #{package_dir}" 150 | end 151 | end 152 | 153 | def remove_unnecessary_files package_dir 154 | ## Reduce distribution - https://github.com/phusion/traveling-ruby/blob/master/REDUCING_PACKAGE_SIZE.md 155 | # Remove tests 156 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/test" 157 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/tests" 158 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/spec" 159 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/features" 160 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/benchmark" 161 | 162 | # Remove documentation" 163 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/README*" 164 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/CHANGE*" 165 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/Change*" 166 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/COPYING*" 167 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/LICENSE*" 168 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/MIT-LICENSE*" 169 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/TODO" 170 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/*.txt" 171 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/*.md" 172 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/*.rdoc" 173 | 174 | # Issue 134 - Remove rdoc gemspec 175 | sh "find #{package_dir}/lib -name 'rdoc*gemspec' | xargs rm -f" 176 | 177 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/doc" 178 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/docs" 179 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/example" 180 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/examples" 181 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/sample" 182 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/doc-api" 183 | sh "find #{package_dir}/lib/vendor/ruby -name '*.md' | xargs rm -f" 184 | 185 | # Remove misc unnecessary files" 186 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/.gitignore" 187 | sh "rm -rf #{package_dir}/lib/vendor/ruby/*/gems/*/.travis.yml" 188 | 189 | # Remove leftover native extension sources and compilation objects" 190 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/ext/Makefile" 191 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/ext/*/Makefile" 192 | sh "rm -f #{package_dir}/lib/vendor/ruby/*/gems/*/ext/*/tmp" 193 | sh "find #{package_dir}/lib/vendor/ruby -name '*.c' | xargs rm -f" 194 | sh "find #{package_dir}/lib/vendor/ruby -name '*.cpp' | xargs rm -f" 195 | sh "find #{package_dir}/lib/vendor/ruby -name '*.h' | xargs rm -f" 196 | sh "find #{package_dir}/lib/vendor/ruby -name '*.rl' | xargs rm -f" 197 | sh "find #{package_dir}/lib/vendor/ruby -name 'extconf.rb' | xargs rm -f" 198 | sh "find #{package_dir}/lib/vendor/ruby/*/gems -name '*.o' | xargs rm -f" 199 | sh "find #{package_dir}/lib/vendor/ruby/*/gems -name '*.so' | xargs rm -f" 200 | sh "find #{package_dir}/lib/vendor/ruby/*/gems -name '*.bundle' | xargs rm -f" 201 | sh "find #{package_dir}/lib/vendor/ruby/*/extensions -name '*.o' | xargs rm -f" 202 | sh "find #{package_dir}/lib/vendor/ruby/*/extensions -name '*.so' | xargs rm -f" 203 | sh "find #{package_dir}/lib/vendor/ruby/*/extensions -name '*.bundle' | xargs rm -f" 204 | 205 | # Remove Java files. They're only used for JRuby support" 206 | sh "find #{package_dir}/lib/vendor/ruby -name '*.java' | xargs rm -f" 207 | sh "find #{package_dir}/lib/vendor/ruby -name '*.class' | xargs rm -f" 208 | 209 | # Ruby Docs 210 | sh "rm -rf #{package_dir}/lib/ruby/lib/ruby/*/rdoc*" 211 | 212 | # Website files 213 | sh "find #{package_dir}/lib/vendor/ruby -name '*.html' | xargs rm -f" 214 | sh "find #{package_dir}/lib/vendor/ruby -name '*.css' | xargs rm -f" 215 | sh "find #{package_dir}/lib/vendor/ruby -name '*.svg' | xargs rm -f" 216 | 217 | # Remove unused Gemfile.lock files 218 | sh "find #{package_dir}/lib/vendor/ruby -name 'Gemfile.lock' | xargs rm -f" 219 | 220 | # Uncommonly used encodings 221 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/cp949*" 222 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/euc_*" 223 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/shift_jis*" 224 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/koi8_*" 225 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/emacs*" 226 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/gb*" 227 | sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/big5*" 228 | # sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/windows*" 229 | # sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/utf_16*" 230 | # sh "rm -f #{package_dir}/lib/ruby/lib/ruby/*/*/enc/utf_32*" 231 | end 232 | 233 | def generate_readme 234 | template = File.absolute_path('packaging/README.md.template') 235 | script = File.absolute_path('packaging/generate_readme_contents.rb') 236 | Bundler.with_unbundled_env do 237 | sh "cd build/tmp && env VERSION=#{VERSION} bundle exec ruby #{script} #{template} > ../README.md" 238 | end 239 | end 240 | 241 | def download_runtime(version, target) 242 | sh "cd build && curl -L -O --fail " + 243 | "https://github.com/YOU54F/traveling-ruby/releases/download/rel-#{TRAVELING_RUBY_PKG_DATE}/traveling-ruby-#{version}-#{target}.tar.gz" 244 | end 245 | 246 | def install_plugin_cli(package_dir, package_target) 247 | case package_target 248 | when "linux-x86_64" 249 | sh "curl -L -o #{package_dir}/bin/pact-plugin-cli.gz https://github.com/pact-foundation/pact-plugins/releases/download/pact-plugin-cli-v#{PLUGIN_CLI_VERSION}/pact-plugin-cli-linux-x86_64.gz" 250 | sh "gunzip -N -f #{package_dir}/bin/pact-plugin-cli.gz" 251 | sh "chmod +x #{package_dir}/bin/pact-plugin-cli" 252 | when "linux-arm64" 253 | sh "curl -L -o #{package_dir}/bin/pact-plugin-cli.gz https://github.com/pact-foundation/pact-plugins/releases/download/pact-plugin-cli-v#{PLUGIN_CLI_VERSION}/pact-plugin-cli-linux-aarch64.gz" 254 | sh "gunzip -N -f #{package_dir}/bin/pact-plugin-cli.gz" 255 | sh "chmod +x #{package_dir}/bin/pact-plugin-cli" 256 | when "osx-x86_64" 257 | sh "curl -L -o #{package_dir}/bin/pact-plugin-cli.gz https://github.com/pact-foundation/pact-plugins/releases/download/pact-plugin-cli-v#{PLUGIN_CLI_VERSION}/pact-plugin-cli-macos-x86_64.gz" 258 | sh "gunzip -N -f #{package_dir}/bin/pact-plugin-cli.gz" 259 | sh "chmod +x #{package_dir}/bin/pact-plugin-cli" 260 | when "osx-arm64" 261 | sh "curl -L -o #{package_dir}/bin/pact-plugin-cli.gz https://github.com/pact-foundation/pact-plugins/releases/download/pact-plugin-cli-v#{PLUGIN_CLI_VERSION}/pact-plugin-cli-macos-aarch64.gz" 262 | sh "gunzip -N -f #{package_dir}/bin/pact-plugin-cli.gz" 263 | sh "chmod +x #{package_dir}/bin/pact-plugin-cli" 264 | when "windows-x86_64" 265 | sh "curl -L -o #{package_dir}/bin/pact-plugin-cli.exe.gz https://github.com/pact-foundation/pact-plugins/releases/download/pact-plugin-cli-v#{PLUGIN_CLI_VERSION}/pact-plugin-cli-windows-x86_64.exe.gz" 266 | sh "gunzip -N -f #{package_dir}/bin/pact-plugin-cli.exe.gz" 267 | sh "chmod +x #{package_dir}/bin/pact-plugin-cli.exe" 268 | end 269 | end 270 | 271 | def install_mock_server_cli(package_dir, package_target) 272 | case package_target 273 | when "linux-x86_64" 274 | sh "curl -L -o #{package_dir}/bin/pact_mock_server_cli.gz https://github.com/pact-foundation/pact-core-mock-server//releases/download/pact_mock_server_cli-v#{MOCK_SERVER_CLI_VERSION}/pact_mock_server_cli-linux-x86_64.gz" 275 | sh "gunzip -N -f #{package_dir}/bin/pact_mock_server_cli.gz" 276 | sh "chmod +x #{package_dir}/bin/pact_mock_server_cli" 277 | when "linux-arm64" 278 | sh "curl -L -o #{package_dir}/bin/pact_mock_server_cli.gz https://github.com/pact-foundation/pact-core-mock-server//releases/download/pact_mock_server_cli-v#{MOCK_SERVER_CLI_VERSION}/pact_mock_server_cli-linux-aarch64.gz" 279 | sh "gunzip -N -f #{package_dir}/bin/pact_mock_server_cli.gz" 280 | sh "chmod +x #{package_dir}/bin/pact_mock_server_cli" 281 | when "osx-x86_64" 282 | sh "curl -L -o #{package_dir}/bin/pact_mock_server_cli.gz https://github.com/pact-foundation/pact-core-mock-server//releases/download/pact_mock_server_cli-v#{MOCK_SERVER_CLI_VERSION}/pact_mock_server_cli-macos-x86_64.gz" 283 | sh "gunzip -N -f #{package_dir}/bin/pact_mock_server_cli.gz" 284 | sh "chmod +x #{package_dir}/bin/pact_mock_server_cli" 285 | when "osx-arm64" 286 | sh "curl -L -o #{package_dir}/bin/pact_mock_server_cli.gz https://github.com/pact-foundation/pact-core-mock-server//releases/download/pact_mock_server_cli-v#{MOCK_SERVER_CLI_VERSION}/pact_mock_server_cli-macos-aarch64.gz" 287 | sh "gunzip -N -f #{package_dir}/bin/pact_mock_server_cli.gz" 288 | sh "chmod +x #{package_dir}/bin/pact_mock_server_cli" 289 | when "windows-x86_64" 290 | sh "curl -L -o #{package_dir}/bin/pact_mock_server_cli.exe.gz https://github.com/pact-foundation/pact-core-mock-server//releases/download/pact_mock_server_cli-v#{MOCK_SERVER_CLI_VERSION}/pact_mock_server_cli-windows-x86_64.exe.gz" 291 | sh "gunzip -N -f #{package_dir}/bin/pact_mock_server_cli.exe.gz" 292 | sh "chmod +x #{package_dir}/bin/pact_mock_server_cli.exe" 293 | end 294 | end 295 | 296 | def install_verifier_cli(package_dir, package_target) 297 | case package_target 298 | when "linux-x86_64" 299 | sh "curl -L -o #{package_dir}/bin/pact_verifier_cli.gz https://github.com/pact-foundation/pact-reference/releases/download/pact_verifier_cli-v#{VERIFIER_CLI_VERSION}/pact_verifier_cli-linux-x86_64.gz" 300 | sh "gunzip -N -f #{package_dir}/bin/pact_verifier_cli.gz" 301 | sh "chmod +x #{package_dir}/bin/pact_verifier_cli" 302 | when "linux-arm64" 303 | sh "curl -L -o #{package_dir}/bin/pact_verifier_cli.gz https://github.com/pact-foundation/pact-reference/releases/download/pact_verifier_cli-v#{VERIFIER_CLI_VERSION}/pact_verifier_cli-linux-aarch64.gz" 304 | sh "gunzip -N -f #{package_dir}/bin/pact_verifier_cli.gz" 305 | sh "chmod +x #{package_dir}/bin/pact_verifier_cli" 306 | when "osx-x86_64" 307 | sh "curl -L -o #{package_dir}/bin/pact_verifier_cli.gz https://github.com/pact-foundation/pact-reference/releases/download/pact_verifier_cli-v#{VERIFIER_CLI_VERSION}/pact_verifier_cli-macos-x86_64.gz" 308 | sh "gunzip -N -f #{package_dir}/bin/pact_verifier_cli.gz" 309 | sh "chmod +x #{package_dir}/bin/pact_verifier_cli" 310 | when "osx-arm64" 311 | sh "curl -L -o #{package_dir}/bin/pact_verifier_cli.gz https://github.com/pact-foundation/pact-reference/releases/download/pact_verifier_cli-v#{VERIFIER_CLI_VERSION}/pact_verifier_cli-macos-aarch64.gz" 312 | sh "gunzip -N -f #{package_dir}/bin/pact_verifier_cli.gz" 313 | sh "chmod +x #{package_dir}/bin/pact_verifier_cli" 314 | when "windows-x86_64" 315 | sh "curl -L -o #{package_dir}/bin/pact_verifier_cli.exe.gz https://github.com/pact-foundation/pact-reference/releases/download/pact_verifier_cli-v#{VERIFIER_CLI_VERSION}/pact_verifier_cli-windows-x86_64.exe.gz" 316 | sh "gunzip -N -f #{package_dir}/bin/pact_verifier_cli.exe.gz" 317 | sh "chmod +x #{package_dir}/bin/pact_verifier_cli.exe" 318 | end 319 | end 320 | 321 | def install_stub_server_cli(package_dir, package_target) 322 | case package_target 323 | when "linux-x86_64" 324 | sh "curl -L -o #{package_dir}/bin/pact-stub-server.gz https://github.com/pact-foundation/pact-stub-server/releases/download/v#{STUB_SERVER_CLI_VERSION}/pact-stub-server-linux-x86_64.gz" 325 | sh "gunzip -N -f #{package_dir}/bin/pact-stub-server.gz" 326 | sh "chmod +x #{package_dir}/bin/pact-stub-server" 327 | when "linux-arm64" 328 | sh "curl -L -o #{package_dir}/bin/pact-stub-server.gz https://github.com/pact-foundation/pact-stub-server/releases/download/v#{STUB_SERVER_CLI_VERSION}/pact-stub-server-linux-aarch64.gz" 329 | sh "gunzip -N -f #{package_dir}/bin/pact-stub-server.gz" 330 | sh "chmod +x #{package_dir}/bin/pact-stub-server" 331 | when "osx-x86_64" 332 | sh "curl -L -o #{package_dir}/bin/pact-stub-server.gz https://github.com/pact-foundation/pact-stub-server/releases/download/v#{STUB_SERVER_CLI_VERSION}/pact-stub-server-osx-x86_64.gz" 333 | sh "gunzip -N -f #{package_dir}/bin/pact-stub-server.gz" 334 | sh "chmod +x #{package_dir}/bin/pact-stub-server" 335 | when "osx-arm64" 336 | sh "curl -L -o #{package_dir}/bin/pact-stub-server.gz https://github.com/pact-foundation/pact-stub-server/releases/download/v#{STUB_SERVER_CLI_VERSION}/pact-stub-server-osx-aarch64.gz" 337 | sh "gunzip -N -f #{package_dir}/bin/pact-stub-server.gz" 338 | sh "chmod +x #{package_dir}/bin/pact-stub-server" 339 | when "windows-x86_64" 340 | sh "curl -L -o #{package_dir}/bin/pact-stub-server.exe.gz https://github.com/pact-foundation/pact-stub-server/releases/download/v#{STUB_SERVER_CLI_VERSION}/pact-stub-server-windows-x86_64.exe.gz" 341 | sh "gunzip -N -f #{package_dir}/bin/pact-stub-server.exe.gz" 342 | sh "chmod +x #{package_dir}/bin/pact-stub-server.exe" 343 | end 344 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pact Standalone 2 | 3 | ![Build](https://github.com/pact-foundation/pact-standalone/workflows/Build/badge.svg) 4 | 5 | Creates a standalone pact command line executable containing 6 | 7 | - The rust pact implementation via cargo executables 8 | - The ruby pact implementation via Traveling Ruby 9 | 10 | ## Package contents 11 | 12 | This version (2.5.7) of the Pact standalone executables package contains: 13 | 14 | * pact gem 1.67.3 15 | * pact-mock_service gem 3.12.3 16 | * pact-support gem 1.21.2 17 | * pact-provider-verifier gem 1.39.1 18 | * pact_broker-client gem 1.77.0 19 | * pact-message gem 0.11.1 20 | * [pact_mock_server_cli](https://github.com/pact-foundation/pact-core-mock-server/tree/main/pact_mock_server_cli) 21 | * [pact-stub-server](https://github.com/pact-foundation/pact-stub-server) 22 | * [pact_verifier_cli](https://github.com/pact-foundation/pact-reference/tree/master/rust/pact_verifier_cli) 23 | * [pact-plugin-cli](https://github.com/pact-foundation/pact-plugins/tree/main/cli) 24 | 25 | Binaries will be extracted into `pact/bin`: 26 | 27 | ``` 28 | ./pact/bin/ 29 | ├── pact (central entry point to all binaries) 30 | ├── pact-broker 31 | ├── pactflow 32 | ├── pact_mock_server_cli 33 | ├── pact-stub-server 34 | ├── pact_verifier_cli 35 | ├── pact-plugin-cli 36 | ├── pact-message (legacy) 37 | ├── pact-mock-service (legacy) 38 | ├── pact-provider-verifier (legacy) 39 | └── pact-stub-service (legacy) 40 | ``` 41 | 42 | ### Windows Users 43 | 44 | Please append `.bat` to any of the provided ruby-based binaries 45 | 46 | eg. 47 | 48 | ```ps1 49 | .\pact\bin\pact-broker.bat 50 | ``` 51 | 52 | Please append `.exe` to any of the provided rust based binaries 53 | 54 | eg. 55 | 56 | ```ps1 57 | .\pact\bin\pact_mock_server_cli.exe 58 | ``` 59 | 60 | ## Installation 61 | 62 | See the [release page][releases]. 63 | 64 | [releases]: https://github.com/pact-foundation/pact-standalone/releases 65 | 66 | ## Supported Platforms 67 | 68 | Ruby is not required on the host platform, Ruby 3.3.9 is provided in the distributable. 69 | 70 | | OS | Ruby | Architecture | Supported | 71 | | -------| ------- | ------------ | --------- | 72 | | MacOS | 3.3.9 | x86_64 | ✅ | 73 | | MacOS | 3.3.9 | aarch64 (arm64)| ✅ | 74 | | Linux | 3.3.9 | x86_64 | ✅ | 75 | | Linux | 3.3.9 | aarch64 (arm64)| ✅ | 76 | | Windows| 3.3.9 | x86_64 | ✅ | 77 | | Windows| 3.3.9 | aarch64 (arm64)| 🚧 | 78 | 79 | 🚧 - Tested under emulation mode x86_64 in Windows on ARM 80 | 81 | ## Usage 82 | 83 | 84 | ### pact-mock-service 85 | 86 | ``` 87 | Commands: 88 | pact-mock-service control # Run a Pact mock service control s... 89 | pact-mock-service control-restart # Start a Pact mock service control... 90 | pact-mock-service control-start # Start a Pact mock service control... 91 | pact-mock-service control-stop # Stop a Pact mock service control ... 92 | pact-mock-service help [COMMAND] # Describe available commands or on... 93 | pact-mock-service restart # Start or restart a mock service. ... 94 | pact-mock-service service # Start a mock service. If the cons... 95 | pact-mock-service start # Start a mock service. If the cons... 96 | pact-mock-service stop -p, --port=PORT # Stop a Pact mock service 97 | pact-mock-service version # Show the pact-mock-service gem version 98 | 99 | Usage: 100 | pact-mock-service service 101 | 102 | Options: 103 | [--consumer=CONSUMER] # Consumer name 104 | [--provider=PROVIDER] # Provider name 105 | -p, [--port=PORT] # Port on which to run the service 106 | -h, [--host=HOST] # Host on which to bind the service 107 | # Default: localhost 108 | -d, [--pact-dir=PACT_DIR] # Directory to which the pacts will be written 109 | -m, [--pact-file-write-mode=PACT_FILE_WRITE_MODE] # `overwrite` or `merge`. Use `merge` when running multiple mock service instances in parallel for the same consumer/provider pair. Ensure the pact file is deleted before running tests when using this option so that interactions deleted from the code are not maintained in the file. 110 | # Default: overwrite 111 | -i, [--pact-specification-version=PACT_SPECIFICATION_VERSION] # The pact specification version to use when writing the pact. Note that only versions 1 and 2 are currently supported. 112 | # Default: 2 113 | -l, [--log=LOG] # File to which to log output 114 | [--log-level=LOG_LEVEL] # Log level. Options are DEBUG INFO WARN ERROR 115 | # Default: DEBUG 116 | -o, [--cors=CORS] # Support browser security in tests by responding to OPTIONS requests and adding CORS headers to mocked responses 117 | [--ssl], [--no-ssl], [--skip-ssl] # Use a self-signed SSL cert to run the service over HTTPS 118 | # Default: false 119 | [--sslcert=SSLCERT] # Specify the path to the SSL cert to use when running the service over HTTPS 120 | [--sslkey=SSLKEY] # Specify the path to the SSL key to use when running the service over HTTPS 121 | 122 | Start a mock service. If the consumer, provider and pact-dir options are provided, the pact will be written automatically on shutdown (INT). 123 | 124 | ``` 125 | 126 | 127 | ### pact-stub-service 128 | 129 | ``` 130 | Usage: 131 | pact-stub-service PACT_URI ... 132 | 133 | Options: 134 | -p, [--port=PORT] # Port on which to run the service 135 | -h, [--host=HOST] # Host on which to bind the service 136 | # Default: localhost 137 | -l, [--log=LOG] # File to which to log output 138 | -n, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username 139 | -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password 140 | -k, [--broker-token=BROKER_TOKEN] # Pact Broker bearer token (can also be set using the PACT_BROKER_TOKEN environment variable) 141 | [--log-level=LOG_LEVEL] # Log level. Options are DEBUG INFO WARN ERROR 142 | # Default: DEBUG 143 | -o, [--cors=CORS] # Support browser security in tests by responding to OPTIONS requests and adding CORS headers to mocked responses 144 | [--ssl], [--no-ssl], [--skip-ssl] # Use a self-signed SSL cert to run the service over HTTPS 145 | # Default: false 146 | [--sslcert=SSLCERT] # Specify the path to the SSL cert to use when running the service over HTTPS 147 | [--sslkey=SSLKEY] # Specify the path to the SSL key to use when running the service over HTTPS 148 | 149 | Description: 150 | Start a stub service with the given pact file(s) or directories. Pact URIs 151 | may be local file or directory paths, or HTTP. Include any basic auth details 152 | in the URL using the format https://USERNAME:PASSWORD@URI. Where multiple 153 | matching interactions are found, the interactions will be sorted by response 154 | status, and the first one will be returned. This may lead to some 155 | non-deterministic behaviour. If you are having problems with this, please 156 | raise it on the pact-dev google group, and we can discuss some potential 157 | enhancements. Note that only versions 1 and 2 of the pact specification are 158 | currently fully supported. Pacts using the v3 format may be used, however, 159 | any matching features added in v3 will currently be ignored. 160 | 161 | ``` 162 | 163 | 164 | ### pact-provider-verifier 165 | 166 | To connect to a Pact Broker that uses custom SSL cerificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 167 | 168 | ``` 169 | Usage: 170 | pact-provider-verifier PACT_URL ... -h, --provider-base-url=PROVIDER_BASE_URL 171 | 172 | Options: 173 | -h, --provider-base-url=PROVIDER_BASE_URL # Provider host URL 174 | -c, [--provider-states-setup-url=PROVIDER_STATES_SETUP_URL] # Base URL to setup the provider states at 175 | [--pact-broker-base-url=PACT_BROKER_BASE_URL] # Base URL of the Pact Broker from which to retrieve the pacts. Can also be set using the environment variable PACT_BROKER_BASE_URL. 176 | -n, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username. Can also be set using the environment variable PACT_BROKER_USERNAME. 177 | -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password. Can also be set using the environment variable PACT_BROKER_PASSWORD. 178 | -k, [--broker-token=BROKER_TOKEN] # Pact Broker bearer token. Can also be set using the environment variable PACT_BROKER_TOKEN. 179 | [--provider=PROVIDER] 180 | [--consumer-version-tag=TAG] # Retrieve the latest pacts with this consumer version tag. Used in conjunction with --provider. May be specified multiple times. 181 | [--provider-version-tag=TAG] # Tag to apply to the provider application version. May be specified multiple times. 182 | [--provider-version-branch=BRANCH] # The name of the branch the provider version belongs to. 183 | -g, [--tag-with-git-branch], [--no-tag-with-git-branch], [--skip-tag-with-git-branch] # Tag provider version with the name of the current git branch. Default: false 184 | # Default: false 185 | -a, [--provider-app-version=PROVIDER_APP_VERSION] # Provider application version, required when publishing verification results 186 | -r, [--publish-verification-results], [--no-publish-verification-results], [--skip-publish-verification-results] # Publish verification results to the broker. This can also be enabled by setting the environment variable PACT_BROKER_PUBLISH_VERIFICATION_RESULTS=true 187 | # Default: false 188 | [--enable-pending], [--no-enable-pending], [--skip-enable-pending] # Allow pacts which are in pending state to be verified without causing the overall task to fail. For more information, see https://pact.io/pending 189 | # Default: false 190 | [--custom-provider-header=CUSTOM_PROVIDER_HEADER] # Header to add to provider state set up and pact verification requests. eg 'Authorization: Basic cGFjdDpwYWN0'. May be specified multiple times. 191 | [--custom-middleware=FILE] # Ruby file containing a class implementing Pact::ProviderVerifier::CustomMiddleware. This allows the response to be modified before replaying. Use with caution! 192 | -v, [--verbose=VERBOSE] # Verbose output. Can also be set by setting the environment variable VERBOSE=true. 193 | -f, [--format=FORMATTER] # RSpec formatter. Defaults to custom Pact formatter. Other options are json and RspecJunitFormatter (which outputs xml). 194 | -o, [--out=FILE] # Write output to a file instead of $stdout. 195 | [--wait=SECONDS] # The number of seconds to poll for the provider to become available before running the verification 196 | # Default: 0 197 | [--log-dir=LOG_DIR] # The directory for the pact.log file 198 | [--log-level=LOG_LEVEL] # The log level 199 | # Default: debug 200 | [--fail-if-no-pacts-found], [--no-fail-if-no-pacts-found], [--skip-fail-if-no-pacts-found] # If specified, will fail when no pacts are found 201 | # Default: false 202 | 203 | Description: 204 | The parameters used when fetching pacts dynamically from a Pact Broker are: 205 | 206 | --pact-broker-base-url (REQUIRED) 207 | --provider (REQUIRED) 208 | --broker-username/--broker-password or --broker-token 209 | --consumer-version-tag or --consumer-version-selector 210 | --enable-pending 211 | --include-wip-pacts-since 212 | 213 | To 214 | verify a pact at a known URL (eg. when a verification is triggered by a 215 | 'contract content changed' webhook), pass in the pact URL(s) as the first 216 | argument(s) to the command, and do NOT set any of the other parameters apart 217 | from the base URL and credentials. 218 | 219 | To publish verification results for either of the above 220 | scenarios, set: 221 | 222 | --publish-verification-results (REQUIRED) 223 | --provider-app-version (REQUIRED) 224 | --provider-version-tag or --tag-with-git-branch 225 | 226 | 227 | Selectors: These are specified using JSON strings. 228 | The keys are 'tag' (the name of the consumer version tag), 'latest' 229 | (true|false), 'consumer', and 'fallbackTag'. For example '{\"tag\": 230 | \"master\", \"latest\": true}'. For a detailed explanation of selectors, see https://pact.io/selectors#consumer-version-selectors 231 | 232 | ``` 233 | 234 | 235 | ### pact-broker client 236 | 237 | To connect to a Pact Broker that uses custom SSL cerificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 238 | 239 | 240 | #### publish 241 | 242 | ``` 243 | Usage: 244 | pact-broker publish PACT_DIRS_OR_FILES ... -b, --broker-base-url=BROKER_BASE_URL 245 | 246 | Options: 247 | -a, [--consumer-app-version=CONSUMER_APP_VERSION] # The consumer application version 248 | -h, [--branch=BRANCH] # Repository branch of the consumer version 249 | -r, [--auto-detect-version-properties], [--no-auto-detect-version-properties], [--skip-auto-detect-version-properties] # Automatically detect the repository commit, branch and build URL from known CI environment variables or git CLI. Supports Buildkite, Circle CI, Travis CI, GitHub Actions, Jenkins, Hudson, AppVeyor, GitLab, CodeShip, Bitbucket and Azure DevOps. 250 | # Default: false 251 | -t, [--tag=TAG] # Tag name for consumer version. Can be specified multiple times. 252 | -g, [--tag-with-git-branch], [--no-tag-with-git-branch], [--skip-tag-with-git-branch] # Tag consumer version with the name of the current git branch. Supports Buildkite, Circle CI, Travis CI, GitHub Actions, Jenkins, Hudson, AppVeyor, GitLab, CodeShip, Bitbucket and Azure DevOps. 253 | # Default: false 254 | [--build-url=BUILD_URL] # The build URL that created the pact 255 | [--merge], [--no-merge], [--skip-merge] # If a pact already exists for this consumer version and provider, merge the contents. Useful when running Pact tests concurrently on different build nodes. 256 | # Default: false 257 | -o, [--output=OUTPUT] # json or text 258 | # Default: text 259 | -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker 260 | -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username 261 | -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password 262 | -k, [--broker-token=BROKER_TOKEN] # Pact Broker bearer token 263 | -v, [--verbose], [--no-verbose], [--skip-verbose] # Verbose output. 264 | # Default: false 265 | 266 | Publish pacts to a Pact Broker. 267 | 268 | ``` 269 | 270 | 271 | #### can-i-deploy 272 | 273 | ``` 274 | Usage: 275 | pact-broker can-i-deploy -a, --pacticipant=PACTICIPANT -b, --broker-base-url=BROKER_BASE_URL 276 | 277 | Options: 278 | -a, --pacticipant=PACTICIPANT # The pacticipant name. Use once for each pacticipant being checked. 279 | -e, [--version=VERSION] # The pacticipant version. Must be entered after the --pacticipant that it relates to. 280 | [--ignore=PACTICIPANT] # The pacticipant name to ignore. Use once for each pacticipant being ignored. A specific version can be ignored by also specifying a --version after the pacticipant name option. The environment variable PACT_BROKER_CAN_I_DEPLOY_IGNORE may also be used to specify a pacticipant name to ignore, with commas to separate multiple pacticipant names if necessary. 281 | -l, [--latest=[TAG]] # Use the latest pacticipant version. Optionally specify a TAG to use the latest version with the specified tag. 282 | [--branch=BRANCH] # The branch of the version for which you want to check the verification results. 283 | [--main-branch], [--no-main-branch], [--skip-main-branch] # Use the latest version of the configured main branch of the pacticipant as the version for which you want to check the verification results 284 | # Default: false 285 | [--to-environment=ENVIRONMENT] # The environment into which the pacticipant(s) are to be deployed 286 | [--to=TAG] # The tag that represents the branch or environment of the integrated applications for which you want to check the verification result status. 287 | -o, [--output=OUTPUT] # json or table 288 | # Default: table 289 | [--retry-while-unknown=TIMES] # The number of times to retry while there is an unknown verification result (ie. the provider verification is likely still running) 290 | # Default: 0 291 | [--retry-interval=SECONDS] # The time between retries in seconds. Use in conjuction with --retry-while-unknown 292 | # Default: 10 293 | [--dry-run], [--no-dry-run], [--skip-dry-run] # When dry-run is enabled, always exit process with a success code. Can also be enabled by setting the environment variable PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true. This mode is useful when setting up your CI/CD pipeline for the first time, or in a 'break glass' situation where you need to knowingly deploy what Pact considers a breaking change. For the second scenario, it is recommended to use the environment variable and just set it for the build required to deploy that particular version, so you don't accidentally leave the dry run mode enabled. 294 | # Default: false 295 | -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker 296 | -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username 297 | -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password 298 | -k, [--broker-token=BROKER_TOKEN] # Pact Broker bearer token 299 | -v, [--verbose], [--no-verbose], [--skip-verbose] # Verbose output. 300 | # Default: false 301 | 302 | Description: 303 | Returns exit code 0 or 1, indicating whether or not the specified application 304 | (pacticipant) has a successful verification result with each of the 305 | application versions that are already deployed to a particular environment. 306 | Prints out the relevant pact/verification details, indicating any missing or 307 | failed verification results. 308 | 309 | The can-i-deploy tool was originally written to support specifying versions 310 | and dependencies using tags. This usage has now been superseded by first 311 | class support for environments, deployments and releases. For documentation 312 | on how to use can-i-deploy with tags, please see 313 | https://docs.pact.io/pact_broker/client_cli/can_i_deploy_usage_with_tags/ 314 | 315 | Before `can-i-deploy` can be used, the relevant environment resources must 316 | first be created in the Pact Broker using the `create-environment` command. 317 | The "test" and "production" environments will have been seeded for you. You 318 | can check the existing environments by running `pact-broker 319 | list-environments`. See 320 | https://docs.pact.io/pact_broker/client_cli/readme#environments for more 321 | information. 322 | 323 | $ pact-broker create-environment --name "uat" --display-name "UAT" 324 | --no-production 325 | 326 | After an application is deployed or released, its deployment must be recorded 327 | using the `record-deployment` or `record-release` commands. See 328 | https://docs.pact.io/pact_broker/recording_deployments_and_releases/ for more 329 | information. 330 | 331 | $ pact-broker record-deployment --pacticipant Foo --version 173153ae0 332 | --environment uat 333 | 334 | Before an application is deployed or released to an environment, the 335 | can-i-deploy command must be run to check that the application version is 336 | safe to deploy with the versions of each integrated application that are 337 | already in that environment. 338 | 339 | $ pact-broker can-i-deploy --pacticipant PACTICIPANT --version VERSION 340 | --to-environment ENVIRONMENT 341 | 342 | Example: can I deploy version 173153ae0 of application Foo to the test 343 | environment? 344 | 345 | $ pact-broker can-i-deploy --pacticipant Foo --version 173153ae0 346 | --to-environment test 347 | 348 | Can-i-deploy can also be used to check if arbitrary versions have a 349 | successful verification. When asking "Can I deploy this application version 350 | with the latest version from the main branch of another application" it 351 | functions as a "can I merge" check. 352 | 353 | $ pact-broker can-i-deploy --pacticipant Foo 173153ae0 \ --pacticipant Bar 354 | --latest main 355 | 356 | ##### Polling 357 | 358 | If the verification process takes a long time and there are results missing 359 | when the can-i-deploy command runs in your CI/CD pipeline, you can configure 360 | the command to poll and wait for the missing results to arrive. The arguments 361 | to specify are `--retry-while-unknown TIMES` and `--retry-interval SECONDS`, 362 | set to appropriate values for your pipeline. 363 | 364 | ``` 365 | 366 | 367 | 368 | 369 | ### pactflow client 370 | 371 | #### publish-provider-contract 372 | 373 | ``` 374 | Usage: 375 | pactflow publish-provider-contract CONTRACT_FILE ... --provider=PROVIDER -a, --provider-app-version=PROVIDER_APP_VERSION -b, --broker-base-url=BROKER_BASE_URL 376 | 377 | Options: 378 | --provider=PROVIDER # The provider name 379 | -a, --provider-app-version=PROVIDER_APP_VERSION # The provider application version 380 | -h, [--branch=BRANCH] # Repository branch of the provider version 381 | -t, [--tag=TAG] # Tag name for provider version. Can be specified multiple times. 382 | [--specification=SPECIFICATION] # The contract specification 383 | # Default: oas 384 | [--content-type=CONTENT_TYPE] # The content type. eg. application/yml 385 | [--verification-success], [--no-verification-success], [--skip-verification-success] # Whether or not the self verification passed successfully. 386 | [--verification-exit-code=N] # The exit code of the verification process. Can be used instead of --verification-success|--no-verification-success for a simpler build script. 387 | [--verification-results=VERIFICATION_RESULTS] # The path to the file containing the output from the verification process 388 | [--verification-results-content-type=VERIFICATION_RESULTS_CONTENT_TYPE] # The content type of the verification output eg. text/plain, application/yaml 389 | [--verification-results-format=VERIFICATION_RESULTS_FORMAT] # The format of the verification output eg. junit, text 390 | [--verifier=VERIFIER] # The tool used to verify the provider contract 391 | [--verifier-version=VERIFIER_VERSION] # The version of the tool used to verify the provider contract 392 | [--build-url=BUILD_URL] # The build URL that created the provider contract 393 | -o, [--output=OUTPUT] # json or text 394 | # Default: text 395 | -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker 396 | -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username 397 | -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password 398 | -k, [--broker-token=BROKER_TOKEN] # Pact Broker bearer token 399 | -v, [--verbose], [--no-verbose], [--skip-verbose] # Verbose output. 400 | # Default: false 401 | 402 | Publish provider contract to PactFlow 403 | 404 | ``` 405 | 406 | ### pact 407 | 408 | 409 | #### docs 410 | ``` 411 | Usage: 412 | pact docs 413 | 414 | Options: 415 | [--pact-dir=PACT_DIR] # Directory containing the pacts 416 | # Default: /home/runner/work/pact-standalone/pact-standalone/build/tmp/spec/pacts 417 | [--doc-dir=DOC_DIR] # Documentation directory 418 | # Default: /home/runner/work/pact-standalone/pact-standalone/build/tmp/doc/pacts 419 | 420 | Generate Pact documentation in markdown 421 | 422 | ``` 423 | 424 | ### pact-message 425 | 426 | ``` 427 | Commands: 428 | pact-message help [COMMAND] ... 429 | pact-message reify ... 430 | pact-message update MESSAGE_JSON --consumer=CONSUMER --pact-dir=PACT_DIR --... 431 | pact-message version ... 432 | 433 | 434 | ``` 435 | 436 | ## Troubleshooting 437 | 438 | ### SSL 439 | 440 | To connect to a Pact Broker that uses custom SSL certificates, set the environment variable `$SSL_CERT_FILE` or `$SSL_CERT_DIR` to a path that contains the appropriate certificate. 441 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | ### v2.5.7 (2025-11-06) 3 | 4 | 5 | #### Features 6 | 7 | * **gems** 8 | * update to pact (1.67.3) ([9ff0526](/../../commit/9ff0526)) 9 | 10 | 11 | 12 | ### v2.5.6 (2025-10-25) 13 | 14 | 15 | #### Bug Fixes 16 | 17 | * remove libs from extensions, fix release note new line ([c3b524c](/../../commit/c3b524c)) 18 | 19 | 20 | 21 | ### v2.5.5 (2025-10-22) 22 | 23 | 24 | #### Features 25 | 26 | * **gems** 27 | * update to pact (1.67.2) ([23ea4d7](/../../commit/23ea4d7)) 28 | 29 | 30 | 31 | ### v2.5.4 (2025-10-22) 32 | 33 | 34 | #### Features 35 | 36 | * **gems** 37 | * update to pact (1.67.1) ([d6f2cad](/../../commit/d6f2cad)) 38 | * update to pact (1.67.0), pact-ffi (0.4.28.0-aarch64-linux), pact-ffi (0.4.28.0-arm64-darwin), pact-ffi (0.4.28.0-x64-mingw32), pact-ffi (0.4.28.0-x86_64-darwin), pact-ffi (0.4.28.0-x86_64-linux) ([ed45d86](/../../commit/ed45d86)) 39 | 40 | 41 | 42 | ### v2.5.0 (2025-07-25) 43 | 44 | 45 | #### Features 46 | 47 | * update pact entrypoint to list/execute all binaries ([7e18b6d](/../../commit/7e18b6d)) 48 | 49 | 50 | 51 | ### v2.4.26 (2025-06-26) 52 | 53 | 54 | #### Features 55 | 56 | * **gems** 57 | * update non-pact gems ([96adfce](/../../commit/96adfce)) 58 | 59 | 60 | 61 | ### v2.4.22 (2025-02-24) 62 | 63 | 64 | #### Bug Fixes 65 | 66 | * **deps** 67 | * update pact-provider-verifier to 1.39.1 ([85367c5](/../../commit/85367c5)) 68 | 69 | 70 | 71 | ### v2.4.21 (2025-01-20) 72 | 73 | 74 | #### Features 75 | 76 | * **gems** 77 | * update to pact (1.66.1) ([9b77078](/../../commit/9b77078)) 78 | 79 | 80 | 81 | ### v2.4.20 (2024-12-05) 82 | 83 | 84 | #### Features 85 | 86 | * **gems** 87 | * update to pact-support (1.21.2) ([9a342e8](/../../commit/9a342e8)) 88 | 89 | 90 | 91 | ### v2.4.19 (2024-11-30) 92 | 93 | 94 | #### Bug Fixes 95 | 96 | * **deps** 97 | * use rack-reverse-proxy pact-foundation fork - update to rack-test 2.1.0 ([5ec14d2](/../../commit/5ec14d2)) 98 | 99 | 100 | 101 | ### v2.4.18 (2024-11-29) 102 | 103 | 104 | #### Features 105 | 106 | * **deps** 107 | * update to rack 3 ([0b4bf7e](/../../commit/0b4bf7e)) 108 | 109 | 110 | #### Bug Fixes 111 | 112 | * **deps** 113 | * update pact-mock_service / pact-provider-verifier ([9e773f4](/../../commit/9e773f4)) 114 | 115 | 116 | 117 | ### v2.4.17 (2024-11-29) 118 | 119 | 120 | #### Features 121 | 122 | * **gems** 123 | * update to pact (1.66.0) ([623912b](/../../commit/623912b)) 124 | * update to pact-support (1.21.1) ([c16d698](/../../commit/c16d698)) 125 | * update to pact-support (1.21.0) ([51f9a30](/../../commit/51f9a30)) 126 | 127 | 128 | 129 | ### v2.4.16 (2024-10-24) 130 | 131 | 132 | #### Features 133 | 134 | * **gems** 135 | * update to pact_broker-client (1.77.0) ([4ee32f5](/../../commit/4ee32f5)) 136 | 137 | 138 | 139 | ### v2.4.15 (2024-10-23) 140 | 141 | 142 | #### Features 143 | 144 | * **gems** 145 | * update to pact-support (1.20.2), pact_broker-client (1.76.2) ([fb02f49](/../../commit/fb02f49)) 146 | 147 | 148 | 149 | ### v2.4.13 (2024-09-26) 150 | 151 | 152 | #### Features 153 | 154 | * **gems** 155 | * update to pact (1.65.2) ([dde96f2](/../../commit/dde96f2)) 156 | 157 | 158 | #### Bug Fixes 159 | 160 | * Dockerfile-bundle-base to reduce vulnerabilities ([868ee2e](/../../commit/868ee2e)) 161 | 162 | 163 | 164 | ### v2.4.12 (2024-08-21) 165 | 166 | 167 | #### Features 168 | 169 | * **gems** 170 | * update to pact_broker-client (1.76.1) ([9f3e2d2](/../../commit/9f3e2d2)) 171 | 172 | 173 | 174 | ### v2.4.11 (2024-08-12) 175 | 176 | 177 | #### Features 178 | 179 | * **gems** 180 | * update to pact_broker-client (1.76.0) ([b90a4c9](/../../commit/b90a4c9)) 181 | 182 | 183 | 184 | ### v2.4.10 (2024-08-08) 185 | 186 | 187 | #### Features 188 | 189 | * **gems** 190 | * update to pact (1.65.1), pact-support (1.20.1) ([23b3c41](/../../commit/23b3c41)) 191 | 192 | 193 | 194 | ### v2.4.9 (2024-08-07) 195 | 196 | 197 | #### Features 198 | 199 | * **gems** 200 | * update to pact (1.65.0) ([054617e](/../../commit/054617e)) 201 | 202 | 203 | 204 | ### v2.4.8 (2024-08-07) 205 | 206 | 207 | #### Features 208 | 209 | * **gems** 210 | * update to pact-provider-verifier (1.38.1) ([e46fa9c](/../../commit/e46fa9c)) 211 | 212 | 213 | 214 | ### v2.4.7 (2024-07-30) 215 | 216 | 217 | #### Features 218 | 219 | * **gems** 220 | * update to pact_broker-client (1.75.4) ([e770a31](/../../commit/e770a31)) 221 | 222 | 223 | 224 | ### v2.4.6 (2024-06-17) 225 | 226 | 227 | #### Features 228 | 229 | * **gems** 230 | * update to pact_broker-client (1.75.3) ([4c96552](/../../commit/4c96552)) 231 | 232 | 233 | 234 | ### v2.4.4 (2024-05-10) 235 | 236 | 237 | #### Bug Fixes 238 | 239 | * pin bigdecimal to 3.1.5 as per ruby std gems ([dc0d352](/../../commit/dc0d352)) 240 | 241 | 242 | 243 | ### v2.4.3 (2024-05-13) 244 | 245 | 246 | #### Features 247 | 248 | * **gems** 249 | * update to pact_broker-client (1.75.2) ([d11b089](/../../commit/d11b089)) 250 | 251 | 252 | 253 | ### v2.4.2 (2024-02-27) 254 | 255 | 256 | #### Features 257 | 258 | * **deps** 259 | * update rack 2.2.8.1 - update rpec 3.13.1 - thor 1.3.1 ([3e3e6ca](/../../commit/3e3e6ca)) 260 | 261 | 262 | 263 | ### v2.4.1 (2024-02-12) 264 | 265 | 266 | #### Bug Fixes 267 | 268 | * drop traveling-ruby to 3.2.3 due to segfaults on alpine ([960313f](/../../commit/960313f)) 269 | 270 | 271 | 272 | ### v2.3.0 (2024-02-08) 273 | 274 | 275 | #### Features 276 | 277 | * use sh for wrapper scripts ([74a6be3](/../../commit/74a6be3)) 278 | 279 | 280 | 281 | ### v2.1.0 (2024-01-22) 282 | 283 | 284 | #### Features 285 | 286 | * remove unused gemfile.lock files ([d03a452](/../../commit/d03a452)) 287 | 288 | * **gems** 289 | * update to pact (1.64.0) ([aa849da](/../../commit/aa849da)) 290 | 291 | 292 | 293 | ### v2.0.12 (2023-12-07) 294 | 295 | 296 | #### Features 297 | 298 | * **gems** 299 | * update to pact_broker-client (1.75.1) ([51f4420](/../../commit/51f4420)) 300 | 301 | 302 | 303 | ### v2.0.11 (2023-11-13) 304 | 305 | 306 | #### Features 307 | 308 | * **gems** 309 | * update to pact_broker-client (1.75.0) ([11c8993](/../../commit/11c8993)) 310 | 311 | 312 | 313 | ### v2.0.10 (2023-10-18) 314 | 315 | 316 | #### Features 317 | 318 | * **gems** 319 | * update to pact-support (1.20.0) ([7c632ff](/../../commit/7c632ff)) 320 | 321 | 322 | 323 | ### v2.0.9 (2023-10-14) 324 | 325 | 326 | #### Features 327 | 328 | * **gems** 329 | * update to pact_broker-client (1.74.0) ([3913b0a](/../../commit/3913b0a)) 330 | 331 | 332 | 333 | ### v2.0.8 (2023-10-13) 334 | 335 | 336 | #### Features 337 | 338 | * **gems** 339 | * update to pact_broker-client (1.73.0) ([d5b41b3](/../../commit/d5b41b3)) 340 | 341 | 342 | 343 | ### v2.0.7 (2023-09-12) 344 | 345 | 346 | #### Features 347 | 348 | * **gems** 349 | * update to pact-provider-verifier (1.38.0) ([108d513](/../../commit/108d513)) 350 | 351 | 352 | 353 | ### v2.0.6 (2023-09-11) 354 | 355 | 356 | #### Features 357 | 358 | * **gems** 359 | * update to pact_broker-client (1.72.0) ([1061dd0](/../../commit/1061dd0)) 360 | 361 | 362 | 363 | ### v2.0.5 (2023-09-07) 364 | 365 | 366 | #### Features 367 | 368 | * **gems** 369 | * update to pact_broker-client (1.71.0) ([a3c2ea7](/../../commit/a3c2ea7)) 370 | 371 | 372 | 373 | ### v2.0.4 (2023-08-29) 374 | 375 | 376 | #### Features 377 | 378 | * **gems** 379 | * update to pact_broker-client (1.70.0) ([a9fc357](/../../commit/a9fc357)) 380 | * update to pact_broker-client (1.69.0) ([1c361d2](/../../commit/1c361d2)) 381 | 382 | 383 | 384 | ### v2.0.3 (2023-07-10) 385 | 386 | 387 | #### Features 388 | 389 | * **gems** 390 | * update to pact_broker-client (1.68.0) ([562d8a9](/../../commit/562d8a9)) 391 | 392 | 393 | #### Bug Fixes 394 | 395 | * **docs** 396 | * correct windows filename to end in .zip in release notes ([308a296](/../../commit/308a296)) 397 | 398 | 399 | 400 | ### v2.0.1 (2023-05-18) 401 | 402 | 403 | #### Features 404 | 405 | * **gems** 406 | * update to pact-mock_service (3.11.2) ([7421bd4](/../../commit/7421bd4)) 407 | 408 | 409 | #### Bug Fixes 410 | 411 | * unset BUNDLE_APP_CONFIG to prevent Ruby contamination macOS/linux #56 ([ab540b3](/../../commit/ab540b3)) 412 | 413 | 414 | 415 | ### v2.0.0 (2023-04-27) 416 | 417 | 418 | #### Features 419 | 420 | * **ci** 421 | * test x-plat arm64/x86_64/x64 macOS/Linux/Win ([41ab2ac](/../../commit/41ab2ac)) 422 | 423 | * Ruby 3.2.2 / MacOS+Linux aarch64/arm64 support ([bd2530d](/../../commit/bd2530d)) 424 | 425 | 426 | 427 | ### v1.92.0 (2022-11-23) 428 | 429 | 430 | #### Features 431 | 432 | * add the plugin CLI to the package ([0be3e5e](/../../commit/0be3e5e)) 433 | 434 | 435 | 436 | ### v1.90.0 437 | (2022-08-16) 438 | 439 | 440 | #### Features 441 | 442 | * **gems** 443 | * update to pact-support (1.18.1) ([b2d9483](/../../commit/b2d9483)) 444 | 445 | 446 | 447 | ### v1.89.02-rc1 448 | (2022-06-24) 449 | 450 | 451 | #### Features 452 | 453 | * **gems** 454 | * update to pact_broker-client (1.65.0) ([e209b9c](/../../commit/e209b9c)) 455 | 456 | 457 | 458 | ### v1.89.01-rc1 459 | (2022-06-14) 460 | 461 | 462 | #### Features 463 | 464 | * **gems** 465 | * update non-pact gems ([5543fda](/../../commit/5543fda)) 466 | 467 | 468 | 469 | ### v1.89.00 (2022-06-09) 470 | 471 | #### Features 472 | 473 | * add pactflow command (#78) ([2ea87bd](/../../commit/2ea87bd)) 474 | * upgrade to travelling ruby 2.4.10 (#75) ([39b7d77](/../../commit/39b7d77)) 475 | 476 | 477 | #### Bug Fixes 478 | 479 | * add x64-mingw32 to platforms list in Gemfile.lock ([8337a46](/../../commit/8337a46)) 480 | 481 | 482 | 483 | ### v1.88.90 (2022-05-27) 484 | 485 | 486 | #### Features 487 | 488 | * **gems** 489 | * update to pact_broker-client (1.64.0) ([7cbe20c](/../../commit/7cbe20c)) 490 | 491 | 492 | 493 | ### v1.88.89 (2022-05-18) 494 | 495 | 496 | #### Bug Fixes 497 | 498 | * call bash directly rather than via /usr/bin/env ([b477c8a](/../../commit/b477c8a)) 499 | 500 | 501 | 502 | ### v1.88.88 (2022-05-10) 503 | 504 | 505 | #### Features 506 | 507 | * **gems** 508 | * update to pact_broker-client (1.63.0) ([3bfcd74](/../../commit/3bfcd74)) 509 | 510 | 511 | 512 | ### v1.88.87 (2022-05-10) 513 | 514 | 515 | #### Features 516 | 517 | * **gems** 518 | * update to pact_broker-client (1.62.1) ([c6b2b5a](/../../commit/c6b2b5a)) 519 | 520 | 521 | 522 | ### v1.88.86 (2022-05-10) 523 | 524 | 525 | #### Features 526 | 527 | * **gems** 528 | * update to pact_broker-client (1.62.0) ([4d312cf](/../../commit/4d312cf)) 529 | 530 | 531 | 532 | ### v1.88.85 (2022-05-09) 533 | 534 | 535 | #### Features 536 | 537 | * **gems** 538 | * update to pact_broker-client (1.61.1) ([7a30635](/../../commit/7a30635)) 539 | 540 | 541 | 542 | ### v1.88.84 (2022-05-06) 543 | 544 | 545 | #### Features 546 | 547 | * **gems** 548 | * update to pact_broker-client (1.61.0) ([5e142ef](/../../commit/5e142ef)) 549 | 550 | 551 | 552 | ### v1.88.83 (2022-03-15) 553 | 554 | 555 | #### Features 556 | 557 | * **gems** 558 | * update to pact_broker-client (1.59.0) ([142fdd6](/../../commit/142fdd6)) 559 | 560 | 561 | 562 | ### v1.88.82 (2022-02-21) 563 | 564 | 565 | #### Features 566 | 567 | * **gems** 568 | * update to pact (1.62.0) ([eb8ae0f](/../../commit/eb8ae0f)) 569 | 570 | 571 | 572 | ### v1.88.81 (2021-12-16) 573 | 574 | 575 | #### Features 576 | 577 | * **gems** 578 | * update to pact (1.61.0) ([f43f171](/../../commit/f43f171)) 579 | 580 | 581 | 582 | ### v1.88.80 (2021-11-13) 583 | 584 | 585 | #### Features 586 | 587 | * **gems** 588 | * update to pact_broker-client (1.58.0) ([93cfe93](/../../commit/93cfe93)) 589 | 590 | 591 | 592 | ### v1.88.79 (2021-11-05) 593 | 594 | 595 | #### Features 596 | 597 | * **gems** 598 | * update to pact_broker-client (1.57.0) ([280b93e](/../../commit/280b93e)) 599 | 600 | 601 | 602 | ### v1.88.78 (2021-10-27) 603 | 604 | 605 | #### Features 606 | 607 | * **gems** 608 | * update to pact-provider-verifier (1.36.1) ([e4fafbc](/../../commit/e4fafbc)) 609 | 610 | 611 | 612 | ### v1.88.77 (2021-10-08) 613 | 614 | 615 | #### Features 616 | 617 | * **gems** 618 | * update to pact_broker-client (1.56.0) ([8f7f1b7](/../../commit/8f7f1b7)) 619 | 620 | 621 | #### Bug Fixes 622 | 623 | * update bundled ca certs to fix letsencrypt SSL validation errors ([d2f2441](/../../commit/d2f2441)) 624 | 625 | 626 | 627 | ### v1.88.76 (2021-10-03) 628 | 629 | 630 | #### Features 631 | 632 | * **gems** 633 | * update to pact_broker-client (1.55.0) ([db50081](/../../commit/db50081)) 634 | 635 | 636 | 637 | ### v1.88.75 (2021-10-01) 638 | 639 | 640 | #### Features 641 | 642 | * **gems** 643 | * update to pact_broker-client (1.54.0) ([6e39077](/../../commit/6e39077)) 644 | 645 | 646 | 647 | ### v1.88.74 (2021-10-01) 648 | 649 | 650 | #### Features 651 | 652 | * **gems** 653 | * update to pact (1.60.0) ([6db6627](/../../commit/6db6627)) 654 | 655 | 656 | 657 | ### v1.88.73 (2021-10-01) 658 | 659 | 660 | #### Features 661 | 662 | * **gems** 663 | * update to pact-support (1.17.0) ([6b621ef](/../../commit/6b621ef)) 664 | 665 | 666 | 667 | ### v1.88.72 (2021-09-30) 668 | 669 | 670 | #### Features 671 | 672 | * **gems** 673 | * update to pact-support (1.16.10) ([42a8d55](/../../commit/42a8d55)) 674 | 675 | 676 | 677 | ### v1.88.71 (2021-09-30) 678 | 679 | 680 | #### Features 681 | 682 | * **gems** 683 | * update to pact-support (1.16.9) ([0679193](/../../commit/0679193)) 684 | 685 | 686 | 687 | ### v1.88.70 (2021-09-29) 688 | 689 | 690 | #### Features 691 | 692 | * **gems** 693 | * update to pact_broker-client (1.52.0) ([9a07635](/../../commit/9a07635)) 694 | 695 | 696 | 697 | ### v1.88.69 (2021-09-27) 698 | 699 | 700 | #### Features 701 | 702 | * **gems** 703 | * update to pact_broker-client (1.51.2) ([83ac97f](/../../commit/83ac97f)) 704 | 705 | 706 | 707 | ### v1.88.68 (2021-09-21) 708 | 709 | 710 | #### Features 711 | 712 | * **gems** 713 | * update to pact_broker-client (1.51.1) ([06943ac](/../../commit/06943ac)) 714 | 715 | 716 | 717 | ### v1.88.67 (2021-09-21) 718 | 719 | 720 | #### Features 721 | 722 | * **gems** 723 | * update to pact_broker-client (1.51.0) ([6c126c9](/../../commit/6c126c9)) 724 | 725 | 726 | 727 | ### v1.88.66 (2021-09-08) 728 | 729 | 730 | #### Features 731 | 732 | * **gems** 733 | * update to pact-provider-verifier (1.36.0) ([76a8511](/../../commit/76a8511)) 734 | 735 | 736 | 737 | ### v1.88.65 (2021-09-07) 738 | 739 | 740 | #### Features 741 | 742 | * **gems** 743 | * update to pact (1.59.0) ([891f675](/../../commit/891f675)) 744 | 745 | 746 | 747 | ### v1.88.64 (2021-09-07) 748 | 749 | 750 | #### Features 751 | 752 | * **gems** 753 | * update to pact (1.58.0) ([28df904](/../../commit/28df904)) 754 | 755 | 756 | 757 | ### v1.88.63 (2021-08-05) 758 | 759 | 760 | #### Features 761 | 762 | * **gems** 763 | * update to pact_broker-client (1.49.0) ([0d7de29](/../../commit/0d7de29)) 764 | 765 | 766 | 767 | ### v1.88.62 (2021-08-04) 768 | 769 | 770 | #### Features 771 | 772 | * **gems** 773 | * update to pact_broker-client (1.48.0) ([13d821e](/../../commit/13d821e)) 774 | 775 | 776 | 777 | ### v1.88.61 (2021-07-27) 778 | 779 | 780 | #### Features 781 | 782 | * **gems** 783 | * update to pact-support (1.16.8) ([1a7c10c](/../../commit/1a7c10c)) 784 | 785 | 786 | 787 | ### v1.88.60 (2021-07-20) 788 | 789 | 790 | #### Features 791 | 792 | * **gems** 793 | * update to pact_broker-client (1.47.1) ([4edce47](/../../commit/4edce47)) 794 | 795 | 796 | 797 | ### v1.88.59 (2021-07-20) 798 | 799 | 800 | #### Features 801 | 802 | * **gems** 803 | * update to pact_broker-client (1.47.0) ([17f64c9](/../../commit/17f64c9)) 804 | 805 | 806 | 807 | ### v1.88.58 (2021-06-30) 808 | 809 | 810 | #### Features 811 | 812 | * **gems** 813 | * update to pact-provider-verifier (1.35.1) ([31f4bd7](/../../commit/31f4bd7)) 814 | 815 | 816 | 817 | ### v1.88.57 (2021-06-24) 818 | 819 | 820 | #### Features 821 | 822 | * **gems** 823 | * update to pact_broker-client (1.46.0) ([95ee385](/../../commit/95ee385)) 824 | 825 | 826 | 827 | ### v1.88.56 (2021-06-16) 828 | 829 | 830 | #### Features 831 | 832 | * **gems** 833 | * update to pact_broker-client (1.45.0) ([682d70a](/../../commit/682d70a)) 834 | 835 | 836 | 837 | ### v1.88.55 (2021-06-09) 838 | 839 | 840 | #### Features 841 | 842 | * **gems** 843 | * update to pact_broker-client (1.44.0) ([1d9424f](/../../commit/1d9424f)) 844 | 845 | 846 | 847 | ### v1.88.54 (2021-06-03) 848 | 849 | 850 | #### Features 851 | 852 | * **gems** 853 | * update to pact_broker-client (1.43.0) ([36086c4](/../../commit/36086c4)) 854 | 855 | 856 | 857 | ### v1.88.53 (2021-05-30) 858 | 859 | 860 | #### Features 861 | 862 | * **gems** 863 | * update to pact_broker-client (1.42.0) ([e3ad91f](/../../commit/e3ad91f)) 864 | 865 | 866 | 867 | ### v1.88.52 (2021-05-24) 868 | 869 | 870 | #### Features 871 | 872 | * **gems** 873 | * update to pact_broker-client (1.41.0) ([66409f2](/../../commit/66409f2)) 874 | * update to pact-mock_service (3.9.0) ([358b8d3](/../../commit/358b8d3)) 875 | 876 | 877 | 878 | ### v1.88.51 (2021-04-27) 879 | 880 | 881 | #### Features 882 | 883 | * **gems** 884 | * update to pact_broker-client (1.40.0) ([8272375](/../../commit/8272375)) 885 | 886 | 887 | 888 | ### v1.88.50 (2021-04-27) 889 | 890 | 891 | #### Features 892 | 893 | * **gems** 894 | * update to pact_broker-client (1.39.0) ([a2d465a](/../../commit/a2d465a)) 895 | 896 | 897 | 898 | ### v1.88.49 (2021-04-20) 899 | 900 | 901 | #### Features 902 | 903 | * **gems** 904 | * update to pact-message (0.11.1) ([f4fd9d1](/../../commit/f4fd9d1)) 905 | 906 | 907 | 908 | ### v1.88.48 (2021-04-09) 909 | 910 | 911 | #### Features 912 | 913 | * disable ssl verification using a flag (#66) ([4fd9230](/../../commit/4fd9230)) 914 | 915 | 916 | 917 | ### v1.88.47 (2021-04-07) 918 | 919 | 920 | #### Features 921 | 922 | * **gems** 923 | * update to pact_broker-client (1.38.3) ([3c3b966](/../../commit/3c3b966)) 924 | 925 | 926 | 927 | ### v1.88.46 (2021-03-31) 928 | 929 | 930 | #### Features 931 | 932 | * **gems** 933 | * update to pact_broker-client (1.38.2) ([f61c211](/../../commit/f61c211)) 934 | 935 | 936 | 937 | ### v1.88.45 (2021-03-29) 938 | 939 | 940 | #### Features 941 | 942 | * **gems** 943 | * update to pact-provider-verifier (1.35.0) ([c66448a](/../../commit/c66448a)) 944 | 945 | 946 | 947 | ### v1.88.44 (2021-03-22) 948 | 949 | 950 | #### Features 951 | 952 | * **gems** 953 | * update to pact_broker-client (1.38.1) ([daa9d2e](/../../commit/daa9d2e)) 954 | 955 | 956 | 957 | ### v1.88.43 (2021-03-22) 958 | 959 | 960 | #### Features 961 | 962 | * **gems** 963 | * update to pact_broker-client (1.38.0) ([5ded5b0](/../../commit/5ded5b0)) 964 | 965 | 966 | 967 | ### v1.88.42 (2021-03-22) 968 | 969 | 970 | #### Features 971 | 972 | * **gems** 973 | * update to pact-message (0.11.0) ([7861404](/../../commit/7861404)) 974 | 975 | 976 | 977 | ### v1.88.41 (2021-03-10) 978 | 979 | 980 | #### Features 981 | 982 | * **gems** 983 | * update to pact_broker-client (1.37.1) ([004449b](/../../commit/004449b)) 984 | 985 | 986 | 987 | ### v1.88.40 (2021-02-28) 988 | 989 | 990 | #### Features 991 | 992 | * **gems** 993 | * update to pact_broker-client (1.37.0) ([0c7c540](/../../commit/0c7c540)) 994 | 995 | 996 | 997 | ### v1.88.39 (2021-02-26) 998 | 999 | 1000 | #### Features 1001 | 1002 | * **gems** 1003 | * update to pact_broker-client (1.36.0) ([fd88bbb](/../../commit/fd88bbb)) 1004 | 1005 | 1006 | 1007 | ### v1.88.38 (2021-02-25) 1008 | 1009 | 1010 | #### Features 1011 | 1012 | * **gems** 1013 | * update to pact-mock_service (3.8.0) ([77bd1bb](/../../commit/77bd1bb)) 1014 | 1015 | 1016 | #### Bug Fixes 1017 | 1018 | * packaging/Gemfile.lock to reduce vulnerabilities (#62) ([9b2a780](/../../commit/9b2a780)) 1019 | 1020 | 1021 | 1022 | ### v1.88.37 (2021-02-01) 1023 | 1024 | 1025 | #### Features 1026 | 1027 | * **gems** 1028 | * update to pact-provider-verifier (1.34.0) ([307f4e8](/../../commit/307f4e8)) 1029 | 1030 | 1031 | 1032 | ### v1.88.36 (2021-01-31) 1033 | 1034 | 1035 | #### Features 1036 | 1037 | * **gems** 1038 | * update to pact (1.57.0) ([806e2ce](/../../commit/806e2ce)) 1039 | 1040 | 1041 | 1042 | ### v1.88.35 (2021-01-28) 1043 | 1044 | 1045 | #### Features 1046 | 1047 | * **gems** 1048 | * update to pact-support (1.16.7) ([76ace0b](/../../commit/76ace0b)) 1049 | 1050 | 1051 | 1052 | ### v1.88.34 (2021-01-28) 1053 | 1054 | 1055 | #### Features 1056 | 1057 | * **gems** 1058 | * update to pact-support (1.16.6) ([d480030](/../../commit/d480030)) 1059 | 1060 | 1061 | 1062 | ### v1.88.32 (2021-01-26) 1063 | 1064 | 1065 | #### Features 1066 | 1067 | * **gems** 1068 | * update to pact-provider-verifier (1.33.0) ([e46a50e](/../../commit/e46a50e)) 1069 | 1070 | 1071 | 1072 | ### v1.88.29 (2021-01-25) 1073 | 1074 | 1075 | #### Features 1076 | 1077 | * **gems** 1078 | * update to pact-message (0.10.0) ([4a658ce](/../../commit/4a658ce)) 1079 | 1080 | 1081 | 1082 | ### v1.88.28 (2021-01-21) 1083 | 1084 | 1085 | #### Features 1086 | 1087 | * **gems** 1088 | * update to pact (1.56.0) ([661fd65](/../../commit/661fd65)) 1089 | 1090 | 1091 | 1092 | ### v1.88.27 (2021-01-21) 1093 | 1094 | 1095 | #### Features 1096 | 1097 | * **gems** 1098 | * update to pact_broker-client (1.35.0) ([8a03f0e](/../../commit/8a03f0e)) 1099 | * update to pact (1.55.7) ([44cee22](/../../commit/44cee22)) 1100 | * update to pact-support (1.16.5) ([ff3e1d4](/../../commit/ff3e1d4)) 1101 | 1102 | 1103 | 1104 | ### v1.88.26 (2020-11-20) 1105 | 1106 | 1107 | #### Features 1108 | 1109 | * **gems** 1110 | * update to pact_broker-client (1.34.0) ([f26e7a8](/../../commit/f26e7a8)) 1111 | 1112 | 1113 | 1114 | ### v1.88.25 (2020-11-13) 1115 | 1116 | 1117 | #### Features 1118 | 1119 | * **gems** 1120 | * update to pact-mock_service (3.7.0), pact-support (1.16.4) ([5ec309c](/../../commit/5ec309c)) 1121 | 1122 | 1123 | 1124 | ### v1.88.24 (2020-11-10) 1125 | 1126 | 1127 | #### Features 1128 | 1129 | * **gems** 1130 | * update to pact_broker-client (1.33.0) ([1f57765](/../../commit/1f57765)) 1131 | 1132 | 1133 | 1134 | ### v1.88.23 (2020-11-10) 1135 | 1136 | 1137 | #### Features 1138 | 1139 | * **gems** 1140 | * update to pact-support (1.16.3) ([d57a68f](/../../commit/d57a68f)) 1141 | 1142 | 1143 | 1144 | ### v1.88.22 (2020-11-06) 1145 | 1146 | 1147 | #### Features 1148 | 1149 | * **gems** 1150 | * update to pact-support (1.16.2) ([f208849](/../../commit/f208849)) 1151 | 1152 | 1153 | 1154 | ### v1.88.21 (2020-11-06) 1155 | 1156 | 1157 | #### Features 1158 | 1159 | * **gems** 1160 | * update to pact-support (1.16.1) ([0f5842a](/../../commit/0f5842a)) 1161 | 1162 | 1163 | 1164 | ### v1.88.20 (2020-11-06) 1165 | 1166 | 1167 | #### Features 1168 | 1169 | * **gems** 1170 | * update to pact (1.55.6) ([c709674](/../../commit/c709674)) 1171 | 1172 | 1173 | 1174 | ### v1.88.19 (2020-11-04) 1175 | 1176 | 1177 | #### Features 1178 | 1179 | * **gems** 1180 | * update to pact-message (0.9.0) ([41aa389](/../../commit/41aa389)) 1181 | 1182 | 1183 | 1184 | ### v1.88.18 (2020-11-04) 1185 | 1186 | 1187 | #### Features 1188 | 1189 | * **gems** 1190 | * update to pact-support (1.16.0) ([540539d](/../../commit/540539d)) 1191 | * update to pact-support (1.15.5) ([b49c382](/../../commit/b49c382)) 1192 | 1193 | 1194 | 1195 | ### v1.88.17 (2020-11-04) 1196 | 1197 | 1198 | #### Features 1199 | 1200 | * **gems** 1201 | * update to pact-support (1.15.3) ([98330b1](/../../commit/98330b1)) 1202 | 1203 | 1204 | 1205 | ### v1.88.16 (2020-10-26) 1206 | 1207 | 1208 | #### Features 1209 | 1210 | * **gems** 1211 | * update to pact_broker-client (1.32.0) ([3af7214](/../../commit/3af7214)) 1212 | 1213 | 1214 | 1215 | ### v1.88.15 (2020-10-22) 1216 | 1217 | 1218 | #### Features 1219 | 1220 | * **gems** 1221 | * update to pact_broker-client (1.31.0) ([f7f42a3](/../../commit/f7f42a3)) 1222 | 1223 | 1224 | 1225 | ### v1.88.14 (2020-10-11) 1226 | 1227 | 1228 | #### Features 1229 | 1230 | * **gems** 1231 | * update to pact (1.55.5) ([32aceb5](/../../commit/32aceb5)) 1232 | 1233 | 1234 | 1235 | ### v1.88.13 (2020-10-09) 1236 | 1237 | 1238 | #### Features 1239 | 1240 | * **gems** 1241 | * update to pact (1.55.4) ([9010de1](/../../commit/9010de1)) 1242 | 1243 | 1244 | 1245 | ### v1.88.12 (2020-10-09) 1246 | 1247 | 1248 | #### Features 1249 | 1250 | * **gems** 1251 | * update to pact_broker-client (1.30.0) ([60176ed](/../../commit/60176ed)) 1252 | 1253 | 1254 | 1255 | ### v1.88.11 (2020-09-28) 1256 | 1257 | 1258 | #### Features 1259 | 1260 | * **gems** 1261 | * update to pact (1.55.3) ([d00b2ee](/../../commit/d00b2ee)) 1262 | 1263 | 1264 | 1265 | ### v1.88.10 (2020-09-28) 1266 | 1267 | 1268 | #### Features 1269 | 1270 | * **gems** 1271 | * update to pact-message (0.8.0) ([bf226d7](/../../commit/bf226d7)) 1272 | 1273 | 1274 | 1275 | ### v1.88.9 (2020-09-26) 1276 | 1277 | 1278 | #### Features 1279 | 1280 | * **gems** 1281 | * update to pact (1.55.2) ([d798e99](/../../commit/d798e99)) 1282 | 1283 | 1284 | 1285 | ### v1.88.8 (2020-09-26) 1286 | 1287 | 1288 | #### Features 1289 | 1290 | * **gems** 1291 | * update to pact (1.55.1) ([658573e](/../../commit/658573e)) 1292 | 1293 | 1294 | 1295 | ### v1.88.7 (2020-09-26) 1296 | 1297 | 1298 | #### Features 1299 | 1300 | * **gems** 1301 | * update to pact (1.55.0) ([81fc0d1](/../../commit/81fc0d1)) 1302 | 1303 | 1304 | 1305 | ### v1.88.6 (2020-09-12) 1306 | 1307 | 1308 | #### Features 1309 | 1310 | * **gems** 1311 | * update to pact (1.54.0) ([e0098fa](/../../commit/e0098fa)) 1312 | 1313 | 1314 | 1315 | ### v1.88.5 (2020-09-11) 1316 | 1317 | 1318 | #### Features 1319 | 1320 | * **gems** 1321 | * update to pact (1.53.0) ([ffd0da7](/../../commit/ffd0da7)) 1322 | 1323 | 1324 | 1325 | ### v1.88.4 (2020-09-10) 1326 | 1327 | 1328 | #### Features 1329 | 1330 | * **gems** 1331 | * update to pact (1.52.0) ([27f7b34](/../../commit/27f7b34)) 1332 | 1333 | 1334 | 1335 | ### v1.88.3 (2020-08-13) 1336 | 1337 | 1338 | #### Features 1339 | 1340 | * **gems** 1341 | * update non-pact gems ([ad0fc4f](/../../commit/ad0fc4f)) 1342 | * update non-pact gems ([116791a](/../../commit/116791a)) 1343 | * update non-pact gems ([d0b91dc](/../../commit/d0b91dc)) 1344 | * update to pact 1.51.1 ([b8abb8b](/../../commit/b8abb8b)) 1345 | 1346 | 1347 | 1348 | ### v1.88.2 (2020-08-11) 1349 | 1350 | 1351 | #### Features 1352 | 1353 | * **gems** 1354 | * update to pact-mock_service 3.6.2 ([20c20f8](/../../commit/20c20f8)) 1355 | 1356 | 1357 | 1358 | ### v1.88.1 (2020-08-07) 1359 | 1360 | 1361 | #### Features 1362 | 1363 | * **gems** 1364 | * update to pact_broker-client 1.29.1 ([59b2b94](/../../commit/59b2b94)) 1365 | 1366 | 1367 | 1368 | ### v1.88.0 (2020-08-05) 1369 | 1370 | 1371 | #### Features 1372 | 1373 | * **gems** 1374 | * update to pact_broker-client 1.28.4 ([eb82a09](/../../commit/eb82a09)) 1375 | 1376 | 1377 | 1378 | ### v1.87.6 (2020-07-31) 1379 | 1380 | 1381 | #### Features 1382 | 1383 | * **gems** 1384 | * update to pact_broker-client 1.28.3 ([f5eebd8](/../../commit/f5eebd8)) 1385 | 1386 | 1387 | 1388 | ### v1.87.5 (2020-07-19) 1389 | 1390 | 1391 | #### Features 1392 | 1393 | * **gems** 1394 | * update to pact-provider-verifier 1.32.1, pact_broker-client 1.28.2 ([95b0e70](/../../commit/95b0e70)) 1395 | 1396 | 1397 | 1398 | ### v1.87.4 (2020-07-17) 1399 | 1400 | 1401 | #### Features 1402 | 1403 | * **gems** 1404 | * update to pact-support 1.15.1, pact-provider-verifier 1.32.0 ([a29b5ac](/../../commit/a29b5ac)) 1405 | 1406 | 1407 | 1408 | ### v1.87.3 (2020-07-17) 1409 | 1410 | 1411 | #### Features 1412 | 1413 | * **gems** 1414 | * update to pact-support 1.15.1, pact-provider-verifier 1.32.0 ([048525e](/../../commit/048525e)) 1415 | 1416 | 1417 | 1418 | ### v1.87.2 (2020-07-17) 1419 | 1420 | 1421 | #### Features 1422 | 1423 | * **gems** 1424 | * update to pact-support 1.15.1, pact-provider-verifier 1.32.0 ([8acdb79](/../../commit/8acdb79)) 1425 | 1426 | 1427 | 1428 | ### v1.87.1 (2020-07-17) 1429 | 1430 | 1431 | #### Features 1432 | 1433 | * **gems** 1434 | * update to pact-support 1.15.1, pact-provider-verifier 1.32.0 ([ae1f913](/../../commit/ae1f913)) 1435 | * update to pact-support 1.15.1, pact-provider-verifier 1.32.0 ([23d9b39](/../../commit/23d9b39)) 1436 | * update to pact 1.51.0 ([2cd378c](/../../commit/2cd378c)) 1437 | 1438 | 1439 | 1440 | ### v1.86.0 (2020-06-24) 1441 | 1442 | 1443 | #### Features 1444 | 1445 | * **gems** 1446 | * update to pact 1.50.1, pact-provider-verifier 1.31.0, pact_broker-client 1.27.0 ([cae0a96](/../../commit/cae0a96)) 1447 | 1448 | 1449 | 1450 | ### v1.85.0 (2020-06-03) 1451 | 1452 | 1453 | #### Features 1454 | 1455 | * **gems** 1456 | * update rack to 2.1.3 ([bcd365d](/../../commit/bcd365d)) 1457 | 1458 | 1459 | 1460 | ### v1.84.0 (2020-05-02) 1461 | 1462 | 1463 | #### Features 1464 | 1465 | * **gems** 1466 | * update to pact-support 1.15.0 ([bf091cd](/../../commit/bf091cd)) 1467 | 1468 | 1469 | 1470 | ### v1.83.0 (2020-04-22) 1471 | 1472 | 1473 | #### Features 1474 | 1475 | * **gems** 1476 | * update to pact-mock_service 3.6.1, pact 1.49.3, pact-provider-verifier 1.30.1, pact_broker-client 1.26.0 ([902b480](/../../commit/902b480)) 1477 | 1478 | 1479 | #### Bug Fixes 1480 | 1481 | * unset BUNDLE_APP_CONFIG to prevent Ruby contamination ([43ba935](/../../commit/43ba935)) 1482 | 1483 | 1484 | 1485 | ### v1.82.3 (2020-04-08) 1486 | 1487 | 1488 | #### Features 1489 | 1490 | * **gems** 1491 | * update to pact 1.49.2 ([26c8fc0](/../../commit/26c8fc0)) 1492 | 1493 | 1494 | 1495 | ### v1.82.2 (2020-04-06) 1496 | 1497 | 1498 | #### Features 1499 | 1500 | * **gems** 1501 | * update to pact-support 1.14.3, pact_broker-client 1.25.1 ([71578b4](/../../commit/71578b4)) 1502 | 1503 | 1504 | 1505 | ### v1.82.1 (2020-03-21) 1506 | 1507 | 1508 | #### Features 1509 | 1510 | * **gems** 1511 | * update to pact 1.49.1 ([936001c](/../../commit/936001c)) 1512 | 1513 | 1514 | 1515 | ### v1.82.0 (2020-03-15) 1516 | 1517 | 1518 | #### Features 1519 | 1520 | * **gems** 1521 | * update to pact-mock_service 3.6.0 ([3e83385](/../../commit/3e83385)) 1522 | 1523 | 1524 | #### Bug Fixes 1525 | 1526 | * GH returns lowercase location header ([8826ec0](/../../commit/8826ec0)) 1527 | 1528 | 1529 | 1530 | ### v1.81.0 (2020-02-27) 1531 | 1532 | 1533 | #### Features 1534 | 1535 | * **gems** 1536 | * update to pact-support 1.14.1, pact-provider-verifier 1.30.0 ([99f4827](/../../commit/99f4827)) 1537 | 1538 | 1539 | 1540 | ### v1.80.0 (2020-02-18) 1541 | 1542 | 1543 | #### Features 1544 | 1545 | * **gems** 1546 | * update to pact 1.49.0, pact-provider-verifier 1.29.0, pact_broker-client 1.25.0 ([78125b9](/../../commit/78125b9)) 1547 | 1548 | 1549 | 1550 | ### v1.79.0 (2020-02-14) 1551 | 1552 | 1553 | #### Features 1554 | 1555 | * **gems** 1556 | * update to pact-support 1.14.0, pact 1.48.0, pact-message 0.7.0, pact_broker-client 1.24.0 ([f1260c2](/../../commit/f1260c2)) 1557 | 1558 | 1559 | 1560 | ### v1.78.0 (2020-02-10) 1561 | 1562 | 1563 | #### Features 1564 | 1565 | * **gems** 1566 | * update to pact-support 1.13.0, pact 1.47.0 ([ce7151e](/../../commit/ce7151e)) 1567 | 1568 | 1569 | 1570 | ### v1.77.0 (2020-01-22) 1571 | 1572 | 1573 | #### Features 1574 | 1575 | * **gems** 1576 | * update to pact-support 1.12.1, pact 1.46.1, pact-provider-verifier 1.28.0, pact_broker-client 1.23.0 ([4d4374b](/../../commit/4d4374b)) 1577 | 1578 | 1579 | 1580 | ### v1.76.1 (2020-01-20) 1581 | 1582 | 1583 | #### Features 1584 | 1585 | * **gems** 1586 | * update to pact 1.44.1 ([6ddb571](/../../commit/6ddb571)) 1587 | 1588 | 1589 | 1590 | ### v1.76.0 (2020-01-17) 1591 | 1592 | 1593 | #### Features 1594 | 1595 | * **gems** 1596 | * update to pact-mock_service 3.5.0 ([9a1b0c1](/../../commit/9a1b0c1)) 1597 | 1598 | 1599 | 1600 | ### v1.75.0 (2020-01-17) 1601 | 1602 | 1603 | #### Features 1604 | 1605 | * **gems** 1606 | * update to pact-mock_service 3.4.0, pact 1.44.0, pact-provider-verifier 1.27.1, pact_broker-client 1.22.3 ([e54aaef](/../../commit/e54aaef)) 1607 | 1608 | 1609 | 1610 | ### v1.74.0 (2020-01-11) 1611 | 1612 | 1613 | #### Features 1614 | 1615 | * **gems** 1616 | * update to pact 1.43.0, pact-provider-verifier 1.26.0 ([4ba7c14](/../../commit/4ba7c14)) 1617 | 1618 | 1619 | 1620 | ### v1.73.0 (2019-12-17) 1621 | 1622 | 1623 | #### Features 1624 | 1625 | * **gems** 1626 | * update non-pact gems ([27f0c54](/../../commit/27f0c54)) 1627 | 1628 | * update rack-test to 1.1.0 ([7dc341b](/../../commit/7dc341b)) 1629 | * remove html, css and svg files from package ([6bf6805](/../../commit/6bf6805)) 1630 | 1631 | 1632 | 1633 | ### v1.72.2 (2019-11-15) 1634 | 1635 | 1636 | #### Features 1637 | 1638 | * **gems** 1639 | * update non-pact gems ([e020434](/../../commit/e020434)) 1640 | 1641 | 1642 | 1643 | ### v1.72.1 (2019-11-15) 1644 | 1645 | 1646 | #### Features 1647 | 1648 | * **gems** 1649 | * update to pact 1.42.3, pact-provider-verifier 1.25.2 ([e05ea57](/../../commit/e05ea57)) 1650 | 1651 | 1652 | 1653 | ### v1.72.0 (2019-11-10) 1654 | 1655 | 1656 | #### Features 1657 | 1658 | * **gems** 1659 | * update to pact-provider-verifier 1.25.1 ([ad1e996](/../../commit/ad1e996)) 1660 | 1661 | 1662 | 1663 | ### v1.71.0 (2019-11-09) 1664 | 1665 | 1666 | #### Features 1667 | 1668 | * **gems** 1669 | * update to pact-support 1.12.0, pact-mock_service 3.2.0, pact 1.42.2, pact-provider-verifier 1.25.0 ([a87f82c](/../../commit/a87f82c)) 1670 | 1671 | 1672 | 1673 | ### v1.70.1 (2019-08-30) 1674 | 1675 | 1676 | #### Features 1677 | 1678 | * **gems** 1679 | * update non-pact gems ([d061efc](/../../commit/d061efc)) 1680 | 1681 | 1682 | #### Bug Fixes 1683 | 1684 | * typo in bundler require ([85deddc](/../../commit/85deddc)) 1685 | 1686 | 1687 | 1688 | ### v1.70.0 (2019-08-27) 1689 | 1690 | 1691 | #### Features 1692 | 1693 | * **gems** 1694 | * update to pact_broker-client 1.20.0 ([9758863](/../../commit/9758863)) 1695 | 1696 | 1697 | 1698 | ### v1.69.0 (2019-06-25) 1699 | 1700 | 1701 | #### Features 1702 | 1703 | * **gems** 1704 | * update to pact_broker-client 1.19.0 ([3cfd3f0](/../../commit/3cfd3f0)) 1705 | 1706 | 1707 | 1708 | ### v1.68.0 (2019-06-18) 1709 | 1710 | 1711 | #### Features 1712 | 1713 | * **gems** 1714 | * update to pact-support 1.11.0 ([fb1c7b8](/../../commit/fb1c7b8)) 1715 | 1716 | 1717 | 1718 | ### v1.67.0 (2019-06-08) 1719 | 1720 | 1721 | #### Features 1722 | 1723 | * **gems** 1724 | * update to pact-support 1.10.3, pact-mock_service 3.1.1 ([6f828d6](/../../commit/6f828d6)) 1725 | 1726 | 1727 | 1728 | ### v1.66.0 (2019-05-22) 1729 | 1730 | 1731 | #### Features 1732 | 1733 | * **gems** 1734 | * update to pact 1.41.0 ([4cb4193](/../../commit/4cb4193)) 1735 | 1736 | 1737 | 1738 | ### v1.65.1 (2019-05-22) 1739 | 1740 | 1741 | #### Features 1742 | 1743 | * **gems** 1744 | * update to pact-mock_service 3.1.0, pact 1.40.0, pact-message 0.6.0, pact-provider-verifier 1.23.1 ([b100f99](/../../commit/b100f99)) 1745 | 1746 | 1747 | 1748 | ### v1.65.0 (2019-05-21) 1749 | 1750 | 1751 | #### Features 1752 | 1753 | * **gems** 1754 | * update to pact-support 1.10.2, pact-provider-verifier 1.23.0 ([7899a4c](/../../commit/7899a4c)) 1755 | 1756 | 1757 | 1758 | ### v1.64.1 (2019-04-26) 1759 | 1760 | 1761 | #### Features 1762 | 1763 | * **gems** 1764 | * update to pact-support 1.10.1 ([0afb839](/../../commit/0afb839)) 1765 | 1766 | 1767 | 1768 | ### v1.64.0 (2019-03-06) 1769 | 1770 | 1771 | #### Features 1772 | 1773 | * **gems** 1774 | * update to pact-support 1.9.0, pact 1.38.0, pact-provider-verifier 1.22.0, pact_broker-client 1.18.0 ([ca35dca](/../../commit/ca35dca)) 1775 | 1776 | * lock rack-test version to maintain current behaviour for standalone users ([2ff6407](/../../commit/2ff6407)) 1777 | 1778 | 1779 | 1780 | ### v1.63.0 (2018-11-15) 1781 | 1782 | 1783 | #### Features 1784 | 1785 | * **gems** 1786 | * update to pact-provider-verifier 1.21.0 ([628070e](/../../commit/628070e)) 1787 | 1788 | 1789 | 1790 | ### v1.62.0 (2018-11-15) 1791 | 1792 | 1793 | #### Features 1794 | 1795 | * **gems** 1796 | * update to pact-support 1.8.1, pact 1.37.0, pact_broker-client 1.17.0 ([09ae9fd](/../../commit/09ae9fd)) 1797 | 1798 | 1799 | 1800 | ### v1.61.2 (2018-10-30) 1801 | 1802 | 1803 | #### Features 1804 | 1805 | * **gems** 1806 | * update to pact 1.36.2 ([80bd311](/../../commit/80bd311)) 1807 | 1808 | 1809 | 1810 | ### v1.61.1 (2018-10-16) 1811 | 1812 | 1813 | #### Features 1814 | 1815 | * **gems** 1816 | * update to pact_broker-client 1.16.2 ([0ac6d25](/../../commit/0ac6d25)) 1817 | 1818 | 1819 | 1820 | ### v1.61.0 (2018-10-04) 1821 | 1822 | 1823 | #### Features 1824 | 1825 | * **gems** 1826 | * update to pact-support 1.8.0, pact-mock_service 2.12.0, pact 1.36.0, pact-message 0.5.0, pact-provider-verifier 1.20.0 ([33d85df](/../../commit/33d85df)) 1827 | 1828 | 1829 | 1830 | ### v1.60.0 (2018-09-18) 1831 | 1832 | 1833 | #### Features 1834 | 1835 | * **gems** 1836 | * update to pact-provider-verifier 1.19.0 ([58ebcc8](/../../commit/58ebcc8)) 1837 | 1838 | 1839 | 1840 | ### v1.59.0 (2018-09-18) 1841 | 1842 | 1843 | #### Features 1844 | 1845 | * **gems** 1846 | * update to pact 1.34.0 ([a533202](/../../commit/a533202)) 1847 | 1848 | 1849 | 1850 | ### v1.58.0 (2018-09-06) 1851 | 1852 | 1853 | #### Features 1854 | 1855 | * **gems** 1856 | * update to pact 1.33.2, pact-provider-verifier 1.17.0 ([6ea2fef](/../../commit/6ea2fef)) 1857 | 1858 | 1859 | 1860 | ### v1.57.0 (2018-09-05) 1861 | 1862 | 1863 | #### Features 1864 | 1865 | * **gems** 1866 | * update to pact-provider-verifier 1.16.1 ([523d82a](/../../commit/523d82a)) 1867 | 1868 | 1869 | 1870 | ### v1.56.0 (2018-09-05) 1871 | 1872 | 1873 | #### Features 1874 | 1875 | * **gems** 1876 | * update to pact-provider-verifier 1.16.0 ([7a8b604](/../../commit/7a8b604)) 1877 | 1878 | 1879 | 1880 | ### v1.55.0 (2018-08-28) 1881 | 1882 | 1883 | #### Features 1884 | 1885 | * **gems** 1886 | * update to pact-mock_service 2.11.0, pact 1.33.1 ([14dd070](/../../commit/14dd070)) 1887 | 1888 | 1889 | 1890 | ### v1.54.4 (2018-08-21) 1891 | 1892 | 1893 | #### Features 1894 | 1895 | * **gems** 1896 | * update to pact-support 1.7.2, pact-mock_service 2.10.1 ([68556d1](/../../commit/68556d1)) 1897 | 1898 | 1899 | 1900 | ### v1.54.3 (2018-08-09) 1901 | 1902 | 1903 | #### Features 1904 | 1905 | * **gems** 1906 | * update to pact-support 1.7.1, pact-mock_service 2.10.0, pact 1.33.0 ([87846b1](/../../commit/87846b1)) 1907 | 1908 | 1909 | 1910 | ### v1.54.2 (2018-08-03) 1911 | 1912 | 1913 | #### Features 1914 | 1915 | * **gems** 1916 | * update to pact_broker-client 1.16.1 ([06a3738](/../../commit/06a3738)) 1917 | 1918 | 1919 | 1920 | ### v1.54.1 (2018-07-25) 1921 | 1922 | 1923 | #### Features 1924 | 1925 | * **gems** 1926 | * update to pact-support 1.6.6 ([3fe5047](/../../commit/3fe5047)) 1927 | 1928 | 1929 | 1930 | ### v1.54.0 (2018-07-25) 1931 | 1932 | 1933 | #### Features 1934 | 1935 | * **gems** 1936 | * update to pact 1.32.0 ([1e33f5b](/../../commit/1e33f5b)) 1937 | 1938 | 1939 | 1940 | ### v1.53.0 (2018-07-25) 1941 | 1942 | 1943 | #### Features 1944 | 1945 | * **gems** 1946 | * update to pact 1.31.0, pact-support 1.6.5, pact-mock_service 2.9.3 ([2ec7fc3](/../../commit/2ec7fc3)) 1947 | 1948 | 1949 | 1950 | ### v1.52.2 (2018-07-14) 1951 | 1952 | 1953 | #### Features 1954 | 1955 | * **gems** 1956 | * update to pact-support 1.6.4 ([b676a68](/../../commit/b676a68)) 1957 | 1958 | 1959 | 1960 | ### v1.52.1 (2018-07-13) 1961 | 1962 | 1963 | #### Features 1964 | 1965 | * **gems** 1966 | * update to pact-mock_service 2.9.3 ([9453be9](/../../commit/9453be9)) 1967 | 1968 | 1969 | 1970 | ### v1.52.0 (2018-07-13) 1971 | 1972 | 1973 | #### Features 1974 | 1975 | * **gems** 1976 | * update to pact-provider-verifier 1.15.0 ([bdc1540](/../../commit/bdc1540)) 1977 | 1978 | 1979 | 1980 | ### v1.51.0 (2018-07-12) 1981 | 1982 | 1983 | #### Features 1984 | 1985 | * **gems** 1986 | * update to pact-mock_service 2.9.2 ([587efb4](/../../commit/587efb4)) 1987 | 1988 | 1989 | 1990 | ### v1.50.1 (2018-07-12) 1991 | 1992 | 1993 | #### Features 1994 | 1995 | * **gems** 1996 | * update to pact-support 1.6.3, pact-provider-verifier 1.14.7 ([c7e2a0a](/../../commit/c7e2a0a)) 1997 | * update to pact-provider-verifier 1.14.6 ([d095d7c](/../../commit/d095d7c)) 1998 | 1999 | 2000 | 2001 | ### v1.50.0 (2018-07-11) 2002 | 2003 | 2004 | #### Features 2005 | 2006 | * **gems** 2007 | * update to pact-provider-verifier 1.14.6 ([32df62d](/../../commit/32df62d)) 2008 | * update to pact-provider-verifier 1.14.4 ([65370a9](/../../commit/65370a9)) 2009 | 2010 | * stop release if no gems have been updated ([ade61be](/../../commit/ade61be)) 2011 | 2012 | 2013 | #### Bug Fixes 2014 | 2015 | * correct VERSION to it's in sync with the tags ([a0c8225](/../../commit/a0c8225)) 2016 | 2017 | 2018 | 2019 | ### v1.48.0 (2018-07-09) 2020 | 2021 | 2022 | #### Features 2023 | 2024 | * **gems** 2025 | * update to pact_broker-client 1.16.0 ([eb80535](/../../commit/eb80535)) 2026 | 2027 | 2028 | 2029 | ### v1.47.3 (2018-07-07) 2030 | 2031 | 2032 | #### Features 2033 | 2034 | * **gems** 2035 | * update to pact-message 0.4.5 ([37d355f](/../../commit/37d355f)) 2036 | 2037 | 2038 | 2039 | ### v1.47.2 (2018-07-04) 2040 | 2041 | 2042 | #### Features 2043 | 2044 | * **gems** 2045 | * update to pact-mock_service 2.9.1, pact 1.28.0 ([23caa7d](/../../commit/23caa7d)) 2046 | 2047 | 2048 | 2049 | ### v1.47.1 (2018-06-28) 2050 | 2051 | 2052 | #### Features 2053 | 2054 | * **gems** 2055 | * update to pact_broker-client 1.15.1 ([872608a](/../../commit/872608a)) 2056 | 2057 | 2058 | 2059 | ### v1.47.0 (2018-06-22) 2060 | 2061 | 2062 | #### Features 2063 | 2064 | * **gems** 2065 | * update to pact_broker-client 1.15.0 ([3c39480](/../../commit/3c39480)) 2066 | 2067 | 2068 | 2069 | ### v1.46.0 (2018-06-22) 2070 | 2071 | 2072 | #### Features 2073 | 2074 | * **gems** 2075 | * update to pact 1.27.0 ([b6ce0e2](/../../commit/b6ce0e2)) 2076 | 2077 | 2078 | 2079 | ### v1.45.0 (2018-06-15) 2080 | 2081 | 2082 | #### Features 2083 | 2084 | * **gems** 2085 | * update to pact-mock_service 2.9.0 ([32da43f](/../../commit/32da43f)) 2086 | 2087 | 2088 | 2089 | ### v1.44.3 (2018-05-31) 2090 | 2091 | 2092 | #### Features 2093 | 2094 | * **gems** 2095 | * update to pact-support 1.6.2 ([3c1c0e4](/../../commit/3c1c0e4)) 2096 | 2097 | 2098 | 2099 | ### v1.44.2 (2018-05-30) 2100 | 2101 | 2102 | #### Features 2103 | 2104 | * **gems** 2105 | * update to pact-mock_service 2.8.0 ([99738b1](/../../commit/99738b1)) 2106 | 2107 | 2108 | #### Bug Fixes 2109 | 2110 | * **windows-path** 2111 | * Adding quotes around the '-I' property to work with weird paths ([3493854](/../../commit/3493854)) 2112 | 2113 | 2114 | 2115 | ### v1.44.1 (2018-05-21) 2116 | 2117 | 2118 | #### Features 2119 | 2120 | * **gems** 2121 | * update to pact-support 1.6.1 ([1c29680](/../../commit/1c29680)) 2122 | 2123 | 2124 | 2125 | ### v1.44.0 (2018-05-16) 2126 | 2127 | 2128 | #### Features 2129 | 2130 | * **gems** 2131 | * update non-pact gems ([d78f832](/../../commit/d78f832)) 2132 | 2133 | 2134 | 2135 | ### v1.43.1 (2018-05-10) 2136 | 2137 | 2138 | #### Features 2139 | 2140 | * **gems** 2141 | * update to pact-mock_service 2.7.1, pact-provider-verifier 1.14.3 ([7183ef7](/../../commit/7183ef7)) 2142 | 2143 | 2144 | 2145 | ### v1.43.0 (2018-05-08) 2146 | 2147 | 2148 | #### Features 2149 | 2150 | * **gems** 2151 | * update non-pact gems ([2273698](/../../commit/2273698)) 2152 | 2153 | 2154 | 2155 | ### v1.42.0 (2018-05-08) 2156 | 2157 | 2158 | #### Features 2159 | 2160 | * **gems** 2161 | * update non-pact gems ([ff06007](/../../commit/ff06007)) 2162 | 2163 | 2164 | 2165 | ### v1.40.0 (2018-05-07) 2166 | 2167 | 2168 | #### Features 2169 | 2170 | * **gems** 2171 | * update to pact-message 0.4.4 ([428e94b](/../../commit/428e94b)) 2172 | 2173 | 2174 | 2175 | ### v1.39.0 (2018-05-07) 2176 | 2177 | 2178 | #### Features 2179 | 2180 | * **gems** 2181 | * update to pact-mock_service 2.7.0, pact 1.24.0, pact-message 0.4.3 ([58d35f8](/../../commit/58d35f8)) 2182 | 2183 | 2184 | 2185 | ### v1.38.0 (2018-04-16) 2186 | 2187 | 2188 | #### Features 2189 | 2190 | * **gems** 2191 | * update to pact 1.23.0, pact-provider-verifier 1.14.0 ([ab5b50e](/../../commit/ab5b50e)) 2192 | 2193 | 2194 | 2195 | ### v1.37.0 (2018-04-11) 2196 | 2197 | 2198 | #### Features 2199 | 2200 | * **gems** 2201 | * update to pact_broker-client 1.14.1 ([b1f08ac](/../../commit/b1f08ac)) 2202 | 2203 | 2204 | 2205 | ### v1.36.0 (2018-04-05) 2206 | 2207 | 2208 | #### Features 2209 | 2210 | * **gems** 2211 | * update to pact-message 0.4.1, pact-provider-verifier 1.13.0 ([61b7031](/../../commit/61b7031)) 2212 | 2213 | 2214 | 2215 | ### v1.35.0 (2018-04-03) 2216 | 2217 | 2218 | #### Features 2219 | 2220 | * **gems** 2221 | * update to pact-support 1.6.0, pact-message 0.4.0 ([734954e](/../../commit/734954e)) 2222 | 2223 | 2224 | 2225 | ### v1.34.0 (2018-04-03) 2226 | 2227 | 2228 | #### Features 2229 | 2230 | * **gems** 2231 | * update to pact-message 0.3.0 ([c52bcc1](/../../commit/c52bcc1)) 2232 | 2233 | * set default external encoding to UTF-8, update to pact-message 0.2.1 ([926e87e](/../../commit/926e87e)) 2234 | 2235 | 2236 | 2237 | ### v1.33.1 (2018-03-26) 2238 | 2239 | 2240 | #### Features 2241 | 2242 | * set default external encoding to UTF-8 ([f3db394](/../../commit/f3db394)) 2243 | 2244 | * **gems** 2245 | * update to pact-message 0.2.1 ([f3db394](/../../commit/f3db394)) 2246 | 2247 | 2248 | 2249 | ### v1.33.0 (2018-03-25) 2250 | 2251 | 2252 | #### Features 2253 | 2254 | * **gems** 2255 | * update non-pact gems ([7199ab5](/../../commit/7199ab5)) 2256 | 2257 | * **pact-message** 2258 | * add pact-message binary to release ([1feec03](/../../commit/1feec03)) 2259 | 2260 | 2261 | 2262 | ### v1.32.0 (2018-03-24) 2263 | 2264 | 2265 | #### Features 2266 | 2267 | * **gems** 2268 | * update to pact-provider-verifier 1.12.0 ([1fa854e](/../../commit/1fa854e)) 2269 | 2270 | 2271 | 2272 | ### v1.31.0 (2018-03-24) 2273 | 2274 | 2275 | #### Features 2276 | 2277 | * **gems** 2278 | * update to pact-support 1.5.2, pact 1.22.2 ([073e1d2](/../../commit/073e1d2)) 2279 | 2280 | 2281 | 2282 | ### v1.30.1 (2018-03-19) 2283 | 2284 | 2285 | #### Features 2286 | 2287 | * **gems** 2288 | * update to pact-support 1.3.1 ([5f9a7d7](/../../commit/5f9a7d7)) 2289 | 2290 | 2291 | 2292 | ### v1.30.0 (2018-03-19) 2293 | 2294 | 2295 | #### Features 2296 | 2297 | * **gems** 2298 | * update to pact-support 1.3.0, pact 1.21.0 ([fd18941](/../../commit/fd18941)) 2299 | 2300 | * set PACT_EXECUTING_LANGUAGE to 'unknown' when not set by wrapper language ([5f1aa62](/../../commit/5f1aa62)) 2301 | * add linux support to install.sh - beware! Not yet tested. ([92f10d7](/../../commit/92f10d7)) 2302 | * create basic install script ([7b48fbe](/../../commit/7b48fbe)) 2303 | 2304 | 2305 | 2306 | ### v1.29.2 (2018-02-22) 2307 | 2308 | 2309 | #### Features 2310 | 2311 | * **gems** 2312 | * update to pact-mock_service 2.6.4 ([7ababbe](/../../commit/7ababbe)) 2313 | 2314 | 2315 | 2316 | ### v1.29.1 (2018-02-16) 2317 | 2318 | 2319 | #### Features 2320 | 2321 | * **gems** 2322 | * update to pact-support 1.2.5 ([d89dfec](/../../commit/d89dfec)) 2323 | 2324 | 2325 | 2326 | ### v1.29.0 (2018-02-16) 2327 | 2328 | 2329 | #### Bug Fixes 2330 | 2331 | * ensure RUBYGEMS_GEMDEPS is unset for all scripts ([d1f3656](/../../commit/d1f3656)) 2332 | * set BUNDLE_FROZEN=1 to stop bundler attempting to modify Gemfile.lock ([67c216e](/../../commit/67c216e)) 2333 | 2334 | 2335 | 2336 | ### v1.28.0 (2018-02-08) 2337 | 2338 | 2339 | #### Features 2340 | 2341 | * **gems** 2342 | * update non-pact gems ([2ed8cff](/../../commit/2ed8cff)) 2343 | 2344 | * **pact-provider-verifier cli** 2345 | * allow custom certificates to be used by setting SSL_CERT_FILE and SSL_CERT_DIR ([5cbcce1](/../../commit/5cbcce1)) 2346 | 2347 | 2348 | 2349 | ### v1.27.0 (2018-02-08) 2350 | 2351 | 2352 | #### Features 2353 | 2354 | * **pact-broker cli** 2355 | * allow custom certificates to be used by setting SSL_CERT_FILE and SSL_CERT_DIR ([08e5420](/../../commit/08e5420)) 2356 | 2357 | 2358 | 2359 | ### v1.26.0 (2018-02-05) 2360 | 2361 | 2362 | #### Features 2363 | 2364 | * **gems** 2365 | * update to pact 1.20.1 ([dea151f](/../../commit/dea151f)) 2366 | 2367 | 2368 | 2369 | ### v1.25.0 (2018-02-03) 2370 | 2371 | 2372 | #### Features 2373 | 2374 | * **gems** 2375 | * update non-pact gems ([60f075e](/../../commit/60f075e)) 2376 | 2377 | * remove extraneous .rb in help text ([1080344](/../../commit/1080344)) 2378 | * add pact docs to standalone package ([9ed1d30](/../../commit/9ed1d30)) 2379 | 2380 | 2381 | 2382 | ### v1.24.0 (2018-01-25) 2383 | 2384 | 2385 | #### Features 2386 | 2387 | * lock webrick to ~>1.3.1 ([60b840e](/../../commit/60b840e)) 2388 | 2389 | 2390 | 2391 | ### v1.23.0 (2018-01-25) 2392 | 2393 | 2394 | #### Features 2395 | 2396 | * **gems** 2397 | * update to pact_broker-client 1.14.0 ([8d88df8](/../../commit/8d88df8)) 2398 | 2399 | * add can-i-deploy usage to README ([99bf770](/../../commit/99bf770)) 2400 | 2401 | 2402 | #### Bug Fixes 2403 | 2404 | * quote $LIBDIR in shell scripts so that spaces are handled correctly ([c591d36](/../../commit/c591d36)) 2405 | 2406 | 2407 | 2408 | ### v1.22.1 (2017-12-18) 2409 | 2410 | 2411 | #### Features 2412 | 2413 | * **gems** 2414 | * update to pact-mock_service 2.6.3 ([406e2f3](/../../commit/406e2f3)) 2415 | 2416 | 2417 | 2418 | ### v1.22.0 (2017-12-10) 2419 | 2420 | 2421 | #### Features 2422 | 2423 | * **gems** 2424 | * update to pact 1.20.0 ([d20bd1e](/../../commit/d20bd1e)) 2425 | 2426 | 2427 | 2428 | ### v1.21.0 (2017-12-07) 2429 | 2430 | 2431 | #### Features 2432 | 2433 | * **gems** 2434 | * update to pact_broker-client 1.13.1, pact-mock_service 2.6.2, pact 1.19.2, pact-provider-verifier 1.11.0 ([b4c855d](/../../commit/b4c855d)) 2435 | 2436 | 2437 | 2438 | ### v1.20.0 (2017-11-09) 2439 | 2440 | 2441 | #### Features 2442 | 2443 | * **gems** 2444 | * update to pact_broker-client 1.13.0 ([db52238](/../../commit/db52238)) 2445 | 2446 | 2447 | 2448 | ### v1.19.0 (2017-11-07) 2449 | 2450 | 2451 | #### Features 2452 | 2453 | * **gems** 2454 | * update to pact-mock_service 2.6.0, pact-provider-verifier 1.9.0 ([7ffe0b0](/../../commit/7ffe0b0)) 2455 | 2456 | 2457 | 2458 | ### v1.17.1 (2017-11-07) 2459 | 2460 | #### Bug Fixes 2461 | 2462 | * issue with linux removing quotes from arguments ([a387e23](/../../commit/a387e23)) 2463 | 2464 | 2465 | ### v1.17.0 (2017-11-06) 2466 | 2467 | 2468 | #### Features 2469 | 2470 | * **gems** 2471 | * update to pact_broker-client 1.12.0 ([ed103ff](/../../commit/ed103ff)) 2472 | 2473 | 2474 | 2475 | ### v1.16.0 (2017-11-01) 2476 | 2477 | 2478 | #### Features 2479 | 2480 | * **gems** 2481 | * update to pact_broker-client 1.11.0, pact 1.19.1 ([197ead3](/../../commit/197ead3)) 2482 | 2483 | 2484 | 2485 | ### v1.15.0 (2017-10-31) 2486 | 2487 | 2488 | #### Features 2489 | 2490 | * **gems** 2491 | * update to pact_broker-client 1.10.0, pact 1.19.0 ([e3eb8d6](/../../commit/e3eb8d6)) 2492 | 2493 | 2494 | 2495 | ### v1.14.0 (2017-10-30) 2496 | 2497 | #### Features 2498 | 2499 | * **gems** 2500 | * update to pact_broker-client 1.9.0 ([58bb0ea](/../../commit/58bb0ea)) 2501 | 2502 | 2503 | 2504 | ### v1.13.0 (2017-10-30) 2505 | 2506 | #### Features 2507 | 2508 | * **gems** 2509 | * update to pact-support 1.2.4, pact-mock_service 2.5.4, pact 1.18.0 ([5a8cb24](/../../commit/5a8cb24)) 2510 | * update to pact-mock_service 2.5.1 ([1b0ed8b](/../../commit/1b0ed8b)) 2511 | 2512 | 2513 | ### v1.12.0 (2017-10-27) 2514 | 2515 | #### Features 2516 | 2517 | * **gems** 2518 | * update pact to 1.17.0, pact-provider-verifier to 1.8.0, pact-support to 1.2.2 ([9b052ec](/../../commit/9b052ec)) 2519 | 2520 | 2521 | ### v1.11.0 (2017-10-19) 2522 | 2523 | #### Features 2524 | 2525 | * **gems** 2526 | * upgrade pact_broker-client to 1.8.0 ([f4eb23a](/../../commit/f4eb23a)) 2527 | 2528 | #### BREAKING CHANGES 2529 | 2530 | * Moved `pact-publish` to `pact-broker publish` ([f4eb23a](/../../commit/f4eb23a)) 2531 | 2532 | 2533 | ### v1.10.0 (2017-10-19) 2534 | 2535 | #### Features 2536 | 2537 | * **gems** 2538 | * update pact_broker-client to 1.7.0 and pact-provider-verifier to 1.7.0 ([40bb5c1](/../../commit/40bb5c1)) 2539 | 2540 | 2541 | ### v1.9.1 (2017-10-18) 2542 | 2543 | #### Features 2544 | 2545 | * **gems** 2546 | * update pact to 1.16.1 ([3dc94d6](/../../commit/3dc94d6)) 2547 | 2548 | 2549 | ### v1.9.0 (2017-10-13) 2550 | 2551 | #### Features 2552 | 2553 | * add pact-stub-service to standalone package ([b5a65f0](/../../commit/b5a65f0)) 2554 | 2555 | * **gems** 2556 | * update pact-mock_service to 2.4.0 ([03cf5a8](/../../commit/03cf5a8)) 2557 | 2558 | 2559 | ### v1.8.0 (2017-10-04) 2560 | 2561 | #### Features 2562 | 2563 | * **gems** 2564 | * update pact-support to 1.2.0, pact-mock_service to 2.3.0, pact-provider-verifier to 1.6.0 ([abc3606](/../../commit/abc3606)) 2565 | 2566 | 2567 | ### v1.7.1 (2017-10-02) 2568 | 2569 | #### Bug Fixes 2570 | 2571 | * correct pact-provider-verifier require ([2510b54](/../../commit/2510b54)) 2572 | 2573 | 2574 | ### v1.7.0 (2017-10-01) 2575 | 2576 | #### Features 2577 | 2578 | * **readme** 2579 | * add detailed usage notes generated from each tool ([97a60f9](/../../commit/97a60f9)) 2580 | 2581 | * **gems** 2582 | * update pact-provider-verifier to 1.5.0 and pact_broker-client to 1.6.0 ([3f5b1a2](/../../commit/3f5b1a2)) 2583 | 2584 | 2585 | ### v1.6.0 (2017-09-30) 2586 | 2587 | #### Features 2588 | 2589 | * **gems** 2590 | * update pact-mock_service to 2.2.0 ([bab09c8](/../../commit/bab09c8)) 2591 | 2592 | 2593 | ### v1.5.0 (2017-09-30) 2594 | 2595 | #### Features 2596 | 2597 | * **pact publish** 2598 | * add pact-publish cli ([9f760a3](/../../commit/9f760a3)) 2599 | 2600 | 2601 | ### v1.4.4 (2017-08-27) 2602 | 2603 | #### Features 2604 | 2605 | * **gems** 2606 | * update pact-provider-verifier to 1.4.1 ([5e10e07](/../../commit/5e10e07)) 2607 | 2608 | 2609 | ### v1.4.3 (2017-08-25) 2610 | 2611 | #### Features 2612 | 2613 | * **gems** 2614 | * update pact-support to 1.1.6 ([17f0b3e](/../../commit/17f0b3e)) 2615 | 2616 | 2617 | ### v1.4.0 (2017-08-11) 2618 | 2619 | #### Features 2620 | 2621 | * **gems** 2622 | * update pact to 1.15.0 and pact-provider-verifier to 1.4.0 ([8a39a47](/../../commit/8a39a47)) 2623 | 2624 | 2625 | ### v1.3.0 (2017-08-08) 2626 | #### Features 2627 | 2628 | * **gems** 2629 | * Update pact-provider-verifier to 1.3.1 ([36cb12a](/../../commit/36cb12a)) 2630 | 2631 | 2632 | ## 1.2.2 (5 Aug 2017) 2633 | * 427ed71 - chore(reduce package size): Remove supposedly unnecessary native extension sources and compilation objects. Last time we tried this, something broke on windows, but now we have the pact-ruby-standalone-windows-test to help identify the problem. (Beth Skurrie, Sat Aug 5 17:31:23 2017 +1000) 2634 | * d6809a4 - chore(reduce package size): Remove unnecessary encoding files (Beth Skurrie, Sat Aug 5 17:30:17 2017 +1000) 2635 | 2636 | ## 1.2.1 (5 Aug 2017) 2637 | * dc35c77 - chore(reduce package size): Remove unnecessary files from package (Beth Skurrie, Sat Aug 5 17:00:41 2017 +1000) 2638 | 2639 | ## 1.2.0 (3 Aug 2017) 2640 | * f02ee8a - chore(gems): Updated pact-provider-proxy to 2.2.0 (Beth Skurrie, Thu Aug 3 14:47:21 2017 +1000) 2641 | 2642 | ## 1.1.2 (1 Aug 2017) 2643 | * 8c3ca90 - chore(gems): Updated pact-support gem to 1.1.5 (Beth Skurrie, Tue Aug 1 10:43:07 2017 +1000) 2644 | 2645 | ## 1.1.2-alpha.1 (28 July 2017) 2646 | * f3d0584 - chore(gems): Updated pact-mock_service to 2.1.1.pre.alpha.2 (Beth Skurrie, Fri Jul 28 16:41:17 2017 +1000) 2647 | 2648 | ## 1.1.1 (19 June 2017) 2649 | * 8f77fda - chore(gems): Update pact-support to 1.1.3 (Beth Skurrie, Fri Jul 28 09:48:43 2017 +1000) 2650 | 2651 | ## 1.0.0 (19 June 2017) 2652 | * a8b6cc4 - Updated pact-support to 1.1.2 (Beth Skurrie, Fri Jun 23 14:51:04 2017 +1000) 2653 | 2654 | ## 1.0.0 (19 June 2017) 2655 | * 2c5fe56 - Updating pact-mock_service to 2.1.0, pact-support to 1.1.0, pact to 1.14.0 (Beth Skurrie, Mon Jun 19 10:09:02 2017 +1000) 2656 | --------------------------------------------------------------------------------