export interface StoreDevelopmentInformation {
  /**
   * List of repositories containing development information. Must not contain duplicates. Maximum number of entities
   * across all repositories is 1000.
   */
  repositories?: {
    /** The name of this repository. Max length is 255 characters. */
    name: string;
    /** Description of this repository. Max length is 1024 characters. */
    description?: string;
    /** The ID of the repository this repository was forked from, if it's a fork. Max length is 1024 characters. */
    forkOf?: string;
    /** The URL of this repository. Max length is 2000 characters. */
    url: string;
    /**
     * List of commits to update in this repository. Must not contain duplicate entity IDs. Maximum number of commits is
     * 400
     */
    commits?: {
      /**
       * The identifier or hash of the commit. Will be used for cross entity linking. Must be unique for all commits
       * within a repository, i.e., only one commit can have ID 'X' in repository 'Y'. But adding, e.g., a branch with
       * ID 'X' to repository 'Y' is acceptable. Only alphanumeric characters, and '~.-_', are allowed. Max length is
       * 1024 characters
       */
      id: string;
      /** List of issues keys that this entity is associated with. They must be valid Jira issue keys. */
      issueKeys: string[];
      /**
       * An ID used to apply an ordering to updates for this entity in the case of out-of-order receipt of update
       * requests. This can be any monotonically increasing number. A suggested implementation is to use epoch millis
       * from the provider system, but other alternatives are valid (e.g. a provider could store a counter against each
       * entity and increment that on each update to Jira). Updates for an entity that are received with an
       * updateSqeuenceId lower than what is currently stored will be ignored.
       */
      updateSequenceId: number;
      /** The set of flags for this commit */
      flags?: ('MERGE_COMMIT' | string)[];
      /**
       * The commit message. Max length is 1024 characters. If anything longer is supplied, it will be truncated down to
       * 1024 characters.
       */
      message: string;
      /** Describes the author of a particular entity */
      author: {
        /** The email address of the user. Used to associate the user with a Jira user. Max length is 255 characters. */
        email?: string;
      };
      /** The total number of files added, removed, or modified by this commit */
      fileCount: number;
      /** The URL of this commit. Max length is 2000 characters. */
      url: string;
      /**
       * List of file changes. Max number of files is 10. Currently, only the first 5 files are shown (sorted by path)
       * in the UI. This UI behavior may change without notice.
       */
      files?: {
        /** The path of the file. Max length is 1024 characters. */
        path: string;
        /** The URL of this file. Max length is 2000 characters. */
        url: string;
        /** The operation performed on this file */
        changeType: 'ADDED' | 'COPIED' | 'DELETED' | 'MODIFIED' | 'MOVED' | 'UNKNOWN' | string;
        /** Number of lines added to the file */
        linesAdded: number;
        /** Number of lines removed from the file */
        linesRemoved: number;
      }[];
      /** The author timestamp of this commit. Formatted as a UTC ISO 8601 date time format. */
      authorTimestamp: string;
      /** Shortened identifier for this commit, used for display. Max length is 255 characters. */
      displayId: string;
    }[];
    /**
     * List of branches to update in this repository. Must not contain duplicate entity IDs. Maximum number of branches
     * is 400.
     */
    branches?: {
      /**
       * The ID of this entity. Will be used for cross entity linking. Must be unique by entity type within a
       * repository, i.e., only one commit can have ID 'X' in repository 'Y'. But adding, e.g., a branch with ID 'X' to
       * repository 'Y' is acceptable. Only alphanumeric characters, and '~.-_', are allowed. Max length is 1024
       * characters.
       */
      id: string;
      /** List of issues keys that this entity is associated with. They must be valid Jira issue keys. */
      issueKeys: string[];
      /**
       * An ID used to apply an ordering to updates for this entity in the case of out-of-order receipt of update
       * requests. This can be any monotonically increasing number. A suggested implementation is to use epoch millis
       * from the provider system, but other alternatives are valid (e.g. a provider could store a counter against each
       * entity and increment that on each update to Jira). Updates for an entity that are received with an
       * updateSqeuenceId lower than what is currently stored will be ignored.
       */
      updateSequenceId: number;
      /** The name of the branch. Max length is 512 characters. */
      name: string;
      /** Represents a commit in the version control system. */
      lastCommit: {
        /**
         * The identifier or hash of the commit. Will be used for cross entity linking. Must be unique for all commits
         * within a repository, i.e., only one commit can have ID 'X' in repository 'Y'. But adding, e.g., a branch with
         * ID 'X' to repository 'Y' is acceptable. Only alphanumeric characters, and '~.-_', are allowed. Max length is
         * 1024 characters
         */
        id: string;
        /** List of issues keys that this entity is associated with. They must be valid Jira issue keys. */
        issueKeys: string[];
        /**
         * An ID used to apply an ordering to updates for this entity in the case of out-of-order receipt of update
         * requests. This can be any monotonically increasing number. A suggested implementation is to use epoch millis
         * from the provider system, but other alternatives are valid (e.g. a provider could store a counter against
         * each entity and increment that on each update to Jira). Updates for an entity that are received with an
         * updateSqeuenceId lower than what is currently stored will be ignored.
         */
        updateSequenceId: number;
        /** The set of flags for this commit */
        flags?: ('MERGE_COMMIT' | string)[];
        /**
         * The commit message. Max length is 1024 characters. If anything longer is supplied, it will be truncated down
         * to 1024 characters.
         */
        message: string;
        /** Describes the author of a particular entity */
        author: {
          /** The email address of the user. Used to associate the user with a Jira user. Max length is 255 characters. */
          email?: string;
        };
        /** The total number of files added, removed, or modified by this commit */
        fileCount: number;
        /** The URL of this commit. Max length is 2000 characters. */
        url: string;
        /**
         * List of file changes. Max number of files is 10. Currently, only the first 5 files are shown (sorted by path)
         * in the UI. This UI behavior may change without notice.
         */
        files?: {
          /** The path of the file. Max length is 1024 characters. */
          path: string;
          /** The URL of this file. Max length is 2000 characters. */
          url: string;
          /** The operation performed on this file */
          changeType: 'ADDED' | 'COPIED' | 'DELETED' | 'MODIFIED' | 'MOVED' | 'UNKNOWN' | string;
          /** Number of lines added to the file */
          linesAdded: number;
          /** Number of lines removed from the file */
          linesRemoved: number;
        }[];
        /** The author timestamp of this commit. Formatted as a UTC ISO 8601 date time format. */
        authorTimestamp: string;
        /** Shortened identifier for this commit, used for display. Max length is 255 characters. */
        displayId: string;
      };
      /** The URL of the page for creating a pull request from this branch. Max length is 2000 characters. */
      createPullRequestUrl?: string;
      /** The URL of the branch. Max length is 2000 characters. */
      url: string;
    }[];
    /**
     * List of pull requests to update in this repository. Must not contain duplicate entity IDs. Maximum number of pull
     * requests is 400
     */
    pullRequests?: {
      /**
       * The ID of this entity. Will be used for cross entity linking. Must be unique by entity type within a
       * repository, i.e., only one commit can have ID 'X' in repository 'Y'. But adding, e.g., a branch with ID 'X' to
       * repository 'Y' is acceptable. Only alphanumeric characters, and '~.-_', are allowed. Max length is 1024
       * characters
       */
      id: string;
      /** List of issues keys that this entity is associated with. They must be valid Jira issue keys. */
      issueKeys: string[];
      /**
       * An ID used to apply an ordering to updates for this entity in the case of out-of-order receipt of update
       * requests. This can be any monotonically increasing number. A suggested implementation is to use epoch millis
       * from the provider system, but other alternatives are valid (e.g. a provider could store a counter against each
       * entity and increment that on each update to Jira). Updates for an entity that are received with an
       * updateSqeuenceId lower than what is currently stored will be ignored.
       */
      updateSequenceId: number;
      /**
       * The status of the pull request. In the case of concurrent updates, priority is given in the order OPEN, MERGED,
       * DECLINED, DRAFT, UNKNOWN
       */
      status: 'OPEN' | 'MERGED' | 'DECLINED' | 'DRAFT' | 'UNKNOWN' | string;
      /** Title of the pull request. Max length is 1024 characters. */
      title: string;
      /** Describes the author of a particular entity */
      author: {
        /** The email address of the user. Used to associate the user with a Jira user. Max length is 255 characters. */
        email?: string;
      };
      /** The number of comments on the pull request */
      commentCount: number;
      /** The name of the source branch of this PR. Max length is 255 characters. */
      sourceBranch: string;
      /**
       * The url of the source branch of this PR. This is used to match this PR against the branch. Max length is 2000
       * characters.
       */
      sourceBranchUrl?: string;
      /** The most recent update to this PR. Formatted as a UTC ISO 8601 date time format. */
      lastUpdate: string;
      /** The name of destination branch of this PR. Max length is 255 characters. */
      destinationBranch?: string;
      /** The url of the destination branch of this PR. Max length is 2000 characters. */
      destinationBranchUrl?: string;
      /** The list of reviewers of this pull request */
      reviewers?: {
        /** The approval status of this reviewer, default is UNAPPROVED. */
        approvalStatus?: 'APPROVED' | 'NEEDSWORK' | 'UNAPPROVED' | string;
        /** The email address of this reviewer. Max length is 254 characters. */
        email?: string;
        /** The Atlassian Account ID (AAID) of this reviewer. Max length is 128 characters. */
        accountId?: string;
      }[];
      /** The URL of this pull request. Max length is 2000 characters. */
      url: string;
      /** Shortened identifier for this pull request, used for display. Max length is 255 characters. */
      displayId: string;
      /** The number of tasks on the pull request */
      taskCount?: number;
    }[];
    /** The URL of the avatar for this repository. Max length is 2000 characters. */
    avatar?: string;
    /** Description of the avatar for this repository. Max length is 1024 characters. */
    avatarDescription?: string;
    /**
     * The ID of this entity. Will be used for cross entity linking. Must be unique by entity type within a repository,
     * i.e., only one commit can have ID 'X' in repository 'Y'. But adding, e.g., a branch with ID 'X' to repository 'Y'
     * is acceptable. Only alphanumeric characters, and '~.-_', are allowed. Max length is 1024 characters.
     */
    id: string;
    /**
     * An ID used to apply an ordering to updates for this entity in the case of out-of-order receipt of update
     * requests. This can be any monotonically increasing number. A suggested implementation is to use epoch millis from
     * the provider system, but other alternatives are valid (e.g. a provider could store a counter against each entity
     * and increment that on each update to Jira). Updates for an entity that are received with an updateSqeuenceId
     * lower than what is currently stored will be ignored.
     */
    updateSequenceId: number;
  }[];
  /** Flag to prevent automatic issue transitions and smart commits being fired, default is false. */
  preventTransitions?: boolean;
  /**
   * Indicates the operation being performed by the provider system when sending this data. "NORMAL" - Data received
   * during normal operation (e.g. a user pushing a branch). "BACKFILL" - Data received while backfilling existing data
   * (e.g. indexing a newly connected account). Default is "NORMAL". Please note that "BACKFILL" operations have a much
   * higher rate-limiting threshold but are also processed slower in comparison to "NORMAL" operations.
   */
  operationType?: 'NORMAL' | 'BACKFILL' | string;
  /**
   * Arbitrary properties to tag the submitted repositories with. These properties can be used for delete operations to
   * e.g. clean up all development information associated with an account in the event that the account is removed from
   * the provider system. Note that these properties will never be returned with repository or entity data. They are not
   * intended for use as metadata to associate with a repository. Maximum length of each key or value is 255 characters.
   * Maximum allowed number of properties key/value pairs is 5. Properties keys cannot start with '_' character.
   * Properties keys cannot contain ':' character.
   */
  properties?: unknown;
  /**
   * Information about the provider. This is useful for auditing, logging, debugging, and other internal uses. It is not
   * considered private information. Hence, it may not contain personally identifiable information.
   */
  providerMetadata?: {
    /** An optional name of the source of the development information data. */
    product?: string;
  };
}
