feat: restart to apply update, privileged helper, rollback
This commit is contained in:
1 parent
70460e4170
commit
54e8fd5fed
63 files changed
+8635
-164
No files matched your search
@@ -60,6 +60,8 @@ type UseCases struct {
|
||||
GetUpdateStatusUseCase *useCases.GetUpdateStatusUseCase
|
||||
CheckForUpdateUseCase *useCases.CheckForUpdateUseCase
|
||||
StartUpdateDownloadUseCase *useCases.StartUpdateDownloadUseCase
|
||||
RequestRestartUseCase *useCases.RequestRestartUseCase
|
||||
RecordRunningInfoUseCase *useCases.RecordRunningInfoUseCase
|
||||
}
|
||||
|
||||
type Repositories struct {
|
||||
@@ -76,6 +78,9 @@ type Repositories struct {
|
||||
SignatureVerifier domainUpdate.SignatureVerifier
|
||||
StagedRunner domainUpdate.StagedBinaryRunner
|
||||
DatabaseBackup domainUpdate.DatabaseBackup
|
||||
UpdateResults domainUpdate.ResultStore
|
||||
RestartRequests domainUpdate.RestartRequestStore
|
||||
RunningInfo domainUpdate.RunningInfoStore
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -139,6 +144,9 @@ func getRepositories(db *gorm.DB, settings config.Settings) *Repositories {
|
||||
SignatureVerifier: update.NewEd25519SignatureVerifier(releasePublicKey()),
|
||||
StagedRunner: update.NewExecStagedBinaryRunner(),
|
||||
DatabaseBackup: update.NewSQLiteDatabaseBackup(db, filepath.Join(dataDir, backupsDirName), time.Now),
|
||||
UpdateResults: update.NewJSONResultStore(filepath.Join(dataDir, domainUpdate.ResultFileName)),
|
||||
RestartRequests: update.NewJSONRestartRequestStore(filepath.Join(dataDir, domainUpdate.RestartRequestFileName)),
|
||||
RunningInfo: update.NewJSONRunningInfoStore(filepath.Join(dataDir, domainUpdate.RunningInfoFileName)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,9 +183,11 @@ func getUseCases(repos *Repositories, settings config.Settings) *UseCases {
|
||||
MergeMediaUseCase: useCases.NewMergeMediaUseCase(repos.ImageRepo, repos.ArticleRepo),
|
||||
GetMediaUsageUseCase: useCases.NewGetMediaUsageUseCase(repos.ImageRepo, repos.ArticleRepo),
|
||||
GetSettingsUseCase: useCases.NewGetSettingsUseCase(settings.Version),
|
||||
GetUpdateStatusUseCase: useCases.NewGetUpdateStatusUseCase(repos.UpdateStore, repos.UpdateJobs, repos.UpdateHelper, settings.Version),
|
||||
GetUpdateStatusUseCase: useCases.NewGetUpdateStatusUseCase(repos.UpdateStore, repos.UpdateJobs, repos.UpdateHelper, repos.UpdateResults, repos.RestartRequests, settings.Version, time.Now),
|
||||
CheckForUpdateUseCase: useCases.NewCheckForUpdateUseCase(repos.ReleaseFeed, repos.UpdateStore, settings.Version, time.Now),
|
||||
StartUpdateDownloadUseCase: startUpdateDownloadUseCase(repos, settings),
|
||||
RequestRestartUseCase: useCases.NewRequestRestartUseCase(repos.UpdateStore, repos.UpdateJobs, repos.UpdateHelper, repos.UpdateResults, repos.RestartRequests, settings.Version, time.Now),
|
||||
RecordRunningInfoUseCase: useCases.NewRecordRunningInfoUseCase(repos.RunningInfo, settings.Version, os.Getpid(), time.Now),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,6 +196,8 @@ func startUpdateDownloadUseCase(repos *Repositories, settings config.Settings) *
|
||||
Store: repos.UpdateStore,
|
||||
Jobs: repos.UpdateJobs,
|
||||
Helper: repos.UpdateHelper,
|
||||
Results: repos.UpdateResults,
|
||||
Requests: repos.RestartRequests,
|
||||
Fetcher: repos.AssetFetcher,
|
||||
Verifier: repos.SignatureVerifier,
|
||||
Runner: repos.StagedRunner,
|
||||
@@ -214,3 +226,42 @@ func closeDb(db *gorm.DB) func() error {
|
||||
return sqlDb.Close()
|
||||
}
|
||||
}
|
||||
|
||||
type BrowserUpdateCommands struct {
|
||||
Enable *useCases.EnableBrowserUpdatesUseCase
|
||||
Disable *useCases.DisableBrowserUpdatesUseCase
|
||||
}
|
||||
|
||||
func InitBrowserUpdateCommands() *BrowserUpdateCommands {
|
||||
units := update.NewSystemdUnits()
|
||||
dependencies := useCases.ManageBrowserUpdatesDependencies{
|
||||
Probe: update.NewSystemMachineProbe(),
|
||||
Locator: units,
|
||||
Units: units,
|
||||
Manager: update.NewSystemctlControl(domainUpdate.ServiceUnitName),
|
||||
Status: update.NewJSONHelperStatusWriter(),
|
||||
Now: time.Now,
|
||||
}
|
||||
return &BrowserUpdateCommands{
|
||||
Enable: useCases.NewEnableBrowserUpdatesUseCase(dependencies),
|
||||
Disable: useCases.NewDisableBrowserUpdatesUseCase(dependencies),
|
||||
}
|
||||
}
|
||||
|
||||
func InitApplyUpdateCommand(options domainUpdate.InstallOptions) *useCases.ApplyRestartRequestUseCase {
|
||||
layout := domainUpdate.HelperLayout{DataDir: options.DataDir, BinaryPath: options.Binary}
|
||||
files := update.NewNoFollowFilesystem()
|
||||
return useCases.NewApplyRestartRequestUseCase(useCases.ApplyRestartRequestDependencies{
|
||||
Requests: update.NewFSRestartRequestStore(files, layout.RestartRequestPath()),
|
||||
Results: update.NewFSResultStore(files, layout.ResultPath()),
|
||||
Running: update.NewJSONRunningInfoStore(filepath.Join(options.DataDir, domainUpdate.RunningInfoFileName)),
|
||||
Files: files,
|
||||
Service: update.NewSystemctlControl(options.Service),
|
||||
Health: update.NewHTTPHealthChecker(options.Port),
|
||||
Verifier: update.NewEd25519SignatureVerifier(releasePublicKey()),
|
||||
Clock: update.NewSystemClock(),
|
||||
Logger: log.Default(),
|
||||
Layout: layout,
|
||||
Platform: domainUpdate.Platform{OS: runtime.GOOS, Arch: runtime.GOARCH},
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user