diff options
author | Robert Speicher <robert@gitlab.com> | 2016-10-12 18:38:02 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2016-10-12 18:38:02 +0000 |
commit | 58e2b44afe535100508eb4d49d7e7df24e408383 (patch) | |
tree | 297acd474db338de3de6290543e8f14bbe2c4252 | |
parent | 5aa7b13c2ed61f22aa3be48b2ad5fe2ed6ea3a5e (diff) | |
parent | b998479c81512b7c9a2cff28e7aabff3c4be0424 (diff) | |
download | gitlab-ce-58e2b44afe535100508eb4d49d7e7df24e408383.tar.gz |
Merge branch 'api-version' into 'master'
API: Version information
## What does this MR do?
Adds a new endpoint to retrieve the version information.
## Why was this MR needed?
Clients can now use this information to enable/disable certain API features depending on the version.
## What are the relevant issue numbers?
Closes #22608, https://gitlab.com/gitlab-org/gitlab-ce/issues/23148
See merge request !6822
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | doc/api/README.md | 1 | ||||
-rw-r--r-- | doc/api/version.md | 23 | ||||
-rw-r--r-- | lib/api/api.rb | 1 | ||||
-rw-r--r-- | lib/api/version.rb | 12 | ||||
-rw-r--r-- | spec/requests/api/version_spec.rb | 27 |
6 files changed, 65 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG index 9e193132ac2..3b79f14076a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -32,6 +32,7 @@ v 8.13.0 (unreleased) - Cache rendered markdown in the database, rather than Redis - Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references - Simplify Mentionable concern instance methods + - API: Ability to retrieve version information (Robert Schilling) - Fix permission for setting an issue's due date - API: Multi-file commit !6096 (mahcsig) - Revert "Label list shows all issues (opened or closed) with that label" diff --git a/doc/api/README.md b/doc/api/README.md index 00cb003ed8a..3fbe5197a21 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -48,6 +48,7 @@ following locations: - [Todos](todos.md) - [Users](users.md) - [Validate CI configuration](ci/lint.md) +- [Version](version.md) ### Internal CI API diff --git a/doc/api/version.md b/doc/api/version.md new file mode 100644 index 00000000000..287d17cf97f --- /dev/null +++ b/doc/api/version.md @@ -0,0 +1,23 @@ +# Version API + +>**Note:** This feature was introduced in GitLab 8.13 + +Retrieve version information for this GitLab instance. Responds `200 OK` for +authenticated users. + +``` +GET /version +``` + +```bash +curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/version +``` + +Example response: + +```json +{ + "version": "8.13.0-pre", + "revision": "4e963fe" +} +``` diff --git a/lib/api/api.rb b/lib/api/api.rb index c64d444842d..920d098bb24 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -72,6 +72,7 @@ module API mount ::API::Triggers mount ::API::Users mount ::API::Variables + mount ::API::Version route :any, '*path' do error!('404 Not Found', 404) diff --git a/lib/api/version.rb b/lib/api/version.rb new file mode 100644 index 00000000000..9ba576bd828 --- /dev/null +++ b/lib/api/version.rb @@ -0,0 +1,12 @@ +module API + class Version < Grape::API + before { authenticate! } + + 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 } + end + end +end diff --git a/spec/requests/api/version_spec.rb b/spec/requests/api/version_spec.rb new file mode 100644 index 00000000000..54b69a0cae7 --- /dev/null +++ b/spec/requests/api/version_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe API::API, api: true do + include ApiHelpers + + describe 'GET /version' do + context 'when unauthenticated' do + it 'returns authentication error' do + get api('/version') + + expect(response).to have_http_status(401) + end + end + + context 'when authenticated' do + let(:user) { create(:user) } + + it 'returns the version information' do + get api('/version', user) + + expect(response).to have_http_status(200) + expect(json_response['version']).to eq(Gitlab::VERSION) + expect(json_response['revision']).to eq(Gitlab::REVISION) + end + end + end +end |