Merge pull request 'hotfix/v8.2.2' (#18) from hotfix/v8.2.2 into develop

Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/build_tools/pulls/18
This commit is contained in:
Oleg Korshul
2024-11-22 08:26:38 +00:00
15 changed files with 90 additions and 47 deletions

View File

@ -45,7 +45,6 @@ common.branding = args.branding
common.timestamp = utils.get_timestamp() common.timestamp = utils.get_timestamp()
common.workspace_dir = utils.get_abspath(utils.get_script_dir(__file__) + "/..") common.workspace_dir = utils.get_abspath(utils.get_script_dir(__file__) + "/..")
common.branding_dir = utils.get_abspath(common.workspace_dir + "/" + args.branding) if args.branding else common.workspace_dir common.branding_dir = utils.get_abspath(common.workspace_dir + "/" + args.branding) if args.branding else common.workspace_dir
common.deploy_data = utils.get_path(common.workspace_dir + "/deploy.txt")
common.summary = [] common.summary = []
utils.log("os_family: " + common.os_family) utils.log("os_family: " + common.os_family)
utils.log("platform: " + str(common.platform)) utils.log("platform: " + str(common.platform))
@ -74,15 +73,14 @@ import package_mobile
# build # build
utils.set_cwd(common.workspace_dir, verbose=True) utils.set_cwd(common.workspace_dir, verbose=True)
utils.delete_file(common.deploy_data)
if "core" in common.targets: if "core" in common.targets:
package_core.make() package_core.make()
if "closuremaps_opensource" in common.targets: if "closuremaps_sdkjs_opensource" in common.targets:
package_core.deploy_closuremaps_sdkjs("opensource") package_core.deploy_closuremaps_sdkjs("opensource")
package_core.deploy_closuremaps_webapps("opensource") if "closuremaps_sdkjs_commercial" in common.targets:
if "closuremaps_commercial" in common.targets:
package_core.deploy_closuremaps_sdkjs("commercial") package_core.deploy_closuremaps_sdkjs("commercial")
package_core.deploy_closuremaps_webapps("commercial") if "closuremaps_webapps" in common.targets:
package_core.deploy_closuremaps_webapps("opensource")
if "desktop" in common.targets: if "desktop" in common.targets:
package_desktop.make() package_desktop.make()
if "builder" in common.targets: if "builder" in common.targets:

View File

@ -1832,3 +1832,9 @@ def create_x2t_js_cache(dir, product):
cmd_in_dir(dir, "./x2t", ["-create-js-cache"], True) cmd_in_dir(dir, "./x2t", ["-create-js-cache"], True)
cmd_in_dir(dir, "./x2t", ["-create-js-snapshots"], True) cmd_in_dir(dir, "./x2t", ["-create-js-snapshots"], True)
return return
def setup_local_qmake(dir_qmake):
dir_base = os.path.dirname(dir_qmake)
writeFile(dir_base + "/onlyoffice_qt.conf", "Prefix = " + dir_base)
return

View File

@ -119,7 +119,7 @@ def make():
# windows hack (delete later) ---------------------- # windows hack (delete later) ----------------------
if ("windows" == base.host_platform()): if ("windows" == base.host_platform()):
base.delete_dir_with_access_error("v8/buildtools/win") base.delete_dir_with_access_error("v8/buildtools/win")
base.cmd("git", ["config", "--system", "core.longpaths", "true"]) base.cmd("git", ["config", "--system", "core.longpaths", "true"], True)
base.cmd("gclient", ["sync", "--force"], True) base.cmd("gclient", ["sync", "--force"], True)
else: else:
base.cmd("gclient", ["sync"], True) base.cmd("gclient", ["sync"], True)
@ -246,7 +246,7 @@ def make_xp():
base.cmd("./depot_tools/fetch", ["v8"], True) base.cmd("./depot_tools/fetch", ["v8"], True)
base.cmd("./depot_tools/gclient", ["sync", "-r", "4.10.253"], True) base.cmd("./depot_tools/gclient", ["sync", "-r", "4.10.253"], True)
base.delete_dir_with_access_error("v8/buildtools/win") base.delete_dir_with_access_error("v8/buildtools/win")
base.cmd("git", ["config", "--system", "core.longpaths", "true"]) base.cmd("git", ["config", "--system", "core.longpaths", "true"], True)
base.cmd("gclient", ["sync", "--force"], True) base.cmd("gclient", ["sync", "--force"], True)
# save common py script # save common py script

View File

@ -21,6 +21,9 @@ def change_bootstrap():
content += "@Subdir git\n" content += "@Subdir git\n"
content += "infra/3pp/tools/git/${platform} version:2@2.41.0.chromium.11\n" content += "infra/3pp/tools/git/${platform} version:2@2.41.0.chromium.11\n"
base.replaceInFile("./depot_tools/bootstrap/bootstrap.py",
"raise subprocess.CalledProcessError(proc.returncode, argv, None)", "return")
base.writeFile("./depot_tools/bootstrap/manifest.txt", content) base.writeFile("./depot_tools/bootstrap/manifest.txt", content)
return return
@ -105,6 +108,9 @@ def make():
if not base.is_dir(base_dir): if not base.is_dir(base_dir):
base.create_dir(base_dir) base.create_dir(base_dir)
if ("mac" == base.host_platform()):
base.cmd("git", ["config", "--global", "http.postBuffer", "157286400"], True)
os.chdir(base_dir) os.chdir(base_dir)
if not base.is_dir("depot_tools"): if not base.is_dir("depot_tools"):
base.cmd("git", ["clone", "https://chromium.googlesource.com/chromium/tools/depot_tools.git"]) base.cmd("git", ["clone", "https://chromium.googlesource.com/chromium/tools/depot_tools.git"])
@ -121,7 +127,7 @@ def make():
base.copy_dir("./v8/third_party", "./v8/third_party_new") base.copy_dir("./v8/third_party", "./v8/third_party_new")
if ("windows" == base.host_platform()): if ("windows" == base.host_platform()):
os.chdir("v8") os.chdir("v8")
base.cmd("git", ["config", "--system", "core.longpaths", "true"]) base.cmd("git", ["config", "--system", "core.longpaths", "true"], True)
os.chdir("../") os.chdir("../")
v8_branch_version = "remotes/branch-heads/8.9" v8_branch_version = "remotes/branch-heads/8.9"
if ("mac" == base.host_platform()): if ("mac" == base.host_platform()):

View File

@ -115,7 +115,6 @@ def make():
js_dir = root_dir js_dir = root_dir
base.copy_dir(base_dir + "/js/" + branding + "/builder/sdkjs", js_dir + "/sdkjs") base.copy_dir(base_dir + "/js/" + branding + "/builder/sdkjs", js_dir + "/sdkjs")
base.copy_dir(base_dir + "/js/" + branding + "/builder/web-apps", js_dir + "/web-apps") base.copy_dir(base_dir + "/js/" + branding + "/builder/web-apps", js_dir + "/web-apps")
base.move_file(js_dir + "/web-apps/apps/api/documents/api.js", js_dir + "/web-apps/apps/api/documents/api.js.tpl")
for file in glob.glob(js_dir + "/web-apps/apps/*/*/*.js.map") \ for file in glob.glob(js_dir + "/web-apps/apps/*/*/*.js.map") \
+ glob.glob(js_dir + "/web-apps/apps/*/mobile/dist/js/*.js.map"): + glob.glob(js_dir + "/web-apps/apps/*/mobile/dist/js/*.js.map"):
base.delete_file(file) base.delete_file(file)
@ -123,7 +122,7 @@ def make():
base.create_x2t_js_cache(converter_dir, "server") base.create_x2t_js_cache(converter_dir, "server")
# add embed worker code # add embed worker code
base.cmd_in_dir(git_dir + "/sdkjs/common/embed", "python", ["make.py", js_dir + "/web-apps/apps/api/documents/api.js.tpl"]) base.cmd_in_dir(git_dir + "/sdkjs/common/embed", "python", ["make.py", js_dir + "/web-apps/apps/api/documents/api.js"])
# plugins # plugins
base.create_dir(js_dir + "/sdkjs-plugins") base.create_dir(js_dir + "/sdkjs-plugins")

View File

@ -27,7 +27,6 @@ def s3_upload(files, dst):
key = dst + utils.get_basename(f) if dst.endswith("/") else dst key = dst + utils.get_basename(f) if dst.endswith("/") else dst
upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key) upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key)
if upload: if upload:
utils.add_deploy_data(key)
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
ret &= upload ret &= upload
return ret return ret
@ -54,7 +53,6 @@ def make_archive():
utils.set_summary("builder archive deploy", ret) utils.set_summary("builder archive deploy", ret)
if ret: if ret:
utils.log("URL: " + branding.s3_base_url + "/" + dest_version) utils.log("URL: " + branding.s3_base_url + "/" + dest_version)
utils.add_deploy_data(dest_version)
utils.s3_copy( utils.s3_copy(
"s3://" + branding.s3_bucket + "/" + dest_version, "s3://" + branding.s3_bucket + "/" + dest_version,
"s3://" + branding.s3_bucket + "/" + dest_latest) "s3://" + branding.s3_bucket + "/" + dest_latest)

