Files
pack/cli/plan.go
T
Michael BiancoandGitHub 13ad6257d4 build: upgrade go version (#515)
* build: update go version

* build: lockfile upgrades

* refactor: use switch statements for conditionals

* style: fix blank identifier assignments as receivers

* fix: ignore deferred io and removal errors

* refactor: general code improvements and staticcheck fixes

* test: bump golangci-lint-action version

* build: add go package upgrade task

* build: go package bump

* build: add go mod check to mise check task

* build: upgrade go packages automatically when upgrading mise

* build: update go version in local frontend image
2026-03-16 20:26:16 -06:00

65 lines
1.5 KiB
Go

package cli
import (
"context"
"encoding/json"
"os"
"path/filepath"
"github.com/charmbracelet/log"
"github.com/urfave/cli/v3"
)
var PlanCommand = &cli.Command{
Name: "plan",
Aliases: []string{"p"},
Usage: "generate a build plan for a directory",
ArgsUsage: "DIRECTORY",
EnableShellCompletion: true,
Flags: append([]cli.Flag{
&cli.StringFlag{
Name: "out",
Aliases: []string{"o"},
Usage: "output file name",
},
}, commonPlanFlags()...),
Action: func(ctx context.Context, cmd *cli.Command) error {
buildResult, _, _, err := GenerateBuildResultForCommand(cmd)
if err != nil {
return cli.Exit(err, 1)
}
// Include $schema in the generated plan JSON for editor support
planMap, err := addSchemaToPlanMap(buildResult.Plan)
if err != nil {
return cli.Exit(err, 1)
}
serializedPlan, err := json.MarshalIndent(planMap, "", " ")
if err != nil {
return cli.Exit(err, 1)
}
buildResultString := serializedPlan
output := cmd.String("out")
if output == "" {
// Write to stdout if no output file specified
_, _ = os.Stdout.Write([]byte(buildResultString))
_, _ = os.Stdout.Write([]byte("\n"))
return nil
} else {
if err := os.MkdirAll(filepath.Dir(output), 0755); err != nil {
return cli.Exit(err, 1)
}
err = os.WriteFile(output, []byte(buildResultString), 0644)
if err != nil {
return cli.Exit(err, 1)
}
log.Infof("Plan written to %s", output)
}
return nil
},
}