WORKSPACE=path Path to the Arvados source tree to build packages from
CWLTOOL=path (optional) Path to cwltool git repository.
SALAD=path (optional) Path to schema_salad git repository.
+CWL_UTILS=path (optional) Path to cwl-utils git repository.
PYCMD=pythonexec (optional) Specify the python3 executable to use in the docker image. Defaults to "python3".
EOF
cp "$CWLTOOL/dist/$cwltool" $WORKSPACE/sdk/cwl/cwltool_dist
fi
+rm -rf sdk/cwl/cwlutils_dist
+mkdir -p sdk/cwl/cwlutils_dist
+if [[ -n "$CWL_UTILS" ]] ; then
+ (cd "$CWL_UTILS" && python3 setup.py sdist)
+ cwlutils=$(cd "$CWL_UTILS/dist" && ls -t cwl-utils-*.tar.gz | head -n1)
+ cp "$CWL_UTILS/dist/$cwlutils" $WORKSPACE/sdk/cwl/cwlutils_dist
+fi
+
. build/run-library.sh
# This defines python_sdk_version and cwl_runner_version with python-style
calculate_python_sdk_cwl_package_versions
set -x
-docker build --no-cache --build-arg sdk=$sdk --build-arg runner=$runner --build-arg salad=$salad --build-arg cwltool=$cwltool --build-arg pythoncmd=$py --build-arg pipcmd=$pipcmd -f "$WORKSPACE/sdk/dev-jobs.dockerfile" -t arvados/jobs:$cwl_runner_version "$WORKSPACE/sdk"
+docker build --no-cache \
+ --build-arg sdk=$sdk \
+ --build-arg runner=$runner \
+ --build-arg salad=$salad \
+ --build-arg cwltool=$cwltool \
+ --build-arg pythoncmd=$py \
+ --build-arg pipcmd=$pipcmd \
+ --build-arg cwlutils=$cwlutils \
+ -f "$WORKSPACE/sdk/dev-jobs.dockerfile" \
+ -t arvados/jobs:$cwl_runner_version \
+ "$WORKSPACE/sdk"
+
echo arv-keepdocker arvados/jobs $cwl_runner_version
arv-keepdocker arvados/jobs $cwl_runner_version
return json.dumps(doc, sort_keys=True, indent=4, separators=(',',': '))
def rel_ref(s, baseuri, urlexpander, merged_map):
+ if s.startswith("keep:"):
+ return s
+
+ #print("BBB", s, baseuri)
uri = urlexpander(s, baseuri)
+ #print("CCC", uri)
+
fileuri = urllib.parse.urldefrag(baseuri)[0]
- if fileuri in merged_map:
- replacements = merged_map[fileuri].resolved
- if uri in replacements:
- return replacements[uri]
- if s.startswith("keep:"):
- return s
+ for u in (baseuri, fileuri):
+ if u in merged_map:
+ replacements = merged_map[u].resolved
+ #print(uri, replacements)
+ if uri in replacements:
+ return replacements[uri]
- p1 = os.path.dirname(uri_file_path(baseuri))
+ p1 = os.path.dirname(uri_file_path(fileuri))
p2 = os.path.dirname(uri_file_path(uri))
p3 = os.path.basename(uri_file_path(uri))
+
+ #print("PPP", p1, p2, p3)
+
r = os.path.relpath(p2, p1)
if r == ".":
r = ""
+
+ #print("RRR", r)
+
return os.path.join(r, p3)
d["http://arvados.org/cwl#dockerCollectionPDH"] = runtimeContext.cached_docker_lookups.get(dockerImageId)
for s in d:
- for field in ("$include", "$import", "location", "run"):
+ for field in ("location", "run", "name"):
if field in d and isinstance(d[field], str):
d[field] = rel_ref(d[field], baseuri, urlexpander, merged_map)
+ for field in ("$include", "$import"):
+ if field in d and isinstance(d[field], str):
+ d[field] = rel_ref(d[field], baseuri, urlexpander, {})
+
+ basetypes = ("null", "boolean", "int", "long", "float", "double", "string", "File", "Directory")
+
+ if ("type" in d and
+ isinstance(d["type"], str) and
+ d["type"] not in basetypes):
+ d["type"] = rel_ref(d["type"], baseuri, urlexpander, merged_map)
+
+ if "inputs" in d and isinstance(d["inputs"], MutableMapping):
+ for inp in d["inputs"]:
+ if isinstance(d["inputs"][inp], str) and d["inputs"][inp] not in basetypes:
+ d["inputs"][inp] = rel_ref(d["inputs"][inp], baseuri, urlexpander, merged_map)
+
if "$schemas" in d:
for n, s in enumerate(d["$schemas"]):
d["$schemas"][n] = rel_ref(d["$schemas"][n], baseuri, urlexpander, merged_map)
col = arvados.collection.Collection(api_client=arvRunner.api)
+ #print(merged_map)
+
for w in workflow_files | import_files:
# 1. load YAML
for g in git_info:
doc[g] = git_info[g]
+ #print("MMM", main["id"])
+ #print(yamlloader.dump(wrapper, stream=sys.stdout))
+
update_refs(wrapper, main["id"], tool.doc_loader.expand_url, merged_map, False, runtimeContext, main["id"]+"#", "#main/")
+ #print(yamlloader.dump(wrapper, stream=sys.stdout))
+
return doc
from cwltool.errors import WorkflowException
import cwltool.workflow
-from schema_salad.sourceline import SourceLine
+from schema_salad.sourceline import SourceLine, cmap
import schema_salad.validate as validate
from schema_salad.ref_resolver import file_uri, uri_file_path
#with Perf(metrics, "load_tool"):
# tool = load_tool(tool.tool, loadingContext)
- if runtimeContext.update_workflow or runtimeContext.create_workflow or (runtimeContext.submit and not self.fast_submit):
+ if submitting and not self.fast_submit:
# upload workflow and get back the workflow wrapper
workflow_wrapper = new_upload_workflow(self, tool, job_order,
# Reload just the wrapper workflow.
self.fast_submit = True
- tool = load_tool(workflow_wrapper, loadingContext)
+ workflow_wrapper, _ = loadingContext.loader.resolve_all(cmap(workflow_wrapper), tool.tool["id"])
+ tool = load_tool(workflow_wrapper[0], loadingContext)
self.apply_reqs(job_order, tool)