diff --git a/api/projects/templates.go b/api/projects/templates.go
index e88ead3dd..886fd0b83 100644
--- a/api/projects/templates.go
+++ b/api/projects/templates.go
@@ -2,11 +2,11 @@ package projects
import (
"fmt"
- "github.com/semaphoreui/semaphore/util"
"net/http"
"github.com/semaphoreui/semaphore/api/helpers"
"github.com/semaphoreui/semaphore/db"
+ "github.com/semaphoreui/semaphore/util"
)
// TemplatesMiddleware ensures a template exists and loads it to the context
@@ -55,7 +55,9 @@ func GetTemplates(w http.ResponseWriter, r *http.Request) {
app := db.TemplateApp(r.URL.Query().Get("app"))
filter.App = &app
}
- templates, err := helpers.Store(r).GetTemplates(project.ID, filter, helpers.QueryParams(r.URL))
+
+ q := helpers.QueryParams(r.URL)
+ templates, err := helpers.Store(r).GetTemplates(project.ID, filter, q, false)
if err != nil {
helpers.WriteError(w, err)
diff --git a/api/projects/views.go b/api/projects/views.go
index 7f1a28cdf..0cdd3c9d6 100644
--- a/api/projects/views.go
+++ b/api/projects/views.go
@@ -33,7 +33,11 @@ func GetViewTemplates(w http.ResponseWriter, r *http.Request) {
project := helpers.GetFromContext(r, "project").(db.Project)
view := helpers.GetFromContext(r, "view").(db.View)
- templates, err := helpers.Store(r).GetTemplates(project.ID, db.TemplateFilter{ViewID: &view.ID}, helpers.QueryParams(r.URL))
+ templates, err := helpers.Store(r).GetTemplates(
+ project.ID,
+ db.TemplateFilter{ViewID: &view.ID},
+ helpers.QueryParams(r.URL),
+ false)
if err != nil {
helpers.WriteError(w, err)
diff --git a/db/Store.go b/db/Store.go
index 088ce972b..23952c520 100644
--- a/db/Store.go
+++ b/db/Store.go
@@ -266,7 +266,7 @@ type ProjectInviteRepository interface {
// TemplateManager handles template-related operations
type TemplateManager interface {
- GetTemplates(projectID int, filter TemplateFilter, params RetrieveQueryParams) ([]Template, error)
+ GetTemplates(projectID int, filter TemplateFilter, params RetrieveQueryParams, loadVaults bool) ([]Template, error)
GetTemplateRefs(projectID int, templateID int) (ObjectReferrers, error)
CreateTemplate(template Template) (Template, error)
UpdateTemplate(template Template) error
diff --git a/db/bolt/template.go b/db/bolt/template.go
index b07a96b75..057be7607 100644
--- a/db/bolt/template.go
+++ b/db/bolt/template.go
@@ -69,7 +69,7 @@ func (d *BoltDb) SetTemplateDescription(projectID int, templateID int, descripti
return err
}
-func (d *BoltDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.RetrieveQueryParams) (templates []db.Template, err error) {
+func (d *BoltDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.RetrieveQueryParams, loadVaults bool) (templates []db.Template, err error) {
var ftr = func(tpl any) bool {
template := tpl.(db.Template)
var res = true
diff --git a/db/sql/project.go b/db/sql/project.go
index 8dc0d46a8..a62608753 100644
--- a/db/sql/project.go
+++ b/db/sql/project.go
@@ -74,13 +74,6 @@ func (d *SqlDb) GetProject(projectID int) (project db.Project, err error) {
func (d *SqlDb) DeleteProject(projectID int) error {
- //tpls, err := d.GetTemplates(projectID, db.TemplateFilter{}, db.RetrieveQueryParams{})
- //
- //if err != nil {
- // return err
- //}
- // TODO: sort projects
-
tx, err := d.Sql().Begin()
if err != nil {
diff --git a/db/sql/task.go b/db/sql/task.go
index ce205791a..5a0a07ba2 100644
--- a/db/sql/task.go
+++ b/db/sql/task.go
@@ -231,6 +231,12 @@ func (d *SqlDb) CreateTaskOutput(output db.TaskOutput) (db.TaskOutput, error) {
}
func (d *SqlDb) getTasks(projectID int, templateID *int, taskIDs []int, params db.RetrieveQueryParams, tasks *[]db.TaskWithTpl) (err error) {
+
+ if taskIDs != nil && len(taskIDs) == 0 {
+ *tasks = []db.TaskWithTpl{}
+ return nil
+ }
+
fields := "task.*"
fields += ", tpl.playbook as tpl_playbook" +
", `user`.name as user_name" +
@@ -254,7 +260,7 @@ func (d *SqlDb) getTasks(projectID int, templateID *int, taskIDs []int, params d
q = q.Where("tpl.project_id=? AND task.template_id=?", projectID, templateID)
}
- if len(taskIDs) > 0 {
+ if taskIDs != nil {
q = q.Where(squirrel.Eq{"task.id": taskIDs})
}
diff --git a/db/sql/template.go b/db/sql/template.go
index d4babea82..3dae19f36 100644
--- a/db/sql/template.go
+++ b/db/sql/template.go
@@ -153,7 +153,7 @@ func (d *SqlDb) SetTemplateDescription(projectID int, templateID int, descriptio
return
}
-func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.RetrieveQueryParams) (templates []db.Template, err error) {
+func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.RetrieveQueryParams, loadVaults bool) (templates []db.Template, err error) {
pp, err := params.Validate(db.TemplateProps)
if err != nil {
@@ -234,6 +234,14 @@ func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.
OrderBy("pt.name " + order)
}
+ if params.Count > 0 {
+ q = q.Limit(uint64(params.Count))
+ }
+
+ if params.Offset > 0 {
+ q = q.Offset(uint64(params.Offset))
+ }
+
query, args, err := q.ToSql()
if err != nil {
@@ -257,6 +265,7 @@ func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.
}
var tasks []db.TaskWithTpl
+
err = d.getTasks(projectID, nil, taskIDs, db.RetrieveQueryParams{}, &tasks)
if err != nil {
@@ -269,10 +278,6 @@ func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.
if tpl.LastTaskID != nil {
for _, tsk := range tasks {
if tsk.ID == *tpl.LastTaskID {
- err = tsk.Fill(d)
- if err != nil {
- return
- }
template.LastTask = &tsk
break
}
@@ -287,9 +292,11 @@ func (d *SqlDb) GetTemplates(projectID int, filter db.TemplateFilter, params db.
return
}
- template.Vaults, err = d.GetTemplateVaults(projectID, template.ID)
- if err != nil {
- return
+ if loadVaults {
+ template.Vaults, err = d.GetTemplateVaults(projectID, template.ID)
+ if err != nil {
+ return
+ }
}
templates = append(templates, template)
diff --git a/services/project/backup.go b/services/project/backup.go
index 0672c63a3..476729e3e 100644
--- a/services/project/backup.go
+++ b/services/project/backup.go
@@ -125,7 +125,7 @@ func (b *BackupDB) makeUniqueNames() {
func (b *BackupDB) load(projectID int, store db.Store) (err error) {
- b.templates, err = store.GetTemplates(projectID, db.TemplateFilter{}, db.RetrieveQueryParams{})
+ b.templates, err = store.GetTemplates(projectID, db.TemplateFilter{}, db.RetrieveQueryParams{}, true)
if err != nil {
return
}
diff --git a/services/tasks/TaskRunner.go b/services/tasks/TaskRunner.go
index 257118c61..94f6ee1ad 100644
--- a/services/tasks/TaskRunner.go
+++ b/services/tasks/TaskRunner.go
@@ -235,7 +235,7 @@ func (t *TaskRunner) run() {
tpls, err := t.pool.store.GetTemplates(t.Task.ProjectID, db.TemplateFilter{
BuildTemplateID: &t.Task.TemplateID,
AutorunOnly: true,
- }, db.RetrieveQueryParams{})
+ }, db.RetrieveQueryParams{}, true)
if err != nil {
t.Log("Running app failed: " + err.Error())
diff --git a/web/src/views/project/Templates.vue b/web/src/views/project/Templates.vue
index 0bee13385..fd4e2016f 100644
--- a/web/src/views/project/Templates.vue
+++ b/web/src/views/project/Templates.vue
@@ -129,13 +129,12 @@
-->
-
-
-