diff --git a/api/router.go b/api/router.go
index d72125c7..bd3fa586 100644
--- a/api/router.go
+++ b/api/router.go
@@ -80,7 +80,6 @@ func Route() *mux.Router {
publicAPIRouter := r.PathPrefix(webPath + "api").Subrouter()
publicAPIRouter.Use(StoreMiddleware, JSONMiddleware)
- publicAPIRouter.HandleFunc("/runners", runners.RegisterRunner).Methods("POST")
publicAPIRouter.HandleFunc("/auth/login", login).Methods("GET", "POST")
publicAPIRouter.HandleFunc("/auth/logout", logout).Methods("POST")
publicAPIRouter.HandleFunc("/auth/oidc/{provider}/login", oidcLogin).Methods("GET")
@@ -88,7 +87,11 @@ func Route() *mux.Router {
publicAPIRouter.HandleFunc("/auth/oidc/{provider}/redirect/{redirect_path:.*}", oidcRedirect).Methods("GET")
runnersAPI := r.PathPrefix(webPath + "internal").Subrouter()
- runnersAPI.Use(StoreMiddleware, JSONMiddleware, runners.RunnerMiddleware)
+
+ runnersAPI.Use(StoreMiddleware, JSONMiddleware)
+ runnersAPI.HandleFunc("/runners", runners.RegisterRunner).Methods("POST")
+
+ runnersAPI.Use(runners.RunnerMiddleware)
runnersAPI.Path("/runners/{runner_id}").HandlerFunc(runners.GetRunner).Methods("GET", "HEAD")
runnersAPI.Path("/runners/{runner_id}").HandlerFunc(runners.UpdateRunner).Methods("PUT")
runnersAPI.Path("/runners/{runner_id}").HandlerFunc(runners.UnregisterRunner).Methods("DELETE")
diff --git a/api/runners.go b/api/runners.go
index 3f930e16..30fb0268 100644
--- a/api/runners.go
+++ b/api/runners.go
@@ -33,23 +33,19 @@ func getGlobalRunners(w http.ResponseWriter, r *http.Request) {
helpers.WriteJSON(w, http.StatusOK, result)
}
+type runnerWithToken struct {
+ db.Runner
+ Token string `json:"token"`
+}
+
func addGlobalRunner(w http.ResponseWriter, r *http.Request) {
var runner db.Runner
if !helpers.Bind(w, r, &runner) {
return
}
- editor := context.Get(r, "user").(*db.User)
- if !editor.Admin {
- log.Warn(editor.Username + " is not permitted to create users")
- w.WriteHeader(http.StatusUnauthorized)
- return
- }
-
- newRunner, err := helpers.Store(r).CreateRunner(db.Runner{
- Webhook: runner.Webhook,
- MaxParallelTasks: runner.MaxParallelTasks,
- })
+ runner.ProjectID = nil
+ newRunner, err := helpers.Store(r).CreateRunner(runner)
if err != nil {
log.Warn("Runner is not created: " + err.Error())
@@ -57,7 +53,10 @@ func addGlobalRunner(w http.ResponseWriter, r *http.Request) {
return
}
- helpers.WriteJSON(w, http.StatusCreated, newRunner)
+ helpers.WriteJSON(w, http.StatusCreated, runnerWithToken{
+ Runner: newRunner,
+ Token: newRunner.Token,
+ })
}
func globalRunnerMiddleware(next http.Handler) http.Handler {
@@ -94,13 +93,19 @@ func getGlobalRunner(w http.ResponseWriter, r *http.Request) {
}
func updateGlobalRunner(w http.ResponseWriter, r *http.Request) {
- runner := context.Get(r, "runner").(*db.Runner)
+ oldRunner := context.Get(r, "runner").(*db.Runner)
+
+ var runner db.Runner
+ if !helpers.Bind(w, r, &runner) {
+ return
+ }
store := helpers.Store(r)
+ runner.ID = oldRunner.ID
runner.ProjectID = nil
- err := store.UpdateRunner(*runner)
+ err := store.UpdateRunner(runner)
if err != nil {
helpers.WriteErrorStatus(w, err.Error(), http.StatusBadRequest)
diff --git a/db/Runner.go b/db/Runner.go
index efc48476..5476cfaa 100644
--- a/db/Runner.go
+++ b/db/Runner.go
@@ -8,7 +8,7 @@ type RunnerState string
//)
type Runner struct {
- ID int `db:"id" json:"-"`
+ ID int `db:"id" json:"id"`
Token string `db:"token" json:"-"`
ProjectID *int `db:"project_id" json:"project_id"`
//State RunnerState `db:"state" json:"state"`
diff --git a/db/sql/runner.go b/db/sql/runner.go
index 414a8902..b097f7bd 100644
--- a/db/sql/runner.go
+++ b/db/sql/runner.go
@@ -42,7 +42,9 @@ func (d *SqlDb) DeleteGlobalRunner(runnerID int) (err error) {
func (d *SqlDb) UpdateRunner(runner db.Runner) (err error) {
_, err = d.exec(
- "update runner set webhook=?, max_parallel_tasks=? where id=?",
+ "update runner set name=?, active=?, webhook=?, max_parallel_tasks=? where id=?",
+ runner.Name,
+ runner.Active,
runner.Webhook,
runner.MaxParallelTasks,
runner.ID)
@@ -55,11 +57,13 @@ func (d *SqlDb) CreateRunner(runner db.Runner) (newRunner db.Runner, err error)
insertID, err := d.insert(
"id",
- "insert into runner (project_id, token, webhook, max_parallel_tasks) values (?, ?, ?, ?)",
+ "insert into runner (project_id, token, webhook, max_parallel_tasks, name, active) values (?, ?, ?, ?, ?, ?)",
runner.ProjectID,
token,
runner.Webhook,
- runner.MaxParallelTasks)
+ runner.MaxParallelTasks,
+ runner.Name,
+ runner.Active)
if err != nil {
return
diff --git a/web/src/components/RunnerForm.vue b/web/src/components/RunnerForm.vue
index ab9ae9b0..f62bf31f 100644
--- a/web/src/components/RunnerForm.vue
+++ b/web/src/components/RunnerForm.vue
@@ -19,9 +19,24 @@
:disabled="formSaving"
>
+
+
+
+
diff --git a/web/src/views/Runners.vue b/web/src/views/Runners.vue
index 5d82bf85..ecf0d0d5 100644
--- a/web/src/views/Runners.vue
+++ b/web/src/views/Runners.vue
@@ -61,6 +61,10 @@
{{ item.webhook || '—' }}
+
+ {{ item.max_parallel_tasks || '∞' }}
+
+