diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 11:59:07 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 11:59:07 +0000 |
commit | 8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch) | |
tree | 544930fb309b30317ae9797a9683768705d664c4 /app/graphql/types/ci | |
parent | 4b1de649d0168371549608993deac953eb692019 (diff) | |
download | gitlab-ce-8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca.tar.gz |
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'app/graphql/types/ci')
-rw-r--r-- | app/graphql/types/ci/analytics_type.rb | 33 | ||||
-rw-r--r-- | app/graphql/types/ci/ci_cd_setting_type.rb | 20 | ||||
-rw-r--r-- | app/graphql/types/ci/config/config_type.rb | 21 | ||||
-rw-r--r-- | app/graphql/types/ci/config/group_type.rb | 19 | ||||
-rw-r--r-- | app/graphql/types/ci/config/job_type.rb | 21 | ||||
-rw-r--r-- | app/graphql/types/ci/config/need_type.rb | 15 | ||||
-rw-r--r-- | app/graphql/types/ci/config/stage_type.rb | 17 | ||||
-rw-r--r-- | app/graphql/types/ci/config/status_enum.rb | 15 | ||||
-rw-r--r-- | app/graphql/types/ci/detailed_status_type.rb | 30 | ||||
-rw-r--r-- | app/graphql/types/ci/group_type.rb | 7 | ||||
-rw-r--r-- | app/graphql/types/ci/job_artifact_file_type_enum.rb | 13 | ||||
-rw-r--r-- | app/graphql/types/ci/job_artifact_type.rb | 24 | ||||
-rw-r--r-- | app/graphql/types/ci/job_type.rb | 30 | ||||
-rw-r--r-- | app/graphql/types/ci/pipeline_type.rb | 24 | ||||
-rw-r--r-- | app/graphql/types/ci/stage_type.rb | 7 |
15 files changed, 264 insertions, 32 deletions
diff --git a/app/graphql/types/ci/analytics_type.rb b/app/graphql/types/ci/analytics_type.rb new file mode 100644 index 00000000000..c8b12c6a9b8 --- /dev/null +++ b/app/graphql/types/ci/analytics_type.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + class AnalyticsType < BaseObject + graphql_name 'PipelineAnalytics' + + field :week_pipelines_totals, [GraphQL::INT_TYPE], null: true, + description: 'Total weekly pipeline count' + field :week_pipelines_successful, [GraphQL::INT_TYPE], null: true, + description: 'Total weekly successful pipeline count' + field :week_pipelines_labels, [GraphQL::STRING_TYPE], null: true, + description: 'Labels for the weekly pipeline count' + field :month_pipelines_totals, [GraphQL::INT_TYPE], null: true, + description: 'Total monthly pipeline count' + field :month_pipelines_successful, [GraphQL::INT_TYPE], null: true, + description: 'Total monthly successful pipeline count' + field :month_pipelines_labels, [GraphQL::STRING_TYPE], null: true, + description: 'Labels for the monthly pipeline count' + field :year_pipelines_totals, [GraphQL::INT_TYPE], null: true, + description: 'Total yearly pipeline count' + field :year_pipelines_successful, [GraphQL::INT_TYPE], null: true, + description: 'Total yearly successful pipeline count' + field :year_pipelines_labels, [GraphQL::STRING_TYPE], null: true, + description: 'Labels for the yearly pipeline count' + field :pipeline_times_values, [GraphQL::INT_TYPE], null: true, + description: 'Pipeline times' + field :pipeline_times_labels, [GraphQL::STRING_TYPE], null: true, + description: 'Pipeline times labels' + end + end +end diff --git a/app/graphql/types/ci/ci_cd_setting_type.rb b/app/graphql/types/ci/ci_cd_setting_type.rb new file mode 100644 index 00000000000..207c37f9538 --- /dev/null +++ b/app/graphql/types/ci/ci_cd_setting_type.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Types + module Ci + class CiCdSettingType < BaseObject + graphql_name 'ProjectCiCdSetting' + + authorize :admin_project + + field :merge_pipelines_enabled, GraphQL::BOOLEAN_TYPE, null: true, + description: 'Whether merge pipelines are enabled.', + method: :merge_pipelines_enabled? + field :merge_trains_enabled, GraphQL::BOOLEAN_TYPE, null: true, + description: 'Whether merge trains are enabled.', + method: :merge_trains_enabled? + field :project, Types::ProjectType, null: true, + description: 'Project the CI/CD settings belong to.' + end + end +end diff --git a/app/graphql/types/ci/config/config_type.rb b/app/graphql/types/ci/config/config_type.rb new file mode 100644 index 00000000000..e54b345f3d3 --- /dev/null +++ b/app/graphql/types/ci/config/config_type.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + module Config + class ConfigType < BaseObject + graphql_name 'CiConfig' + + field :errors, [GraphQL::STRING_TYPE], null: true, + description: 'Linting errors' + field :merged_yaml, GraphQL::STRING_TYPE, null: true, + description: 'Merged CI config YAML' + field :stages, [Types::Ci::Config::StageType], null: true, + description: 'Stages of the pipeline' + field :status, Types::Ci::Config::StatusEnum, null: true, + description: 'Status of linting, can be either valid or invalid' + end + end + end +end diff --git a/app/graphql/types/ci/config/group_type.rb b/app/graphql/types/ci/config/group_type.rb new file mode 100644 index 00000000000..8b0db2934a4 --- /dev/null +++ b/app/graphql/types/ci/config/group_type.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + module Config + class GroupType < BaseObject + graphql_name 'CiConfigGroup' + + field :name, GraphQL::STRING_TYPE, null: true, + description: 'Name of the job group' + field :jobs, [Types::Ci::Config::JobType], null: true, + description: 'Jobs in group' + field :size, GraphQL::INT_TYPE, null: true, + description: 'Size of the job group' + end + end + end +end diff --git a/app/graphql/types/ci/config/job_type.rb b/app/graphql/types/ci/config/job_type.rb new file mode 100644 index 00000000000..59bcbd9ef49 --- /dev/null +++ b/app/graphql/types/ci/config/job_type.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + module Config + class JobType < BaseObject + graphql_name 'CiConfigJob' + + field :name, GraphQL::STRING_TYPE, null: true, + description: 'Name of the job' + field :group_name, GraphQL::STRING_TYPE, null: true, + description: 'Name of the job group' + field :stage, GraphQL::STRING_TYPE, null: true, + description: 'Name of the job stage' + field :needs, [Types::Ci::Config::NeedType], null: true, + description: 'Builds that must complete before the jobs run' + end + end + end +end diff --git a/app/graphql/types/ci/config/need_type.rb b/app/graphql/types/ci/config/need_type.rb new file mode 100644 index 00000000000..a442450b9ae --- /dev/null +++ b/app/graphql/types/ci/config/need_type.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + module Config + class NeedType < BaseObject + graphql_name 'CiConfigNeed' + + field :name, GraphQL::STRING_TYPE, null: true, + description: 'Name of the need' + end + end + end +end diff --git a/app/graphql/types/ci/config/stage_type.rb b/app/graphql/types/ci/config/stage_type.rb new file mode 100644 index 00000000000..20618bc41f8 --- /dev/null +++ b/app/graphql/types/ci/config/stage_type.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + module Config + class StageType < BaseObject + graphql_name 'CiConfigStage' + + field :name, GraphQL::STRING_TYPE, null: true, + description: 'Name of the stage' + field :groups, [Types::Ci::Config::GroupType], null: true, + description: 'Groups of jobs for the stage' + end + end + end +end diff --git a/app/graphql/types/ci/config/status_enum.rb b/app/graphql/types/ci/config/status_enum.rb new file mode 100644 index 00000000000..92b04c61679 --- /dev/null +++ b/app/graphql/types/ci/config/status_enum.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Types + module Ci + module Config + class StatusEnum < BaseEnum + graphql_name 'CiConfigStatus' + description 'Values for YAML processor result' + + value 'VALID', 'The configuration file is valid', value: :valid + value 'INVALID', 'The configuration file is not valid', value: :invalid + end + end + end +end diff --git a/app/graphql/types/ci/detailed_status_type.rb b/app/graphql/types/ci/detailed_status_type.rb index 6d8af400ac4..80d73e9b174 100644 --- a/app/graphql/types/ci/detailed_status_type.rb +++ b/app/graphql/types/ci/detailed_status_type.rb @@ -25,20 +25,22 @@ module Types description: 'Tooltip associated with the status', method: :status_tooltip field :action, Types::Ci::StatusActionType, null: true, - description: 'Action information for the status. This includes method, button title, icon, path, and title', - resolve: -> (obj, _args, _ctx) { - if obj.has_action? - { - button_title: obj.action_button_title, - icon: obj.action_icon, - method: obj.action_method, - path: obj.action_path, - title: obj.action_title - } - else - nil - end - } + calls_gitaly: true, + description: 'Action information for the status. This includes method, button title, icon, path, and title' + + def action + if object.has_action? + { + button_title: object.action_button_title, + icon: object.action_icon, + method: object.action_method, + path: object.action_path, + title: object.action_title + } + else + nil + end + end end # rubocop: enable Graphql/AuthorizeTypes end diff --git a/app/graphql/types/ci/group_type.rb b/app/graphql/types/ci/group_type.rb index d930ae311b7..03fd50d5dbb 100644 --- a/app/graphql/types/ci/group_type.rb +++ b/app/graphql/types/ci/group_type.rb @@ -13,8 +13,11 @@ module Types field :jobs, Ci::JobType.connection_type, null: true, description: 'Jobs in group' field :detailed_status, Types::Ci::DetailedStatusType, null: true, - description: 'Detailed status of the group', - resolve: -> (obj, _args, ctx) { obj.detailed_status(ctx[:current_user]) } + description: 'Detailed status of the group' + + def detailed_status + object.detailed_status(context[:current_user]) + end end end end diff --git a/app/graphql/types/ci/job_artifact_file_type_enum.rb b/app/graphql/types/ci/job_artifact_file_type_enum.rb new file mode 100644 index 00000000000..4b484dec590 --- /dev/null +++ b/app/graphql/types/ci/job_artifact_file_type_enum.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Types + module Ci + class JobArtifactFileTypeEnum < BaseEnum + graphql_name 'JobArtifactFileType' + + ::Ci::JobArtifact::TYPE_AND_FORMAT_PAIRS.keys.each do |file_type| + value file_type.to_s.upcase, value: file_type.to_s + end + end + end +end diff --git a/app/graphql/types/ci/job_artifact_type.rb b/app/graphql/types/ci/job_artifact_type.rb new file mode 100644 index 00000000000..c34a12dcc61 --- /dev/null +++ b/app/graphql/types/ci/job_artifact_type.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Types + module Ci + # rubocop: disable Graphql/AuthorizeTypes + class JobArtifactType < BaseObject + graphql_name 'CiJobArtifact' + + field :download_path, GraphQL::STRING_TYPE, null: true, + description: "URL for downloading the artifact's file" + + field :file_type, ::Types::Ci::JobArtifactFileTypeEnum, null: true, + description: 'File type of the artifact' + + def download_path + ::Gitlab::Routing.url_helpers.download_project_job_artifacts_path( + object.project, + object.job, + file_type: object.file_type + ) + end + end + end +end diff --git a/app/graphql/types/ci/job_type.rb b/app/graphql/types/ci/job_type.rb index feaff4e81d8..5b6e8fe8567 100644 --- a/app/graphql/types/ci/job_type.rb +++ b/app/graphql/types/ci/job_type.rb @@ -6,18 +6,32 @@ module Types class JobType < BaseObject graphql_name 'CiJob' - field :pipeline, Types::Ci::PipelineType, null: false, - description: 'Pipeline the job belongs to', - resolve: -> (build, _, _) { Gitlab::Graphql::Loaders::BatchModelLoader.new(::Ci::Pipeline, build.pipeline_id).find } + field :pipeline, Types::Ci::PipelineType, null: true, + description: 'Pipeline the job belongs to' field :name, GraphQL::STRING_TYPE, null: true, - description: 'Name of the job' + description: 'Name of the job' field :needs, JobType.connection_type, null: true, - description: 'Builds that must complete before the jobs run' + description: 'Builds that must complete before the jobs run' field :detailed_status, Types::Ci::DetailedStatusType, null: true, - description: 'Detailed status of the job', - resolve: -> (obj, _args, ctx) { obj.detailed_status(ctx[:current_user]) } + description: 'Detailed status of the job' field :scheduled_at, Types::TimeType, null: true, - description: 'Schedule for the build' + description: 'Schedule for the build' + field :artifacts, Types::Ci::JobArtifactType.connection_type, null: true, + description: 'Artifacts generated by the job' + + def pipeline + Gitlab::Graphql::Loaders::BatchModelLoader.new(::Ci::Pipeline, object.pipeline_id).find + end + + def detailed_status + object.detailed_status(context[:current_user]) + end + + def artifacts + if object.is_a?(::Ci::Build) + object.job_artifacts + end + end end end end diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb index c25db39f600..4709d5e8dd6 100644 --- a/app/graphql/types/ci/pipeline_type.rb +++ b/app/graphql/types/ci/pipeline_type.rb @@ -27,8 +27,7 @@ module Types description: "Status of the pipeline (#{::Ci::Pipeline.all_state_names.compact.join(', ').upcase})" field :detailed_status, Types::Ci::DetailedStatusType, null: false, - description: 'Detailed status of the pipeline', - resolve: -> (obj, _args, ctx) { obj.detailed_status(ctx[:current_user]) } + description: 'Detailed status of the pipeline' field :config_source, PipelineConfigSourceEnum, null: true, description: "Config source of the pipeline (#{::Enums::Ci::Pipeline.config_sources.keys.join(', ').upcase})" @@ -60,8 +59,7 @@ module Types resolver: Resolvers::Ci::PipelineStagesResolver field :user, Types::UserType, null: true, - description: 'Pipeline user', - resolve: -> (pipeline, _args, _context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, pipeline.user_id).find } + description: 'Pipeline user' field :retryable, GraphQL::BOOLEAN_TYPE, description: 'Specifies if a pipeline can be retried', @@ -91,11 +89,25 @@ module Types method: :triggered_by_pipeline field :path, GraphQL::STRING_TYPE, null: true, - description: "Relative path to the pipeline's page", - resolve: -> (obj, _args, _ctx) { ::Gitlab::Routing.url_helpers.project_pipeline_path(obj.project, obj) } + description: "Relative path to the pipeline's page" field :project, Types::ProjectType, null: true, description: 'Project the pipeline belongs to' + + field :active, GraphQL::BOOLEAN_TYPE, null: false, method: :active?, + description: 'Indicates if the pipeline is active' + + def detailed_status + object.detailed_status(context[:current_user]) + end + + def user + Gitlab::Graphql::Loaders::BatchModelLoader.new(User, object.user_id).find + end + + def path + ::Gitlab::Routing.url_helpers.project_pipeline_path(object.project, object) + end end end end diff --git a/app/graphql/types/ci/stage_type.rb b/app/graphql/types/ci/stage_type.rb index fc2c72d0d06..fd0bde90836 100644 --- a/app/graphql/types/ci/stage_type.rb +++ b/app/graphql/types/ci/stage_type.rb @@ -11,8 +11,11 @@ module Types field :groups, Ci::GroupType.connection_type, null: true, description: 'Group of jobs for the stage' field :detailed_status, Types::Ci::DetailedStatusType, null: true, - description: 'Detailed status of the stage', - resolve: -> (obj, _args, ctx) { obj.detailed_status(ctx[:current_user]) } + description: 'Detailed status of the stage' + + def detailed_status + object.detailed_status(context[:current_user]) + end end end end |