Contract Management

Contracts from Git Repository

Configure Specmatic to pull contracts from a Git repository:

  • version: 2
    contracts:
      - git:
          url: https://github.com/specmatic/specmatic-order-contracts.git
          branch: main
        provides:
          - com/petstore/store.yaml
        consumes:
          - com/petstore/payment.yaml
    
  • {
      "version": 2,
      "contracts": [
        {
          "git": {
            "url": "https://github.com/specmatic/specmatic-order-contracts.git",
            "branch": "main"
          },
          "provides": [
            "com/petstore/store.yaml"
          ],
          "consumes": [
            "com/petstore/payment.yaml"
          ]
        }
      ]
    }
    

Contracts from Local Filesystem

If you just need to use specifications from your local file system, specify filesystem field within contracts (if not specified, directory will default to current directory):

  • version: 2
    contracts:
      - filesystem:
          directory: <Path to directory where all the specmatic should look for specifications>
        consumes:
          - api_order_v1.yaml
          - api_user_v1.yaml
        provides:
          - api_auth_v1.yaml
    
  • {
      "version": 2,
      "contracts": [
        {
          "filesystem": {
            "directory": "<Path to directory where all the specmatic should look for specifications>"
          },
          "consumes": [
            "api_order_v1.yaml",
            "api_user_v1.yaml"
          ],
          "provides": [
            "api_auth_v1.yaml"
          ]
        }
      ]
    }
    

Note that the consumes and provides specifications are relative paths. This means that they must be in the same directory as the current directory.

You can also provide absolute paths in case they are somewhere else on the filesystem.

Provides and Consumes

A single application may need to list the API Specifications it is implementing under the provides attribute and the API Specifications of its dependencies under the consumes attribute.

  • version: 2
    contracts:
      - git:
          url: <Git URL>
        consumes:
          - com/example/api_order_v1.yaml
          - com/example/api_user_v1.yaml
        provides:
          - com/example/api_auth_v1.yaml
    
  • {
      "version": 2,
      "contracts": [
        {
          "git": {
            "url": "<Git URL>"
          },
          "consumes": [
            "com/example/api_order_v1.yaml",
            "com/example/api_user_v1.yaml"
          ],
          "provides": [
            "com/example/api_auth_v1.yaml"
          ]
        }
      ]
    }