Skip to content

[Schema Inaccuracy] head.repo can be null in pull-request schema #424

@gr2m

Description

@gr2m

Schema Inaccuracy

The current schema for #/components/schemas/pull-request define head.repo as required:

full schema
    pull-request:
      type: object
      title: Pull Request
      description: Pull requests let you tell others about changes you've pushed to
        a repository on GitHub. Once a pull request is sent, interested parties can
        review the set of changes, discuss potential modifications, and even push
        follow-up commits if necessary.
      properties:
        url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/pulls/1347
        id:
          type: integer
          example: 1
        node_id:
          type: string
          example: MDExOlB1bGxSZXF1ZXN0MQ==
        html_url:
          type: string
          format: uri
          example: https://github.com/octocat/Hello-World/pull/1347
        diff_url:
          type: string
          format: uri
          example: https://github.com/octocat/Hello-World/pull/1347.diff
        patch_url:
          type: string
          format: uri
          example: https://github.com/octocat/Hello-World/pull/1347.patch
        issue_url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/issues/1347
        commits_url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits
        review_comments_url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments
        review_comment_url:
          type: string
          example: https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}
        comments_url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/issues/1347/comments
        statuses_url:
          type: string
          format: uri
          example: https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e
        number:
          description: Number uniquely identifying the pull request within its repository.
          example: 42
          type: integer
        state:
          description: State of this Pull Request. Either `open` or `closed`.
          enum:
          - open
          - closed
          example: open
          type: string
        locked:
          type: boolean
          example: true
        title:
          description: The title of the pull request.
          example: Amazing new feature
          type: string
        user:
          nullable: true
          allOf:
          - "$ref": "#/components/schemas/simple-user"
        body:
          type: string
          example: Please pull these awesome changes
          nullable: true
        labels:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                format: int64
              node_id:
                type: string
              url:
                type: string
              name:
                type: string
              description:
                type: string
                nullable: true
              color:
                type: string
              default:
                type: boolean
        milestone:
          nullable: true
          allOf:
          - "$ref": "#/components/schemas/milestone"
        active_lock_reason:
          type: string
          example: too heated
          nullable: true
        created_at:
          type: string
          format: date-time
          example: '2011-01-26T19:01:12Z'
        updated_at:
          type: string
          format: date-time
          example: '2011-01-26T19:01:12Z'
        closed_at:
          type: string
          format: date-time
          example: '2011-01-26T19:01:12Z'
          nullable: true
        merged_at:
          type: string
          format: date-time
          example: '2011-01-26T19:01:12Z'
          nullable: true
        merge_commit_sha:
          type: string
          example: e5bd3914e2e596debea16f433f57875b5b90bcd6
          nullable: true
        assignee:
          nullable: true
          allOf:
          - "$ref": "#/components/schemas/simple-user"
        assignees:
          type: array
          items:
            "$ref": "#/components/schemas/simple-user"
          nullable: true
        requested_reviewers:
          type: array
          items:
            "$ref": "#/components/schemas/simple-user"
          nullable: true
        requested_teams:
          type: array
          items:
            "$ref": "#/components/schemas/team-simple"
          nullable: true
        head:
          type: object
          properties:
            label:
              type: string
            ref:
              type: string
            repo:
              type: object
              properties:
                archive_url:
                  type: string
                assignees_url:
                  type: string
                blobs_url:
                  type: string
                branches_url:
                  type: string
                collaborators_url:
                  type: string
                comments_url:
                  type: string
                commits_url:
                  type: string
                compare_url:
                  type: string
                contents_url:
                  type: string
                contributors_url:
                  type: string
                  format: uri
                deployments_url:
                  type: string
                  format: uri
                description:
                  type: string
                  nullable: true
                downloads_url:
                  type: string
                  format: uri
                events_url:
                  type: string
                  format: uri
                fork:
                  type: boolean
                forks_url:
                  type: string
                  format: uri
                full_name:
                  type: string
                git_commits_url:
                  type: string
                git_refs_url:
                  type: string
                git_tags_url:
                  type: string
                hooks_url:
                  type: string
                  format: uri
                html_url:
                  type: string
                  format: uri
                id:
                  type: integer
                node_id:
                  type: string
                issue_comment_url:
                  type: string
                issue_events_url:
                  type: string
                issues_url:
                  type: string
                keys_url:
                  type: string
                labels_url:
                  type: string
                languages_url:
                  type: string
                  format: uri
                merges_url:
                  type: string
                  format: uri
                milestones_url:
                  type: string
                name:
                  type: string
                notifications_url:
                  type: string
                owner:
                  type: object
                  properties:
                    avatar_url:
                      type: string
                      format: uri
                    events_url:
                      type: string
                    followers_url:
                      type: string
                      format: uri
                    following_url:
                      type: string
                    gists_url:
                      type: string
                    gravatar_id:
                      type: string
                      nullable: true
                    html_url:
                      type: string
                      format: uri
                    id:
                      type: integer
                    node_id:
                      type: string
                    login:
                      type: string
                    organizations_url:
                      type: string
                      format: uri
                    received_events_url:
                      type: string
                      format: uri
                    repos_url:
                      type: string
                      format: uri
                    site_admin:
                      type: boolean
                    starred_url:
                      type: string
                    subscriptions_url:
                      type: string
                      format: uri
                    type:
                      type: string
                    url:
                      type: string
                      format: uri
                  required:
                  - avatar_url
                  - events_url
                  - followers_url
                  - following_url
                  - gists_url
                  - gravatar_id
                  - html_url
                  - id
                  - node_id
                  - login
                  - organizations_url
                  - received_events_url
                  - repos_url
                  - site_admin
                  - starred_url
                  - subscriptions_url
                  - type
                  - url
                private:
                  type: boolean
                pulls_url:
                  type: string
                releases_url:
                  type: string
                stargazers_url:
                  type: string
                  format: uri
                statuses_url:
                  type: string
                subscribers_url:
                  type: string
                  format: uri
                subscription_url:
                  type: string
                  format: uri
                tags_url:
                  type: string
                  format: uri
                teams_url:
                  type: string
                  format: uri
                trees_url:
                  type: string
                url:
                  type: string
                  format: uri
                clone_url:
                  type: string
                default_branch:
                  type: string
                forks:
                  type: integer
                forks_count:
                  type: integer
                git_url:
                  type: string
                has_downloads:
                  type: boolean
                has_issues:
                  type: boolean
                has_projects:
                  type: boolean
                has_wiki:
                  type: boolean
                has_pages:
                  type: boolean
                homepage:
                  type: string
                  format: uri
                  nullable: true
                language:
                  type: string
                  nullable: true
                master_branch:
                  type: string
                archived:
                  type: boolean
                disabled:
                  type: boolean
                mirror_url:
                  type: string
                  format: uri
                  nullable: true
                open_issues:
                  type: integer
                open_issues_count:
                  type: integer
                permissions:
                  type: object
                  properties:
                    admin:
                      type: boolean
                    pull:
                      type: boolean
                    push:
                      type: boolean
                  required:
                  - admin
                  - pull
                  - push
                temp_clone_token:
                  type: string
                allow_merge_commit:
                  type: boolean
                allow_squash_merge:
                  type: boolean
                allow_rebase_merge:
                  type: boolean
                license:
                  type: object
                  properties:
                    key:
                      type: string
                    name:
                      type: string
                    url:
                      type: string
                      format: uri
                      nullable: true
                    spdx_id:
                      type: string
                      nullable: true
                    node_id:
                      type: string
                  required:
                  - key
                  - name
                  - url
                  - spdx_id
                  - node_id
                  nullable: true
                pushed_at:
                  type: string
                  format: date-time
                size:
                  type: integer
                ssh_url:
                  type: string
                stargazers_count:
                  type: integer
                svn_url:
                  type: string
                  format: uri
                topics:
                  type: array
                  items:
                    type: string
                watchers:
                  type: integer
                watchers_count:
                  type: integer
                created_at:
                  type: string
                  format: date-time
                updated_at:
                  type: string
                  format: date-time
              required:
              - archive_url
              - assignees_url
              - blobs_url
              - branches_url
              - collaborators_url
              - comments_url
              - commits_url
              - compare_url
              - contents_url
              - contributors_url
              - deployments_url
              - description
              - downloads_url
              - events_url
              - fork
              - forks_url
              - full_name
              - git_commits_url
              - git_refs_url
              - git_tags_url
              - hooks_url
              - html_url
              - id
              - node_id
              - issue_comment_url
              - issue_events_url
              - issues_url
              - keys_url
              - labels_url
              - languages_url
              - merges_url
              - milestones_url
              - name
              - notifications_url
              - owner
              - private
              - pulls_url
              - releases_url
              - stargazers_url
              - statuses_url
              - subscribers_url
              - subscription_url
              - tags_url
              - teams_url
              - trees_url
              - url
              - clone_url
              - default_branch
              - forks
              - forks_count
              - git_url
              - has_downloads
              - has_issues
              - has_projects
              - has_wiki
              - has_pages
              - homepage
              - language
              - archived
              - disabled
              - mirror_url
              - open_issues
              - open_issues_count
              - license
              - pushed_at
              - size
              - ssh_url
              - stargazers_count
              - svn_url
              - watchers
              - watchers_count
              - created_at
              - updated_at
            sha:
              type: string
            user:
              type: object
              properties:
                avatar_url:
                  type: string
                  format: uri
                events_url:
                  type: string
                followers_url:
                  type: string
                  format: uri
                following_url:
                  type: string
                gists_url:
                  type: string
                gravatar_id:
                  type: string
                  nullable: true
                html_url:
                  type: string
                  format: uri
                id:
                  type: integer
                node_id:
                  type: string
                login:
                  type: string
                organizations_url:
                  type: string
                  format: uri
                received_events_url:
                  type: string
                  format: uri
                repos_url:
                  type: string
                  format: uri
                site_admin:
                  type: boolean
                starred_url:
                  type: string
                subscriptions_url:
                  type: string
                  format: uri
                type:
                  type: string
                url:
                  type: string
                  format: uri
              required:
              - avatar_url
              - events_url
              - followers_url
              - following_url
              - gists_url
              - gravatar_id
              - html_url
              - id
              - node_id
              - login
              - organizations_url
              - received_events_url
              - repos_url
              - site_admin
              - starred_url
              - subscriptions_url
              - type
              - url
          required:
          - label
          - ref
          - repo
          - sha
          - user

Expected

head.repo should have nullable: true

Reproduction Steps

https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/pulls/48699

Originally reported by @rbuckton in octokit/rest.js#31

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions