diff --git a/core/app/dto/setting.go b/core/app/dto/setting.go index 1afc810e3..bd86fa68b 100644 --- a/core/app/dto/setting.go +++ b/core/app/dto/setting.go @@ -5,9 +5,10 @@ import ( ) type SettingInfo struct { - UserName string `json:"userName"` - SystemVersion string `json:"systemVersion"` - DeveloperMode string `json:"developerMode"` + UserName string `json:"userName"` + SystemVersion string `json:"systemVersion"` + DeveloperMode string `json:"developerMode"` + UpgradeBackupCopies string `json:"upgradeBackupCopies"` SessionTimeout string `json:"sessionTimeout"` Port string `json:"port"` diff --git a/core/app/service/setting.go b/core/app/service/setting.go index 84cafe84c..813479012 100644 --- a/core/app/service/setting.go +++ b/core/app/service/setting.go @@ -145,6 +145,8 @@ func (u *SettingService) Update(key, value string) error { if err := xpack.Sync(constant.SyncLanguage); err != nil { global.LOG.Errorf("sync language to node failed, err: %v", err) } + case "UpgradeBackupCopies": + dropBackupCopies() } return nil diff --git a/core/app/service/upgrade.go b/core/app/service/upgrade.go index 5505105e5..e3d17970c 100644 --- a/core/app/service/upgrade.go +++ b/core/app/service/upgrade.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "path" + "sort" "strconv" "strings" "time" @@ -190,6 +191,7 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error { } global.LOG.Info("upgrade successful!") + dropBackupCopies() go writeLogs(req.Version) _ = settingRepo.Update("SystemVersion", req.Version) _ = global.AgentDB.Model(&model.Setting{}).Where("key = ?", "SystemVersion").Updates(map[string]interface{}{"value": req.Version}).Error @@ -473,3 +475,32 @@ func loadArch() (string, error) { } return "", fmt.Errorf("unsupported such arch: %s", std) } + +func dropBackupCopies() { + backupCopies, _ := settingRepo.GetValueByKey("UpgradeBackupCopies") + copies, _ := strconv.Atoi(backupCopies) + if copies == 0 { + return + } + backupDir := path.Join(global.CONF.Base.InstallDir, "1panel/tmp/upgrade") + upgradeDir, err := os.ReadDir(backupDir) + if err != nil { + global.LOG.Errorf("read upgrade dir failed, err: %v", err) + return + } + var versions []string + for _, item := range upgradeDir { + if item.IsDir() && strings.HasPrefix(item.Name(), "v") { + versions = append(versions, item.Name()) + } + } + if len(versions) <= copies { + return + } + sort.Slice(versions, func(i, j int) bool { + return common.ComparePanelVersion(versions[i], versions[j]) + }) + for i := copies - 1; i < len(versions); i++ { + _ = os.RemoveAll(backupDir + "/" + versions[i]) + } +} diff --git a/core/init/migration/migrate.go b/core/init/migration/migrate.go index e9db5795f..11720bbe2 100644 --- a/core/init/migration/migrate.go +++ b/core/init/migration/migrate.go @@ -23,6 +23,7 @@ func Init() { migrations.AddCronjobGroup, migrations.AddDiskMenu, migrations.AddSimpleNodeGroup, + migrations.AddUpgradeBackupCopies, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/core/init/migration/migrations/init.go b/core/init/migration/migrations/init.go index 210bfb67c..82b7499c1 100644 --- a/core/init/migration/migrations/init.go +++ b/core/init/migration/migrations/init.go @@ -535,3 +535,13 @@ var AddSimpleNodeGroup = &gormigrate.Migration{ return nil }, } + +var AddUpgradeBackupCopies = &gormigrate.Migration{ + ID: "20250925-add-upgrade-backup-copies", + Migrate: func(tx *gorm.DB) error { + if err := tx.Create(&model.Setting{Key: "UpgradeBackupCopies", Value: "0"}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/frontend/src/api/interface/setting.ts b/frontend/src/api/interface/setting.ts index 75a40551b..3c930a9e5 100644 --- a/frontend/src/api/interface/setting.ts +++ b/frontend/src/api/interface/setting.ts @@ -7,6 +7,7 @@ export namespace Setting { email: string; systemIP: string; systemVersion: string; + upgradeBackupCopies: string; dockerSockPath: string; developerMode: string; diff --git a/frontend/src/components/system-upgrade/index.vue b/frontend/src/components/system-upgrade/index.vue index ee03e5fe7..c3f4855f2 100644 --- a/frontend/src/components/system-upgrade/index.vue +++ b/frontend/src/components/system-upgrade/index.vue @@ -90,7 +90,7 @@ const getVersionLog = () => { if (isOffLine) { return; } - releasesRef.value.acceptParams({ version: version }); + releasesRef.value.acceptParams(); }; const toLxware = () => { diff --git a/frontend/src/components/system-upgrade/releases/index.vue b/frontend/src/components/system-upgrade/releases/index.vue index c691ab129..ede06c9e1 100644 --- a/frontend/src/components/system-upgrade/releases/index.vue +++ b/frontend/src/components/system-upgrade/releases/index.vue @@ -1,18 +1,29 @@