diff options
-rw-r--r-- | doc/api.md | 22 | ||||
-rw-r--r-- | lib/api/runners.rb | 19 | ||||
-rw-r--r-- | spec/requests/runners_spec.rb | 30 |
3 files changed, 70 insertions, 1 deletions
@@ -172,6 +172,28 @@ Parameters: ## Runners +### Retrieve all runners + +Used to get information about all runners registered on the Gitlab CI +instance. + + GET /runners + +Returns: + +```json +[ + { + "id" : 85, + "token" : "12b68e90394084703135" + }, + { + "id" : 86, + "token" : "76bf894e969364709864" + }, +] +``` + ### Register a new runner Used to make Gitlab CI aware of available runners. diff --git a/lib/api/runners.rb b/lib/api/runners.rb index 8bf2370..2df6d6a 100644 --- a/lib/api/runners.rb +++ b/lib/api/runners.rb @@ -2,10 +2,26 @@ module API # Runners API class Runners < Grape::API resource :runners do - before { authenticate_runners! } + # Get list of all available runners + # + # Example Request: + # GET /runners + get do + authenticate! + runners = Runner.all + + if runners.present? + present runners, with: Entities::Runner + else + not_found! + end + end # Register a new runner # + # Note: This is an "internal" API called when setting up + # runners, so it is authenticated differently. + # # Parameters: # token (required) - The unique token of runner # public_key (required) - Deploy key used to get projects @@ -13,6 +29,7 @@ module API # Example Request: # POST /runners/register post "register" do + authenticate_runners! required_attributes! [:token, :public_key] runner = Runner.create(public_key: params[:public_key]) diff --git a/spec/requests/runners_spec.rb b/spec/requests/runners_spec.rb index a8d1f4f..ee9c99e 100644 --- a/spec/requests/runners_spec.rb +++ b/spec/requests/runners_spec.rb @@ -3,6 +3,36 @@ require 'spec_helper' describe API::API do include ApiHelpers + describe "GET /runners" do + let(:gitlab_url) { GitlabCi.config.allowed_gitlab_urls.first } + let(:auth_opts) { + { + :email => "test@test.com", + :password => "123456" + } + } + + let(:private_token) { Network.new.authenticate(gitlab_url, auth_opts)["private_token"] } + let(:options) { + { + :private_token => private_token, + :url => gitlab_url + } + } + + before do + 5.times { FactoryGirl.create(:runner) } + end + + it "should retrieve a list of all runners" do + get api("/runners"), options + response.status.should == 200 + json_response.count.should == 5 + json_response.last.should have_key("id") + json_response.last.should have_key("token") + end + end + describe "POST /runners/register" do it "should create a runner if token provided" do post api("/runners/register"), token: GitlabCi::RunnersToken, public_key: 'sha-rsa ....' |