import { gql } from '@apollo/client';
export type Maybe<T> = T | null;
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
  ID: string;
  String: string;
  Boolean: boolean;
  Int: number;
  Float: number;
  /** A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format. */
  DateTime: any;
};

export type Commit = {
  __typename?: 'Commit';
  hash: Scalars['String'];
  date: Scalars['DateTime'];
  message: Scalars['String'];
  refs: Scalars['String'];
  body: Scalars['String'];
  author_name: Scalars['String'];
  author_email: Scalars['String'];
  tasks: Array<PipelineTask>;
};

export type CreatePipelineInput = {
  projectId: Scalars['String'];
  branch: Scalars['String'];
  name: Scalars['String'];
  workUnitMetadata: WorkUnitMetadataInput;
};

export type CreatePipelineTaskInput = {
  pipelineId: Scalars['String'];
  commit: Scalars['String'];
  units: Array<PipelineUnits>;
};

export type CreateProjectInput = {
  name: Scalars['String'];
  comment: Scalars['String'];
  sshUrl: Scalars['String'];
  webUrl?: Maybe<Scalars['String']>;
  webHookSecret?: Maybe<Scalars['String']>;
};


export type Hello = {
  __typename?: 'Hello';
  message: Scalars['String'];
};

export type LogFields = {
  __typename?: 'LogFields';
  hash: Scalars['String'];
  date: Scalars['String'];
  message: Scalars['String'];
  refs: Scalars['String'];
  body: Scalars['String'];
  author_name: Scalars['String'];
  author_email: Scalars['String'];
  tasks: Array<PipelineTask>;
};

export type LogList = {
  __typename?: 'LogList';
  all: Array<LogFields>;
  total: Scalars['Float'];
  latest: LogFields;
};

export type Mutation = {
  __typename?: 'Mutation';
  createProject: Project;
  updateProject: Project;
  removeProject: Scalars['Float'];
  createPipeline: Pipeline;
  updatePipeline: Pipeline;
  deletePipeline: Scalars['Float'];
  createPipelineTask: PipelineTask;
};


export type MutationCreateProjectArgs = {
  project: CreateProjectInput;
};


export type MutationUpdateProjectArgs = {
  project: UpdateProjectInput;
};


export type MutationRemoveProjectArgs = {
  id: Scalars['String'];
};


export type MutationCreatePipelineArgs = {
  pipeline: CreatePipelineInput;
};


export type MutationUpdatePipelineArgs = {
  Pipeline: UpdatePipelineInput;
};


export type MutationDeletePipelineArgs = {
  id: Scalars['String'];
};


export type MutationCreatePipelineTaskArgs = {
  task: CreatePipelineTaskInput;
};

export type Pipeline = {
  __typename?: 'Pipeline';
  id: Scalars['ID'];
  project: Project;
  projectId: Scalars['String'];
  branch: Scalars['String'];
  name: Scalars['String'];
  workUnitMetadata: WorkUnitMetadata;
};

export type PipelineTask = {
  __typename?: 'PipelineTask';
  id: Scalars['ID'];
  pipeline: Pipeline;
  pipelineId: Scalars['String'];
  commit: Scalars['String'];
  units: Array<PipelineUnits>;
  logs: Array<PipelineTaskLogs>;
  status: TaskStatuses;
  startedAt?: Maybe<Scalars['DateTime']>;
  endedAt?: Maybe<Scalars['DateTime']>;
};

export type PipelineTaskLogMessage = {
  __typename?: 'PipelineTaskLogMessage';
  unit?: Maybe<PipelineUnits>;
  time: Scalars['DateTime'];
  message: Scalars['String'];
  isError: Scalars['Boolean'];
};

export type PipelineTaskLogs = {
  __typename?: 'PipelineTaskLogs';
  unit: PipelineUnits;
  status: TaskStatuses;
  startedAt?: Maybe<Scalars['DateTime']>;
  endedAt?: Maybe<Scalars['DateTime']>;
  logs: Scalars['String'];
};

/** 流水线单元 */
export enum PipelineUnits {
  Checkout = 'checkout',
  InstallDependencies = 'installDependencies',
  Test = 'test',
  Deploy = 'deploy',
  CleanUp = 'cleanUp'
}

export type Project = {
  __typename?: 'Project';
  id: Scalars['ID'];
  name: Scalars['String'];
  comment: Scalars['String'];
  sshUrl: Scalars['String'];
  webUrl?: Maybe<Scalars['String']>;
  webHookSecret?: Maybe<Scalars['String']>;
};

export type Query = {
  __typename?: 'Query';
  hello: Hello;
  projects: Array<Project>;
  project: Project;
  pipelines: Array<Pipeline>;
  pipeline: Pipeline;
  commits: Array<Commit>;
  listPipelineTaskByPipelineId: Array<PipelineTask>;
  pipelineTask: PipelineTask;
};


export type QueryProjectArgs = {
  id: Scalars['String'];
};


export type QueryPipelinesArgs = {
  projectId?: Maybe<Scalars['String']>;
};


export type QueryPipelineArgs = {
  id: Scalars['String'];
};


export type QueryCommitsArgs = {
  pipelineId: Scalars['String'];
};


export type QueryListPipelineTaskByPipelineIdArgs = {
  pipelineId: Scalars['String'];
};


export type QueryPipelineTaskArgs = {
  id: Scalars['String'];
};

export type Subscription = {
  __typename?: 'Subscription';
  listLogsForPipeline: LogList;
  pipelineTaskLog: PipelineTaskLogMessage;
  pipelineTaskChanged: PipelineTask;
};


export type SubscriptionListLogsForPipelineArgs = {
  id: Scalars['String'];
};


export type SubscriptionPipelineTaskLogArgs = {
  taskId: Scalars['String'];
};


export type SubscriptionPipelineTaskChangedArgs = {
  id: Scalars['String'];
};

/** 任务状态 */
export enum TaskStatuses {
  Success = 'success',
  Failed = 'failed',
  Working = 'working',
  Pending = 'pending'
}

export type UpdatePipelineInput = {
  projectId: Scalars['String'];
  branch: Scalars['String'];
  name: Scalars['String'];
  workUnitMetadata: WorkUnitMetadataInput;
  id: Scalars['String'];
};

export type UpdateProjectInput = {
  name: Scalars['String'];
  comment: Scalars['String'];
  sshUrl: Scalars['String'];
  webUrl?: Maybe<Scalars['String']>;
  webHookSecret?: Maybe<Scalars['String']>;
  id: Scalars['String'];
};

export type WorkUnit = {
  __typename?: 'WorkUnit';
  type: PipelineUnits;
  scripts: Array<Scalars['String']>;
};

export type WorkUnitInput = {
  type: PipelineUnits;
  scripts: Array<Scalars['String']>;
};

export type WorkUnitMetadata = {
  __typename?: 'WorkUnitMetadata';
  version: Scalars['Float'];
  units: Array<WorkUnit>;
};

export type WorkUnitMetadataInput = {
  version?: Maybe<Scalars['Float']>;
  units: Array<WorkUnitInput>;
};
