summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api.md22
-rw-r--r--lib/api/runners.rb19
-rw-r--r--spec/requests/runners_spec.rb30
3 files changed, 70 insertions, 1 deletions
diff --git a/doc/api.md b/doc/api.md
index 1472918..0e0eed8 100644
--- a/doc/api.md
+++ b/doc/api.md
@@ -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 ....'