/** Data related to a single build* */
export interface GetBuildByKey {
  /**
   * The schema version used for this data.
   *
   * Placeholder to support potential schema changes in the future.
   */
  schemaVersion?: '1.0' | string;
  /**
   * An ID that relates a sequence of builds. Depending on your use case this might be a project ID, pipeline ID, plan
   * key etc. - whatever logical unit you use to group a sequence of builds.
   *
   * The combination of `pipelineId` and `buildNumber` must uniquely identify a build you have provided.
   */
  pipelineId: string;
  /**
   * Identifies a build within the sequence of builds identified by the build `pipelineId`.
   *
   * Used to identify the 'most recent' build in that sequence of builds.
   *
   * The combination of `pipelineId` and `buildNumber` must uniquely identify a build you have provided.
   */
  buildNumber: number;
  /**
   * A number used to apply an order to the updates to the build, as identified by `pipelineId` and `buildNumber`, in
   * the case of out-of-order receipt of update requests.
   *
   * It must be a monotonically increasing number. For example, epoch time could be one way to generate the
   * `updateSequenceNumber`.
   *
   * Updates for a build that is received with an `updateSqeuenceNumber` less than or equal to what is currently stored
   * will be ignored.
   */
  updateSequenceNumber: number;
  /**
   * The human-readable name for the build.
   *
   * Will be shown in the UI.
   */
  displayName: string;
  /**
   * An optional description to attach to this build.
   *
   * This may be anything that makes sense in your system.
   */
  description?: string;
  /** A human-readable string that to provide information about the build. */
  label?: string;
  /** The URL to this build in your system. */
  url: string;
  /**
   * The state of a build.
   *
   * - `pending` - The build is queued, or some manual action is required.
   * - `in_progress` - The build is currently running.
   * - `successful` - The build completed successfully.
   * - `failed` - The build failed.
   * - `cancelled` - The build has been cancelled or stopped.
   * - `unknown` - The build is in an unknown state.
   */
  state: 'pending' | 'in_progress' | 'successful' | 'failed' | 'cancelled' | 'unknown' | string;
  /** The last-updated timestamp to present to the user as a summary of the state of the build. */
  lastUpdated: string;
  /**
   * The Jira issue keys to associate the build information with.
   *
   * You are free to associate issue keys in any way you like. However, we recommend that you use the name of the branch
   * the build was executed on, and extract issue keys from that name using a simple regex. This has the advantage that
   * it provides an intuitive association of builds to issue keys.
   */
  issueKeys: string[];
  /** Information about tests that were executed during a build. */
  testInfo?: {
    /** The total number of tests considered during a build. */
    totalNumber: number;
    /** The number of tests that passed during a build. */
    numberPassed: number;
    /** The number of tests that failed during a build. */
    numberFailed: number;
    /** The number of tests that were skipped during a build. */
    numberSkipped?: number;
  };
  /** Optional information that links a build to a commit, branch etc. */
  references?: {
    /** Details about the commit the build was run against. */
    commit?: {
      /** The ID of the commit. E.g. for a Git repository this would be the SHA1 hash. */
      id: string;
      /**
       * An identifier for the repository containing the commit.
       *
       * In most cases this should be the URL of the repository in the SCM provider.
       *
       * For cases where the build was executed against a local repository etc. this should be some identifier that is
       * unique to that repository.
       */
      repositoryUri: string;
    };
    /** Details about the ref the build was run on. */
    ref?: {
      /** The name of the ref the build ran on */
      name: string;
      /**
       * An identifier for the ref.
       *
       * In most cases this should be the URL of the tag/branch etc. in the SCM provider.
       *
       * For cases where the build was executed against a local repository etc. this should be something that uniquely
       * identifies the ref.
       */
      uri: string;
    };
  }[];
}
