type: object
additionalProperties: false
properties:
  project:
    type: object
    additionalProperties: false
    properties:
      homepage:
        type: [ string, 'null' ]
        description: url of the project's homepage
        examples:
          - https://github.com/yanick/app-changelord
      name:
        type: [ 'null', string ]
        description: name of the project
        examples:
          - App::Changelord
      ticket_url:
        type: string
        description: perl code that takes a ticket string (e.g. 'GH123') via the `$_` variable and turns it into a link.
        examples:
          - s!GH(\d+)!https://github.com/yanick/App-Changelord/issue/$1/
          - /^\d+$/ ? "https://.../$_" : undef
      with_stats:
        description: if true, add git statistics when bumping the version.
  change_types:
    type: array
    items:
      type: object
      additionalProperties: false
      properties:
          keywords:
            type: array
            items: { type: string }
          level: { enum: [ major, minor, patch ] }
          title: { type: string }
  releases:
    type: array
    items:
      oneOf:
        - type: string
        - type: object
          additionalProperties: false
          properties:
            version: { type: [ 'null', string ] }
            date: { type: ['null',string] }
            changes: { type: 'array', items: { $ref: '#/$defs/change' } }
$defs:
  change:
    oneOf:
      - type: string
      - type: object
        required: [ desc ]
        additionalProperties: false
        properties:
          desc: { type: string }
          ticket: { type: [ string, 'null' ] }
          type: { type: [ string, 'null' ] }
          commit: { type: [ string, 'null' ] }