diff --git a/Makefile b/Makefile index 3aefb99..1f605ea 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ .PHONY: help lint test tidy clear-cache +VERSION=1.2.3 BINARY_DIR=./bin BINARY_NAME=noxdir @@ -17,7 +18,7 @@ tidy: ## Upgrade dependencies and format code go fmt ./... build: ## Produce a binary - go build -ldflags "-s -w" -o ${BINARY_DIR}/${BINARY_NAME} + go build -ldflags "-s -w -X main.version=${VERSION}" -o ${BINARY_DIR}/${BINARY_NAME} clear-cache: go clean -cache && go clean -testcache && go clean -fuzzcache && go clean -modcache \ No newline at end of file diff --git a/cmd/app.go b/cmd/app.go index b6d56fd..8b67739 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -25,6 +25,7 @@ var ( ErrUnknown = errors.New("unknown error") exclude []string + appVersion string root string sizeLimit string noEmptyDirs bool @@ -67,6 +68,8 @@ selected drive and presents the space consumption in a clear, user-friendly layo ) func init() { + appCmd.SetVersionTemplate("{{.Version}}\n") + appCmd.PersistentFlags().StringSliceVarP( &exclude, "exclude", @@ -220,11 +223,12 @@ Example: -v|--version (provide a flag) ) } -func Execute() { - if err := appCmd.Execute(); err != nil { - var cliErr *CLIError +func Execute(version string) { + appVersion = version + appCmd.Version = version - if errors.As(err, &cliErr) { + if err := appCmd.Execute(); err != nil { + if cliErr, ok := errors.AsType[*CLIError](err); ok { printError(cliErr.Error()) } else { printError(render.ReportError(err, debug.Stack())) @@ -270,14 +274,6 @@ func initConfig() (*config.Settings, error) { } func runApp(_ *cobra.Command, _ []string) error { - if versionFlag { - if _, err := os.Stdout.WriteString(render.Version + "\n"); err != nil { - return err - } - - return nil - } - var ( err error style *render.Style @@ -335,8 +331,9 @@ func initViewModel(s *config.Settings) (*render.ViewModel, error) { } vm := render.NewViewModel( + appVersion, nav, - render.NewDriveModel(nav), + render.NewDriveModel(appVersion, nav), render.NewDirModel(nav, dirModelFilters...), ) diff --git a/main.go b/main.go index ceae595..13f7cb9 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,8 @@ import ( "github.com/crumbyte/noxdir/cmd" ) +var version = "dev" + func main() { - cmd.Execute() + cmd.Execute(version) } diff --git a/render/drive_model.go b/render/drive_model.go index 7b42f22..2185144 100644 --- a/render/drive_model.go +++ b/render/drive_model.go @@ -24,12 +24,13 @@ type DriveModel struct { statusBar *StatusBar sortState SortState view tea.View + version string height int width int fullHelp bool } -func NewDriveModel(n *Navigation) *DriveModel { +func NewDriveModel(version string, n *Navigation) *DriveModel { pathRatio := DefaultColWidthRatio if runtime.GOOS == "darwin" { @@ -94,6 +95,7 @@ func NewDriveModel(n *Navigation) *DriveModel { drivesTable: buildTable(), statusBar: NewStatusBar(), usagePG: &style.CS().UsageProgressBar, + version: version, } } @@ -252,7 +254,7 @@ func (dm *DriveModel) drivesSummary() string { } barItems := []*BarItem{ - {Content: Version, BGColor: sbStyle.VersionBG}, + {Content: "v" + dm.version, BGColor: sbStyle.VersionBG}, {Content: "DRIVES", BGColor: sbStyle.Drives.ModeBG}, {Content: driveTitle, BGColor: sbStyle.BG, Width: -1}, } diff --git a/render/render.go b/render/render.go index c9bd9e2..fc1c9ae 100644 --- a/render/render.go +++ b/render/render.go @@ -14,11 +14,7 @@ import ( "charm.land/lipgloss/v2" ) -const ( - Version = "1.2.2" - - updateTickerInterval = time.Millisecond * 500 -) +const updateTickerInterval = time.Millisecond * 500 type ( UpdateDirState struct{} @@ -32,15 +28,22 @@ type ViewModel struct { driveModel *DriveModel dirModel *DirModel nav *Navigation + version string lastErr []error } -func NewViewModel(n *Navigation, driveModel *DriveModel, dirMode *DirModel) *ViewModel { +func NewViewModel( + version string, + n *Navigation, + driveModel *DriveModel, + dirMode *DirModel, +) *ViewModel { return &ViewModel{ lastErr: make([]error, 0), nav: n, driveModel: driveModel, dirModel: dirMode, + version: version, } } @@ -97,7 +100,7 @@ func (vm *ViewModel) View() tea.View { } v.AltScreen = true - v.WindowTitle = "NoxDir " + Version + v.WindowTitle = "NoxDir | v" + vm.version v.MouseMode = tea.MouseModeNone return v