diff options
author | Nick Thomas <nick@gitlab.com> | 2019-01-24 16:23:57 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-03-05 15:00:32 +0000 |
commit | 21779d00186d75349165d6c07dbe04aace68017c (patch) | |
tree | 25aaf112b51d6f5360a3e97db6f31f98a642660e /lib/api | |
parent | 42d3117f9c3371e07e8b0aafab6f504e87251c2a (diff) | |
download | gitlab-ce-21779d00186d75349165d6c07dbe04aace68017c.tar.gz |
Add metadata about the GitLab server to GraphQL
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/helpers/graphql_helpers.rb | 22 | ||||
-rw-r--r-- | lib/api/version.rb | 18 |
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/api/helpers/graphql_helpers.rb b/lib/api/helpers/graphql_helpers.rb new file mode 100644 index 00000000000..94010ab1bc2 --- /dev/null +++ b/lib/api/helpers/graphql_helpers.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module API + module Helpers + # GraphqlHelpers is used by the REST API when it is acting like a client + # against the graphql API. Helper code for the graphql server implementation + # should be in app/graphql/ or lib/gitlab/graphql/ + module GraphqlHelpers + def conditionally_graphql!(fallback:, query:, context: {}, transform: nil) + return fallback.call unless Feature.enabled?(:graphql) + + result = GitlabSchema.execute(query, context: context) + + if transform + transform.call(result) + else + result + end + end + end + end +end diff --git a/lib/api/version.rb b/lib/api/version.rb index 74cd857f447..eca1b529094 100644 --- a/lib/api/version.rb +++ b/lib/api/version.rb @@ -2,13 +2,29 @@ module API class Version < Grape::API + helpers ::API::Helpers::GraphqlHelpers + before { authenticate! } + METADATA_QUERY = <<~EOF + { + metadata { + version + revision + } + } + EOF + desc 'Get the version information of the GitLab instance.' do detail 'This feature was introduced in GitLab 8.13.' end get '/version' do - { version: Gitlab::VERSION, revision: Gitlab.revision } + conditionally_graphql!( + query: METADATA_QUERY, + context: { current_user: current_user }, + transform: ->(result) { result.dig('data', 'metadata') }, + fallback: -> { { version: Gitlab::VERSION, revision: Gitlab.revision } } + ) end end end |