Skip to content

Commit 10acbfe

Browse files
authored
chore: remove progress bar as it brings so many problems with it (#42)
* feat: initial testing for system and filelock + adaptations * feat: enable both system modules for imageOutdated and updateCheck + move drivers to their own modules * feat(testing): add basic tests for most modules * chore: remove progress bar and dependencies * chore: explicitly log to json on service * chore(spec): change requires to recommends on uupd spec
1 parent 6fd108a commit 10acbfe

30 files changed

+731
-586
lines changed

cmd/imageOutdated.go

+16-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,27 @@ import (
44
"log/slog"
55

66
"github.com/spf13/cobra"
7-
"github.com/ublue-os/uupd/drv"
7+
"github.com/ublue-os/uupd/drv/generic"
8+
"github.com/ublue-os/uupd/drv/system"
89
)
910

1011
func ImageOutdated(cmd *cobra.Command, args []string) {
11-
systemUpdater, err := drv.SystemUpdater{}.New(drv.UpdaterInitConfiguration{})
12+
initConfiguration := generic.UpdaterInitConfiguration{}.New()
13+
initConfiguration.Ci = false
14+
initConfiguration.DryRun = false
15+
initConfiguration.Verbose = false
16+
17+
mainSystemDriver, _, _, err := system.InitializeSystemDriver(*initConfiguration)
1218
if err != nil {
13-
slog.Error("Failed getting system driver", slog.Any("error", err))
19+
slog.Error("Failed")
1420
return
1521
}
1622

17-
println(systemUpdater.Outdated)
23+
systemOutdated, err := mainSystemDriver.Outdated()
24+
25+
if err != nil {
26+
slog.Error("Failed checking if system is out of date")
27+
}
28+
29+
println(systemOutdated)
1830
}

cmd/root.go

-17
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@ import (
99
"path"
1010
"path/filepath"
1111

12-
"github.com/jedib0t/go-pretty/v6/text"
1312
"github.com/spf13/cobra"
1413
appLogging "github.com/ublue-os/uupd/pkg/logging"
15-
"golang.org/x/term"
1614
)
1715

1816
func assertRoot(cmd *cobra.Command, args []string) {
@@ -118,19 +116,4 @@ func init() {
118116
rootCmd.PersistentFlags().StringVar(&fLogFile, "log-file", "-", "File where user-facing logs will be written to")
119117
rootCmd.PersistentFlags().StringVar(&fLogLevel, "log-level", "info", "Log level for user-facing logs")
120118
rootCmd.PersistentFlags().BoolVar(&fNoLogging, "quiet", false, "Make logs quiet")
121-
122-
interactiveProgress := true
123-
if fLogFile != "-" {
124-
interactiveProgress = false
125-
}
126-
isTerminal := term.IsTerminal(int(os.Stdout.Fd()))
127-
if !isTerminal {
128-
interactiveProgress = false
129-
}
130-
if !text.ANSICodesSupported {
131-
interactiveProgress = false
132-
text.DisableColors()
133-
}
134-
135-
rootCmd.Flags().BoolP("no-progress", "p", !interactiveProgress, "Do not show progress bars")
136119
}

cmd/update.go

+36-78
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,35 @@ import (
55
"log/slog"
66
"os"
77

8-
"github.com/jedib0t/go-pretty/v6/progress"
98
"github.com/spf13/cobra"
109
"github.com/ublue-os/uupd/checks"
11-
"github.com/ublue-os/uupd/drv"
10+
"github.com/ublue-os/uupd/drv/brew"
11+
"github.com/ublue-os/uupd/drv/distrobox"
12+
"github.com/ublue-os/uupd/drv/flatpak"
13+
drv "github.com/ublue-os/uupd/drv/generic"
14+
"github.com/ublue-os/uupd/drv/system"
15+
1216
"github.com/ublue-os/uupd/pkg/filelock"
1317
"github.com/ublue-os/uupd/pkg/percent"
1418
"github.com/ublue-os/uupd/pkg/session"
1519
)
1620

1721
func Update(cmd *cobra.Command, args []string) {
18-
lock, err := filelock.AcquireLock()
22+
lockfile, err := filelock.OpenLockfile(filelock.GetDefaultLockfile())
1923
if err != nil {
20-
slog.Error(fmt.Sprintf("%v, is uupd already running?", err))
24+
slog.Error("Failed creating and opening lockfile. Is uupd already running?", slog.Any("error", err))
2125
return
2226
}
23-
defer func() {
24-
err := filelock.ReleaseLock(lock)
27+
defer func(lockfile *os.File) {
28+
err := filelock.ReleaseLock(lockfile)
2529
if err != nil {
26-
slog.Error("Failed releasing lock")
30+
slog.Error("Failed releasing lock", slog.Any("error", err))
2731
}
28-
}()
32+
}(lockfile)
33+
if err := filelock.AcquireLock(lockfile, filelock.TimeoutConfig{Tries: 5}); err != nil {
34+
slog.Error(fmt.Sprintf("%v, is uupd already running?", err))
35+
return
36+
}
2937

3038
hwCheck, err := cmd.Flags().GetBool("hw-check")
3139
if err != nil {
@@ -64,86 +72,40 @@ func Update(cmd *cobra.Command, args []string) {
6472
initConfiguration.DryRun = dryRun
6573
initConfiguration.Verbose = verboseRun
6674

67-
brewUpdater, err := drv.BrewUpdater{}.New(*initConfiguration)
75+
brewUpdater, err := brew.BrewUpdater{}.New(*initConfiguration)
6876
brewUpdater.Config.Enabled = err == nil
6977

70-
flatpakUpdater, err := drv.FlatpakUpdater{}.New(*initConfiguration)
78+
flatpakUpdater, err := flatpak.FlatpakUpdater{}.New(*initConfiguration)
7179
flatpakUpdater.Config.Enabled = err == nil
7280
flatpakUpdater.SetUsers(users)
7381

74-
distroboxUpdater, err := drv.DistroboxUpdater{}.New(*initConfiguration)
82+
distroboxUpdater, err := distrobox.DistroboxUpdater{}.New(*initConfiguration)
7583
distroboxUpdater.Config.Enabled = err == nil
7684
distroboxUpdater.SetUsers(users)
7785

78-
var enableUpd bool = true
79-
80-
rpmOstreeUpdater, err := drv.RpmOstreeUpdater{}.New(*initConfiguration)
81-
if err != nil {
82-
enableUpd = false
83-
}
84-
85-
systemUpdater, err := drv.SystemUpdater{}.New(*initConfiguration)
86-
if err != nil {
87-
enableUpd = false
88-
}
89-
90-
isBootc, err := drv.BootcCompatible(systemUpdater.BinaryPath)
91-
if err != nil {
92-
isBootc = false
93-
}
94-
95-
if !isBootc {
96-
slog.Debug("Using rpm-ostree fallback as system driver")
97-
}
98-
99-
systemUpdater.Config.Enabled = isBootc && enableUpd
100-
rpmOstreeUpdater.Config.Enabled = !isBootc && enableUpd
86+
mainSystemDriver, mainSystemDriverConfig, _, _ := system.InitializeSystemDriver(*initConfiguration)
10187

102-
// The system driver to be applied needs to have the correct "enabled" value since it will NOT update from here onwards.
103-
var mainSystemDriver drv.SystemUpdateDriver = &systemUpdater
104-
if !isBootc {
105-
mainSystemDriver = &rpmOstreeUpdater
106-
}
107-
108-
enableUpd, err = mainSystemDriver.Check()
88+
enableUpd, err := mainSystemDriver.Check()
10989
if err != nil {
11090
slog.Error("Failed checking for updates")
11191
}
92+
mainSystemDriverConfig.Enabled = mainSystemDriverConfig.Enabled && enableUpd
11293

113-
slog.Debug("System Updater module status", slog.Bool("enabled", enableUpd))
94+
slog.Debug("System Updater module status", slog.Bool("enabled", mainSystemDriverConfig.Enabled))
11495

11596
totalSteps := brewUpdater.Steps() + flatpakUpdater.Steps() + distroboxUpdater.Steps()
116-
if enableUpd {
97+
if mainSystemDriverConfig.Enabled {
11798
totalSteps += mainSystemDriver.Steps()
11899
}
119-
pw := percent.NewProgressWriter()
120-
pw.SetNumTrackersExpected(1)
121-
pw.SetAutoStop(false)
122100

123-
progressEnabled, err := cmd.Flags().GetBool("no-progress")
124-
if err != nil {
125-
slog.Error("Failed to get no-progress flag", "error", err)
126-
return
127-
}
128-
// Move this to its actual boolean value (~no-progress)
129-
progressEnabled = !progressEnabled
130-
131-
if progressEnabled {
132-
go pw.Render()
133-
percent.ResetOscProgress()
134-
}
101+
// FIXME: check if is interactive
102+
percent.ResetOscProgress()
135103

136104
// -1 because 0 index
137-
tracker := percent.NewIncrementTracker(&progress.Tracker{Message: "Updating", Units: progress.UnitsDefault, Total: int64(totalSteps - 1)}, totalSteps-1)
138-
pw.AppendTracker(tracker.Tracker)
105+
tracker := &percent.Incrementer{MaxIncrements: totalSteps - 1}
139106

140-
var trackerConfig = &drv.TrackerConfiguration{
141-
Tracker: tracker,
142-
Writer: &pw,
143-
Progress: progressEnabled,
144-
}
145-
flatpakUpdater.Tracker = trackerConfig
146-
distroboxUpdater.Tracker = trackerConfig
107+
flatpakUpdater.Tracker = tracker
108+
distroboxUpdater.Tracker = tracker
147109

148110
var outputs = []drv.CommandOutput{}
149111

@@ -155,7 +117,7 @@ func Update(cmd *cobra.Command, args []string) {
155117

156118
if systemOutdated {
157119
const OUTDATED_WARNING = "There hasn't been an update in over a month. Consider rebooting or running updates manually"
158-
err := session.Notify("System Warning", OUTDATED_WARNING)
120+
err := session.Notify(users, "System Warning", OUTDATED_WARNING)
159121
if err != nil {
160122
slog.Error("Failed showing warning notification")
161123
}
@@ -165,9 +127,9 @@ func Update(cmd *cobra.Command, args []string) {
165127
// This section is ugly but we cant really do much about it.
166128
// Using interfaces doesn't preserve the "Config" struct state and I dont know any other way to make this work without cursed workarounds.
167129

168-
if enableUpd {
169-
slog.Debug(fmt.Sprintf("%s module", systemUpdater.Config.Title), slog.String("module_name", systemUpdater.Config.Title), slog.Any("module_configuration", systemUpdater.Config))
170-
percent.ChangeTrackerMessageFancy(pw, tracker, progressEnabled, percent.TrackerMessage{Title: systemUpdater.Config.Title, Description: systemUpdater.Config.Description})
130+
if mainSystemDriverConfig.Enabled {
131+
slog.Debug(fmt.Sprintf("%s module", mainSystemDriverConfig.Title), slog.String("module_name", mainSystemDriverConfig.Title), slog.Any("module_configuration", mainSystemDriverConfig))
132+
percent.ReportStatusChange(tracker, percent.TrackerMessage{Title: mainSystemDriverConfig.Title, Description: mainSystemDriverConfig.Description})
171133
var out *[]drv.CommandOutput
172134
out, err = mainSystemDriver.Update()
173135
outputs = append(outputs, *out...)
@@ -176,7 +138,7 @@ func Update(cmd *cobra.Command, args []string) {
176138

177139
if brewUpdater.Config.Enabled {
178140
slog.Debug(fmt.Sprintf("%s module", brewUpdater.Config.Title), slog.String("module_name", brewUpdater.Config.Title), slog.Any("module_configuration", brewUpdater.Config))
179-
percent.ChangeTrackerMessageFancy(pw, tracker, progressEnabled, percent.TrackerMessage{Title: brewUpdater.Config.Title, Description: brewUpdater.Config.Description})
141+
percent.ReportStatusChange(tracker, percent.TrackerMessage{Title: brewUpdater.Config.Title, Description: brewUpdater.Config.Description})
180142
var out *[]drv.CommandOutput
181143
out, err = brewUpdater.Update()
182144
outputs = append(outputs, *out...)
@@ -185,7 +147,6 @@ func Update(cmd *cobra.Command, args []string) {
185147

186148
if flatpakUpdater.Config.Enabled {
187149
slog.Debug(fmt.Sprintf("%s module", flatpakUpdater.Config.Title), slog.String("module_name", flatpakUpdater.Config.Title), slog.Any("module_configuration", flatpakUpdater.Config))
188-
percent.ChangeTrackerMessageFancy(pw, tracker, progressEnabled, percent.TrackerMessage{Title: flatpakUpdater.Config.Title, Description: flatpakUpdater.Config.Description})
189150
var out *[]drv.CommandOutput
190151
out, err = flatpakUpdater.Update()
191152
outputs = append(outputs, *out...)
@@ -194,17 +155,14 @@ func Update(cmd *cobra.Command, args []string) {
194155

195156
if distroboxUpdater.Config.Enabled {
196157
slog.Debug(fmt.Sprintf("%s module", distroboxUpdater.Config.Title), slog.String("module_name", distroboxUpdater.Config.Title), slog.Any("module_configuration", distroboxUpdater.Config))
197-
percent.ChangeTrackerMessageFancy(pw, tracker, progressEnabled, percent.TrackerMessage{Title: distroboxUpdater.Config.Title, Description: distroboxUpdater.Config.Description})
198158
var out *[]drv.CommandOutput
199159
out, err = distroboxUpdater.Update()
200160
outputs = append(outputs, *out...)
201161
tracker.IncrementSection(err)
202162
}
203163

204-
if progressEnabled {
205-
pw.Stop()
206-
percent.ResetOscProgress()
207-
}
164+
// FIXME: detect interactive session
165+
percent.ResetOscProgress()
208166
if verboseRun {
209167
slog.Info("Verbose run requested")
210168

cmd/updateCheck.go

+9-31
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,20 @@ import (
44
"log/slog"
55

66
"github.com/spf13/cobra"
7-
"github.com/ublue-os/uupd/drv"
7+
"github.com/ublue-os/uupd/drv/generic"
8+
"github.com/ublue-os/uupd/drv/system"
89
)
910

1011
func UpdateCheck(cmd *cobra.Command, args []string) {
11-
var enableUpd bool = true
12+
initConfiguration := generic.UpdaterInitConfiguration{}.New()
13+
initConfiguration.Ci = false
14+
initConfiguration.DryRun = false
15+
initConfiguration.Verbose = false
1216

13-
initConfiguration := drv.UpdaterInitConfiguration{}.New()
14-
rpmOstreeUpdater, err := drv.RpmOstreeUpdater{}.New(*initConfiguration)
17+
mainSystemDriver, _, _, err := system.InitializeSystemDriver(*initConfiguration)
1518
if err != nil {
16-
enableUpd = false
17-
}
18-
19-
systemUpdater, err := drv.SystemUpdater{}.New(*initConfiguration)
20-
if err != nil {
21-
enableUpd = false
22-
}
23-
24-
isBootc, err := drv.BootcCompatible(systemUpdater.BinaryPath)
25-
if err != nil {
26-
isBootc = false
27-
}
28-
29-
if !isBootc {
30-
slog.Debug("Using rpm-ostree fallback as system driver")
31-
}
32-
33-
systemUpdater.Config.Enabled = isBootc && enableUpd
34-
rpmOstreeUpdater.Config.Enabled = !isBootc && enableUpd
35-
36-
var mainSystemDriver drv.SystemUpdateDriver
37-
if !isBootc {
38-
slog.Debug("Using the rpm-ostree driver")
39-
mainSystemDriver = &rpmOstreeUpdater
40-
} else {
41-
slog.Debug("Using the bootc driver")
42-
mainSystemDriver = &systemUpdater
19+
slog.Error("Failed")
20+
return
4321
}
4422

4523
updateAvailable, err := mainSystemDriver.Check()

0 commit comments

Comments
 (0)