View File

@ -35,7 +35,6 @@ def make_archive():
utils.set_summary("core archive deploy", ret) utils.set_summary("core archive deploy", ret)
if ret: if ret:
utils.log("URL: " + branding.s3_base_url + "/" + dest_version) utils.log("URL: " + branding.s3_base_url + "/" + dest_version)
utils.add_deploy_data(dest_version)
utils.s3_copy( utils.s3_copy(
"s3://" + branding.s3_bucket + "/" + dest_version, "s3://" + branding.s3_bucket + "/" + dest_version,
"s3://" + branding.s3_bucket + "/" + dest_latest) "s3://" + branding.s3_bucket + "/" + dest_latest)
@ -65,7 +64,6 @@ def deploy_closuremaps_sdkjs(license):
ret &= upload ret &= upload
if upload: if upload:
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
utils.add_deploy_data(key)
utils.set_summary("sdkjs closure maps %s deploy" % license, ret) utils.set_summary("sdkjs closure maps %s deploy" % license, ret)
return return
@ -91,6 +89,5 @@ def deploy_closuremaps_webapps(license):
ret &= upload ret &= upload
if upload: if upload:
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
utils.add_deploy_data(key)
utils.set_summary("web-apps closure maps %s deploy" % license, ret) utils.set_summary("web-apps closure maps %s deploy" % license, ret)
return return

