aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/runsummary/format_json.go
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/internal/runsummary/format_json.go
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'cli/internal/runsummary/format_json.go')
-rw-r--r--cli/internal/runsummary/format_json.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/cli/internal/runsummary/format_json.go b/cli/internal/runsummary/format_json.go
new file mode 100644
index 0000000..76a0a40
--- /dev/null
+++ b/cli/internal/runsummary/format_json.go
@@ -0,0 +1,66 @@
+package runsummary
+
+import (
+ "encoding/json"
+
+ "github.com/pkg/errors"
+ "github.com/segmentio/ksuid"
+ "github.com/vercel/turbo/cli/internal/util"
+)
+
+// FormatJSON returns a json string representing a RunSummary
+func (rsm *Meta) FormatJSON() ([]byte, error) {
+ rsm.normalize() // normalize data
+
+ var bytes []byte
+ var err error
+
+ if rsm.singlePackage {
+ bytes, err = json.MarshalIndent(nonMonorepoRunSummary(*rsm.RunSummary), "", " ")
+ } else {
+ bytes, err = json.MarshalIndent(rsm.RunSummary, "", " ")
+ }
+
+ if err != nil {
+ return nil, errors.Wrap(err, "failed to render JSON")
+ }
+ return bytes, nil
+}
+
+func (rsm *Meta) normalize() {
+ for _, t := range rsm.RunSummary.Tasks {
+ t.EnvVars.Global = rsm.RunSummary.GlobalHashSummary.envVars
+ t.EnvVars.GlobalPassthrough = rsm.RunSummary.GlobalHashSummary.passthroughEnvVars
+ }
+
+ // Remove execution summary for dry runs
+ if rsm.runType == runTypeDryJSON {
+ rsm.RunSummary.ExecutionSummary = nil
+ }
+
+ // For single packages, we don't need the Packages
+ // and each task summary needs some cleaning.
+ if rsm.singlePackage {
+ rsm.RunSummary.Packages = []string{}
+
+ for _, task := range rsm.RunSummary.Tasks {
+ task.cleanForSinglePackage()
+ }
+ }
+}
+
+// nonMonorepoRunSummary is an exact copy of RunSummary, but the JSON tags are structured
+// for rendering a single-package run of turbo. Notably, we want to always omit packages
+// since there is no concept of packages in a single-workspace repo.
+// This struct exists solely for the purpose of serializing to JSON and should not be
+// used anywhere else.
+type nonMonorepoRunSummary struct {
+ ID ksuid.KSUID `json:"id"`
+ Version string `json:"version"`
+ TurboVersion string `json:"turboVersion"`
+ GlobalHashSummary *GlobalHashSummary `json:"globalCacheInputs"`
+ Packages []string `json:"-"`
+ EnvMode util.EnvMode `json:"envMode"`
+ ExecutionSummary *executionSummary `json:"execution,omitempty"`
+ Tasks []*TaskSummary `json:"tasks"`
+}