Files
dokku/plugins/builder-railpack/report.go
Jose Diaz-Gonzalez f9db9583a1 feat: port builder :report subcommands to golang
The bash :report implementations for the dockerfile, herokuish, lambda, nixpacks, pack, and railpack builders are replaced with a compiled golang binary that collects report keys in parallel and marshals json directly, avoiding the per-key subshell and jq forks that made the bash reports slow. The subcommands/report and root report trigger become symlinks to the compiled binary, while the non-report bash helpers each plugin still relies on are left in place.
2026-07-07 06:11:13 -04:00

67 lines
2.0 KiB
Go

package builderrailpack
import (
"github.com/dokku/dokku/plugins/common"
)
// ReportSingleApp is an internal function that displays the builder-railpack report for one or more apps
func ReportSingleApp(appName string, format string, infoFlag string) error {
if appName != "--global" {
if err := common.VerifyAppName(appName); err != nil {
return err
}
}
var flags map[string]common.ReportFunc
if appName == "--global" {
flags = map[string]common.ReportFunc{
"--builder-railpack-computed-railpackjson-path": reportComputedRailpackjsonPath,
"--builder-railpack-global-railpackjson-path": reportGlobalRailpackjsonPath,
}
} else {
flags = map[string]common.ReportFunc{
"--builder-railpack-computed-railpackjson-path": reportComputedRailpackjsonPath,
"--builder-railpack-global-railpackjson-path": reportGlobalRailpackjsonPath,
"--builder-railpack-railpackjson-path": reportRailpackjsonPath,
}
}
flagKeys := []string{}
for flagKey := range flags {
flagKeys = append(flagKeys, flagKey)
}
infoFlags := common.CollectReport(appName, infoFlag, flags)
return common.ReportSingleApp(common.ReportSingleAppInput{
ReportType: "builder-railpack",
AppName: appName,
InfoFlag: infoFlag,
InfoFlags: infoFlags,
InfoFlagKeys: flagKeys,
Format: format,
TrimPrefix: true,
UppercaseFirstCharacter: true,
EmitLegacyPrefix: false,
})
}
func reportRailpackjsonPath(appName string) string {
return common.PropertyGet("builder-railpack", appName, "railpackjson-path")
}
func reportGlobalRailpackjsonPath(appName string) string {
return common.PropertyGet("builder-railpack", "--global", "railpackjson-path")
}
func reportComputedRailpackjsonPath(appName string) string {
value := reportRailpackjsonPath(appName)
if value == "" {
value = reportGlobalRailpackjsonPath(appName)
}
if value == "" {
value = "railpack.json"
}
return value
}