chore: refactor release workflow for modular distro and upstream builds

This commit is contained in:
2026-06-09 21:20:20 +03:30
parent f97ac2f7c5
commit 058d835f07
10 changed files with 1423 additions and 200 deletions

124
scripts/nginx-build-info.py Normal file
View File

@@ -0,0 +1,124 @@
#!/usr/bin/env python3
import argparse
import json
import os
import shlex
import subprocess
import sys
def nginx_v_output(nginx_bin):
proc = subprocess.run(
[nginx_bin, "-V"],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
check=True,
)
return proc.stdout
def parse_nginx_v(output):
version = ""
configure_line = ""
for line in output.splitlines():
if line.startswith("nginx version:"):
version = line.split(":", 1)[1].strip()
elif line.startswith("configure arguments:"):
configure_line = line.split(":", 1)[1].strip()
if not configure_line:
raise RuntimeError("nginx -V did not include configure arguments")
return version, configure_line, shlex.split(configure_line)
def option_value(args, option):
prefix = option + "="
for arg in args:
if arg.startswith(prefix):
return arg[len(prefix) :]
return ""
def rewrite_module_path(arg, nginx_src):
for option in ("--add-module=", "--add-dynamic-module="):
if not arg.startswith(option):
continue
module_path = arg[len(option) :]
if os.path.exists(module_path):
return arg
marker = "/debian/modules/"
if marker in module_path:
suffix = module_path.split(marker, 1)[1]
candidate = os.path.join(nginx_src, "debian", "modules", suffix)
if os.path.exists(candidate):
return option + candidate
marker = "/debian/"
if marker in module_path:
suffix = module_path.split(marker, 1)[1]
candidate = os.path.join(nginx_src, "debian", suffix)
if os.path.exists(candidate):
return option + candidate
return arg
def rewrite_configure_args(args, nginx_src):
if not nginx_src:
return args
return [rewrite_module_path(arg, nginx_src) for arg in args]
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--nginx-bin", default="nginx")
parser.add_argument("--nginx-src", default="")
parser.add_argument("--json", action="store_true")
parser.add_argument("--configure-line", action="store_true")
parser.add_argument("--modules-path", action="store_true")
args = parser.parse_args()
output = nginx_v_output(args.nginx_bin)
version, configure_line, configure_args = parse_nginx_v(output)
rewritten_args = rewrite_configure_args(configure_args, args.nginx_src)
modules_path = option_value(configure_args, "--modules-path")
if not modules_path:
prefix = option_value(configure_args, "--prefix") or "/usr/share/nginx"
modules_path = os.path.join(prefix, "modules")
if args.configure_line:
print(shlex.join(rewritten_args))
return
if args.modules_path:
print(modules_path)
return
if args.json:
json.dump(
{
"version": version,
"configure_line": configure_line,
"configure_args": configure_args,
"rewritten_configure_args": rewritten_args,
"modules_path": modules_path,
},
sys.stdout,
indent=2,
sort_keys=True,
)
sys.stdout.write("\n")
return
parser.error("choose one of --json, --configure-line, or --modules-path")
if __name__ == "__main__":
main()