ruki 1 рік тому
батько
коміт
16d3ae4374
2 змінених файлів з 30 додано та 21 видалено
  1. 1 1
      .github/workflows/autoupdate.yml
  2. 29 20
      scripts/autoupdate.lua

+ 1 - 1
.github/workflows/autoupdate.yml

@@ -37,6 +37,6 @@ jobs:
 
       - name: Auto-update packages
         run: |
-          xmake l -vD scripts/autoupdate.lua 3
+          xmake l -vD scripts/autoupdate.lua
 
 

+ 29 - 20
scripts/autoupdate.lua

@@ -14,22 +14,24 @@ function _load_package(packagename, packagedir, packagefile)
     end
 end
 
-function _get_all_packages()
+function _get_all_packages(pattern)
     local packages = _g.packages
     if not packages then
         packages = {}
         for _, packagedir in ipairs(os.dirs(path.join("packages", "*", "*"))) do
             local packagename = path.filename(packagedir)
-            local packagefile = path.join(packagedir, "xmake.lua")
-            local instance = _load_package(packagename, packagedir, packagefile)
-            local basename = instance:get("base")
-            if instance and basename then
-                local basedir = path.join("packages", basename:sub(1, 1):lower(), basename:lower())
-                local basefile = path.join(basedir, "xmake.lua")
-                instance._BASE = _load_package(basename, basedir, basefile)
-            end
-            if instance then
-                table.insert(packages, instance)
+            if not pattern or packagename:match(pattern) then
+                local packagefile = path.join(packagedir, "xmake.lua")
+                local instance = _load_package(packagename, packagedir, packagefile)
+                local basename = instance:get("base")
+                if instance and basename then
+                    local basedir = path.join("packages", basename:sub(1, 1):lower(), basename:lower())
+                    local basefile = path.join(basedir, "xmake.lua")
+                    instance._BASE = _load_package(basename, basedir, basefile)
+                end
+                if instance then
+                    table.insert(packages, instance)
+                end
             end
         end
         _g.packages = packages
@@ -82,33 +84,40 @@ function _update_version(instance, version, shasum)
             instance:name(), version_current, version)
         os.vexec("git add .")
         os.vexec("git commit -a -m \"Update %s to %s\"", instance:name(), version)
-        os.vexec("git push %s %s:%s", repourl, branch, branch)
-        os.vexec("gh pr create --label \"auto-update\" --title \"Auto-update %s to %s\" --body \"%s\" -R xmake-io/xmake-repo -B dev -H %s",
-            instance:name(), version, body, branch)
+        --os.vexec("git push %s %s:%s", repourl, branch, branch)
+        --os.vexec("gh pr create --label \"auto-update\" --title \"Auto-update %s to %s\" --body \"%s\" -R xmake-io/xmake-repo -B dev -H %s",
+        --    instance:name(), version, body, branch)
     end
     os.vexec("git reset --hard HEAD")
     os.vexec("git checkout %s", branch_current)
 end
 
-function main(maxcount)
+function main(pattern)
     local count = 0
-    local maxcount = tonumber(maxcount or 10)
-    local instances = _get_all_packages()
+    local maxcount = 3
+    local instances = _get_all_packages(pattern)
     math.randomseed(os.time())
-    while count < maxcount do
-        local instance = instances[math.random(#instances)]
+    while count < maxcount and #instances > 0 do
+        local idx = math.random(#instances)
+        local instance = instances[idx]
         local checkupdate_filepath = path.join(instance:scriptdir(), "checkupdate.lua")
         if not os.isfile(checkupdate_filepath) then
             checkupdate_filepath = path.join(os.scriptdir(), "checkupdate.lua")
         end
+        local updated = false
         if os.isfile(checkupdate_filepath) then
             local checkupdate = import("checkupdate", {rootdir = path.directory(checkupdate_filepath), anonymous = true})
             local version, shasum = checkupdate(instance)
             if version and shasum and not _is_pending(instance, version) then
                 cprint("package(%s): new version ${bright}%s${clear} found, shasum: ${bright}%s", instance:name(), version, shasum)
                 _update_version(instance, version, shasum)
-                count = count + 1
+                updated = true
             end
         end
+        if updated then
+            count = count + 1
+        else
+            table.remove(instances, idx)
+        end
     end
 end