浏览代码

Merge branch 'sub-packages'

/main
Peter Bay Bastian 7 年前
当前提交
44a7015e
共有 10 个文件被更改,包括 276 次插入0 次删除
  1. 4
      ScriptableRenderPipeline/Core/sub-package.json
  2. 7
      ScriptableRenderPipeline/Core/sub-package.json.meta
  3. 7
      ScriptableRenderPipeline/HDRenderPipeline/sub-package.json
  4. 7
      ScriptableRenderPipeline/HDRenderPipeline/sub-package.json.meta
  5. 7
      ScriptableRenderPipeline/LightweightPipeline/sub-package.json
  6. 7
      ScriptableRenderPipeline/LightweightPipeline/sub-package.json.meta
  7. 12
      ScriptableRenderPipeline/master-package.json
  8. 7
      ScriptableRenderPipeline/master-package.json.meta
  9. 211
      subpackage.py
  10. 7
      subpackage.py.meta

4
ScriptableRenderPipeline/Core/sub-package.json


{
"name": "com.unity.render-pipelines.core",
"description": "Core library for Unity render pipelines."
}

7
ScriptableRenderPipeline/Core/sub-package.json.meta


fileFormatVersion: 2
guid: 19cc002a0d5c3344abceed8a406f9296
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

7
ScriptableRenderPipeline/HDRenderPipeline/sub-package.json


{
"name": "com.unity.render-pipelines.high-quality",
"description": "High Quality Render Pipeline for Unity.",
"subDependencies": [
"com.unity.render-pipelines.core"
]
}

7
ScriptableRenderPipeline/HDRenderPipeline/sub-package.json.meta


fileFormatVersion: 2
guid: f8cbf85f29fda9b428c69f2db95d6586
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

7
ScriptableRenderPipeline/LightweightPipeline/sub-package.json


{
"name": "com.unity.render-pipelines.lightweight",
"description": "Lightweight Render Pipeline for Unity.",
"subDependencies": [
"com.unity.render-pipelines.core"
]
}

7
ScriptableRenderPipeline/LightweightPipeline/sub-package.json.meta


fileFormatVersion: 2
guid: c82f6b5803136ae4dad320ae444c5bae
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

12
ScriptableRenderPipeline/master-package.json


{
"version": "0.1.7",
"unity": "2018.1",
"dependencies": {
"com.unity.postprocessing": "0.1.3"
},
"subPackages": [
"Core",
"HDRenderPipeline",
"LightweightPipeline"
]
}

7
ScriptableRenderPipeline/master-package.json.meta


fileFormatVersion: 2
guid: bfb9f6845cd8f864dabdaab6815b2ec4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

211
subpackage.py


