Skip to content
Draft
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
102 changes: 102 additions & 0 deletions packages/browseros/tools/bros/cmd/build.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package cmd

import (
nativebuild "bros/internal/native/build"

"github.com/spf13/cobra"
)

type buildOptions struct {
Config string
Modules string
List bool
Setup bool
Prep bool
Build bool
Sign bool
Package bool
Upload bool
Arch string
BuildType string
ChromiumSrc string
}

var (
buildRootOpts buildOptions
buildRunOpts buildOptions
)

var buildCmd = &cobra.Command{
Use: "build",
Short: "Build BrowserOS browser",
Long: "Build and patch-development commands for BrowserOS.",
RunE: func(cmd *cobra.Command, args []string) error {
return runBuildCommand(buildRootOpts)
},
}

var buildRunCmd = &cobra.Command{
Use: "run",
Short: "Run build pipeline",
RunE: func(cmd *cobra.Command, args []string) error {
return runBuildCommand(buildRunOpts)
},
}

var buildModulesCmd = &cobra.Command{
Use: "modules",
Short: "Module inspection commands",
Run: func(cmd *cobra.Command, args []string) {
_ = cmd.Help()
},
}

var buildModulesListCmd = &cobra.Command{
Use: "list",
Short: "List available build modules",
RunE: func(cmd *cobra.Command, args []string) error {
nativebuild.PrintModuleList()
return nil
},
}

func init() {
addBuildFlags(buildCmd, &buildRootOpts)
addBuildFlags(buildRunCmd, &buildRunOpts)

buildModulesCmd.AddCommand(buildModulesListCmd)
buildCmd.AddCommand(buildRunCmd, buildModulesCmd, newDevSurfaceCommand("patch", "Patch management commands"))
rootCmd.AddCommand(buildCmd)
}

func addBuildFlags(cmd *cobra.Command, opts *buildOptions) {
cmd.Flags().StringVarP(&opts.Config, "config", "c", "", "load configuration from YAML file")
cmd.Flags().StringVarP(&opts.Modules, "modules", "m", "", "comma-separated list of modules to run")
cmd.Flags().BoolVarP(&opts.List, "list", "l", false, "list all available modules and exit")
cmd.Flags().BoolVar(&opts.Setup, "setup", false, "run setup phase")
cmd.Flags().BoolVar(&opts.Prep, "prep", false, "run prep phase")
cmd.Flags().BoolVar(&opts.Build, "build", false, "run build phase")
cmd.Flags().BoolVar(&opts.Sign, "sign", false, "run sign phase")
cmd.Flags().BoolVar(&opts.Package, "package", false, "run package phase")
cmd.Flags().BoolVar(&opts.Upload, "upload", false, "run upload phase")
cmd.Flags().StringVarP(&opts.Arch, "arch", "a", "", "target architecture")
cmd.Flags().StringVarP(&opts.BuildType, "build-type", "t", "", "build type (debug|release)")
cmd.Flags().StringVarP(&opts.ChromiumSrc, "chromium-src", "S", "", "path to Chromium source directory")
}

func runBuildCommand(opts buildOptions) error {
return nativebuild.Run(nativebuild.Options{
ConfigPath: opts.Config,
Modules: opts.Modules,
ListModules: opts.List,
Setup: opts.Setup,
Prep: opts.Prep,
Build: opts.Build,
Sign: opts.Sign,
Package: opts.Package,
Upload: opts.Upload,
Arch: opts.Arch,
BuildType: opts.BuildType,
ChromiumSrc: opts.ChromiumSrc,
})
}
129 changes: 129 additions & 0 deletions packages/browseros/tools/bros/cmd/dev.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package cmd

import (
nativedev "bros/internal/native/dev"

"github.com/spf13/cobra"
)

type devOptions struct {
ChromiumSrc string
Verbose bool
Quiet bool
}

func init() {
rootCmd.AddCommand(newDevSurfaceCommand("dev", "Patch development commands"))
}

func newDevSurfaceCommand(use string, short string) *cobra.Command {
opts := &devOptions{}

devCmd := &cobra.Command{
Use: use,
Short: short,
}

devCmd.PersistentFlags().StringVarP(&opts.ChromiumSrc, "chromium-src", "S", "", "path to Chromium source directory")
devCmd.PersistentFlags().BoolVarP(&opts.Verbose, "verbose", "v", false, "enable verbose output")
devCmd.PersistentFlags().BoolVarP(&opts.Quiet, "quiet", "q", false, "suppress non-essential output")

statusCmd := &cobra.Command{
Use: "status",
Short: "Show patch dev status",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return runDevCommand(opts, []string{"status"}, nil)
},
}

annotateCmd := &cobra.Command{
Use: "annotate [feature_name]",
Short: "Create git commits organized by features",
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return runDevCommand(opts, []string{"annotate"}, args)
},
}

featureCmd := &cobra.Command{
Use: "feature",
Short: "Feature management commands",
Run: func(cmd *cobra.Command, args []string) {
_ = cmd.Help()
},
}

featureListCmd := &cobra.Command{
Use: "list",
Short: "List all defined features",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return runDevCommand(opts, []string{"feature", "list"}, nil)
},
}

featureShowCmd := &cobra.Command{
Use: "show <feature_name>",
Short: "Show details for a feature",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return runDevCommand(opts, []string{"feature", "show"}, args)
},
}

featureClassifyCmd := &cobra.Command{
Use: "classify",
Short: "Classify unassigned patch files into features",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return runDevCommand(opts, []string{"feature", "classify"}, nil)
},
}

var featureName string
var featureCommit string
var featureDescription string
featureAddUpdateCmd := &cobra.Command{
Use: "add-update",
Short: "Add or update a feature using commit files",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
devArgs := []string{
"--name", featureName,
"--commit", featureCommit,
"--description", featureDescription,
}
return runDevCommand(opts, []string{"feature", "add-update"}, devArgs)
},
}
featureAddUpdateCmd.Flags().StringVarP(&featureName, "name", "n", "", "feature name (lowercase kebab-case)")
featureAddUpdateCmd.Flags().StringVarP(&featureCommit, "commit", "c", "", "git commit reference")
featureAddUpdateCmd.Flags().StringVarP(&featureDescription, "description", "d", "", "feature description with prefix (feat:, fix:, build:, chore:, series:)")
_ = featureAddUpdateCmd.MarkFlagRequired("name")
_ = featureAddUpdateCmd.MarkFlagRequired("commit")
_ = featureAddUpdateCmd.MarkFlagRequired("description")

featureCmd.AddCommand(featureListCmd, featureShowCmd, featureAddUpdateCmd, featureClassifyCmd)
devCmd.AddCommand(statusCmd, annotateCmd, featureCmd)

return devCmd
}

func runDevCommand(opts *devOptions, trail []string, passthrough []string) error {
base := []string{}

if opts.ChromiumSrc != "" {
base = append(base, "--chromium-src", opts.ChromiumSrc)
}
if opts.Verbose {
base = append(base, "--verbose")
}
if opts.Quiet {
base = append(base, "--quiet")
}

base = append(base, trail...)
base = append(base, passthrough...)
return nativedev.Run(base)
}
Loading