]> source.dussan.org Git - gitea.git/commitdiff
Add a doctor check to disable the "Actions" unit for mirrors (#32424)
authorZettat123 <zettat123@gmail.com>
Sun, 10 Nov 2024 23:37:24 +0000 (07:37 +0800)
committerGitHub <noreply@github.com>
Sun, 10 Nov 2024 23:37:24 +0000 (23:37 +0000)
Resolve #32232

Users can disable the "Actions" unit for all mirror repos by running
```
gitea doctor check --run  disable-mirror-actions-unit --fix
```

services/doctor/actions.go [new file with mode: 0644]

diff --git a/services/doctor/actions.go b/services/doctor/actions.go
new file mode 100644 (file)
index 0000000..7c44fb8
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package doctor
+
+import (
+       "context"
+       "fmt"
+
+       "code.gitea.io/gitea/models/db"
+       repo_model "code.gitea.io/gitea/models/repo"
+       unit_model "code.gitea.io/gitea/models/unit"
+       "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/optional"
+       repo_service "code.gitea.io/gitea/services/repository"
+)
+
+func disableMirrorActionsUnit(ctx context.Context, logger log.Logger, autofix bool) error {
+       var reposToFix []*repo_model.Repository
+
+       for page := 1; ; page++ {
+               repos, _, err := repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{
+                       ListOptions: db.ListOptions{
+                               PageSize: repo_model.RepositoryListDefaultPageSize,
+                               Page:     page,
+                       },
+                       Mirror: optional.Some(true),
+               })
+               if err != nil {
+                       return fmt.Errorf("SearchRepository: %w", err)
+               }
+               if len(repos) == 0 {
+                       break
+               }
+
+               for _, repo := range repos {
+                       if repo.UnitEnabled(ctx, unit_model.TypeActions) {
+                               reposToFix = append(reposToFix, repo)
+                       }
+               }
+       }
+
+       if len(reposToFix) == 0 {
+               logger.Info("Found no mirror with actions unit enabled")
+       } else {
+               logger.Warn("Found %d mirrors with actions unit enabled", len(reposToFix))
+       }
+       if !autofix || len(reposToFix) == 0 {
+               return nil
+       }
+
+       for _, repo := range reposToFix {
+               if err := repo_service.UpdateRepositoryUnits(ctx, repo, nil, []unit_model.Type{unit_model.TypeActions}); err != nil {
+                       return err
+               }
+       }
+       logger.Info("Fixed %d mirrors with actions unit enabled", len(reposToFix))
+
+       return nil
+}
+
+func init() {
+       Register(&Check{
+               Title:     "Disable the actions unit for all mirrors",
+               Name:      "disable-mirror-actions-unit",
+               IsDefault: false,
+               Run:       disableMirrorActionsUnit,
+               Priority:  9,
+       })
+}