-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrunall.go
88 lines (81 loc) · 2.83 KB
/
runall.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package cproject
import (
"fmt"
"net/http"
"github.com/pkg/errors"
"github.com/samber/lo"
"projectforge.dev/projectforge/app"
"projectforge.dev/projectforge/app/controller"
"projectforge.dev/projectforge/app/controller/cutil"
"projectforge.dev/projectforge/app/project"
"projectforge.dev/projectforge/app/project/action"
"projectforge.dev/projectforge/app/util"
"projectforge.dev/projectforge/views"
"projectforge.dev/projectforge/views/vaction"
"projectforge.dev/projectforge/views/vpage"
)
func RunAllActions(w http.ResponseWriter, r *http.Request) {
helpKey := "run.all"
actKey, _ := cutil.PathString(r, "act", false)
if actKey != "" {
helpKey += "." + actKey
}
controller.Act(helpKey, w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
actS, err := cutil.PathString(r, "act", false)
if err != nil {
return "", err
}
cfg := cutil.QueryArgsMap(r)
prjs := as.Services.Projects.Projects()
tags := util.StringSplitAndTrim(r.URL.Query().Get("tags"), ",")
if len(tags) == 0 {
prjs = prjs.WithoutTags("all-skip")
} else {
filtered := prjs.WithTags(tags...)
if len(filtered) == 0 && len(tags) == 1 {
key := tags[0]
if key[0] == '-' {
prjs = lo.Filter(prjs, func(x *project.Project, _ int) bool {
return x.Key != key[1:]
})
} else {
prjs = project.Projects{prjs.Get(key)}
}
} else {
prjs = filtered
}
}
if actS == "start" {
return runAllStart(w, r, as, ps)
}
actT := action.TypeFromString(actS)
if actT.Matches(action.TypeBuild) {
switch cfg.GetStringOpt("phase") {
case "":
ps.SetTitleAndData("Build All Projects", prjs)
page := &vaction.Results{T: actT, Cfg: cfg, Projects: prjs, Ctxs: nil, Tags: tags, IsBuild: true}
return controller.Render(w, r, as, page, ps, "projects", actT.Title)
case depsKey:
return runAllDeps(cfg, prjs, tags, w, r, as, ps)
case pkgsKey:
return runAllPkgs(cfg, prjs, w, r, as, ps)
case "lint":
return "", errors.New("can't run multiple instances of golangcilint")
case "full":
if cfg.GetStringOpt("hasloaded") != util.BoolTrue {
cutil.URLAddQuery(r.URL, "hasloaded", util.BoolTrue)
page := &vpage.Load{URL: r.URL.String(), Title: "Building all projects..."}
return controller.Render(w, r, as, page, ps, "projects", "Build")
}
}
}
results := action.ApplyAll(ps.Context, prjs, actT, cfg, as, ps.Logger)
ps.SetTitleAndData(fmt.Sprintf("[%s] All Projects", actT.Title), results)
page := &vaction.Results{T: actT, Cfg: cfg, Projects: prjs, Ctxs: results, Tags: tags}
return controller.Render(w, r, as, page, ps, "projects", actT.Title)
})
}
func runAllStart(w http.ResponseWriter, r *http.Request, as *app.State, ps *cutil.PageState) (string, error) {
ps.SetTitleAndData("Start All", "TODO")
return controller.Render(w, r, as, &views.Debug{}, ps, "projects", "Start")
}