View File

@ -26,7 +26,6 @@ def s3_upload(files, dst):
key = dst + utils.get_basename(f) if dst.endswith("/") else dst key = dst + utils.get_basename(f) if dst.endswith("/") else dst
upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key) upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key)
if upload: if upload:
utils.add_deploy_data(key)
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
ret &= upload ret &= upload
return ret return ret
@ -155,17 +154,6 @@ def make_inno():
else: else:
ret = False ret = False
utils.set_summary("desktop inno update deploy", ret) utils.set_summary("desktop inno update deploy", ret)
changes_dir = common.workspace_dir + "\\" \
+ utils.get_path(branding.desktop_changes_dir) + "\\" + common.version
if common.platform == "windows_x64" and \
common.deploy and \
utils.glob_path(changes_dir + "\\*.html"):
utils.log_h2("desktop changelog deploy")
ret = s3_upload(
utils.glob_path(changes_dir + "\\*.html"),
"desktop/win/update/%s/%s/" % (common.version, common.build))
utils.set_summary("desktop changelog deploy", ret)
return return
def make_advinst(): def make_advinst():
@ -308,11 +296,17 @@ def make_sparkle_updates():
macos_zip = "build/" + zip_filename + ".zip" macos_zip = "build/" + zip_filename + ".zip"
utils.create_dir(updates_dir) utils.create_dir(updates_dir)
utils.copy_file(macos_zip, updates_dir) utils.copy_file(macos_zip, updates_dir)
utils.copy_dir_content(released_updates_dir, updates_dir, ".zip") utils.sh(
"ls -1t " + released_updates_dir + "/*.zip" \
+ " | head -n 3" \
+ " | while read f; do cp -fv \"$f\" " + updates_dir + "/; done",
verbose=True)
for file in utils.glob_path(changes_dir + "/" + common.version + "/*.html"): for ext in [".html", ".ru.html"]:
filename = utils.get_basename(file).replace("changes", zip_filename) changes_src = changes_dir + "/" + common.version + "/changes" + ext
utils.copy_file(file, updates_dir + "/" + filename) changes_dst = updates_dir + "/" + zip_filename + ext
if not utils.copy_file(changes_src, changes_dst):
utils.write_file(changes_dst, "<!DOCTYPE html>placeholder")
sparkle_base_url = "%s/%s/updates/" % (branding.sparkle_base_url, suffix) sparkle_base_url = "%s/%s/updates/" % (branding.sparkle_base_url, suffix)
ret = utils.sh( ret = utils.sh(

View File

@ -31,7 +31,6 @@ def make_mobile():
key = "mobile/android/" + zip_file key = "mobile/android/" + zip_file
ret = utils.s3_upload(zip_file, "s3://" + branding.s3_bucket + "/" + key) ret = utils.s3_upload(zip_file, "s3://" + branding.s3_bucket + "/" + key)
if ret: if ret:
utils.add_deploy_data(key)
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
utils.set_summary("mobile deploy", ret) utils.set_summary("mobile deploy", ret)

View File

@ -21,7 +21,6 @@ def s3_upload(files, dst):
key = dst + utils.get_basename(f) if dst.endswith("/") else dst key = dst + utils.get_basename(f) if dst.endswith("/") else dst
upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key) upload = utils.s3_upload(f, "s3://" + branding.s3_bucket + "/" + key)
if upload: if upload:
utils.add_deploy_data(key)
utils.log("URL: " + branding.s3_base_url + "/" + key) utils.log("URL: " + branding.s3_base_url + "/" + key)
ret &= upload ret &= upload
return ret return ret

View File

@ -266,11 +266,6 @@ def set_summary(target, status):
common.summary.append({target: status}) common.summary.append({target: status})
return return
def add_deploy_data(key):
with open(common.deploy_data, 'a+') as f:
f.write(key + "\n")
return
def cmd(*args, **kwargs): def cmd(*args, **kwargs):
if kwargs.get("verbose"): if kwargs.get("verbose"):
log("- cmd:") log("- cmd:")

View File

@ -93,6 +93,9 @@ def make(platform, project, qmake_config_addon="", is_no_errors=False):
qmake_app = qt_dir + "/bin/qmake" qmake_app = qt_dir + "/bin/qmake"
# non windows platform # non windows platform
if not base.is_windows(): if not base.is_windows():
if base.is_file(qt_dir + "/onlyoffice_qt.conf"):
build_params.append("-qtconf")
build_params.append(qt_dir + "/onlyoffice_qt.conf")
base.cmd(qmake_app, build_params) base.cmd(qmake_app, build_params)
base.correct_makefile_after_qmake(platform, makefile) base.correct_makefile_after_qmake(platform, makefile)
if ("1" == config.option("clean")): if ("1" == config.option("clean")):

View File

@ -0,0 +1,39 @@
import subprocess
def fetch_branches():
#Fetch all branches without tags from the remote.
subprocess.run(['git', 'fetch', '--no-tags', 'origin', '+refs/heads/*:refs/remotes/origin/*'], check=True)
def get_branches():
#Get list of branches in the repository."""
result = subprocess.run(['git', 'branch', '-r'], capture_output=True, text=True)
return [line.strip() for line in result.stdout.splitlines()]
def parse_version(version_str):
#Parse version string and return a tuple of integers (major, minor, patch).
try:
return tuple(map(int, version_str.lstrip('v').split('.')))
except ValueError:
return (0, 0, 0) # Default for non-parsable versions
def get_max_version_branch(branches):
#Find the branch with the highest version.
max_branch = None
max_version = (0, 0, 0)
for branch in branches:
parts = branch.split('/')
if len(parts) >= 2 and (parts[1] == 'hotfix' or parts[1] == 'release'):
version = parse_version(parts[2])
if version > max_version:
max_version = version
max_branch = parts
return max_branch
if __name__ == "__main__":
fetch_branches() # Fetch branches without tags
branches = get_branches()
max_version_branch = get_max_version_branch(branches)
if max_version_branch:
print('/'.join(max_version_branch[1:])) # Print only the branch name without origin

View File

@ -55,14 +55,23 @@ def install_qt():
base.cmd_in_dir("./qt-everywhere-opensource-src-5.9.9", "make", ["-j", "4"]) base.cmd_in_dir("./qt-everywhere-opensource-src-5.9.9", "make", ["-j", "4"])
base.cmd_in_dir("./qt-everywhere-opensource-src-5.9.9", "make", ["install"]) base.cmd_in_dir("./qt-everywhere-opensource-src-5.9.9", "make", ["install"])
return return
def install_qt_prebuild():
url_amd64 = "https://s3.eu-west-1.amazonaws.com/static-doc.teamlab.eu.com/qt/5.9.9/linux_amd64/qt_binary.7z"
base.download(url_amd64, "./qt_amd64.7z")
base.extract("./qt_amd64.7z", "./qt_build")
base.create_dir("./qt_build/Qt-5.9.9")
base.cmd("mv", ["./qt_build/qt_amd64", "./qt_build/Qt-5.9.9/gcc_64"])
base.setup_local_qmake("./qt_build/Qt-5.9.9/gcc_64/bin")
return
if not base.is_file("./node_js_setup_14.x"): if not base.is_file("./node_js_setup_14.x"):
print("install dependencies...") print("install dependencies...")
deps.install_deps() deps.install_deps()
if not base.is_dir("./qt_build"): if not base.is_dir("./qt_build"):
print("install qt...") print("install qt...")
install_qt() install_qt_prebuild()
branch = get_branch_name("../..") branch = get_branch_name("../..")
@ -103,6 +112,3 @@ build_tools_params = ["--branch", branch,
base.cmd_in_dir("../..", "./configure.py", build_tools_params) base.cmd_in_dir("../..", "./configure.py", build_tools_params)
base.cmd_in_dir("../..", "./make.py") base.cmd_in_dir("../..", "./make.py")

View File

@ -39,9 +39,14 @@ def install_deps():
"libxi-dev", "libxi-dev",
"libxrender-dev", "libxrender-dev",
"libxss1", "libxss1",
"libncurses5"] "libncurses5",
"libncurses6",
"curl",
"libxkbcommon0",
"libxkbcommon-x11-0"]
base.cmd("sudo", ["apt-get", "install", "-y"] + packages) for package in packages:
base.cmd("sudo", ["apt-get", "install", "-y", package], True)
# nodejs # nodejs
base.cmd("sudo", ["apt-get", "install", "-y", "nodejs"]) base.cmd("sudo", ["apt-get", "install", "-y", "nodejs"])
@ -79,4 +84,3 @@ def install_deps():
if __name__ == "__main__": if __name__ == "__main__":
install_deps() install_deps()