mirror of
https://github.com/semaphoreui/semaphore.git
synced 2024-12-03 14:51:05 +01:00
feat(ui): create runner from web
This commit is contained in:
parent
611c0efbbe
commit
9d7afb339a
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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"`
|
||||
|
@ -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
|
||||
|
@ -19,9 +19,24 @@
|
||||
:disabled="formSaving"
|
||||
></v-text-field>
|
||||
|
||||
<v-text-field
|
||||
v-model="item.webhook"
|
||||
:label="$t('webhook')"
|
||||
required
|
||||
:disabled="formSaving"
|
||||
></v-text-field>
|
||||
|
||||
<v-text-field
|
||||
type="number"
|
||||
v-model.number="item.max_parallel_tasks"
|
||||
:label="$t('maxNumberOfParallelTasksOptional')"
|
||||
required
|
||||
:disabled="formSaving"
|
||||
></v-text-field>
|
||||
|
||||
<v-checkbox
|
||||
v-model="item.active"
|
||||
:label="$t('adminUser')"
|
||||
:label="$t('active')"
|
||||
v-if="isAdmin"
|
||||
></v-checkbox>
|
||||
</v-form>
|
||||
|
@ -61,6 +61,10 @@
|
||||
|
||||
<template v-slot:item.webhook="{ item }">{{ item.webhook || '—' }}</template>
|
||||
|
||||
<template v-slot:item.max_parallel_tasks="{ item }">
|
||||
{{ item.max_parallel_tasks || '∞' }}
|
||||
</template>
|
||||
|
||||
<template v-slot:item.actions="{ item }">
|
||||
<div style="white-space: nowrap">
|
||||
<v-btn
|
||||
@ -127,7 +131,7 @@ export default {
|
||||
value: 'webhook',
|
||||
},
|
||||
{
|
||||
text: this.$i18n.t('max_parallel_tasks'),
|
||||
text: this.$i18n.t('maxNumberOfParallelTasksOptional'),
|
||||
value: 'max_parallel_tasks',
|
||||
}, {
|
||||
text: this.$i18n.t('actions'),
|
||||
|
Loading…
Reference in New Issue
Block a user