import argparse
import os
import json
import textwrap
from http.client import HTTPSConnection
from base64 import b64encode
import subprocess
from pprint import pprint
def create_or_increment(map, key):
if key not in map:
map[key] = 1
else:
map[key] += 1
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--folder", help="the folder containing master-package.json and the sub-package folders",
required=True)
parser.add_argument("-u", "--username",
help="bintray username, as in <username>@unity (i.e. don't write the `@unity` part)",
required=True)
parser.add_argument("-k", "--key", help="bintray API key", required=True)
parser.add_argument("-p", "--publish", action="store_true",
help="DANGER: actually do the publish and then clean-up. if not set, only preparation will be "
"done for inspection purposes")
parser.add_argument("-F", "--filter", default="",
help="only packages containing the specified string will be published")
parser.add_argument("-d", "--dirty", action="store_true",
help="don't clean-up files")
parser.add_argument("-s", "--silent", action="store_true",
help="don't tell me what's going on here")
args = parser.parse_args()
silent = args.silent
base_folder = os.path.realpath(args.folder)
def error_print(msg):
print("[ERROR] {}".format(msg))
def warning_print(msg):
print("[WARNING] {}".format(msg))
def info_print(msg):
if not silent:
print(msg)
info_print("Using folder: {}".format(base_folder))
file_path = os.path.join(base_folder, "master-package.json")
if os.path.isfile(file_path):
info_print("Found master package file: {}".format(file_path))
with open(file_path) as file:
try:
master_package = json.load(file)
except json.JSONDecodeError as e:
error_print(e)
exit(1)
potential_folders = master_package["subPackages"] if "subPackages" in master_package else []
sub_packages = {}
sub_package_folders = {}
for item in potential_folders:
file_path = os.path.join(base_folder, item, "sub-package.json")
if os.path.isfile(file_path):
info_print("Found sub-package file: {}".format(file_path))
with open(file_path) as file:
try:
sub_package = json.load(file)
sub_packages[sub_package["name"]] = sub_package
sub_package_folders[sub_package["name"]
] = os.path.join(base_folder, item)
except json.JSONDecodeError as e:
error_print("Error: {}".format(e))
if not sub_packages:
error_print("Error: No sub-packages found.")
exit(1)
if "version" not in master_package:
error_print("Master package must contain a \"version\" field")
exit(1)
info_print("")
info_print("Propagating master package version to sub-packages")
for sub_package in sub_packages.values():
sub_package["version"] = master_package["version"]
if "unity" in master_package:
info_print("Propagating master package Unity version to sub-packages")
for sub_package in sub_packages.values():
sub_package["unity"] = master_package["unity"]
if "dependencies" in master_package and master_package["dependencies"]:
info_print("Propagating shared dependencies:")
for name, version in master_package["dependencies"].items():
info_print(" {}@{}".format(name, version))
for sub_package in sub_packages.values():
if "dependencies" not in sub_package or not sub_package["dependencies"]:
sub_package["dependencies"] = {}
for name, version in master_package["dependencies"].items():
sub_package["dependencies"][name] = version
info_print("")
info_print("Creating dependency tree:")
dependency_list = {}
dependency_tree = {}
for i, sub_package in enumerate(sub_packages.values()):
dependency_list[sub_package["name"]] = {}
for i, sub_package in enumerate(sub_packages.values()):
if "subDependencies" in sub_package and sub_package["subDependencies"]:
for dependency in sub_package["subDependencies"]:
dependency_list[dependency][sub_package["name"]
] = dependency_list[sub_package["name"]]
else:
dependency_tree[sub_package["name"]
] = dependency_list[sub_package["name"]]
if not dependency_tree:
error_print(
"Dependency tree is empty. You might have a circular reference.")
exit(1)
def print_dependency_tree(tree, indent):
for key, sub_tree in tree.items():
info_print(textwrap.indent(key, " " * indent))
print_dependency_tree(sub_tree, indent + 1)
print_dependency_tree(dependency_tree, 1)
info_print("")
info_print("Creating publish order:")
publish_order = []
visited = set()
def fill_publish_order(tree):
for key, sub_tree in tree.items():
if key not in visited:
if args.filter in key:
publish_order.append(key)
fill_publish_order(sub_tree)
fill_publish_order(dependency_tree)
for name in publish_order:
info_print(" {}".format(name))
info_print("")
info_print("Resolving dependencies between sub-packages:")
for sub_package in sub_packages.values():
if "dependencies" not in sub_package or not sub_package["dependencies"]:
sub_package["dependencies"] = {}
if "subDependencies" in sub_package and sub_package["subDependencies"]:
info_print(" {}:".format(sub_package["name"]))
for sub_dependency in sub_package["subDependencies"]:
sub_package["dependencies"][sub_dependency] = master_package["version"]
info_print(" {}@{}".format(sub_dependency,
sub_package["dependencies"][sub_dependency]))
del sub_package["subDependencies"]
info_print("")
info_print("Writing package files:")
for name in publish_order:
sub_package = sub_packages[name]
package_path = os.path.join(sub_package_folders[name], "package.json")
info_print(" {}:".format(package_path))
with open(package_path, 'w') as file:
json.dump(sub_package, file, indent=4)
with open(package_path) as file:
info_print(textwrap.indent(file.read(), " >"))
info_print("")
info_print("Downloading npm config:")
c = HTTPSConnection("staging-packages.unity.com")
auth = b64encode("{}@unity:{}".format(
args.username, args.key).encode("ascii")).decode("ascii")
c.request('GET', '/auth', headers={"Authorization": "Basic %s" % auth})
res = c.getresponse()
npm_config = res.read().decode(res.headers.get_content_charset("ascii"))
print(textwrap.indent(npm_config, " >"))
info_print("Writing config to sub-package folders:")
for name in publish_order:
folder = sub_package_folders[name]
path = os.path.join(folder, ".npmrc")
with open(path, 'w') as file:
file.write(npm_config)
info_print(" {}".format(path))
info_print("")
if args.publish:
for name in publish_order:
info_print("Publishing {}:".format(name))
folder = sub_package_folders[name]
subprocess.run(["npm", "publish"], cwd=folder, shell=True)
info_print("")
if not args.dirty:
info_print("Removing temporary files:")
files = []
for name in publish_order:
folder = sub_package_folders[name]
files.append(os.path.join(folder, "package.json"))
files.append(os.path.join(folder, ".npmrc"))
for file in files:
info_print(" {}".format(file))
os.remove(file)
if __name__ == "__main__":
main()

7
subpackage.py.meta


fileFormatVersion: 2
guid: 3d3df49a7b5058140930a337930ab97c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存