MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / Sync

Method Sync

core/app/service/script_library.go:204–289  ·  view source on GitHub ↗
(req dto.OperateByTaskID)

Source from the content-addressed store, hash-verified

202}
203
204func (u *ScriptService) Sync(req dto.OperateByTaskID) error {
205 if global.CONF.Base.IsOffline {
206 return nil
207 }
208 syncTask, err := task.NewTaskWithOps(i18n.GetMsgByKey("RemoteScriptLibrary"), task.TaskSync, task.TaskScopeScript, req.TaskID, 0)
209 if err != nil {
210 global.LOG.Errorf("create sync task failed %v", err)
211 return err
212 }
213
214 syncTask.AddSubTask(task.GetTaskName(i18n.GetMsgByKey("RemoteScriptLibrary"), task.TaskSync, task.TaskScopeScript), func(t *task.Task) (err error) {
215 versionUrl := fmt.Sprintf("%s/scripts/version.txt", global.ResourceURL())
216 _, versionRes, err := req_helper.HandleRequestWithProxy(versionUrl, http.MethodGet, constant.TimeOut20s)
217 if err != nil {
218 return fmt.Errorf("load scripts version from remote failed, err: %v", err)
219 }
220 var scriptSetting model.Setting
221 _ = global.DB.Where("key = ?", "ScriptVersion").First(&scriptSetting).Error
222 localVersion := strings.ReplaceAll(string(versionRes), "\n", "")
223 remoteVersion := strings.ReplaceAll(scriptSetting.Value, "\n", "")
224
225 if localVersion == remoteVersion {
226 syncTask.Log(i18n.GetMsgByKey("ScriptSyncSkip"))
227 return nil
228 }
229
230 dataUrl := fmt.Sprintf("%s/scripts/data.yaml", global.ResourceURL())
231 _, dataRes, err := req_helper.HandleRequestWithProxy(dataUrl, http.MethodGet, constant.TimeOut20s)
232 syncTask.LogWithStatus(i18n.GetMsgByKey("DownloadData"), err)
233 if err != nil {
234 return fmt.Errorf("load scripts data.yaml from remote failed, err: %v", err)
235 }
236
237 var scripts Scripts
238 if err = yaml.Unmarshal(dataRes, &scripts); err != nil {
239 return fmt.Errorf("the format of data.yaml is err: %v", err)
240 }
241
242 tmpDir := path.Join(global.CONF.Base.InstallDir, "1panel/tmp/script")
243 if _, err := os.Stat(tmpDir); err != nil {
244 _ = os.MkdirAll(tmpDir, 0755)
245 }
246 scriptsUrl := fmt.Sprintf("%s/scripts/scripts.tar.gz", global.ResourceURL())
247 err = files.DownloadFileWithProxyStream(scriptsUrl, tmpDir+"/scripts.tar.gz")
248 syncTask.LogWithStatus(i18n.GetMsgByKey("DownloadPackage"), err)
249 if err != nil {
250 return fmt.Errorf("download scripts.tar.gz failed, err: %v", err)
251 }
252
253 if err := files.HandleUnTar(tmpDir+"/scripts.tar.gz", tmpDir, ""); err != nil {
254 return fmt.Errorf("handle decompress scripts.tar.gz failed, err: %v", err)
255 }
256 var scriptsForDB []model.ScriptLibrary
257 for _, item := range scripts.Scripts.Sh {
258 itemName, _ := json.Marshal(item.Name)
259 itemDescription, _ := json.Marshal(item.Description)
260 shell, _ := os.ReadFile(fmt.Sprintf("%s/scripts/sh/%s.sh", tmpDir, item.Key))
261 scriptItem := model.ScriptLibrary{

Callers 1

RunMethod · 0.95

Calls 9

MkdirAllMethod · 0.80
RemoveAllMethod · 0.80
SyncAllMethod · 0.65
SyncMethod · 0.65
AddSubTaskMethod · 0.45
LogMethod · 0.45
LogWithStatusMethod · 0.45
StatMethod · 0.45
ExecuteMethod · 0.45

Tested by

no test coverage detected