mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Add rez packages generation for server_addons
Allow to generate `rez` compatible packages for the `server_addons`, will create a `package.py` which then is also included in the `.zip`.
This commit is contained in:
parent
f9ab339ecb
commit
4113ff7bf0
1 changed files with 53 additions and 15 deletions
|
|
@ -144,11 +144,18 @@ def create_addon_zip(
|
|||
output_dir: Path,
|
||||
addon_name: str,
|
||||
addon_version: str,
|
||||
keep_source: bool
|
||||
keep_source: bool,
|
||||
rez_package: bool,
|
||||
):
|
||||
zip_filepath = output_dir / f"{addon_name}-{addon_version}.zip"
|
||||
|
||||
if rez_package:
|
||||
zip_filepath = output_dir / f"{addon_name}-{addon_version}-rez.zip"
|
||||
|
||||
addon_output_dir = output_dir / addon_name / addon_version
|
||||
with ZipFileLongPaths(zip_filepath, "w", zipfile.ZIP_DEFLATED) as zipf:
|
||||
# TODO: Decide if we want to keep this for first pass checking without
|
||||
# executing any python. Otherwiseh we can be removed
|
||||
zipf.writestr(
|
||||
"manifest.json",
|
||||
json.dumps({
|
||||
|
|
@ -168,8 +175,14 @@ def create_addon_zip(
|
|||
src_path = os.path.join(root, filename)
|
||||
if rel_root:
|
||||
dst_path = os.path.join("addon", rel_root, filename)
|
||||
if rez_package:
|
||||
dst_path = os.path.join(rel_root, filename)
|
||||
else:
|
||||
dst_path = os.path.join("addon", filename)
|
||||
|
||||
if rez_package:
|
||||
dst_path = filename
|
||||
|
||||
zipf.write(src_path, dst_path)
|
||||
|
||||
if not keep_source:
|
||||
|
|
@ -180,7 +193,8 @@ def create_addon_package(
|
|||
addon_dir: Path,
|
||||
output_dir: Path,
|
||||
create_zip: bool,
|
||||
keep_source: bool
|
||||
keep_source: bool,
|
||||
rez_package: bool,
|
||||
):
|
||||
server_dir = addon_dir / "server"
|
||||
addon_version = get_addon_version(addon_dir)
|
||||
|
|
@ -191,22 +205,37 @@ def create_addon_package(
|
|||
addon_output_dir.mkdir(parents=True)
|
||||
|
||||
# Copy server content
|
||||
src_root = os.path.normpath(str(server_dir.absolute()))
|
||||
src_root_offset = len(src_root) + 1
|
||||
for root, _, filenames in os.walk(str(server_dir)):
|
||||
dst_root = addon_output_dir
|
||||
if root != src_root:
|
||||
rel_root = root[src_root_offset:]
|
||||
dst_root = dst_root / rel_root
|
||||
if not rez_package:
|
||||
src_root = os.path.normpath(str(server_dir.absolute()))
|
||||
src_root_offset = len(src_root) + 1
|
||||
for root, _, filenames in os.walk(str(server_dir)):
|
||||
dst_root = addon_output_dir
|
||||
if root != src_root:
|
||||
rel_root = root[src_root_offset:]
|
||||
dst_root = dst_root / rel_root
|
||||
|
||||
dst_root.mkdir(parents=True, exist_ok=True)
|
||||
for filename in filenames:
|
||||
src_path = os.path.join(root, filename)
|
||||
shutil.copy(src_path, str(dst_root))
|
||||
dst_root.mkdir(parents=True, exist_ok=True)
|
||||
for filename in filenames:
|
||||
src_path = os.path.join(root, filename)
|
||||
shutil.copy(src_path, str(dst_root))
|
||||
else:
|
||||
package_py = addon_output_dir / "package.py"
|
||||
|
||||
with open(package_py, "w+") as pkg_py:
|
||||
pkg_py.write(
|
||||
f"""name = "{addon_dir.name}"
|
||||
version = "{addon_version}"
|
||||
plugin_for = ["ayon_server"]
|
||||
build_command = "python {{root}}/rezbuild.py"
|
||||
"""
|
||||
)
|
||||
shutil.copytree(
|
||||
server_dir, addon_output_dir / "server", dirs_exist_ok=True
|
||||
)
|
||||
|
||||
if create_zip:
|
||||
create_addon_zip(
|
||||
output_dir, addon_dir.name, addon_version, keep_source
|
||||
output_dir, addon_dir.name, addon_version, keep_source, rez_package
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -216,6 +245,7 @@ def main(
|
|||
keep_source=False,
|
||||
clear_output_dir=False,
|
||||
addons=None,
|
||||
rez_package=False,
|
||||
):
|
||||
current_dir = Path(os.path.dirname(os.path.abspath(__file__)))
|
||||
root_dir = current_dir.parent
|
||||
|
|
@ -250,7 +280,7 @@ def main(
|
|||
continue
|
||||
|
||||
create_addon_package(
|
||||
addon_dir, output_dir, create_zip, keep_source
|
||||
addon_dir, output_dir, create_zip, keep_source, rez_package
|
||||
)
|
||||
|
||||
print(f"- package '{addon_dir.name}' created")
|
||||
|
|
@ -300,6 +330,13 @@ if __name__ == "__main__":
|
|||
action="append",
|
||||
help="Limit addon creation to given addon name",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-r",
|
||||
"--rez",
|
||||
dest="rez_package",
|
||||
action="store_true",
|
||||
help="Make it a Rez-compatible package",
|
||||
)
|
||||
|
||||
args = parser.parse_args(sys.argv[1:])
|
||||
main(
|
||||
|
|
@ -308,4 +345,5 @@ if __name__ == "__main__":
|
|||
args.keep_sources,
|
||||
args.clear_output_dir,
|
||||
args.addons,
|
||||
args.rez_package,
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue