Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions api/projects/templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 5 additions & 1 deletion api/projects/views.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion db/Store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion db/bolt/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 0 additions & 7 deletions db/sql/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
8 changes: 7 additions & 1 deletion db/sql/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -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" +
Expand All @@ -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})
}

Expand Down
23 changes: 15 additions & 8 deletions db/sql/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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
}
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion services/project/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
2 changes: 1 addition & 1 deletion services/tasks/TaskRunner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
7 changes: 1 addition & 6 deletions web/src/views/project/Templates.vue
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,12 @@
<v-divider style="margin-top: -1px;"/>

<v-data-table
hide-default-footer
class="mt-4 templates-table"
single-expand
show-expand
:headers="filteredHeaders"
:items="items"
:items-per-page="Number.MAX_VALUE"
:items-per-page="100"
Copy link
Preview

Copilot AI Jul 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Consider extracting the magic number 100 into a constant or prop to make the page size configurable and improve readability.

Copilot uses AI. Check for mistakes.

:expanded.sync="openedItems"
:style="{
opacity: viewItemsLoading ? 0.3 : 1,
Expand All @@ -149,10 +148,6 @@
{{ getAppIcon(item.app) }}
</v-icon>

<!-- <v-icon class="mr-3" small>-->
<!-- {{ TEMPLATE_TYPE_ICONS[item.type] }}-->
<!-- </v-icon>-->

<router-link
:to="viewId
? `/project/${projectId}/views/${viewId}/templates/${item.id}`
Expand Down
Loading