build_artifacts.lua 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import("core.package.package")
  2. import("core.base.semver")
  3. import("packages")
  4. -- load package
  5. function _load_package(packagename, packagedir, packagefile)
  6. local funcinfo = debug.getinfo(package.load_from_repository)
  7. if funcinfo and funcinfo.nparams == 3 then -- >= 2.7.8
  8. return package.load_from_repository(packagename, packagedir, {packagefile = packagefile})
  9. else
  10. -- deprecated
  11. return package.load_from_repository(packagename, nil, packagedir, packagefile)
  12. end
  13. end
  14. function build_artifacts(name, versions)
  15. local buildinfo = {name = name, versions = versions}
  16. print(buildinfo)
  17. os.tryrm("build-artifacts")
  18. os.exec("git clone [email protected]:xmake-mirror/build-artifacts.git -b build")
  19. local oldir = os.cd("build-artifacts")
  20. local trycount = 0
  21. while trycount < 2 do
  22. local ok = try
  23. {
  24. function ()
  25. io.save("build.txt", buildinfo)
  26. os.exec("git add -A")
  27. os.exec("git commit -a -m \"autobuild %s by xmake-repo/ci\"", name)
  28. os.exec("git push origin build")
  29. return true
  30. end,
  31. catch
  32. {
  33. function ()
  34. os.exec("git reset --hard HEAD^")
  35. os.exec("git pull origin build")
  36. end
  37. }
  38. }
  39. if ok then
  40. break
  41. end
  42. trycount = trycount + 1
  43. end
  44. assert(trycount < 2)
  45. os.cd(oldir)
  46. end
  47. function main()
  48. local files = os.iorun("git diff --name-only HEAD^")
  49. for _, file in ipairs(files:split('\n'), string.trim) do
  50. if file:find("packages", 1, true) and path.filename(file) == "xmake.lua" then
  51. assert(file == file:lower(), "%s must be lower case!", file)
  52. local packagedir = path.directory(file)
  53. local packagename = path.filename(packagedir)
  54. if #path.filename(path.directory(packagedir)) == 1 then
  55. local instance = _load_package(packagename, packagedir, file)
  56. if instance and packages.is_supported(instance, "windows")
  57. and (instance.is_headeronly and not instance:is_headeronly()) then
  58. local versions = instance:versions()
  59. if versions and #versions > 0 then
  60. table.sort(versions, function (a, b) return semver.compare(a, b) > 0 end)
  61. local version_latest = versions[1]
  62. build_artifacts(instance:name(), table.wrap(version_latest))
  63. end
  64. end
  65. end
  66. end
  67. end
  68. end