diff --git a/tests/cromwellapi/cassettes/test-abort/test_abort[helloDockerHostname].yaml b/tests/cromwellapi/cassettes/test-abort/test_abort[helloDockerHostname].yaml index 8d58077..c14880f 100644 --- a/tests/cromwellapi/cassettes/test-abort/test_abort[helloDockerHostname].yaml +++ b/tests/cromwellapi/cassettes/test-abort/test_abort[helloDockerHostname].yaml @@ -1,19 +1,54 @@ interactions: - request: - body: "--a140cd8d08d737fbd07610f0ad944f32\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--397e6661ac49a36ef69277156bedaa63\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"helloDockerHostname.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion - 1.0\n## This is a test workflow that returns the hostname of the node \n## the - job is submitted to as a test for Docker functionality on Gizmo.\n\n#### WORKFLOW - DEFINITION\n\nworkflow HelloDockerHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: \"hostname - of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n docker: - \"ubuntu:latest\"\n }\n\n parameter_meta {\n out: \"hostname of the node - the job was submitted to\"\n }\n}\n\r\n--a140cd8d08d737fbd07610f0ad944f32\r\nContent-Disposition: + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" + \ # Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n + \ Boolean within_time_limit = ValidateExecutionTime.within_limit\n }\n\n + \ parameter_meta {\n docker_image: \"Docker image to run the task in (e.g. + ubuntu:latest)\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask GetStartTime {\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n + \ }\n\n runtime {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 + GB\"\n }\n}\n\ntask GetEndTime {\n input {\n File hostname_done # Add + dependency on Hostname completion\n }\n\n command <<<\n date +%s.%N\n >>>\n\n + \ output {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n + \ docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n + \ }\n\n command <<<\n # Calculate duration using awk for floating point + arithmetic\n duration=$(awk \"BEGIN {print ~{end_time} - ~{start_time}}\")\n + \ echo \"$duration\" > duration.txt\n \n # Check if duration is less + than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" 'BEGIN {if (dur < + 120) exit 0; exit 1}'\n if [ $? -eq 0 ]; then\n echo \"true\" > within_limit.txt\n + \ else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean within_limit + = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n + \ cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname {\n input {\n String + expected_image\n Float start_time # Add start_time as input to create dependency\n + \ }\n\n command <<<\n # Split expected image into name and tag\n EXPECTED_IMAGE_NAME=$(echo + \"~{expected_image}\" | cut -d':' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" + | cut -d':' -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" + /etc/os-release | head -n1 | cut -d'=' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d'\"' -f2)\n\n # Compare image name\n if [[ \"$CURRENT_IMAGE\" + != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: Expected Docker image + $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit 1\n fi\n\n # + Compare version/tag\n if [[ \"$CURRENT_VERSION\" != \"$EXPECTED_TAG\" ]]; + then\n echo \"Error: Expected version $EXPECTED_TAG but got: $CURRENT_VERSION\"\n + \ exit 1\n fi\n\n echo \"Verified Docker Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n + \ echo \"Expected Image: ~{expected_image}\"\n echo \"Hostname: $(hostname)\"\n + \ >>>\n\n output {\n File out = stdout()\n }\n\n runtime {\n cpu: 1\n + \ memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n\r\n--397e6661ac49a36ef69277156bedaa63\r\nContent-Disposition: form-data; name=\"workflowOptions\"; filename=\"options.json\"\r\nContent-Type: application/json\r\n\r\n{\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n - \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--a140cd8d08d737fbd07610f0ad944f32--\r\n" + \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--397e6661ac49a36ef69277156bedaa63--\r\n" headers: accept: - '*/*' @@ -22,18 +57,18 @@ interactions: connection: - keep-alive content-length: - - '1120' + - '3904' content-type: - - multipart/form-data; boundary=a140cd8d08d737fbd07610f0ad944f32 + - multipart/form-data; boundary=397e6661ac49a36ef69277156bedaa63 host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1 + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1 response: body: - string: '{"id":"8c838f7b-f771-4cc5-94bc-a509f26dbcf0","status":"Submitted"}' + string: '{"id":"7253aa1c-0570-4bc9-8f0f-0739c610769c","status":"Submitted"}' headers: Connection: - keep-alive @@ -42,7 +77,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:42 GMT + - Wed, 26 Feb 2025 22:22:24 GMT Server: - nginx/1.25.3 status: @@ -60,14 +95,14 @@ interactions: content-length: - '0' host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/8c838f7b-f771-4cc5-94bc-a509f26dbcf0/abort + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7253aa1c-0570-4bc9-8f0f-0739c610769c/abort response: body: - string: '{"id":"8c838f7b-f771-4cc5-94bc-a509f26dbcf0","status":"Aborted"}' + string: '{"id":"7253aa1c-0570-4bc9-8f0f-0739c610769c","status":"Aborted"}' headers: Connection: - keep-alive @@ -76,7 +111,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:42 GMT + - Wed, 26 Feb 2025 22:22:24 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-abort/test_abort[helloHostname].yaml b/tests/cromwellapi/cassettes/test-abort/test_abort[helloHostname].yaml index 1b84d82..d370a4c 100644 --- a/tests/cromwellapi/cassettes/test-abort/test_abort[helloHostname].yaml +++ b/tests/cromwellapi/cassettes/test-abort/test_abort[helloHostname].yaml @@ -1,6 +1,6 @@ interactions: - request: - body: "--35d29ba0213e6a30bee8707a58c65735\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--9f6edb399e3f110030bc48b85f81c30e\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"helloHostname.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion 1.0\n## This is a test workflow that returns the hostname of the node \n## the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow @@ -9,10 +9,10 @@ interactions: to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n\r\n--35d29ba0213e6a30bee8707a58c65735\r\nContent-Disposition: + of the node the job was submitted to\"\n }\n}\n\r\n--9f6edb399e3f110030bc48b85f81c30e\r\nContent-Disposition: form-data; name=\"workflowOptions\"; filename=\"options.json\"\r\nContent-Type: application/json\r\n\r\n{\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n - \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--35d29ba0213e6a30bee8707a58c65735--\r\n" + \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--9f6edb399e3f110030bc48b85f81c30e--\r\n" headers: accept: - '*/*' @@ -23,16 +23,16 @@ interactions: content-length: - '1071' content-type: - - multipart/form-data; boundary=35d29ba0213e6a30bee8707a58c65735 + - multipart/form-data; boundary=9f6edb399e3f110030bc48b85f81c30e host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1 + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1 response: body: - string: '{"id":"ec04a1f3-7ae5-4ab9-9b96-44ccd289d02e","status":"Submitted"}' + string: '{"id":"b981a95e-26bf-438b-9f73-18de960295b2","status":"Submitted"}' headers: Connection: - keep-alive @@ -41,7 +41,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:42 GMT + - Wed, 26 Feb 2025 22:22:24 GMT Server: - nginx/1.25.3 status: @@ -59,14 +59,14 @@ interactions: content-length: - '0' host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/ec04a1f3-7ae5-4ab9-9b96-44ccd289d02e/abort + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/b981a95e-26bf-438b-9f73-18de960295b2/abort response: body: - string: '{"id":"ec04a1f3-7ae5-4ab9-9b96-44ccd289d02e","status":"Aborted"}' + string: '{"id":"b981a95e-26bf-438b-9f73-18de960295b2","status":"Aborted"}' headers: Connection: - keep-alive @@ -75,7 +75,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:42 GMT + - Wed, 26 Feb 2025 22:22:24 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-call/test_call_final.yaml b/tests/cromwellapi/cassettes/test-call/test_call_final.yaml index cc33d40..a15a889 100644 --- a/tests/cromwellapi/cassettes/test-call/test_call_final.yaml +++ b/tests/cromwellapi/cassettes/test-call/test_call_final.yaml @@ -9,115 +9,37 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 - user-agent: - - python-httpx/0.28.1 - method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true - response: - body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow + that returns the hostname of the node \n## the job is submitted to as a test + for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow HelloHostname + {\n call Hostname {\n }\n\n output {\n File stdout = Hostname.out\n }\n\n parameter_meta + {\n stdout: \"hostname of the node the job was submitted to\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output + {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: + \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname of the node the job + was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:04 GMT + - Wed, 26 Feb 2025 22:22:38 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1090' status: code: 200 message: OK @@ -131,115 +53,37 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"QueuedInCromwell","shardIndex":-1,"backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:10 GMT + - Wed, 26 Feb 2025 22:22:43 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1638' status: code: 200 message: OK @@ -253,115 +97,39 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:15 GMT + - Wed, 26 Feb 2025 22:22:48 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '2346' status: code: 200 message: OK @@ -375,115 +143,2870 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:53 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2346' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","backendStatus":"Running","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"jobId":"11643974","backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:58 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2391' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","backendStatus":"Running","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"jobId":"11643974","backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:03 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2391' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","backendStatus":"Running","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"jobId":"11643974","backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:08 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2391' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","backendStatus":"Running","commandLine":"echo + $(hostname)","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"jobId":"11643974","backend":"gizmo","attempt":1,"start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:13 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2391' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:15.697Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"echo + $(hostname)","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11643974","backend":"gizmo","end":"2025-02-26T22:23:14.581Z","start":"2025-02-26T22:22:35.916Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:23:13.946Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:23:14.581Z"},{"startTime":"2025-02-26T22:22:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:22:38.854Z"},{"startTime":"2025-02-26T22:22:35.917Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:22:38.854Z"},{"startTime":"2025-02-26T22:22:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:22:38.869Z"},{"startTime":"2025-02-26T22:22:35.917Z","description":"Pending","endTime":"2025-02-26T22:22:35.917Z"},{"startTime":"2025-02-26T22:22:38.869Z","description":"RunningJob","endTime":"2025-02-26T22:23:13.946Z"}]}]},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:15.697Z","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:18 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '3580' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:24 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:29 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:34 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:39 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:44 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:49 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:54 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:23:59 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:04 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:09 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:14 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:19 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:24 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:30 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:35 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:40 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:45 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:50 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:24:55 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:00 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:05 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:10 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:15 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:20 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:31 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:36 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:41 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:46 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:51 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:25:56 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:01 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:06 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:11 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:16 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:21 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:31 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:37 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:42 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:47 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:52 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:26:57 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:02 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:07 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:12 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:17 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:22 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:27 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:27:32 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:21 GMT + - Wed, 26 Feb 2025 22:27:38 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -497,115 +3020,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:26 GMT + - Wed, 26 Feb 2025 22:27:43 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -619,115 +3071,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:31 GMT + - Wed, 26 Feb 2025 22:27:48 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -741,115 +3122,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:37 GMT + - Wed, 26 Feb 2025 22:27:53 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -863,115 +3173,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:42 GMT + - Wed, 26 Feb 2025 22:27:58 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -985,115 +3224,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 - method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true - response: - body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:47 GMT + - Wed, 26 Feb 2025 22:28:03 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -1107,115 +3275,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:52 GMT + - Wed, 26 Feb 2025 22:28:08 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -1229,115 +3326,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:21:57 GMT + - Wed, 26 Feb 2025 22:28:13 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '1756' status: code: 200 message: OK @@ -1351,115 +3377,46 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:15.315Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:28:15.294Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow WildcardsandConditions {\n input {\n String prefix # + Required input for the file prefix (no default value)\n }\n\n call wildcard_and_conditions_test + {\n input:\n prefix = prefix # Explicitly pass the workflow + input to the task\n }\n\n output {\n Array[File] txt_files = + wildcard_and_conditions_test.txt_files\n String conditional_result + = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask wildcard_and_conditions_test + {\n input {\n String prefix # Required input for file creation\n Boolean + create_extra_file = true # Default value for conditional logic\n }\n\n command + <<<\n # Create multiple .txt files to test wildcard resolution\n for + i in {1..3}; do\n echo \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # + Create an extra file conditionally\n if [[ ~{create_extra_file} == + \"true\" ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''WildcardsandConditions.prefix'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:28:15.315Z","start":"2025-02-26T22:28:15.294Z","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:02 GMT + - Wed, 26 Feb 2025 22:28:18 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '2328' status: code: 200 message: OK @@ -1473,51 +3430,51 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/626d1502-f95c-42dd-a364-6257818dd175/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:54.933Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:54.985Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow ArrayOperations {\n input {\n # Input arrays for + different tests\n Array[String] strings\n Array[String] additional_strings + = [] # For testing array concatenation\n Array[Array[String]] nested_arrays + = [] # For testing nested arrays\n Array[Int] numbers = [1, 2, 3, + 4, 5] # Default integer array for numeric operations\n Array[File] + input_files = [] # Array of files to test file operations\n }\n \n # + Scatter operation to test processing of each element in an array\n # Test + empty arrays (original operation still works with empty input)\n scatter + (str in strings) {\n call Uppercase { input: text = str }\n }\n \n # + Test array indexing (accessing first and last elements)\n if (length(strings) + > 0) {\n call ValidateIndex { input: arr = strings }\n }\n \n # + Test array functions like sorting, length calculation, and flattening\n call + ArrayFunctions { \n input: \n arr = strings,\n nested + = nested_arrays\n }\n \n # Test array concatenation and verify the + combined length\n Array[String] combined = flatten([strings, additional_strings])\n call + ArrayConcat {\n input: \n arr1 = strings,\n arr2 + = additional_strings,\n expected_length = length(combined)\n }\n \n # + Test integer array operations like summation and combining arrays\n Array[Int] + more_numbers = [6, 7, 8, 9, 10] # Intermediate array declaration\n call + IntegerArrayOps {\n input:\n numbers = numbers,\n additional_numbers + = more_numbers\n }\n\n # Test file array operations like localization + and content reading\n if (length(input_files) > 0) {\n call FileArrayOps + {\n input:\n files = input_files\n }\n }\n # + Outputs to capture results of the tests\n output {\n Array[String] + uppercased = Uppercase.out # Outputs from scatter task\n Int? first_index + = ValidateIndex.first_index # First index in string array\n Int? last_index + = ValidateIndex.last_index # Last index in string array\n Array[String] + sorted_array = ArrayFunctions.sorted # Sorted array\n Array[Array[String]] + processed_nested = ArrayFunctions.processed_nested # Processed nested array\n Boolean + concat_test_passed = ArrayConcat.test_passed # Result of concatenation test\n Int + array_length = ArrayFunctions.arr_length # Length of input array\n Array[String] + flattened = ArrayFunctions.flattened # Flattened nested arrays\n # + New outputs for integer array operations \n Int sum_result = IntegerArrayOps.sum + # Sum of integer array\n Array[Int] combined_numbers = IntegerArrayOps.combined + # Combined integer arrays\n # New outputs for file array operations\n Array[String]? + file_contents = FileArrayOps.contents # Contents of files\n Boolean? + files_localized = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta {\n # Descriptions for inputs\n strings: \"Primary array of input strings\"\n additional_strings: \"Secondary array for testing concatenation\"\n nested_arrays: \"Array of arrays for testing nested @@ -1568,20 +3525,22 @@ interactions: localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''ArrayOperations.strings'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:23:54.985Z","start":"2025-02-26T22:23:54.934Z","id":"626d1502-f95c-42dd-a364-6257818dd175","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-626d1502-f95c-42dd-a364-6257818dd175"},"submission":"2025-02-26T22:22:25.114Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:07 GMT + - Wed, 26 Feb 2025 22:28:23 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '8300' status: code: 200 message: OK @@ -1595,115 +3554,94 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/6cb0a219-9b72-462a-93be-dfcf07456d01/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"testFileoperations","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:24.176Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:14.952Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow testFileoperations {\n call file_operations\n\n output + {\n File created_file1 = file_operations.created_file1\n File + moved_file = file_operations.moved_file\n File renamed_file = file_operations.renamed_file\n }\n}\n\ntask + file_operations {\n command <<<\n # Create three different files\n echo + \"This is the first created file.\" > file1.txt\n echo \"This is the + second file that will be moved.\" > file2.txt\n echo \"This is the + third file that will be renamed.\" > file3.txt\n \n # Move the + second file to a new directory\n mkdir -p output_dir\n mv file2.txt + output_dir/\n \n # Rename the third file\n mv file3.txt + file3_renamed.txt\n >>>\n\n output {\n # Output the actual existing + files\n File created_file1 = \"file1.txt\" # The first + file remains unchanged\n File moved_file = \"output_dir/file2.txt\" # + The second file after being moved\n File renamed_file = \"file3_renamed.txt\" # + The third file after being renamed\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"testFileoperations.file_operations":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/execution/stdout","shardIndex":-1,"outputs":{"renamed_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file3_renamed.txt","moved_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/output_dir/file2.txt","created_file1":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file1.txt"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":true,"hashes":{"output count":"ECCBC87E4B5CE2FE28308FD9F2A7BAF3","runtime + attribute":{"docker":"04F140687C399478C9AF991349F97438","continueOnReturnCode":"CFCD208495D565EF66E7DFF9F98764DA","failOnStderr":"68934A3E9455FA72420237EB05902327"},"output + expression":{"File renamed_file":"8E19DAF4C496F1D4EF93F1DD11DB48E8","File + created_file1":"30858D03CABDAFBE6C1AF1D08B0C218C","File moved_file":"E15E84B07B8723120530E87896941CEB"},"input + count":"CFCD208495D565EF66E7DFF9F98764DA","backend name":"00B6EE220EFAF25B88D10126BC21D1FA","command + template":"871F60E3384EFFB6FF3EA0DF67DDBE41"},"effectiveCallCachingMode":"ReadAndWriteCache","hit":true,"result":"Cache + Hit: 0be20216-abb6-4130-9423-441cfdc6c53a:testFileoperations.file_operations:-1"},"inputs":{},"returnCode":0,"backend":"gizmo","end":"2025-02-26T22:24:22.582Z","start":"2025-02-26T22:24:16.015Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:24:16.015Z","description":"Pending","endTime":"2025-02-26T22:24:16.015Z"},{"startTime":"2025-02-26T22:24:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:24:18.855Z"},{"startTime":"2025-02-26T22:24:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:24:18.869Z"},{"startTime":"2025-02-26T22:24:18.869Z","description":"CallCacheReading","endTime":"2025-02-26T22:24:18.944Z"},{"startTime":"2025-02-26T22:24:21.593Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:24:22.582Z"},{"startTime":"2025-02-26T22:24:18.944Z","description":"UpdatingCallCache","endTime":"2025-02-26T22:24:21.593Z"},{"startTime":"2025-02-26T22:24:16.015Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:24:18.854Z"}]}]},"outputs":{"testFileoperations.created_file1":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file1.txt","testFileoperations.renamed_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file3_renamed.txt","testFileoperations.moved_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/output_dir/file2.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:24:24.176Z","start":"2025-02-26T22:24:14.953Z","id":"6cb0a219-9b72-462a-93be-dfcf07456d01","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6cb0a219-9b72-462a-93be-dfcf07456d01"},"submission":"2025-02-26T22:22:25.155Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:28:28 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '5688' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/ac181a44-3a7a-4635-9881-84057b4beca0/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"globSubdir","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:51.897Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:15.135Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\nworkflow globSubdir {\n call create_nested_files\n output {\n Array[File] + matched_files = flatten([create_nested_files.matched_files_top, create_nested_files.matched_files_nested])\n }\n}\n\ntask + create_nested_files {\n command <<<\n mkdir -p subdir/nested\n echo + \"Hello\" > subdir/nested/file1.txt\n echo \"World\" > subdir/file2.txt\n >>>\n output + {\n Array[File] matched_files_top = glob(\"subdir/*.txt\")\n Array[File] + matched_files_nested = glob(\"subdir/**/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"globSubdir.create_nested_files":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/stdout","backendStatus":"Done","commandLine":"mkdir + -p subdir/nested\necho \"Hello\" > subdir/nested/file1.txt\necho \"World\" + > subdir/file2.txt","shardIndex":-1,"outputs":{"matched_files_top":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-ee3a9c1c6860f417d1e9ff1a72d2b62d/file2.txt"],"matched_files_nested":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-4c0cd9dc6b12aa01233bbc214341aae1/file1.txt"]},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11644919","backend":"gizmo","end":"2025-02-26T22:26:50.580Z","start":"2025-02-26T22:26:16.196Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:16.196Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:18.854Z"},{"startTime":"2025-02-26T22:26:18.873Z","description":"RunningJob","endTime":"2025-02-26T22:26:49.588Z"},{"startTime":"2025-02-26T22:26:49.588Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:26:50.580Z"},{"startTime":"2025-02-26T22:26:16.196Z","description":"Pending","endTime":"2025-02-26T22:26:16.196Z"},{"startTime":"2025-02-26T22:26:18.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:18.873Z"},{"startTime":"2025-02-26T22:26:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:18.854Z"}]}]},"outputs":{"globSubdir.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-ee3a9c1c6860f417d1e9ff1a72d2b62d/file2.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-4c0cd9dc6b12aa01233bbc214341aae1/file1.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:26:51.897Z","start":"2025-02-26T22:26:15.136Z","id":"ac181a44-3a7a-4635-9881-84057b4beca0","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-ac181a44-3a7a-4635-9881-84057b4beca0"},"submission":"2025-02-26T22:22:25.201Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:12 GMT + - Wed, 26 Feb 2025 22:28:33 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '4126' status: code: 200 message: OK @@ -1717,115 +3655,68 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f53b93ef-62ae-4cad-b78a-9996f93c24e7/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:55.263Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:55.292Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This workflow demonstrates the usage of conditional statements in + WDL\n## by selectively processing samples based on their properties\n\nstruct + SampleInfo {\n String name\n Float quality_score\n String type\n}\n\nworkflow + conditional_example {\n input {\n Array[SampleInfo] samples\n Float + quality_threshold\n }\n\n # Demonstrate if statement in scatter\n scatter + (sample in samples) {\n if (sample.quality_score >= quality_threshold) + {\n call process_high_quality {\n input:\n sample + = sample\n }\n }\n }\n\n # Create string arrays for + the QC report\n scatter (sample in samples) {\n String sample_line + = \"~{sample.name},~{sample.type},~{sample.quality_score}\"\n }\n\n # + Demonstrate single conditional task\n call run_qc_report {\n input:\n sample_lines + = sample_line\n }\n\n # Calculate number of high quality samples\n Int + num_high_quality = length(select_all(process_high_quality.message))\n\n # + Demonstrate separate conditional blocks (WDL 1.0 approach instead of if/else)\n Boolean + has_multiple_samples = num_high_quality > 1\n \n if (has_multiple_samples) + {\n call summarize {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Multiple + high-quality samples processed\"\n }\n }\n\n if (!has_multiple_samples) + {\n call summarize as summarize_few {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Few + or no high-quality samples found\"\n }\n }\n\n output {\n String + final_summary = select_first([summarize.summary, summarize_few.summary])\n File + qc_report = run_qc_report.report_csv\n }\n}\n\ntask process_high_quality + {\n input {\n SampleInfo sample\n }\n\n command <<<\n echo + \"Processing high quality ~{sample.type} sample ~{sample.name} (Q=~{sample.quality_score})\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask run_qc_report {\n input {\n Array[String] + sample_lines\n }\n\n command <<<\n echo \"Quality Score Summary:\"\n echo + \"Sample Name,Type,Quality Score\" > report.csv\n ~{sep=\"\\n\" sample_lines} + >> report.csv\n cat report.csv\n >>>\n\n output {\n String + report = read_string(stdout())\n File report_csv = \"report.csv\"\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask summarize + {\n input {\n Array[String] messages\n String report\n }\n\n command + <<<\n echo \"~{report}\"\n echo \"Number of samples processed: + ~{length(messages)}\"\n >>>\n\n output {\n String summary = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"message":"Workflow + input processing failed","causedBy":[{"message":"Required workflow input ''conditional_example.samples'' + not specified","causedBy":[]},{"causedBy":[],"message":"Required workflow + input ''conditional_example.quality_threshold'' not specified"}]}],"end":"2025-02-26T22:27:55.292Z","start":"2025-02-26T22:27:55.264Z","id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f53b93ef-62ae-4cad-b78a-9996f93c24e7"},"submission":"2025-02-26T22:22:25.244Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:17 GMT + - Wed, 26 Feb 2025 22:28:39 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '4186' status: code: 200 message: OK @@ -1839,115 +3730,45 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:35.234Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:35.259Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow jsonTaskOrderTest {\n input {\n String input_json # JSON + string used as input for both tasks\n }\n\n call Task1 { input: input_json + = input_json }\n call Task2 { input: input_json = input_json, previous_output + = Task1.output_file }\n\n output {\n File task1_output = Task1.output_file\n File + task2_output = Task2.output_file\n }\n}\n\ntask Task1 {\n input {\n String + input_json\n }\n \n command <<<\n echo \"Processing JSON in Task1: ~{input_json}\" + > task1_output.txt\n echo \"Task1 completed\" >> task1_output.txt\n >>>\n \n output + {\n File output_file = \"task1_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n\ntask Task2 {\n input {\n String input_json\n File + previous_output\n }\n \n command <<<\n echo \"Processing JSON in Task2: + ~{input_json}\" > task2_output.txt\n echo \"Task2 completed after Task1\" + >> task2_output.txt\n cat ~{previous_output} >> task2_output.txt\n >>>\n \n output + {\n File output_file = \"task2_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''jsonTaskOrderTest.input_json'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:27:35.259Z","start":"2025-02-26T22:27:35.235Z","id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c"},"submission":"2025-02-26T22:22:25.287Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:23 GMT + - Wed, 26 Feb 2025 22:28:44 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '2130' status: code: 200 message: OK @@ -1961,115 +3782,35 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"emptyGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:15.213Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:01.127Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow emptyGlobTest {\n call create_empty_directory\n\n output + {\n Array[File] no_files = create_empty_directory.no_files\n }\n}\n\ntask + create_empty_directory {\n command {\n mkdir empty_dir\n }\n output + {\n Array[File] no_files = glob(\"empty_dir/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"emptyGlobTest.create_empty_directory":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/call-create_empty_directory/execution/stdout","backendStatus":"Done","commandLine":"mkdir + empty_dir","shardIndex":-1,"outputs":{"no_files":[]},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645146","backend":"gizmo","end":"2025-02-26T22:27:59.579Z","start":"2025-02-26T22:27:16.266Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/call-create_empty_directory/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/call-create_empty_directory","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.865Z","description":"RunningJob","endTime":"2025-02-26T22:27:58.590Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:16.266Z","description":"Pending","endTime":"2025-02-26T22:27:16.266Z"},{"startTime":"2025-02-26T22:27:58.590Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:59.579Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.865Z"},{"startTime":"2025-02-26T22:27:16.266Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"}]}]},"outputs":{"emptyGlobTest.no_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:28:01.127Z","start":"2025-02-26T22:27:15.214Z","id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-e97ae0ae-90cb-4e1a-b367-1a6f21ad438d"},"submission":"2025-02-26T22:22:25.328Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:28 GMT + - Wed, 26 Feb 2025 22:28:49 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '3063' status: code: 200 message: OK @@ -2083,115 +3824,296 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:28:54 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '12541' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:28:59 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '12586' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:33 GMT + - Wed, 26 Feb 2025 22:29:04 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '12586' status: code: 200 message: OK @@ -2205,115 +4127,94 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:38 GMT + - Wed, 26 Feb 2025 22:29:09 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '12586' status: code: 200 message: OK @@ -2327,115 +4228,94 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:43 GMT + - Wed, 26 Feb 2025 22:29:14 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '12586' status: code: 200 message: OK @@ -2449,115 +4329,94 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:48 GMT + - Wed, 26 Feb 2025 22:29:19 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '12586' status: code: 200 message: OK @@ -2571,115 +4430,237 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Running","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Running","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"jobId":"11645570","backend":"gizmo","attempt":1,"start":"2025-02-26T22:28:42.674Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime"}]},"outputs":{},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Running","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:29:24 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '12586' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:29:26.537Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.GetStartTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608804.5666578},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11645020","backend":"gizmo","start":"2025-02-26T22:26:36.226Z","end":"2025-02-26T22:27:15.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetStartTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:26:36.226Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"PreparingJob","endTime":"2025-02-26T22:26:38.871Z"},{"startTime":"2025-02-26T22:26:38.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:26:38.854Z"},{"startTime":"2025-02-26T22:27:15.476Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:15.580Z"},{"startTime":"2025-02-26T22:26:36.226Z","description":"Pending","endTime":"2025-02-26T22:26:36.226Z"},{"startTime":"2025-02-26T22:26:38.871Z","description":"RunningJob","endTime":"2025-02-26T22:27:15.476Z"}]}],"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"# + Split expected image into name and tag\nEXPECTED_IMAGE_NAME=$(echo \"ubuntu:20.04\" + | cut -d'':'' -f1)\nEXPECTED_TAG=$(echo \"ubuntu:20.04\" | cut -d'':'' -f2)\n\n# + Get current image info\nCURRENT_IMAGE=$(grep \"ID=\" /etc/os-release | head + -n1 | cut -d''='' -f2)\nCURRENT_VERSION=$(grep \"VERSION_ID=\" /etc/os-release + | cut -d''\"'' -f2)\n\n# Compare image name\nif [[ \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" + ]]; then\n echo \"Error: Expected Docker image $EXPECTED_IMAGE_NAME but got: + $CURRENT_IMAGE\"\n exit 1\nfi\n\n# Compare version/tag\nif [[ \"$CURRENT_VERSION\" + != \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\nfi\n\necho \"Verified Docker Image: + $CURRENT_IMAGE:$CURRENT_VERSION\"\necho \"Expected Image: ubuntu:20.04\"\necho + \"Hostname: $(hostname)\"","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"start_time":1740608804.5666578,"expected_image":"ubuntu:20.04"},"returnCode":0,"jobId":"11645145","backend":"gizmo","start":"2025-02-26T22:27:17.024Z","end":"2025-02-26T22:27:53.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:18.870Z","description":"RunningJob","endTime":"2025-02-26T22:27:53.103Z"},{"startTime":"2025-02-26T22:27:53.103Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:27:53.580Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"Pending","endTime":"2025-02-26T22:27:17.024Z"},{"startTime":"2025-02-26T22:27:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:18.855Z"},{"startTime":"2025-02-26T22:27:17.024Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:18.854Z"},{"startTime":"2025-02-26T22:27:18.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:18.870Z"}]}],"HelloDockerHostname.GetEndTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stdout","backendStatus":"Done","commandLine":"date + +%s.%N","shardIndex":-1,"outputs":{"timestamp":1740608882.4606419},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"hostname_done":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout"},"returnCode":0,"jobId":"11645370","backend":"gizmo","start":"2025-02-26T22:27:54.754Z","end":"2025-02-26T22:28:41.580Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-GetEndTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:27:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:27:58.855Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:27:58.854Z"},{"startTime":"2025-02-26T22:27:58.855Z","description":"PreparingJob","endTime":"2025-02-26T22:27:58.861Z"},{"startTime":"2025-02-26T22:27:58.861Z","description":"RunningJob","endTime":"2025-02-26T22:28:41.277Z"},{"startTime":"2025-02-26T22:27:54.755Z","description":"Pending","endTime":"2025-02-26T22:27:54.755Z"},{"startTime":"2025-02-26T22:28:41.277Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:28:41.580Z"}]}],"HelloDockerHostname.ValidateExecutionTime":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stdout","backendStatus":"Done","commandLine":"# + Calculate duration using awk for floating point arithmetic\nduration=$(awk + \"BEGIN {print 1.7406088824606419E9 - 1.7406088045666578E9}\")\necho \"$duration\" + > duration.txt\n\n# Check if duration is less than 120 seconds (2 minutes)\nawk + -v dur=\"$duration\" ''BEGIN {if (dur < 120) exit 0; exit 1}''\nif [ $? -eq + 0 ]; then\n echo \"true\" > within_limit.txt\nelse\n echo \"false\" > within_limit.txt\nfi","shardIndex":-1,"outputs":{"within_limit":true,"duration_seconds":77.894},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{"end_time":1740608882.4606419,"start_time":1740608804.5666578},"returnCode":0,"jobId":"11645570","backend":"gizmo","start":"2025-02-26T22:28:42.674Z","end":"2025-02-26T22:29:24.581Z","dockerImageUsed":"ubuntu@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-ValidateExecutionTime","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:29:24.480Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:29:24.581Z"},{"startTime":"2025-02-26T22:28:48.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:28:48.855Z"},{"startTime":"2025-02-26T22:28:48.855Z","description":"PreparingJob","endTime":"2025-02-26T22:28:48.861Z"},{"startTime":"2025-02-26T22:28:42.674Z","description":"Pending","endTime":"2025-02-26T22:28:42.674Z"},{"startTime":"2025-02-26T22:28:42.674Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:28:48.854Z"},{"startTime":"2025-02-26T22:28:48.861Z","description":"RunningJob","endTime":"2025-02-26T22:29:24.480Z"}]}]},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","HelloDockerHostname.execution_time_seconds":77.894,"HelloDockerHostname.within_time_limit":true},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:29:26.537Z","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:29:29 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '13886' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/826b54df-2d82-4365-adf0-ae03996b055d/metadata?expandSubWorkflows=true + response: + body: + string: '{"workflowName":"globNonmatching","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:33.807Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:55.015Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow globNonmatching {\n call create_files\n output {\n Array[File] + unmatched_files = create_files.unmatched_files\n }\n}\n\ntask create_files + {\n command <<<\n echo \"Test file\" > test.txt\n >>>\n output + {\n Array[File] unmatched_files = glob(\"*.log\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"globNonmatching.create_files":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d/call-create_files/execution/stdout","backendStatus":"Done","commandLine":"echo + \"Test file\" > test.txt","shardIndex":-1,"outputs":{"unmatched_files":[]},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11644550","backend":"gizmo","end":"2025-02-26T22:25:32.581Z","start":"2025-02-26T22:24:56.065Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d/call-create_files/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d/call-create_files","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:24:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:24:58.854Z"},{"startTime":"2025-02-26T22:24:58.867Z","description":"RunningJob","endTime":"2025-02-26T22:25:32.359Z"},{"startTime":"2025-02-26T22:24:58.854Z","description":"PreparingJob","endTime":"2025-02-26T22:24:58.867Z"},{"startTime":"2025-02-26T22:24:56.065Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:24:58.854Z"},{"startTime":"2025-02-26T22:25:32.359Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:25:32.581Z"},{"startTime":"2025-02-26T22:24:56.065Z","description":"Pending","endTime":"2025-02-26T22:24:56.065Z"}]}]},"outputs":{"globNonmatching.unmatched_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:33.807Z","start":"2025-02-26T22:24:55.016Z","id":"826b54df-2d82-4365-adf0-ae03996b055d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-826b54df-2d82-4365-adf0-ae03996b055d"},"submission":"2025-02-26T22:22:25.411Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:53 GMT + - Wed, 26 Feb 2025 22:29:34 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '3064' status: code: 200 message: OK @@ -2693,115 +4674,51 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations - {\n input {\n # Input arrays for different tests\n Array[String] - strings\n Array[String] additional_strings = [] # For testing array - concatenation\n Array[Array[String]] nested_arrays = [] # For testing - nested arrays\n Array[Int] numbers = [1, 2, 3, 4, 5] # Default integer - array for numeric operations\n Array[File] input_files = [] # Array - of files to test file operations\n }\n \n # Scatter operation to - test processing of each element in an array\n # Test empty arrays (original - operation still works with empty input)\n scatter (str in strings) {\n call - Uppercase { input: text = str }\n }\n \n # Test array indexing (accessing - first and last elements)\n if (length(strings) > 0) {\n call ValidateIndex - { input: arr = strings }\n }\n \n # Test array functions like sorting, - length calculation, and flattening\n call ArrayFunctions { \n input: - \n arr = strings,\n nested = nested_arrays\n }\n \n # - Test array concatenation and verify the combined length\n Array[String] - combined = flatten([strings, additional_strings])\n call ArrayConcat {\n input: - \n arr1 = strings,\n arr2 = additional_strings,\n expected_length - = length(combined)\n }\n \n # Test integer array operations like - summation and combining arrays\n Array[Int] more_numbers = [6, 7, 8, 9, - 10] # Intermediate array declaration\n call IntegerArrayOps {\n input:\n numbers - = numbers,\n additional_numbers = more_numbers\n }\n\n # - Test file array operations like localization and content reading\n if (length(input_files) - > 0) {\n call FileArrayOps {\n input:\n files - = input_files\n }\n }\n # Outputs to capture results of the tests\n output - {\n Array[String] uppercased = Uppercase.out # Outputs from scatter - task\n Int? first_index = ValidateIndex.first_index # First index in - string array\n Int? last_index = ValidateIndex.last_index # Last index - in string array\n Array[String] sorted_array = ArrayFunctions.sorted - # Sorted array\n Array[Array[String]] processed_nested = ArrayFunctions.processed_nested - # Processed nested array\n Boolean concat_test_passed = ArrayConcat.test_passed - # Result of concatenation test\n Int array_length = ArrayFunctions.arr_length - # Length of input array\n Array[String] flattened = ArrayFunctions.flattened - # Flattened nested arrays\n # New outputs for integer array operations - \n Int sum_result = IntegerArrayOps.sum # Sum of integer array\n Array[Int] - combined_numbers = IntegerArrayOps.combined # Combined integer arrays\n # - New outputs for file array operations\n Array[String]? file_contents - = FileArrayOps.contents # Contents of files\n Boolean? files_localized - = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"test_nonstandard_outputs","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:54.845Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:39.768Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow test_nonstandard_outputs {\n call generate_diverse_outputs\n \n output + {\n File special_chars = generate_diverse_outputs.file_special_chars\n File + no_extension = generate_diverse_outputs.file_no_extension\n File nested_output + = generate_diverse_outputs.nested_file\n File symlink_file = generate_diverse_outputs.symlink_output\n Array[File] + glob_files = generate_diverse_outputs.pattern_files\n }\n}\n\ntask generate_diverse_outputs + {\n command <<<\n # File with special characters\n echo \"test + content\" > \"test@file#1.txt\"\n \n # File without extension\n echo + \"no extension\" > datafile\n \n # Nested directory output\n mkdir + -p nested/dir\n echo \"nested content\" > nested/dir/test.txt\n \n # + Create a symlink\n echo \"original\" > original.txt\n ln -s + original.txt link.txt\n \n # Multiple pattern files\n for + i in {1..3}; do\n echo \"pattern $i\" > \"pattern_$i.out\"\n done\n >>>\n\n output + {\n File file_special_chars = \"test@file#1.txt\"\n File file_no_extension + = \"datafile\"\n File nested_file = \"nested/dir/test.txt\"\n File + symlink_output = \"link.txt\"\n Array[File] pattern_files = glob(\"pattern_*.out\")\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"test_nonstandard_outputs.generate_diverse_outputs":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/stdout","backendStatus":"Done","commandLine":"# + File with special characters\necho \"test content\" > \"test@file#1.txt\"\n\n# + File without extension\necho \"no extension\" > datafile\n\n# Nested directory + output\nmkdir -p nested/dir\necho \"nested content\" > nested/dir/test.txt\n\n# + Create a symlink\necho \"original\" > original.txt\nln -s original.txt link.txt\n\n# + Multiple pattern files\nfor i in {1..3}; do\n echo \"pattern $i\" > \"pattern_$i.out\"\ndone","shardIndex":-1,"outputs":{"symlink_output":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/link.txt","file_no_extension":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/datafile","nested_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/nested/dir/test.txt","pattern_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_1.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_2.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_3.out"],"file_special_chars":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/test@file#1.txt"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:noble-20241118.1","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11644096","backend":"gizmo","start":"2025-02-26T22:22:55.906Z","end":"2025-02-26T22:23:38.573Z","dockerImageUsed":"ubuntu@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:22:55.906Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:22:58.854Z"},{"startTime":"2025-02-26T22:22:58.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:22:58.854Z"},{"startTime":"2025-02-26T22:22:55.906Z","description":"Pending","endTime":"2025-02-26T22:22:55.906Z"},{"startTime":"2025-02-26T22:22:58.854Z","description":"PreparingJob","endTime":"2025-02-26T22:22:59.501Z"},{"startTime":"2025-02-26T22:22:59.501Z","description":"RunningJob","endTime":"2025-02-26T22:23:37.676Z"},{"startTime":"2025-02-26T22:23:37.676Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:23:38.573Z"}]}]},"outputs":{"test_nonstandard_outputs.symlink_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/link.txt","test_nonstandard_outputs.nested_output":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/nested/dir/test.txt","test_nonstandard_outputs.glob_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_1.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_2.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_3.out"],"test_nonstandard_outputs.no_extension":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/datafile","test_nonstandard_outputs.special_chars":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/test@file#1.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:39.768Z","start":"2025-02-26T22:22:54.847Z","id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e"},"submission":"2025-02-26T22:22:25.452Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:22:59 GMT + - Wed, 26 Feb 2025 22:29:40 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '7734' + - '7671' status: code: 200 message: OK @@ -2815,117 +4732,59 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/c4747ccd-c78a-4c47-8873-83b63e0334ab/metadata?expandSubWorkflows=true response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:59.102Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:59.066Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n\nworkflow ArrayOperations {\n input {\n # Input arrays for - different tests\n Array[String] strings\n Array[String] additional_strings - = [] # For testing array concatenation\n Array[Array[String]] nested_arrays - = [] # For testing nested arrays\n Array[Int] numbers = [1, 2, 3, - 4, 5] # Default integer array for numeric operations\n Array[File] - input_files = [] # Array of files to test file operations\n }\n \n # - Scatter operation to test processing of each element in an array\n # Test - empty arrays (original operation still works with empty input)\n scatter - (str in strings) {\n call Uppercase { input: text = str }\n }\n \n # - Test array indexing (accessing first and last elements)\n if (length(strings) - > 0) {\n call ValidateIndex { input: arr = strings }\n }\n \n # - Test array functions like sorting, length calculation, and flattening\n call - ArrayFunctions { \n input: \n arr = strings,\n nested - = nested_arrays\n }\n \n # Test array concatenation and verify the - combined length\n Array[String] combined = flatten([strings, additional_strings])\n call - ArrayConcat {\n input: \n arr1 = strings,\n arr2 - = additional_strings,\n expected_length = length(combined)\n }\n \n # - Test integer array operations like summation and combining arrays\n Array[Int] - more_numbers = [6, 7, 8, 9, 10] # Intermediate array declaration\n call - IntegerArrayOps {\n input:\n numbers = numbers,\n additional_numbers - = more_numbers\n }\n\n # Test file array operations like localization - and content reading\n if (length(input_files) > 0) {\n call FileArrayOps - {\n input:\n files = input_files\n }\n }\n # - Outputs to capture results of the tests\n output {\n Array[String] - uppercased = Uppercase.out # Outputs from scatter task\n Int? first_index - = ValidateIndex.first_index # First index in string array\n Int? last_index - = ValidateIndex.last_index # Last index in string array\n Array[String] - sorted_array = ArrayFunctions.sorted # Sorted array\n Array[Array[String]] - processed_nested = ArrayFunctions.processed_nested # Processed nested array\n Boolean - concat_test_passed = ArrayConcat.test_passed # Result of concatenation test\n Int - array_length = ArrayFunctions.arr_length # Length of input array\n Array[String] - flattened = ArrayFunctions.flattened # Flattened nested arrays\n # - New outputs for integer array operations \n Int sum_result = IntegerArrayOps.sum - # Sum of integer array\n Array[Int] combined_numbers = IntegerArrayOps.combined - # Combined integer arrays\n # New outputs for file array operations\n Array[String]? - file_contents = FileArrayOps.contents # Contents of files\n Boolean? - files_localized = FileArrayOps.localization_success # File localization status\n }\n\n parameter_meta - {\n # Descriptions for inputs\n strings: \"Primary array of - input strings\"\n additional_strings: \"Secondary array for testing - concatenation\"\n nested_arrays: \"Array of arrays for testing nested - array operations\"\n numbers: \"Array of integers for testing numeric - operations\"\n input_files: \"Array of input files for testing file - localization\"\n }\n}\n\n# Task to convert string to uppercase (tests per-element - processing)\ntask Uppercase {\n input {\n String text\n }\n \n command - <<<\n echo \"~{text}\" | tr ''[:lower:]'' ''[:upper:]''\n >>>\n \n output - {\n String out = read_string(stdout())\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n\n# Task to test indexing operations\ntask - ValidateIndex {\n input {\n Array[String] arr\n }\n \n command - <<<\n echo \"0\" > first_index.txt # First index\n echo \"~{length(arr)-1}\" - > last_index.txt # Last index\n >>>\n \n output {\n Int first_index - = read_int(\"first_index.txt\")\n Int last_index = read_int(\"last_index.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test array - functions\ntask ArrayFunctions {\n input {\n Array[String] arr\n Array[Array[String]] - nested\n }\n \n command <<<\n # Sort the input array using - bash\n echo \"~{sep=''\\n'' arr}\" | sort > sorted.txt\n \n # - Get array length\n echo \"~{length(arr)}\" > length.txt\n \n # - Process nested arrays (flatten them)\n echo \"~{sep=''\\n'' flatten(nested)}\" - > flattened.txt\n >>>\n \n output {\n Array[String] sorted - = read_lines(\"sorted.txt\")\n Int arr_length = read_int(\"length.txt\")\n Array[String] - flattened = read_lines(\"flattened.txt\")\n Array[Array[String]] processed_nested - = nested # Return the original nested array\n }\n \n runtime {\n cpu: - 1\n memory: \"1 GB\"\n }\n}\n\n# Task to test concatenation of two - arrays\ntask ArrayConcat {\n input {\n Array[String] arr1\n Array[String] - arr2\n Int expected_length\n }\n \n command <<<\n actual_length=$(( - ~{length(arr1)} + ~{length(arr2)} ))\n if [ \"$actual_length\" -eq - ~{expected_length} ]; then\n echo \"true\"\n else\n echo - \"false\"\n fi\n >>>\n \n output {\n Boolean test_passed - = read_boolean(stdout())\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test integer array operations\ntask IntegerArrayOps - {\n input {\n Array[Int] numbers\n Array[Int] additional_numbers\n }\n \n command - <<<\n # Calculate sum of numbers to verify proper parsing\n total=0\n for - num in ~{sep='' '' numbers}; do\n total=$((total + num))\n done\n echo - $total > sum.txt\n\n # Combine arrays and write to file\n echo - \"~{sep=''\\n'' flatten([numbers, additional_numbers])}\" > combined.txt\n >>>\n \n output - {\n Int sum = read_int(\"sum.txt\")\n Array[Int] combined = - read_lines(\"combined.txt\")\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n}\n\n# Task to test file array operations\ntask FileArrayOps - {\n input {\n Array[File] files\n }\n \n command <<<\n # - Test file localization by reading contents\n for file in ~{sep='' '' - files}; do\n if [ -f \"$file\" ]; then\n cat \"$file\" - >> all_contents.txt\n echo \"---\" >> all_contents.txt # Separator - between files\n else\n echo \"false\" > localization_success.txt\n exit - 1\n fi\n done\n echo \"true\" > localization_success.txt\n >>>\n \n output - {\n Array[String] contents = read_lines(\"all_contents.txt\")\n Boolean - localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime - {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:55.217Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:55.193Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n## This workflow demonstrates advanced struct features in WDL including:\n## + 1. Optional fields\n## 2. Nested structs\n## 3. Default values (handled in + the workflow)\n\n#### STRUCT DEFINITIONS\n\n# Nested struct for sequencing + metadata\nstruct SequencingInfo {\n String platform\n String? flowcell_id\n Int? + lane_number\n}\n\n# Nested struct for quality metrics\nstruct QualityMetrics + {\n Float quality_score\n Float? gc_content\n Int? duplicate_rate\n}\n\n# + Main struct with nested structures and optional fields\nstruct SampleInfo + {\n String name\n String? type\n Int? read_length\n String? library_prep\n SequencingInfo + sequencing\n QualityMetrics metrics\n}\n\n#### WORKFLOW DEFINITION\n\nworkflow + struct_example {\n input {\n Array[SampleInfo] sample_information\n }\n\n scatter + (sample_info in sample_information) {\n SampleInfo processed_sample + = object {\n name: sample_info.name,\n type: select_first([sample_info.type, + \"normal\"]),\n read_length: select_first([sample_info.read_length, + 100]),\n library_prep: sample_info.library_prep,\n sequencing: + sample_info.sequencing,\n metrics: sample_info.metrics\n }\n\n call + process_sample {\n input:\n sample = processed_sample\n }\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask process_sample {\n input {\n SampleInfo + sample\n }\n\n command <<<\n echo \"Processing ~{sample.name} + (~{sample.type})\"\n echo \"Read Length: ~{sample.read_length}\"\n echo + \"Sequencing Platform: ~{sample.sequencing.platform}\"\n echo \"Flowcell + ID: ~{select_first([sample.sequencing.flowcell_id, ''N/A''])}\"\n echo + \"Lane Number: ~{select_first([sample.sequencing.lane_number, -1])}\"\n echo + \"Quality Score: ~{sample.metrics.quality_score}\"\n echo \"GC Content: + ~{select_first([sample.metrics.gc_content, 0])}\"\n echo \"Duplicate + Rate: ~{select_first([sample.metrics.duplicate_rate, 0])}%\"\n echo + \"Library Prep: ~{select_first([sample.library_prep, ''Standard''])}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required - workflow input ''ArrayOperations.strings'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:22:59.102Z","start":"2025-01-28T19:22:59.067Z","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + workflow input ''struct_example.sample_information'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:26:55.217Z","start":"2025-02-26T22:26:55.194Z","id":"c4747ccd-c78a-4c47-8873-83b63e0334ab","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-c4747ccd-c78a-4c47-8873-83b63e0334ab"},"submission":"2025-02-26T22:22:25.494Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:04 GMT + - Wed, 26 Feb 2025 22:29:45 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '8300' + - '3341' status: code: 200 message: OK @@ -2939,39 +4798,44 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/6a921318-d1b5-4e96-b311-6e389ac7dc62/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/43845110-ee3b-4503-a08c-3bb165ee8635/metadata?expandSubWorkflows=true response: body: - string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:19.017Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:56.780Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW - DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta - {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"echo - $(hostname)","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 - GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"7591047","backend":"gizmo","end":"2025-01-28T19:22:54.993Z","start":"2025-01-28T19:22:20.060Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-01-28T19:22:21.347Z","description":"RunningJob","endTime":"2025-01-28T19:22:54.627Z"},{"startTime":"2025-01-28T19:22:20.060Z","description":"Pending","endTime":"2025-01-28T19:22:20.060Z"},{"startTime":"2025-01-28T19:22:21.337Z","description":"WaitingForValueStore","endTime":"2025-01-28T19:22:21.338Z"},{"startTime":"2025-01-28T19:22:20.060Z","description":"RequestingExecutionToken","endTime":"2025-01-28T19:22:21.337Z"},{"startTime":"2025-01-28T19:22:21.338Z","description":"PreparingJob","endTime":"2025-01-28T19:22:21.347Z"},{"startTime":"2025-01-28T19:22:54.627Z","description":"UpdatingJobStore","endTime":"2025-01-28T19:22:54.993Z"}]}]},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:56.780Z","start":"2025-01-28T19:22:19.018Z","id":"6a921318-d1b5-4e96-b311-6e389ac7dc62","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6a921318-d1b5-4e96-b311-6e389ac7dc62"},"submission":"2025-01-28T19:20:42.481Z"}' + string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:14.873Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:23.067Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n# The basicTaskTest workflow calls a task named simpleTask, which takes + a string input and writes it to a file called output.txt. It demonstrates + a basic execution of a task with file output.\n\n# This tests basic task execution, + input handling, and file output functionality. It ensures that a task can + successfully take an input and generate an output.\n\nworkflow basicTaskTest + {\n input {\n String text = \"Hello, World!\"\n }\n\n call simpleTask + {\n input:\n message = text\n }\n}\n\ntask simpleTask {\n input + {\n String message\n }\n\n command <<<\n echo \"${message}\" > output.txt\n >>>\n\n output + {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"basicTaskTest.simpleTask":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/execution/stdout","shardIndex":-1,"outputs":{"outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/cacheCopy/execution/output.txt"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":true,"hashes":{"output count":"C4CA4238A0B923820DCC509A6F75849B","runtime + attribute":{"docker":"04F140687C399478C9AF991349F97438","continueOnReturnCode":"CFCD208495D565EF66E7DFF9F98764DA","failOnStderr":"68934A3E9455FA72420237EB05902327"},"output + expression":{"File outputFile":"EF1B47FFA9990E8D058D177073939DF7"},"input + count":"C4CA4238A0B923820DCC509A6F75849B","backend name":"00B6EE220EFAF25B88D10126BC21D1FA","command + template":"60686A67B7335CFF2AC7232921C47137","input":{"String message":"7959B2C4AF2FD6D142BA32BABD30CEB7"}},"effectiveCallCachingMode":"ReadAndWriteCache","hit":true,"result":"Cache + Hit: d691a1e9-ec12-458e-9d27-bdd6400faad6:basicTaskTest.simpleTask:-1"},"inputs":{"message":"Hello, + World!"},"returnCode":0,"backend":"gizmo","end":"2025-02-26T22:23:22.571Z","start":"2025-02-26T22:23:16.944Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:23:18.854Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:23:18.854Z"},{"startTime":"2025-02-26T22:23:21.583Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:23:22.570Z"},{"startTime":"2025-02-26T22:23:19.763Z","description":"UpdatingCallCache","endTime":"2025-02-26T22:23:21.583Z"},{"startTime":"2025-02-26T22:23:19.698Z","description":"CallCacheReading","endTime":"2025-02-26T22:23:19.763Z"},{"startTime":"2025-02-26T22:23:16.944Z","description":"Pending","endTime":"2025-02-26T22:23:16.944Z"},{"startTime":"2025-02-26T22:23:16.944Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:23:18.854Z"},{"startTime":"2025-02-26T22:23:18.854Z","description":"PreparingJob","endTime":"2025-02-26T22:23:19.698Z"}]}]},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:23.067Z","start":"2025-02-26T22:23:14.874Z","id":"43845110-ee3b-4503-a08c-3bb165ee8635","inputs":{"text":"Hello, + World!"},"labels":{"cromwell-workflow-id":"cromwell-43845110-ee3b-4503-a08c-3bb165ee8635"},"submission":"2025-02-26T22:22:25.535Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:09 GMT + - Wed, 26 Feb 2025 22:29:50 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '3579' + - '4377' status: code: 200 message: OK @@ -2985,46 +4849,75 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/52bdecf2-4a27-443f-8748-af12730327d8/metadata?expandSubWorkflows=true response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:58.996Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:59.014Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n# This workflow takes a tab separated file where each row is a set of - data to be used in each \n# of the independent scattered task series that - you have as your workflow process. This file \n# will, for example, have - column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows - you to know that regardless of the order of the columns in your batch file, - the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile - {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter - (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile - = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR - WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: - in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over - the batch file\n# Outputs that will be retained when execution is complete\n output - {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### - TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just - to echo them as a dummy example\ntask test {\n input {\n String in1\n String - in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo - ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required - workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:59.014Z","start":"2025-01-28T19:21:58.997Z","id":"57bfb303-9a45-4661-825c-7c11d17a2240","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-57bfb303-9a45-4661-825c-7c11d17a2240"},"submission":"2025-01-28T19:20:42.520Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:34.905Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:34.936Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow enhanced_map_test {\n input {\n # Original inputs\n Array[String] + samples\n Map[String, String] sample_metadata\n Map[String, + Int] read_lengths\n\n # New test inputs\n Map[String, Map[String, + String]] nested_map = {\n \"patient1\": {\n \"sample1\": + \"normal\",\n \"sample2\": \"tumor\"\n },\n \"patient2\": + {\n \"sample3\": \"normal\",\n \"sample4\": + \"tumor\"\n }\n }\n # We need to provide keys as + arrays since WDL 1.0 doesn''t have a keys() function\n Array[String] + patient_ids = [\"patient1\", \"patient2\"]\n }\n\n # Test nested map + processing\n scatter (patient_id in patient_ids) {\n call process_nested_map + {\n input:\n patient_id = patient_id,\n patient_data + = nested_map[patient_id],\n # We need to provide the sample + names explicitly\n samples_for_patient = if patient_id == \"patient1\" + then [\"sample1\", \"sample2\"] else [\"sample3\", \"sample4\"]\n }\n }\n\n # + Original sample processing with output map generation\n scatter (sample + in samples) {\n call process_sample {\n input:\n sample_name + = sample,\n sample_type = sample_metadata[sample],\n read_length + = read_lengths[sample]\n }\n }\n\n # Aggregate results into a + map\n call create_result_map {\n input:\n sample_names + = samples,\n processing_messages = process_sample.message\n }\n\n output + {\n Map[String, String] result_map = create_result_map.output_map\n Array[String] + nested_map_results = process_nested_map.message\n }\n}\n\ntask process_nested_map + {\n input {\n String patient_id\n Map[String, String] patient_data\n Array[String] + samples_for_patient\n }\n\n # First get the first sample ID\n String + first_sample = samples_for_patient[0]\n # Then use it to index the patient + data\n String sample_type = patient_data[first_sample]\n\n command {\n echo + \"Processing patient ${patient_id} with sample type ${sample_type}\"\n for + sample in ${sep='' '' samples_for_patient}; do\n echo \"Sample: + $sample\"\n done\n }\n\n output {\n String message = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask process_sample + {\n input {\n String sample_name\n String sample_type\n Int + read_length\n }\n\n command <<<\n echo \"Processing ~{sample_name} + (~{sample_type}) with read length ~{read_length}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask create_result_map {\n input + {\n Array[String] sample_names\n Array[String] processing_messages\n }\n\n command + <<<\n python <>>\n\n output + {\n Map[String, String] output_map = read_map(''output.txt'')\n }\n\n runtime + {\n docker: \"python:3.8-slim\"\n }\n}","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.read_lengths'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.sample_metadata'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.samples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:23:34.936Z","start":"2025-02-26T22:23:34.906Z","id":"52bdecf2-4a27-443f-8748-af12730327d8","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-52bdecf2-4a27-443f-8748-af12730327d8"},"submission":"2025-02-26T22:22:25.577Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:15 GMT + - Wed, 26 Feb 2025 22:29:55 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '2267' + - '4807' status: code: 200 message: OK @@ -3038,40 +4931,52 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/06446845-f189-451d-9e8f-221af10dc37e/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96bdebd9-cded-49d8-a73c-aba36b2282dc/metadata?expandSubWorkflows=true response: body: - string: '{"workflowName":"HelloModuleHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:20:58.908Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:45.040Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for module functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloModuleHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n modules: - \"Python/3.7.4-foss-2019b-fh1\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:35.073Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:35.092Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n# Define the structure for sampleDetails\nstruct sampleDetails {\n String + experimentType\n String prepMethod\n String tissueType\n}\n\n# Define + the main structure for the single sample\nstruct singleSample {\n String + sampleName\n String aboutSample\n String sampleDescription\n sampleDetails + details # Use the sampleDetails struct here\n}\n\nworkflow testNestedJsonArray + {\n input {\n String cellNumber\n Array[singleSample] batchOfSamples # + Array of objects representing each sample\n }\n\n scatter (sample in batchOfSamples) + {\n call processSample {\n input:\n sample = sample,\n base_file_name + = sample.sampleName \n }\n }\n\n output {\n # Collect all the fields + together from each sample into one list\n Array[File] result_allSampleInfo + = processSample.allSampleInfo\n }\n}\n\ntask processSample {\n input {\n singleSample + sample # Use singleSample type, not Object\n String base_file_name\n }\n\n command + <<<\n # Format the sample information as a single string\n allSampleInfo=\"~{sample.sampleName} + | ~{sample.aboutSample} | ~{sample.sampleDescription} | ~{sample.details.experimentType} + | ~{sample.details.prepMethod} | ~{sample.details.tissueType}\"\n \n # + Output the concatenated sample info to a file\n echo \"${allSampleInfo}\" + > ~{base_file_name}.allSampleInfo.txt\n >>>\n\n output {\n # Read all + sample info from the file and output it as an Array of Strings\n File allSampleInfo + = \"${base_file_name}.allSampleInfo.txt\"\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloModuleHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"echo - $(hostname)","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"Python/3.7.4-foss-2019b-fh1","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 - GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"7590392","backend":"gizmo","end":"2025-01-28T19:22:43.994Z","start":"2025-01-28T19:20:59.981Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-01-28T19:21:01.338Z","description":"WaitingForValueStore","endTime":"2025-01-28T19:21:01.338Z"},{"startTime":"2025-01-28T19:22:43.336Z","description":"UpdatingJobStore","endTime":"2025-01-28T19:22:43.994Z"},{"startTime":"2025-01-28T19:21:01.347Z","description":"RunningJob","endTime":"2025-01-28T19:22:43.336Z"},{"startTime":"2025-01-28T19:20:59.981Z","description":"RequestingExecutionToken","endTime":"2025-01-28T19:21:01.338Z"},{"endTime":"2025-01-28T19:21:01.347Z","startTime":"2025-01-28T19:21:01.338Z","description":"PreparingJob"},{"startTime":"2025-01-28T19:20:59.981Z","description":"Pending","endTime":"2025-01-28T19:20:59.981Z"}]}]},"outputs":{"HelloModuleHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:45.040Z","start":"2025-01-28T19:20:58.908Z","id":"06446845-f189-451d-9e8f-221af10dc37e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-06446845-f189-451d-9e8f-221af10dc37e"},"submission":"2025-01-28T19:20:42.560Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.cellNumber'' not specified"},{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.batchOfSamples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:35.092Z","start":"2025-02-26T22:25:35.074Z","id":"96bdebd9-cded-49d8-a73c-aba36b2282dc","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96bdebd9-cded-49d8-a73c-aba36b2282dc"},"submission":"2025-02-26T22:22:25.619Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:20 GMT + - Wed, 26 Feb 2025 22:30:00 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '3721' + - '2731' status: code: 200 message: OK @@ -3085,34 +4990,35 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/3daeca54-daf0-4498-af26-04c84a42641c/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/metadata?expandSubWorkflows=true response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:18.945Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:18.938Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### - WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask - oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime - { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed - to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value - ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:18.945Z","start":"2025-01-28T19:21:18.939Z","id":"3daeca54-daf0-4498-af26-04c84a42641c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-3daeca54-daf0-4498-af26-04c84a42641c"},"submission":"2025-01-28T19:20:42.598Z"}' + string: '{"workflowName":"basicGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:15.045Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:53.863Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow basicGlobTest {\n call create_files\n output {\n Array[File] + matched_files = create_files.txt_files\n }\n}\n\ntask create_files {\n command + <<<\n echo \"File 1\" > file1.txt\n echo \"File 2\" > file2.txt\n >>>\n output + {\n Array[File] txt_files = glob(\"*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"basicGlobTest.create_files":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/stdout","backendStatus":"Done","commandLine":"echo + \"File 1\" > file1.txt\necho \"File 2\" > file2.txt","shardIndex":-1,"outputs":{"txt_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file1.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file2.txt"]},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 + GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"11644682","backend":"gizmo","end":"2025-02-26T22:25:52.581Z","start":"2025-02-26T22:25:16.096Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files","attempt":1,"executionEvents":[{"startTime":"2025-02-26T22:25:16.097Z","description":"RequestingExecutionToken","endTime":"2025-02-26T22:25:18.853Z"},{"startTime":"2025-02-26T22:25:16.096Z","description":"Pending","endTime":"2025-02-26T22:25:16.097Z"},{"startTime":"2025-02-26T22:25:18.853Z","description":"WaitingForValueStore","endTime":"2025-02-26T22:25:18.854Z"},{"startTime":"2025-02-26T22:25:52.262Z","description":"UpdatingJobStore","endTime":"2025-02-26T22:25:52.581Z"},{"startTime":"2025-02-26T22:25:18.854Z","description":"PreparingJob","endTime":"2025-02-26T22:25:18.874Z"},{"startTime":"2025-02-26T22:25:18.874Z","description":"RunningJob","endTime":"2025-02-26T22:25:52.262Z"}]}]},"outputs":{"basicGlobTest.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file1.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file2.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:53.863Z","start":"2025-02-26T22:25:15.046Z","id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-95d1ea6f-f6b7-452e-9ee1-650a661cce7b"},"submission":"2025-02-26T22:22:25.660Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:25 GMT + - Wed, 26 Feb 2025 22:30:05 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1307' + - '3814' status: code: 200 message: OK @@ -3126,44 +5032,46 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/7dd646ef-2577-4d8d-9596-3e3384f3b09d/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?expandSubWorkflows=true response: body: - string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:44.170Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:39.046Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n\n# The basicTaskTest workflow calls a task named simpleTask, which takes - a string input and writes it to a file called output.txt. It demonstrates - a basic execution of a task with file output.\n\n# This tests basic task execution, - input handling, and file output functionality. It ensures that a task can - successfully take an input and generate an output.\n\nworkflow basicTaskTest - {\n input {\n String text = \"Hello, World!\"\n }\n\n call simpleTask - {\n input:\n message = text\n }\n}\n\ntask simpleTask {\n input - {\n String message\n }\n\n command <<<\n echo \"${message}\" > output.txt\n >>>\n\n output - {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"basicTaskTest.simpleTask":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/execution/stdout","shardIndex":-1,"outputs":{"outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/cacheCopy/execution/output.txt"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:20.04","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1.953125 - GB"},"callCaching":{"allowResultReuse":true,"hashes":{"output count":"C4CA4238A0B923820DCC509A6F75849B","runtime - attribute":{"docker":"04F140687C399478C9AF991349F97438","continueOnReturnCode":"CFCD208495D565EF66E7DFF9F98764DA","failOnStderr":"68934A3E9455FA72420237EB05902327"},"output - expression":{"File outputFile":"EF1B47FFA9990E8D058D177073939DF7"},"input - count":"C4CA4238A0B923820DCC509A6F75849B","backend name":"00B6EE220EFAF25B88D10126BC21D1FA","command - template":"60686A67B7335CFF2AC7232921C47137","input":{"String message":"7959B2C4AF2FD6D142BA32BABD30CEB7"}},"effectiveCallCachingMode":"ReadAndWriteCache","hit":true,"result":"Cache - Hit: 8c6dc092-d0ed-432a-be1c-ae6f59117581:basicTaskTest.simpleTask:-1"},"inputs":{"message":"Hello, - World!"},"returnCode":0,"backend":"gizmo","end":"2025-01-28T19:22:43.995Z","start":"2025-01-28T19:22:41.111Z","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask","attempt":1,"executionEvents":[{"startTime":"2025-01-28T19:22:41.338Z","description":"WaitingForValueStore","endTime":"2025-01-28T19:22:41.338Z"},{"startTime":"2025-01-28T19:22:41.394Z","description":"UpdatingCallCache","endTime":"2025-01-28T19:22:43.010Z"},{"startTime":"2025-01-28T19:22:41.353Z","description":"CallCacheReading","endTime":"2025-01-28T19:22:41.394Z"},{"startTime":"2025-01-28T19:22:41.111Z","description":"RequestingExecutionToken","endTime":"2025-01-28T19:22:41.338Z"},{"startTime":"2025-01-28T19:22:41.338Z","description":"PreparingJob","endTime":"2025-01-28T19:22:41.353Z"},{"startTime":"2025-01-28T19:22:43.010Z","description":"UpdatingJobStore","endTime":"2025-01-28T19:22:43.994Z"},{"startTime":"2025-01-28T19:22:41.111Z","description":"Pending","endTime":"2025-01-28T19:22:41.111Z"}]}]},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:44.170Z","start":"2025-01-28T19:22:39.046Z","id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d","inputs":{"text":"Hello, - World!"},"labels":{"cromwell-workflow-id":"cromwell-7dd646ef-2577-4d8d-9596-3e3384f3b09d"},"submission":"2025-01-28T19:20:42.640Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:55.122Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:55.104Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n# This workflow takes a tab separated file where each row is a set of + data to be used in each \n# of the independent scattered task series that + you have as your workflow process. This file \n# will, for example, have + column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows + you to know that regardless of the order of the columns in your batch file, + the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile + {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter + (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile + = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR + WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: + in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over + the batch file\n# Outputs that will be retained when execution is complete\n output + {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### + TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just + to echo them as a dummy example\ntask test {\n input {\n String in1\n String + in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo + ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:55.122Z","start":"2025-02-26T22:25:55.105Z","id":"96c23315-8890-4eed-a885-394958a2312e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96c23315-8890-4eed-a885-394958a2312e"},"submission":"2025-02-26T22:22:25.701Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:30 GMT + - Wed, 26 Feb 2025 22:30:10 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '4377' + - '2267' status: code: 200 message: OK @@ -3177,40 +5085,34 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/5150f1dc-5451-4dc4-b288-ef0ddf8da487/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7d18588e-1455-4741-8e5d-d1b15c998a83/metadata?expandSubWorkflows=true response: body: - string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:38.968Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:23:24.051Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for Docker functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloDockerHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n docker: - \"ubuntu:latest\"\n }\n\n parameter_meta {\n out: \"hostname of the node - the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": - false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{"HelloDockerHostname.Hostname":[{"executionStatus":"Done","stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout","backendStatus":"Done","commandLine":"echo - $(hostname)","shardIndex":-1,"outputs":{"out":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout"},"runtimeAttributes":{"failOnStderr":"false","partition":"campus-new","continueOnReturnCode":"0","docker":"ubuntu:latest","modules":"","gpus":"0","maxRetries":"0","cpu":"1","memory":"1 - GB"},"callCaching":{"allowResultReuse":false,"effectiveCallCachingMode":"CallCachingOff"},"inputs":{},"returnCode":0,"jobId":"7590775","backend":"gizmo","start":"2025-01-28T19:21:40.010Z","end":"2025-01-28T19:23:22.992Z","dockerImageUsed":"ubuntu@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab","stderr":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stderr","callRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname","attempt":1,"executionEvents":[{"startTime":"2025-01-28T19:21:40.010Z","description":"Pending","endTime":"2025-01-28T19:21:40.011Z"},{"startTime":"2025-01-28T19:21:41.338Z","description":"WaitingForValueStore","endTime":"2025-01-28T19:21:41.338Z"},{"startTime":"2025-01-28T19:23:22.556Z","description":"UpdatingJobStore","endTime":"2025-01-28T19:23:22.992Z"},{"startTime":"2025-01-28T19:21:40.011Z","description":"RequestingExecutionToken","endTime":"2025-01-28T19:21:41.338Z"},{"startTime":"2025-01-28T19:21:41.338Z","description":"PreparingJob","endTime":"2025-01-28T19:21:41.350Z"},{"startTime":"2025-01-28T19:21:41.350Z","description":"RunningJob","endTime":"2025-01-28T19:23:22.556Z"}]}]},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:23:24.050Z","start":"2025-01-28T19:21:38.969Z","id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-5150f1dc-5451-4dc4-b288-ef0ddf8da487"},"submission":"2025-01-28T19:20:42.683Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:34.985Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:35.003Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### + WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask + oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime + { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed + to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value + ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:24:35.003Z","start":"2025-02-26T22:24:34.986Z","id":"7d18588e-1455-4741-8e5d-d1b15c998a83","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-7d18588e-1455-4741-8e5d-d1b15c998a83"},"submission":"2025-02-26T22:22:25.741Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:35 GMT + - Wed, 26 Feb 2025 22:30:15 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '3803' + - '1307' status: code: 200 message: OK diff --git a/tests/cromwellapi/cassettes/test-call/test_call_initial.yaml b/tests/cromwellapi/cassettes/test-call/test_call_initial.yaml index 6814a8c..8392a09 100644 --- a/tests/cromwellapi/cassettes/test-call/test_call_initial.yaml +++ b/tests/cromwellapi/cassettes/test-call/test_call_initial.yaml @@ -9,31 +9,40 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=true response: body: - string: "{\n \"status\": \"fail\",\n \"message\": \"Unrecognized workflow - ID: b4c610ff-437a-40a5-9562-499ffbc50566\"\n}" + string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow + that returns the hostname of the node \n## the job is submitted to as a test + for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow HelloHostname + {\n call Hostname {\n }\n\n output {\n File stdout = Hostname.out\n }\n\n parameter_meta + {\n stdout: \"hostname of the node the job was submitted to\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output + {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: + \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname of the node the job + was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:42 GMT + - Wed, 26 Feb 2025 22:22:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '101' + - '1090' status: - code: 404 - message: Not Found + code: 200 + message: OK - request: body: '' headers: @@ -44,11 +53,62 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow WildcardsandConditions + {\n input {\n String prefix # Required input for the file prefix + (no default value)\n }\n\n call wildcard_and_conditions_test {\n input:\n prefix + = prefix # Explicitly pass the workflow input to the task\n }\n\n output + {\n Array[File] txt_files = wildcard_and_conditions_test.txt_files\n String + conditional_result = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask + wildcard_and_conditions_test {\n input {\n String prefix # Required + input for file creation\n Boolean create_extra_file = true # Default + value for conditional logic\n }\n\n command <<<\n # Create multiple + .txt files to test wildcard resolution\n for i in {1..3}; do\n echo + \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # Create + an extra file conditionally\n if [[ ~{create_extra_file} == \"true\" + ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1756' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/626d1502-f95c-42dd-a364-6257818dd175/metadata?expandSubWorkflows=true response: body: string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations @@ -139,14 +199,14 @@ interactions: localization_success = read_boolean(\"localization_success.txt\")\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"626d1502-f95c-42dd-a364-6257818dd175","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-626d1502-f95c-42dd-a364-6257818dd175"},"submission":"2025-02-26T22:22:25.114Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:46 GMT + - Wed, 26 Feb 2025 22:22:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -166,37 +226,83 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/6a921318-d1b5-4e96-b311-6e389ac7dc62/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/6cb0a219-9b72-462a-93be-dfcf07456d01/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow - that returns the hostname of the node \n## the job is submitted to as a test - for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow HelloHostname - {\n call Hostname {\n }\n\n output {\n File stdout = Hostname.out\n }\n\n parameter_meta - {\n stdout: \"hostname of the node the job was submitted to\"\n }\n}\n\n#### - TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output - {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: - \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname of the node the job - was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow testFileoperations + {\n call file_operations\n\n output {\n File created_file1 = + file_operations.created_file1\n File moved_file = file_operations.moved_file\n File + renamed_file = file_operations.renamed_file\n }\n}\n\ntask file_operations + {\n command <<<\n # Create three different files\n echo \"This + is the first created file.\" > file1.txt\n echo \"This is the second + file that will be moved.\" > file2.txt\n echo \"This is the third file + that will be renamed.\" > file3.txt\n \n # Move the second file + to a new directory\n mkdir -p output_dir\n mv file2.txt output_dir/\n \n # + Rename the third file\n mv file3.txt file3_renamed.txt\n >>>\n\n output + {\n # Output the actual existing files\n File created_file1 + = \"file1.txt\" # The first file remains unchanged\n File + moved_file = \"output_dir/file2.txt\" # The second file after being + moved\n File renamed_file = \"file3_renamed.txt\" # The third + file after being renamed\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"6cb0a219-9b72-462a-93be-dfcf07456d01","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6cb0a219-9b72-462a-93be-dfcf07456d01"},"submission":"2025-02-26T22:22:25.155Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1530' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/ac181a44-3a7a-4635-9881-84057b4beca0/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\nworkflow globSubdir {\n call + create_nested_files\n output {\n Array[File] matched_files = flatten([create_nested_files.matched_files_top, + create_nested_files.matched_files_nested])\n }\n}\n\ntask create_nested_files + {\n command <<<\n mkdir -p subdir/nested\n echo \"Hello\" + > subdir/nested/file1.txt\n echo \"World\" > subdir/file2.txt\n >>>\n output + {\n Array[File] matched_files_top = glob(\"subdir/*.txt\")\n Array[File] + matched_files_nested = glob(\"subdir/**/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"6a921318-d1b5-4e96-b311-6e389ac7dc62","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6a921318-d1b5-4e96-b311-6e389ac7dc62"},"submission":"2025-01-28T19:20:42.481Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"ac181a44-3a7a-4635-9881-84057b4beca0","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-ac181a44-3a7a-4635-9881-84057b4beca0"},"submission":"2025-02-26T22:22:25.201Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:46 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1090' + - '1003' status: code: 200 message: OK @@ -210,44 +316,64 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f53b93ef-62ae-4cad-b78a-9996f93c24e7/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n# This workflow takes a - tab separated file where each row is a set of data to be used in each \n# - of the independent scattered task series that you have as your workflow process. This - file \n# will, for example, have column names `sampleName`, `bamLocation`, - and `bedlocation`. This\n# allows you to know that regardless of the order - of the columns in your batch file, the correct\n# inputs will be used for - the tasks you define. \nworkflow parseBatchFile {\n input {\n File batchFile\n }\n Array[Object] - batchInfo = read_objects(batchFile)\n scatter (job in batchInfo){\n String - sampleName = job.sampleName\n File bamFile = job.bamLocation\n File - bedFile = job.bedLocation\n\n ## INSERT YOUR WORKFLOW TO RUN PER LINE IN - YOUR BATCH FILE HERE!!!!\n call test {\n input: in1=sampleName, - in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over the batch file\n# - Outputs that will be retained when execution is complete\n output {\n Array[File] - outputArray = test.item_out\n }\n# End workflow\n}\n\n#### TASK DEFINITIONS\n# - echo some text to stdout, treats files as strings just to echo them as a dummy - example\ntask test {\n input {\n String in1\n String in2\n String - in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo ~{in3}\n }\n output - {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"57bfb303-9a45-4661-825c-7c11d17a2240","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-57bfb303-9a45-4661-825c-7c11d17a2240"},"submission":"2025-01-28T19:20:42.520Z"}' + string: '{"submittedFiles":{"workflow":"version 1.0\n## This workflow demonstrates + the usage of conditional statements in WDL\n## by selectively processing samples + based on their properties\n\nstruct SampleInfo {\n String name\n Float + quality_score\n String type\n}\n\nworkflow conditional_example {\n input + {\n Array[SampleInfo] samples\n Float quality_threshold\n }\n\n # + Demonstrate if statement in scatter\n scatter (sample in samples) {\n if + (sample.quality_score >= quality_threshold) {\n call process_high_quality + {\n input:\n sample = sample\n }\n }\n }\n\n # + Create string arrays for the QC report\n scatter (sample in samples) {\n String + sample_line = \"~{sample.name},~{sample.type},~{sample.quality_score}\"\n }\n\n # + Demonstrate single conditional task\n call run_qc_report {\n input:\n sample_lines + = sample_line\n }\n\n # Calculate number of high quality samples\n Int + num_high_quality = length(select_all(process_high_quality.message))\n\n # + Demonstrate separate conditional blocks (WDL 1.0 approach instead of if/else)\n Boolean + has_multiple_samples = num_high_quality > 1\n \n if (has_multiple_samples) + {\n call summarize {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Multiple + high-quality samples processed\"\n }\n }\n\n if (!has_multiple_samples) + {\n call summarize as summarize_few {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Few + or no high-quality samples found\"\n }\n }\n\n output {\n String + final_summary = select_first([summarize.summary, summarize_few.summary])\n File + qc_report = run_qc_report.report_csv\n }\n}\n\ntask process_high_quality + {\n input {\n SampleInfo sample\n }\n\n command <<<\n echo + \"Processing high quality ~{sample.type} sample ~{sample.name} (Q=~{sample.quality_score})\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask run_qc_report {\n input {\n Array[String] + sample_lines\n }\n\n command <<<\n echo \"Quality Score Summary:\"\n echo + \"Sample Name,Type,Quality Score\" > report.csv\n ~{sep=\"\\n\" sample_lines} + >> report.csv\n cat report.csv\n >>>\n\n output {\n String + report = read_string(stdout())\n File report_csv = \"report.csv\"\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask summarize + {\n input {\n Array[String] messages\n String report\n }\n\n command + <<<\n echo \"~{report}\"\n echo \"Number of samples processed: + ~{length(messages)}\"\n >>>\n\n output {\n String summary = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f53b93ef-62ae-4cad-b78a-9996f93c24e7"},"submission":"2025-02-26T22:22:25.244Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:46 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1700' + - '3510' status: code: 200 message: OK @@ -261,38 +387,42 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/06446845-f189-451d-9e8f-221af10dc37e/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow - that returns the hostname of the node \n## the job is submitted to as a test - for module functionality on Gizmo.\n\n#### WORKFLOW DEFINITION\n\nworkflow - HelloModuleHostname {\n call Hostname {\n }\n\n output {\n File stdout - = Hostname.out\n }\n\n parameter_meta {\n stdout: \"hostname of the node - the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname - {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out - = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n modules: - \"Python/3.7.4-foss-2019b-fh1\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow jsonTaskOrderTest + {\n input {\n String input_json # JSON string used as input for both + tasks\n }\n\n call Task1 { input: input_json = input_json }\n call Task2 + { input: input_json = input_json, previous_output = Task1.output_file }\n\n output + {\n File task1_output = Task1.output_file\n File task2_output = Task2.output_file\n }\n}\n\ntask + Task1 {\n input {\n String input_json\n }\n \n command <<<\n echo + \"Processing JSON in Task1: ~{input_json}\" > task1_output.txt\n echo \"Task1 + completed\" >> task1_output.txt\n >>>\n \n output {\n File output_file + = \"task1_output.txt\"\n }\n \n runtime {\n cpu: 1\n memory: \"2G\"\n }\n}\n\ntask + Task2 {\n input {\n String input_json\n File previous_output\n }\n \n command + <<<\n echo \"Processing JSON in Task2: ~{input_json}\" > task2_output.txt\n echo + \"Task2 completed after Task1\" >> task2_output.txt\n cat ~{previous_output} + >> task2_output.txt\n >>>\n \n output {\n File output_file = \"task2_output.txt\"\n }\n \n runtime + {\n cpu: 1\n memory: \"2G\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"06446845-f189-451d-9e8f-221af10dc37e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-06446845-f189-451d-9e8f-221af10dc37e"},"submission":"2025-01-28T19:20:42.560Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c"},"submission":"2025-02-26T22:22:25.287Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:46 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1151' + - '1559' status: code: 200 message: OK @@ -306,31 +436,112 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/3daeca54-daf0-4498-af26-04c84a42641c/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow emptyGlobTest + {\n call create_empty_directory\n\n output {\n Array[File] no_files + = create_empty_directory.no_files\n }\n}\n\ntask create_empty_directory + {\n command {\n mkdir empty_dir\n }\n output {\n Array[File] + no_files = glob(\"empty_dir/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-e97ae0ae-90cb-4e1a-b367-1a6f21ad438d"},"submission":"2025-02-26T22:22:25.328Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '772' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=true response: body: string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow - that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### - WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask - oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime - { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"3daeca54-daf0-4498-af26-04c84a42641c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-3daeca54-daf0-4498-af26-04c84a42641c"},"submission":"2025-01-28T19:20:42.598Z"}' + that returns the Docker image name and tag\n## and measures execution time + of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow HelloDockerHostname + {\n input {\n String docker_image = \"ubuntu:20.04\" # Default value + but can be overridden\n }\n\n call GetStartTime\n\n call Hostname {\n input:\n expected_image + = docker_image,\n start_time = GetStartTime.timestamp # Add dependency + on start time\n }\n\n call GetEndTime {\n input:\n hostname_done + = Hostname.out # Add dependency on Hostname completion\n }\n\n call ValidateExecutionTime + {\n input:\n start_time = GetStartTime.timestamp,\n end_time + = GetEndTime.timestamp\n }\n\n output {\n File stdout = Hostname.out\n Float + execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:47 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '657' + - '4092' status: code: 200 message: OK @@ -344,11 +555,166 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/7dd646ef-2577-4d8d-9596-3e3384f3b09d/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/826b54df-2d82-4365-adf0-ae03996b055d/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow globNonmatching + {\n call create_files\n output {\n Array[File] unmatched_files + = create_files.unmatched_files\n }\n}\n\ntask create_files {\n command + <<<\n echo \"Test file\" > test.txt\n >>>\n output {\n Array[File] + unmatched_files = glob(\"*.log\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"826b54df-2d82-4365-adf0-ae03996b055d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-826b54df-2d82-4365-adf0-ae03996b055d"},"submission":"2025-02-26T22:22:25.411Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '771' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow test_nonstandard_outputs + {\n call generate_diverse_outputs\n \n output {\n File special_chars + = generate_diverse_outputs.file_special_chars\n File no_extension = + generate_diverse_outputs.file_no_extension\n File nested_output = generate_diverse_outputs.nested_file\n File + symlink_file = generate_diverse_outputs.symlink_output\n Array[File] + glob_files = generate_diverse_outputs.pattern_files\n }\n}\n\ntask generate_diverse_outputs + {\n command <<<\n # File with special characters\n echo \"test + content\" > \"test@file#1.txt\"\n \n # File without extension\n echo + \"no extension\" > datafile\n \n # Nested directory output\n mkdir + -p nested/dir\n echo \"nested content\" > nested/dir/test.txt\n \n # + Create a symlink\n echo \"original\" > original.txt\n ln -s + original.txt link.txt\n \n # Multiple pattern files\n for + i in {1..3}; do\n echo \"pattern $i\" > \"pattern_$i.out\"\n done\n >>>\n\n output + {\n File file_special_chars = \"test@file#1.txt\"\n File file_no_extension + = \"datafile\"\n File nested_file = \"nested/dir/test.txt\"\n File + symlink_output = \"link.txt\"\n Array[File] pattern_files = glob(\"pattern_*.out\")\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e"},"submission":"2025-02-26T22:22:25.452Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1899' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/c4747ccd-c78a-4c47-8873-83b63e0334ab/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\n## This workflow demonstrates + advanced struct features in WDL including:\n## 1. Optional fields\n## 2. Nested + structs\n## 3. Default values (handled in the workflow)\n\n#### STRUCT DEFINITIONS\n\n# + Nested struct for sequencing metadata\nstruct SequencingInfo {\n String + platform\n String? flowcell_id\n Int? lane_number\n}\n\n# Nested struct + for quality metrics\nstruct QualityMetrics {\n Float quality_score\n Float? + gc_content\n Int? duplicate_rate\n}\n\n# Main struct with nested structures + and optional fields\nstruct SampleInfo {\n String name\n String? type\n Int? + read_length\n String? library_prep\n SequencingInfo sequencing\n QualityMetrics + metrics\n}\n\n#### WORKFLOW DEFINITION\n\nworkflow struct_example {\n input + {\n Array[SampleInfo] sample_information\n }\n\n scatter (sample_info + in sample_information) {\n SampleInfo processed_sample = object {\n name: + sample_info.name,\n type: select_first([sample_info.type, \"normal\"]),\n read_length: + select_first([sample_info.read_length, 100]),\n library_prep: sample_info.library_prep,\n sequencing: + sample_info.sequencing,\n metrics: sample_info.metrics\n }\n\n call + process_sample {\n input:\n sample = processed_sample\n }\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask process_sample {\n input {\n SampleInfo + sample\n }\n\n command <<<\n echo \"Processing ~{sample.name} + (~{sample.type})\"\n echo \"Read Length: ~{sample.read_length}\"\n echo + \"Sequencing Platform: ~{sample.sequencing.platform}\"\n echo \"Flowcell + ID: ~{select_first([sample.sequencing.flowcell_id, ''N/A''])}\"\n echo + \"Lane Number: ~{select_first([sample.sequencing.lane_number, -1])}\"\n echo + \"Quality Score: ~{sample.metrics.quality_score}\"\n echo \"GC Content: + ~{select_first([sample.metrics.gc_content, 0])}\"\n echo \"Duplicate + Rate: ~{select_first([sample.metrics.duplicate_rate, 0])}%\"\n echo + \"Library Prep: ~{select_first([sample.library_prep, ''Standard''])}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"c4747ccd-c78a-4c47-8873-83b63e0334ab","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-c4747ccd-c78a-4c47-8873-83b63e0334ab"},"submission":"2025-02-26T22:22:25.494Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2765' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/43845110-ee3b-4503-a08c-3bb165ee8635/metadata?expandSubWorkflows=true response: body: string: '{"submittedFiles":{"workflow":"version 1.0\n\n# The basicTaskTest workflow @@ -360,14 +726,14 @@ interactions: text = \"Hello, World!\"\n }\n\n call simpleTask {\n input:\n message = text\n }\n}\n\ntask simpleTask {\n input {\n String message\n }\n\n command <<<\n echo \"${message}\" > output.txt\n >>>\n\n output {\n File - outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-7dd646ef-2577-4d8d-9596-3e3384f3b09d"},"submission":"2025-01-28T19:20:42.640Z"}' + outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"43845110-ee3b-4503-a08c-3bb165ee8635","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-43845110-ee3b-4503-a08c-3bb165ee8635"},"submission":"2025-02-26T22:22:25.535Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:47 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -387,38 +753,289 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/5150f1dc-5451-4dc4-b288-ef0ddf8da487/metadata?expandSubWorkflows=true + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/52bdecf2-4a27-443f-8748-af12730327d8/metadata?expandSubWorkflows=true response: body: - string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow - that returns the hostname of the node \n## the job is submitted to as a test - for Docker functionality on Gizmo.\n\n#### WORKFLOW DEFINITION\n\nworkflow - HelloDockerHostname {\n call Hostname {\n }\n\n output {\n File stdout - = Hostname.out\n }\n\n parameter_meta {\n stdout: \"hostname of the node - the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname - {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out - = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n docker: - \"ubuntu:latest\"\n }\n\n parameter_meta {\n out: \"hostname of the node - the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow enhanced_map_test + {\n input {\n # Original inputs\n Array[String] samples\n Map[String, + String] sample_metadata\n Map[String, Int] read_lengths\n\n # + New test inputs\n Map[String, Map[String, String]] nested_map = {\n \"patient1\": + {\n \"sample1\": \"normal\",\n \"sample2\": + \"tumor\"\n },\n \"patient2\": {\n \"sample3\": + \"normal\",\n \"sample4\": \"tumor\"\n }\n }\n # + We need to provide keys as arrays since WDL 1.0 doesn''t have a keys() function\n Array[String] + patient_ids = [\"patient1\", \"patient2\"]\n }\n\n # Test nested map + processing\n scatter (patient_id in patient_ids) {\n call process_nested_map + {\n input:\n patient_id = patient_id,\n patient_data + = nested_map[patient_id],\n # We need to provide the sample + names explicitly\n samples_for_patient = if patient_id == \"patient1\" + then [\"sample1\", \"sample2\"] else [\"sample3\", \"sample4\"]\n }\n }\n\n # + Original sample processing with output map generation\n scatter (sample + in samples) {\n call process_sample {\n input:\n sample_name + = sample,\n sample_type = sample_metadata[sample],\n read_length + = read_lengths[sample]\n }\n }\n\n # Aggregate results into a + map\n call create_result_map {\n input:\n sample_names + = samples,\n processing_messages = process_sample.message\n }\n\n output + {\n Map[String, String] result_map = create_result_map.output_map\n Array[String] + nested_map_results = process_nested_map.message\n }\n}\n\ntask process_nested_map + {\n input {\n String patient_id\n Map[String, String] patient_data\n Array[String] + samples_for_patient\n }\n\n # First get the first sample ID\n String + first_sample = samples_for_patient[0]\n # Then use it to index the patient + data\n String sample_type = patient_data[first_sample]\n\n command {\n echo + \"Processing patient ${patient_id} with sample type ${sample_type}\"\n for + sample in ${sep='' '' samples_for_patient}; do\n echo \"Sample: + $sample\"\n done\n }\n\n output {\n String message = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask process_sample + {\n input {\n String sample_name\n String sample_type\n Int + read_length\n }\n\n command <<<\n echo \"Processing ~{sample_name} + (~{sample_type}) with read length ~{read_length}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask create_result_map {\n input + {\n Array[String] sample_names\n Array[String] processing_messages\n }\n\n command + <<<\n python <>>\n\n output + {\n Map[String, String] output_map = read_map(''output.txt'')\n }\n\n runtime + {\n docker: \"python:3.8-slim\"\n }\n}","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-5150f1dc-5451-4dc4-b288-ef0ddf8da487"},"submission":"2025-01-28T19:20:42.683Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"52bdecf2-4a27-443f-8748-af12730327d8","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-52bdecf2-4a27-443f-8748-af12730327d8"},"submission":"2025-02-26T22:22:25.577Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '4038' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96bdebd9-cded-49d8-a73c-aba36b2282dc/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\n# Define the structure + for sampleDetails\nstruct sampleDetails {\n String experimentType\n String + prepMethod\n String tissueType\n}\n\n# Define the main structure for the + single sample\nstruct singleSample {\n String sampleName\n String aboutSample\n String + sampleDescription\n sampleDetails details # Use the sampleDetails struct + here\n}\n\nworkflow testNestedJsonArray {\n input {\n String cellNumber\n Array[singleSample] + batchOfSamples # Array of objects representing each sample\n }\n\n scatter + (sample in batchOfSamples) {\n call processSample {\n input:\n sample + = sample,\n base_file_name = sample.sampleName \n }\n }\n\n output + {\n # Collect all the fields together from each sample into one list\n Array[File] + result_allSampleInfo = processSample.allSampleInfo\n }\n}\n\ntask processSample + {\n input {\n singleSample sample # Use singleSample type, not Object\n String + base_file_name\n }\n\n command <<<\n # Format the sample information + as a single string\n allSampleInfo=\"~{sample.sampleName} | ~{sample.aboutSample} + | ~{sample.sampleDescription} | ~{sample.details.experimentType} | ~{sample.details.prepMethod} + | ~{sample.details.tissueType}\"\n \n # Output the concatenated sample + info to a file\n echo \"${allSampleInfo}\" > ~{base_file_name}.allSampleInfo.txt\n >>>\n\n output + {\n # Read all sample info from the file and output it as an Array of Strings\n File + allSampleInfo = \"${base_file_name}.allSampleInfo.txt\"\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"96bdebd9-cded-49d8-a73c-aba36b2282dc","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96bdebd9-cded-49d8-a73c-aba36b2282dc"},"submission":"2025-02-26T22:22:25.619Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2055' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n\nworkflow basicGlobTest + {\n call create_files\n output {\n Array[File] matched_files + = create_files.txt_files\n }\n}\n\ntask create_files {\n command <<<\n echo + \"File 1\" > file1.txt\n echo \"File 2\" > file2.txt\n >>>\n output + {\n Array[File] txt_files = glob(\"*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-95d1ea6f-f6b7-452e-9ee1-650a661cce7b"},"submission":"2025-02-26T22:22:25.660Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '790' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?expandSubWorkflows=true + response: + body: + string: "{\n \"status\": \"fail\",\n \"message\": \"Unrecognized workflow + ID: 96c23315-8890-4eed-a885-394958a2312e\"\n}" headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:20:47 GMT + - Wed, 26 Feb 2025 22:22:26 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1136' + - '101' + status: + code: 404 + message: Not Found +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n# This workflow takes a + tab separated file where each row is a set of data to be used in each \n# + of the independent scattered task series that you have as your workflow process. This + file \n# will, for example, have column names `sampleName`, `bamLocation`, + and `bedlocation`. This\n# allows you to know that regardless of the order + of the columns in your batch file, the correct\n# inputs will be used for + the tasks you define. \nworkflow parseBatchFile {\n input {\n File batchFile\n }\n Array[Object] + batchInfo = read_objects(batchFile)\n scatter (job in batchInfo){\n String + sampleName = job.sampleName\n File bamFile = job.bamLocation\n File + bedFile = job.bedLocation\n\n ## INSERT YOUR WORKFLOW TO RUN PER LINE IN + YOUR BATCH FILE HERE!!!!\n call test {\n input: in1=sampleName, + in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over the batch file\n# + Outputs that will be retained when execution is complete\n output {\n Array[File] + outputArray = test.item_out\n }\n# End workflow\n}\n\n#### TASK DEFINITIONS\n# + echo some text to stdout, treats files as strings just to echo them as a dummy + example\ntask test {\n input {\n String in1\n String in2\n String + in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo ~{in3}\n }\n output + {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"96c23315-8890-4eed-a885-394958a2312e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96c23315-8890-4eed-a885-394958a2312e"},"submission":"2025-02-26T22:22:25.701Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:30 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1700' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7d18588e-1455-4741-8e5d-d1b15c998a83/metadata?expandSubWorkflows=true + response: + body: + string: '{"submittedFiles":{"workflow":"version 1.0\n## This is a test workflow + that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### + WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask + oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime + { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"status":"Submitted","id":"7d18588e-1455-4741-8e5d-d1b15c998a83","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-7d18588e-1455-4741-8e5d-d1b15c998a83"},"submission":"2025-02-26T22:22:25.741Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:22:30 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '657' status: code: 200 message: OK diff --git a/tests/cromwellapi/cassettes/test-failures/test_failures_final.yaml b/tests/cromwellapi/cassettes/test-failures/test_failures_final.yaml index ddef0a8..171c190 100644 --- a/tests/cromwellapi/cassettes/test-failures/test_failures_final.yaml +++ b/tests/cromwellapi/cassettes/test-failures/test_failures_final.yaml @@ -9,23 +9,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?includeKey=status&includeKey=failures&includeKey=jobId + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?includeKey=status&includeKey=failures&includeKey=jobId response: body: string: '{"failures":[{"causedBy":[{"causedBy":[],"message":"Required workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow input - processing failed"}],"status":"Failed","calls":{},"id":"57bfb303-9a45-4661-825c-7c11d17a2240"}' + processing failed"}],"status":"Failed","calls":{},"id":"96c23315-8890-4eed-a885-394958a2312e"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:40 GMT + - Wed, 26 Feb 2025 22:30:20 GMT Server: - nginx/1.25.3 Transfer-Encoding: diff --git a/tests/cromwellapi/cassettes/test-failures/test_failures_initial.yaml b/tests/cromwellapi/cassettes/test-failures/test_failures_initial.yaml index 9c554bb..0cd497e 100644 --- a/tests/cromwellapi/cassettes/test-failures/test_failures_initial.yaml +++ b/tests/cromwellapi/cassettes/test-failures/test_failures_initial.yaml @@ -9,23 +9,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?includeKey=status&includeKey=failures&includeKey=jobId + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?includeKey=status&includeKey=failures&includeKey=jobId response: body: string: '{"failures":[{"causedBy":[{"causedBy":[],"message":"Required workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow input - processing failed"}],"status":"Failed","calls":{},"id":"57bfb303-9a45-4661-825c-7c11d17a2240"}' + processing failed"}],"status":"Failed","calls":{},"id":"96c23315-8890-4eed-a885-394958a2312e"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:35 GMT + - Wed, 26 Feb 2025 22:30:15 GMT Server: - nginx/1.25.3 Transfer-Encoding: diff --git a/tests/cromwellapi/cassettes/test-labels/test_labels.yaml b/tests/cromwellapi/cassettes/test-labels/test_labels.yaml index 6cd4322..0196604 100644 --- a/tests/cromwellapi/cassettes/test-labels/test_labels.yaml +++ b/tests/cromwellapi/cassettes/test-labels/test_labels.yaml @@ -1,6 +1,6 @@ interactions: - request: - body: "--f0294fd6ff9c0ad01f19ea1b58d41f99\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--8583a1556522c74aa52537a1d1e2bf9a\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"helloHostname.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion 1.0\n## This is a test workflow that returns the hostname of the node \n## the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow @@ -9,12 +9,12 @@ interactions: to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n\r\n--f0294fd6ff9c0ad01f19ea1b58d41f99\r\nContent-Disposition: + of the node the job was submitted to\"\n }\n}\n\r\n--8583a1556522c74aa52537a1d1e2bf9a\r\nContent-Disposition: form-data; name=\"labels\"; filename=\"labels1.json\"\r\nContent-Type: application/json\r\n\r\n{\"workflowType\": - \"AppSubmission\", \"Label\": \"one\", \"secondaryLabel\": \"two\"}\n\r\n--f0294fd6ff9c0ad01f19ea1b58d41f99\r\nContent-Disposition: + \"AppSubmission\", \"Label\": \"one\", \"secondaryLabel\": \"two\"}\n\r\n--8583a1556522c74aa52537a1d1e2bf9a\r\nContent-Disposition: form-data; name=\"workflowOptions\"; filename=\"options.json\"\r\nContent-Type: application/json\r\n\r\n{\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n - \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--f0294fd6ff9c0ad01f19ea1b58d41f99--\r\n" + \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--8583a1556522c74aa52537a1d1e2bf9a--\r\n" headers: accept: - '*/*' @@ -25,16 +25,16 @@ interactions: content-length: - '1290' content-type: - - multipart/form-data; boundary=f0294fd6ff9c0ad01f19ea1b58d41f99 + - multipart/form-data; boundary=8583a1556522c74aa52537a1d1e2bf9a host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1 + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1 response: body: - string: '{"id":"d4151ded-6a70-4002-a09b-8efe3f526ca7","status":"Submitted"}' + string: '{"id":"cd7fd02d-13ce-46e8-877b-14df40f53433","status":"Submitted"}' headers: Connection: - keep-alive @@ -43,7 +43,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:40 GMT + - Wed, 26 Feb 2025 22:30:20 GMT Server: - nginx/1.25.3 status: @@ -59,15 +59,15 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/d4151ded-6a70-4002-a09b-8efe3f526ca7/labels + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/cd7fd02d-13ce-46e8-877b-14df40f53433/labels response: body: string: "{\n \"status\": \"fail\",\n \"message\": \"Unrecognized workflow - ID: d4151ded-6a70-4002-a09b-8efe3f526ca7\"\n}" + ID: cd7fd02d-13ce-46e8-877b-14df40f53433\"\n}" headers: Connection: - keep-alive @@ -76,7 +76,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:40 GMT + - Wed, 26 Feb 2025 22:30:20 GMT Server: - nginx/1.25.3 status: @@ -92,14 +92,14 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/d4151ded-6a70-4002-a09b-8efe3f526ca7/labels + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/cd7fd02d-13ce-46e8-877b-14df40f53433/labels response: body: - string: '{"id":"d4151ded-6a70-4002-a09b-8efe3f526ca7","labels":{"Label":"one","secondaryLabel":"two","workflowType":"AppSubmission","cromwell-workflow-id":"cromwell-d4151ded-6a70-4002-a09b-8efe3f526ca7"}}' + string: '{"id":"cd7fd02d-13ce-46e8-877b-14df40f53433","labels":{"Label":"one","secondaryLabel":"two","workflowType":"AppSubmission","cromwell-workflow-id":"cromwell-cd7fd02d-13ce-46e8-877b-14df40f53433"}}' headers: Connection: - keep-alive @@ -108,7 +108,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:44 GMT + - Wed, 26 Feb 2025 22:30:24 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-metadata/test_metadata_final.yaml b/tests/cromwellapi/cassettes/test-metadata/test_metadata_final.yaml index 5951515..336a5df 100644 --- a/tests/cromwellapi/cassettes/test-metadata/test_metadata_final.yaml +++ b/tests/cromwellapi/cassettes/test-metadata/test_metadata_final.yaml @@ -9,14 +9,111 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:59.102Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:59.066Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:15.697Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:15.697Z","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:30 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1805' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:15.315Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:28:15.294Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow WildcardsandConditions {\n input {\n String prefix # + Required input for the file prefix (no default value)\n }\n\n call wildcard_and_conditions_test + {\n input:\n prefix = prefix # Explicitly pass the workflow + input to the task\n }\n\n output {\n Array[File] txt_files = + wildcard_and_conditions_test.txt_files\n String conditional_result + = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask wildcard_and_conditions_test + {\n input {\n String prefix # Required input for file creation\n Boolean + create_extra_file = true # Default value for conditional logic\n }\n\n command + <<<\n # Create multiple .txt files to test wildcard resolution\n for + i in {1..3}; do\n echo \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # + Create an extra file conditionally\n if [[ ~{create_extra_file} == + \"true\" ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''WildcardsandConditions.prefix'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:28:15.315Z","start":"2025-02-26T22:28:15.294Z","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:36 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2328' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/626d1502-f95c-42dd-a364-6257818dd175/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:54.933Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:54.985Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations {\n input {\n # Input arrays for different tests\n Array[String] strings\n Array[String] additional_strings = [] # For testing array concatenation\n Array[Array[String]] nested_arrays @@ -106,14 +203,14 @@ interactions: false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required workflow input ''ArrayOperations.strings'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:22:59.102Z","start":"2025-01-28T19:22:59.067Z","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + input processing failed"}],"end":"2025-02-26T22:23:54.985Z","start":"2025-02-26T22:23:54.934Z","id":"626d1502-f95c-42dd-a364-6257818dd175","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-626d1502-f95c-42dd-a364-6257818dd175"},"submission":"2025-02-26T22:22:25.114Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:50 GMT + - Wed, 26 Feb 2025 22:30:41 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -133,37 +230,84 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/6a921318-d1b5-4e96-b311-6e389ac7dc62/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/6cb0a219-9b72-462a-93be-dfcf07456d01/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:19.017Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:56.780Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW - DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta - {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"testFileoperations","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:24.176Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:14.952Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow testFileoperations {\n call file_operations\n\n output + {\n File created_file1 = file_operations.created_file1\n File + moved_file = file_operations.moved_file\n File renamed_file = file_operations.renamed_file\n }\n}\n\ntask + file_operations {\n command <<<\n # Create three different files\n echo + \"This is the first created file.\" > file1.txt\n echo \"This is the + second file that will be moved.\" > file2.txt\n echo \"This is the + third file that will be renamed.\" > file3.txt\n \n # Move the + second file to a new directory\n mkdir -p output_dir\n mv file2.txt + output_dir/\n \n # Rename the third file\n mv file3.txt + file3_renamed.txt\n >>>\n\n output {\n # Output the actual existing + files\n File created_file1 = \"file1.txt\" # The first + file remains unchanged\n File moved_file = \"output_dir/file2.txt\" # + The second file after being moved\n File renamed_file = \"file3_renamed.txt\" # + The third file after being renamed\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"testFileoperations.created_file1":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file1.txt","testFileoperations.renamed_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file3_renamed.txt","testFileoperations.moved_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/output_dir/file2.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:24:24.176Z","start":"2025-02-26T22:24:14.953Z","id":"6cb0a219-9b72-462a-93be-dfcf07456d01","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6cb0a219-9b72-462a-93be-dfcf07456d01"},"submission":"2025-02-26T22:22:25.155Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:46 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2701' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/ac181a44-3a7a-4635-9881-84057b4beca0/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"globSubdir","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:51.897Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:15.135Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\nworkflow globSubdir {\n call create_nested_files\n output {\n Array[File] + matched_files = flatten([create_nested_files.matched_files_top, create_nested_files.matched_files_nested])\n }\n}\n\ntask + create_nested_files {\n command <<<\n mkdir -p subdir/nested\n echo + \"Hello\" > subdir/nested/file1.txt\n echo \"World\" > subdir/file2.txt\n >>>\n output + {\n Array[File] matched_files_top = glob(\"subdir/*.txt\")\n Array[File] + matched_files_nested = glob(\"subdir/**/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:56.780Z","start":"2025-01-28T19:22:19.018Z","id":"6a921318-d1b5-4e96-b311-6e389ac7dc62","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6a921318-d1b5-4e96-b311-6e389ac7dc62"},"submission":"2025-01-28T19:20:42.481Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"globSubdir.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-ee3a9c1c6860f417d1e9ff1a72d2b62d/file2.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-4c0cd9dc6b12aa01233bbc214341aae1/file1.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:26:51.897Z","start":"2025-02-26T22:26:15.136Z","id":"ac181a44-3a7a-4635-9881-84057b4beca0","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-ac181a44-3a7a-4635-9881-84057b4beca0"},"submission":"2025-02-26T22:22:25.201Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:55 GMT + - Wed, 26 Feb 2025 22:30:51 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1805' + - '1953' status: code: 200 message: OK @@ -177,46 +321,68 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f53b93ef-62ae-4cad-b78a-9996f93c24e7/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:58.996Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:59.014Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n# This workflow takes a tab separated file where each row is a set of - data to be used in each \n# of the independent scattered task series that - you have as your workflow process. This file \n# will, for example, have - column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows - you to know that regardless of the order of the columns in your batch file, - the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile - {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter - (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile - = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR - WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: - in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over - the batch file\n# Outputs that will be retained when execution is complete\n output - {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### - TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just - to echo them as a dummy example\ntask test {\n input {\n String in1\n String - in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo - ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required - workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:59.014Z","start":"2025-01-28T19:21:58.997Z","id":"57bfb303-9a45-4661-825c-7c11d17a2240","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-57bfb303-9a45-4661-825c-7c11d17a2240"},"submission":"2025-01-28T19:20:42.520Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:55.263Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:55.292Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This workflow demonstrates the usage of conditional statements in + WDL\n## by selectively processing samples based on their properties\n\nstruct + SampleInfo {\n String name\n Float quality_score\n String type\n}\n\nworkflow + conditional_example {\n input {\n Array[SampleInfo] samples\n Float + quality_threshold\n }\n\n # Demonstrate if statement in scatter\n scatter + (sample in samples) {\n if (sample.quality_score >= quality_threshold) + {\n call process_high_quality {\n input:\n sample + = sample\n }\n }\n }\n\n # Create string arrays for + the QC report\n scatter (sample in samples) {\n String sample_line + = \"~{sample.name},~{sample.type},~{sample.quality_score}\"\n }\n\n # + Demonstrate single conditional task\n call run_qc_report {\n input:\n sample_lines + = sample_line\n }\n\n # Calculate number of high quality samples\n Int + num_high_quality = length(select_all(process_high_quality.message))\n\n # + Demonstrate separate conditional blocks (WDL 1.0 approach instead of if/else)\n Boolean + has_multiple_samples = num_high_quality > 1\n \n if (has_multiple_samples) + {\n call summarize {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Multiple + high-quality samples processed\"\n }\n }\n\n if (!has_multiple_samples) + {\n call summarize as summarize_few {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Few + or no high-quality samples found\"\n }\n }\n\n output {\n String + final_summary = select_first([summarize.summary, summarize_few.summary])\n File + qc_report = run_qc_report.report_csv\n }\n}\n\ntask process_high_quality + {\n input {\n SampleInfo sample\n }\n\n command <<<\n echo + \"Processing high quality ~{sample.type} sample ~{sample.name} (Q=~{sample.quality_score})\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask run_qc_report {\n input {\n Array[String] + sample_lines\n }\n\n command <<<\n echo \"Quality Score Summary:\"\n echo + \"Sample Name,Type,Quality Score\" > report.csv\n ~{sep=\"\\n\" sample_lines} + >> report.csv\n cat report.csv\n >>>\n\n output {\n String + report = read_string(stdout())\n File report_csv = \"report.csv\"\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask summarize + {\n input {\n Array[String] messages\n String report\n }\n\n command + <<<\n echo \"~{report}\"\n echo \"Number of samples processed: + ~{length(messages)}\"\n >>>\n\n output {\n String summary = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"message":"Workflow + input processing failed","causedBy":[{"message":"Required workflow input ''conditional_example.samples'' + not specified","causedBy":[]},{"causedBy":[],"message":"Required workflow + input ''conditional_example.quality_threshold'' not specified"}]}],"end":"2025-02-26T22:27:55.292Z","start":"2025-02-26T22:27:55.264Z","id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f53b93ef-62ae-4cad-b78a-9996f93c24e7"},"submission":"2025-02-26T22:22:25.244Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:00 GMT + - Wed, 26 Feb 2025 22:30:56 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '2267' + - '4186' status: code: 200 message: OK @@ -230,38 +396,45 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/06446845-f189-451d-9e8f-221af10dc37e/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloModuleHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:20:58.908Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:45.040Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for module functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloModuleHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n modules: - \"Python/3.7.4-foss-2019b-fh1\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:35.234Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:35.259Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow jsonTaskOrderTest {\n input {\n String input_json # JSON + string used as input for both tasks\n }\n\n call Task1 { input: input_json + = input_json }\n call Task2 { input: input_json = input_json, previous_output + = Task1.output_file }\n\n output {\n File task1_output = Task1.output_file\n File + task2_output = Task2.output_file\n }\n}\n\ntask Task1 {\n input {\n String + input_json\n }\n \n command <<<\n echo \"Processing JSON in Task1: ~{input_json}\" + > task1_output.txt\n echo \"Task1 completed\" >> task1_output.txt\n >>>\n \n output + {\n File output_file = \"task1_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n\ntask Task2 {\n input {\n String input_json\n File + previous_output\n }\n \n command <<<\n echo \"Processing JSON in Task2: + ~{input_json}\" > task2_output.txt\n echo \"Task2 completed after Task1\" + >> task2_output.txt\n cat ~{previous_output} >> task2_output.txt\n >>>\n \n output + {\n File output_file = \"task2_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloModuleHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:45.040Z","start":"2025-01-28T19:20:58.908Z","id":"06446845-f189-451d-9e8f-221af10dc37e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-06446845-f189-451d-9e8f-221af10dc37e"},"submission":"2025-01-28T19:20:42.560Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''jsonTaskOrderTest.input_json'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:27:35.259Z","start":"2025-02-26T22:27:35.235Z","id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c"},"submission":"2025-02-26T22:22:25.287Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:05 GMT + - Wed, 26 Feb 2025 22:31:01 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1890' + - '2130' status: code: 200 message: OK @@ -275,34 +448,204 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/3daeca54-daf0-4498-af26-04c84a42641c/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:18.945Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:18.938Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### - WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask - oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime - { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed - to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value - ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:18.945Z","start":"2025-01-28T19:21:18.939Z","id":"3daeca54-daf0-4498-af26-04c84a42641c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-3daeca54-daf0-4498-af26-04c84a42641c"},"submission":"2025-01-28T19:20:42.598Z"}' + string: '{"workflowName":"emptyGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:15.213Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:01.127Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow emptyGlobTest {\n call create_empty_directory\n\n output + {\n Array[File] no_files = create_empty_directory.no_files\n }\n}\n\ntask + create_empty_directory {\n command {\n mkdir empty_dir\n }\n output + {\n Array[File] no_files = glob(\"empty_dir/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"emptyGlobTest.no_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:28:01.127Z","start":"2025-02-26T22:27:15.214Z","id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-e97ae0ae-90cb-4e1a-b367-1a6f21ad438d"},"submission":"2025-02-26T22:22:25.328Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:10 GMT + - Wed, 26 Feb 2025 22:31:06 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1307' + - '1355' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:29:26.537Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","HelloDockerHostname.execution_time_seconds":77.894,"HelloDockerHostname.within_time_limit":true},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:29:26.537Z","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:11 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '4957' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/826b54df-2d82-4365-adf0-ae03996b055d/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"globNonmatching","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:33.807Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:55.015Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow globNonmatching {\n call create_files\n output {\n Array[File] + unmatched_files = create_files.unmatched_files\n }\n}\n\ntask create_files + {\n command <<<\n echo \"Test file\" > test.txt\n >>>\n output + {\n Array[File] unmatched_files = glob(\"*.log\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"globNonmatching.unmatched_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:33.807Z","start":"2025-02-26T22:24:55.016Z","id":"826b54df-2d82-4365-adf0-ae03996b055d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-826b54df-2d82-4365-adf0-ae03996b055d"},"submission":"2025-02-26T22:22:25.411Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:16 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1367' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"test_nonstandard_outputs","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:54.845Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:39.768Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow test_nonstandard_outputs {\n call generate_diverse_outputs\n \n output + {\n File special_chars = generate_diverse_outputs.file_special_chars\n File + no_extension = generate_diverse_outputs.file_no_extension\n File nested_output + = generate_diverse_outputs.nested_file\n File symlink_file = generate_diverse_outputs.symlink_output\n Array[File] + glob_files = generate_diverse_outputs.pattern_files\n }\n}\n\ntask generate_diverse_outputs + {\n command <<<\n # File with special characters\n echo \"test + content\" > \"test@file#1.txt\"\n \n # File without extension\n echo + \"no extension\" > datafile\n \n # Nested directory output\n mkdir + -p nested/dir\n echo \"nested content\" > nested/dir/test.txt\n \n # + Create a symlink\n echo \"original\" > original.txt\n ln -s + original.txt link.txt\n \n # Multiple pattern files\n for + i in {1..3}; do\n echo \"pattern $i\" > \"pattern_$i.out\"\n done\n >>>\n\n output + {\n File file_special_chars = \"test@file#1.txt\"\n File file_no_extension + = \"datafile\"\n File nested_file = \"nested/dir/test.txt\"\n File + symlink_output = \"link.txt\"\n Array[File] pattern_files = glob(\"pattern_*.out\")\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"test_nonstandard_outputs.symlink_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/link.txt","test_nonstandard_outputs.nested_output":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/nested/dir/test.txt","test_nonstandard_outputs.glob_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_1.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_2.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_3.out"],"test_nonstandard_outputs.no_extension":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/datafile","test_nonstandard_outputs.special_chars":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/test@file#1.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:39.768Z","start":"2025-02-26T22:22:54.847Z","id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e"},"submission":"2025-02-26T22:22:25.452Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:21 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '3987' status: code: 200 message: OK @@ -316,14 +659,80 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/7dd646ef-2577-4d8d-9596-3e3384f3b09d/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/c4747ccd-c78a-4c47-8873-83b63e0334ab/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:44.170Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:39.046Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:55.217Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:55.193Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n## This workflow demonstrates advanced struct features in WDL including:\n## + 1. Optional fields\n## 2. Nested structs\n## 3. Default values (handled in + the workflow)\n\n#### STRUCT DEFINITIONS\n\n# Nested struct for sequencing + metadata\nstruct SequencingInfo {\n String platform\n String? flowcell_id\n Int? + lane_number\n}\n\n# Nested struct for quality metrics\nstruct QualityMetrics + {\n Float quality_score\n Float? gc_content\n Int? duplicate_rate\n}\n\n# + Main struct with nested structures and optional fields\nstruct SampleInfo + {\n String name\n String? type\n Int? read_length\n String? library_prep\n SequencingInfo + sequencing\n QualityMetrics metrics\n}\n\n#### WORKFLOW DEFINITION\n\nworkflow + struct_example {\n input {\n Array[SampleInfo] sample_information\n }\n\n scatter + (sample_info in sample_information) {\n SampleInfo processed_sample + = object {\n name: sample_info.name,\n type: select_first([sample_info.type, + \"normal\"]),\n read_length: select_first([sample_info.read_length, + 100]),\n library_prep: sample_info.library_prep,\n sequencing: + sample_info.sequencing,\n metrics: sample_info.metrics\n }\n\n call + process_sample {\n input:\n sample = processed_sample\n }\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask process_sample {\n input {\n SampleInfo + sample\n }\n\n command <<<\n echo \"Processing ~{sample.name} + (~{sample.type})\"\n echo \"Read Length: ~{sample.read_length}\"\n echo + \"Sequencing Platform: ~{sample.sequencing.platform}\"\n echo \"Flowcell + ID: ~{select_first([sample.sequencing.flowcell_id, ''N/A''])}\"\n echo + \"Lane Number: ~{select_first([sample.sequencing.lane_number, -1])}\"\n echo + \"Quality Score: ~{sample.metrics.quality_score}\"\n echo \"GC Content: + ~{select_first([sample.metrics.gc_content, 0])}\"\n echo \"Duplicate + Rate: ~{select_first([sample.metrics.duplicate_rate, 0])}%\"\n echo + \"Library Prep: ~{select_first([sample.library_prep, ''Standard''])}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''struct_example.sample_information'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:26:55.217Z","start":"2025-02-26T22:26:55.194Z","id":"c4747ccd-c78a-4c47-8873-83b63e0334ab","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-c4747ccd-c78a-4c47-8873-83b63e0334ab"},"submission":"2025-02-26T22:22:25.494Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:26 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '3341' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/43845110-ee3b-4503-a08c-3bb165ee8635/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:14.873Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:23.067Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version 1.0\n\n# The basicTaskTest workflow calls a task named simpleTask, which takes a string input and writes it to a file called output.txt. It demonstrates a basic execution of a task with file output.\n\n# This tests basic task execution, @@ -332,15 +741,15 @@ interactions: {\n input {\n String text = \"Hello, World!\"\n }\n\n call simpleTask {\n input:\n message = text\n }\n}\n\ntask simpleTask {\n input {\n String message\n }\n\n command <<<\n echo \"${message}\" > output.txt\n >>>\n\n output - {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:44.170Z","start":"2025-01-28T19:22:39.046Z","id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d","inputs":{"text":"Hello, - World!"},"labels":{"cromwell-workflow-id":"cromwell-7dd646ef-2577-4d8d-9596-3e3384f3b09d"},"submission":"2025-01-28T19:20:42.640Z"}' + {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:23.067Z","start":"2025-02-26T22:23:14.874Z","id":"43845110-ee3b-4503-a08c-3bb165ee8635","inputs":{"text":"Hello, + World!"},"labels":{"cromwell-workflow-id":"cromwell-43845110-ee3b-4503-a08c-3bb165ee8635"},"submission":"2025-02-26T22:22:25.535Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:15 GMT + - Wed, 26 Feb 2025 22:31:31 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -360,38 +769,268 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/5150f1dc-5451-4dc4-b288-ef0ddf8da487/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/52bdecf2-4a27-443f-8748-af12730327d8/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:38.968Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:23:24.051Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for Docker functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloDockerHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n docker: - \"ubuntu:latest\"\n }\n\n parameter_meta {\n out: \"hostname of the node - the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:34.905Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:34.936Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow enhanced_map_test {\n input {\n # Original inputs\n Array[String] + samples\n Map[String, String] sample_metadata\n Map[String, + Int] read_lengths\n\n # New test inputs\n Map[String, Map[String, + String]] nested_map = {\n \"patient1\": {\n \"sample1\": + \"normal\",\n \"sample2\": \"tumor\"\n },\n \"patient2\": + {\n \"sample3\": \"normal\",\n \"sample4\": + \"tumor\"\n }\n }\n # We need to provide keys as + arrays since WDL 1.0 doesn''t have a keys() function\n Array[String] + patient_ids = [\"patient1\", \"patient2\"]\n }\n\n # Test nested map + processing\n scatter (patient_id in patient_ids) {\n call process_nested_map + {\n input:\n patient_id = patient_id,\n patient_data + = nested_map[patient_id],\n # We need to provide the sample + names explicitly\n samples_for_patient = if patient_id == \"patient1\" + then [\"sample1\", \"sample2\"] else [\"sample3\", \"sample4\"]\n }\n }\n\n # + Original sample processing with output map generation\n scatter (sample + in samples) {\n call process_sample {\n input:\n sample_name + = sample,\n sample_type = sample_metadata[sample],\n read_length + = read_lengths[sample]\n }\n }\n\n # Aggregate results into a + map\n call create_result_map {\n input:\n sample_names + = samples,\n processing_messages = process_sample.message\n }\n\n output + {\n Map[String, String] result_map = create_result_map.output_map\n Array[String] + nested_map_results = process_nested_map.message\n }\n}\n\ntask process_nested_map + {\n input {\n String patient_id\n Map[String, String] patient_data\n Array[String] + samples_for_patient\n }\n\n # First get the first sample ID\n String + first_sample = samples_for_patient[0]\n # Then use it to index the patient + data\n String sample_type = patient_data[first_sample]\n\n command {\n echo + \"Processing patient ${patient_id} with sample type ${sample_type}\"\n for + sample in ${sep='' '' samples_for_patient}; do\n echo \"Sample: + $sample\"\n done\n }\n\n output {\n String message = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask process_sample + {\n input {\n String sample_name\n String sample_type\n Int + read_length\n }\n\n command <<<\n echo \"Processing ~{sample_name} + (~{sample_type}) with read length ~{read_length}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask create_result_map {\n input + {\n Array[String] sample_names\n Array[String] processing_messages\n }\n\n command + <<<\n python <>>\n\n output + {\n Map[String, String] output_map = read_map(''output.txt'')\n }\n\n runtime + {\n docker: \"python:3.8-slim\"\n }\n}","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:23:24.050Z","start":"2025-01-28T19:21:38.969Z","id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-5150f1dc-5451-4dc4-b288-ef0ddf8da487"},"submission":"2025-01-28T19:20:42.683Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.read_lengths'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.sample_metadata'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.samples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:23:34.936Z","start":"2025-02-26T22:23:34.906Z","id":"52bdecf2-4a27-443f-8748-af12730327d8","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-52bdecf2-4a27-443f-8748-af12730327d8"},"submission":"2025-02-26T22:22:25.577Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:20 GMT + - Wed, 26 Feb 2025 22:31:37 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1875' + - '4807' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96bdebd9-cded-49d8-a73c-aba36b2282dc/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:35.073Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:35.092Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n# Define the structure for sampleDetails\nstruct sampleDetails {\n String + experimentType\n String prepMethod\n String tissueType\n}\n\n# Define + the main structure for the single sample\nstruct singleSample {\n String + sampleName\n String aboutSample\n String sampleDescription\n sampleDetails + details # Use the sampleDetails struct here\n}\n\nworkflow testNestedJsonArray + {\n input {\n String cellNumber\n Array[singleSample] batchOfSamples # + Array of objects representing each sample\n }\n\n scatter (sample in batchOfSamples) + {\n call processSample {\n input:\n sample = sample,\n base_file_name + = sample.sampleName \n }\n }\n\n output {\n # Collect all the fields + together from each sample into one list\n Array[File] result_allSampleInfo + = processSample.allSampleInfo\n }\n}\n\ntask processSample {\n input {\n singleSample + sample # Use singleSample type, not Object\n String base_file_name\n }\n\n command + <<<\n # Format the sample information as a single string\n allSampleInfo=\"~{sample.sampleName} + | ~{sample.aboutSample} | ~{sample.sampleDescription} | ~{sample.details.experimentType} + | ~{sample.details.prepMethod} | ~{sample.details.tissueType}\"\n \n # + Output the concatenated sample info to a file\n echo \"${allSampleInfo}\" + > ~{base_file_name}.allSampleInfo.txt\n >>>\n\n output {\n # Read all + sample info from the file and output it as an Array of Strings\n File allSampleInfo + = \"${base_file_name}.allSampleInfo.txt\"\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.cellNumber'' not specified"},{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.batchOfSamples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:35.092Z","start":"2025-02-26T22:25:35.074Z","id":"96bdebd9-cded-49d8-a73c-aba36b2282dc","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96bdebd9-cded-49d8-a73c-aba36b2282dc"},"submission":"2025-02-26T22:22:25.619Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:42 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2731' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"basicGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:15.045Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:53.863Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow basicGlobTest {\n call create_files\n output {\n Array[File] + matched_files = create_files.txt_files\n }\n}\n\ntask create_files {\n command + <<<\n echo \"File 1\" > file1.txt\n echo \"File 2\" > file2.txt\n >>>\n output + {\n Array[File] txt_files = glob(\"*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicGlobTest.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file1.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file2.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:53.863Z","start":"2025-02-26T22:25:15.046Z","id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-95d1ea6f-f6b7-452e-9ee1-650a661cce7b"},"submission":"2025-02-26T22:22:25.660Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:47 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1741' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:55.122Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:55.104Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n# This workflow takes a tab separated file where each row is a set of + data to be used in each \n# of the independent scattered task series that + you have as your workflow process. This file \n# will, for example, have + column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows + you to know that regardless of the order of the columns in your batch file, + the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile + {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter + (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile + = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR + WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: + in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over + the batch file\n# Outputs that will be retained when execution is complete\n output + {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### + TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just + to echo them as a dummy example\ntask test {\n input {\n String in1\n String + in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo + ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:55.122Z","start":"2025-02-26T22:25:55.105Z","id":"96c23315-8890-4eed-a885-394958a2312e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96c23315-8890-4eed-a885-394958a2312e"},"submission":"2025-02-26T22:22:25.701Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:52 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2267' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7d18588e-1455-4741-8e5d-d1b15c998a83/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:34.985Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:35.003Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### + WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask + oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime + { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed + to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value + ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:24:35.003Z","start":"2025-02-26T22:24:34.986Z","id":"7d18588e-1455-4741-8e5d-d1b15c998a83","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-7d18588e-1455-4741-8e5d-d1b15c998a83"},"submission":"2025-02-26T22:22:25.741Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1307' status: code: 200 message: OK diff --git a/tests/cromwellapi/cassettes/test-metadata/test_metadata_initial.yaml b/tests/cromwellapi/cassettes/test-metadata/test_metadata_initial.yaml index c439ae1..8bc87bc 100644 --- a/tests/cromwellapi/cassettes/test-metadata/test_metadata_initial.yaml +++ b/tests/cromwellapi/cassettes/test-metadata/test_metadata_initial.yaml @@ -9,14 +9,111 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:59.102Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:59.066Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:15.697Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:34.815Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the hostname of the node \n## + the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW + DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output + {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: + \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask + Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File + out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta + {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:15.697Z","start":"2025-02-26T22:22:34.823Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-0ab308de-6ffc-44f9-8c9c-bd6c8a007185"},"submission":"2025-02-26T22:22:25.031Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:24 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1805' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:15.315Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:28:15.294Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow WildcardsandConditions {\n input {\n String prefix # + Required input for the file prefix (no default value)\n }\n\n call wildcard_and_conditions_test + {\n input:\n prefix = prefix # Explicitly pass the workflow + input to the task\n }\n\n output {\n Array[File] txt_files = + wildcard_and_conditions_test.txt_files\n String conditional_result + = wildcard_and_conditions_test.conditional_output\n }\n}\n\ntask wildcard_and_conditions_test + {\n input {\n String prefix # Required input for file creation\n Boolean + create_extra_file = true # Default value for conditional logic\n }\n\n command + <<<\n # Create multiple .txt files to test wildcard resolution\n for + i in {1..3}; do\n echo \"File content $i\" > \"~{prefix}_$i.txt\"\n done\n\n # + Create an extra file conditionally\n if [[ ~{create_extra_file} == + \"true\" ]]; then\n echo \"Extra file content\" > ~{prefix}_extra.txt\n fi\n\n # + Parse inputs directly in the command\n echo \"Parsed prefix: ~{prefix}\" + > parsed_output.txt\n >>>\n\n output {\n Array[File] txt_files + = glob(\"*.txt\") # Test wildcard resolution\n String conditional_output + = read_string(\"parsed_output.txt\") # Verify input parsing\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''WildcardsandConditions.prefix'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:28:15.315Z","start":"2025-02-26T22:28:15.294Z","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-fd02ca92-818d-40da-8b39-8e8e1666042d"},"submission":"2025-02-26T22:22:25.072Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2328' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/626d1502-f95c-42dd-a364-6257818dd175/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:54.933Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:54.985Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version 1.0\n\nworkflow ArrayOperations {\n input {\n # Input arrays for different tests\n Array[String] strings\n Array[String] additional_strings = [] # For testing array concatenation\n Array[Array[String]] nested_arrays @@ -106,14 +203,14 @@ interactions: false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required workflow input ''ArrayOperations.strings'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:22:59.102Z","start":"2025-01-28T19:22:59.067Z","id":"b4c610ff-437a-40a5-9562-499ffbc50566","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-b4c610ff-437a-40a5-9562-499ffbc50566"},"submission":"2025-01-28T19:20:42.442Z"}' + input processing failed"}],"end":"2025-02-26T22:23:54.985Z","start":"2025-02-26T22:23:54.934Z","id":"626d1502-f95c-42dd-a364-6257818dd175","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-626d1502-f95c-42dd-a364-6257818dd175"},"submission":"2025-02-26T22:22:25.114Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:44 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -133,37 +230,84 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/6a921318-d1b5-4e96-b311-6e389ac7dc62/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/6cb0a219-9b72-462a-93be-dfcf07456d01/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:19.017Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:56.780Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW - DEFINITION\n\nworkflow HelloHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta - {\n out: \"hostname of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowName":"testFileoperations","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:24.176Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:14.952Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow testFileoperations {\n call file_operations\n\n output + {\n File created_file1 = file_operations.created_file1\n File + moved_file = file_operations.moved_file\n File renamed_file = file_operations.renamed_file\n }\n}\n\ntask + file_operations {\n command <<<\n # Create three different files\n echo + \"This is the first created file.\" > file1.txt\n echo \"This is the + second file that will be moved.\" > file2.txt\n echo \"This is the + third file that will be renamed.\" > file3.txt\n \n # Move the + second file to a new directory\n mkdir -p output_dir\n mv file2.txt + output_dir/\n \n # Rename the third file\n mv file3.txt + file3_renamed.txt\n >>>\n\n output {\n # Output the actual existing + files\n File created_file1 = \"file1.txt\" # The first + file remains unchanged\n File moved_file = \"output_dir/file2.txt\" # + The second file after being moved\n File renamed_file = \"file3_renamed.txt\" # + The third file after being renamed\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"testFileoperations.created_file1":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file1.txt","testFileoperations.renamed_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file3_renamed.txt","testFileoperations.moved_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/output_dir/file2.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:24:24.176Z","start":"2025-02-26T22:24:14.953Z","id":"6cb0a219-9b72-462a-93be-dfcf07456d01","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6cb0a219-9b72-462a-93be-dfcf07456d01"},"submission":"2025-02-26T22:22:25.155Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2701' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/ac181a44-3a7a-4635-9881-84057b4beca0/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"globSubdir","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:51.897Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:15.135Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\nworkflow globSubdir {\n call create_nested_files\n output {\n Array[File] + matched_files = flatten([create_nested_files.matched_files_top, create_nested_files.matched_files_nested])\n }\n}\n\ntask + create_nested_files {\n command <<<\n mkdir -p subdir/nested\n echo + \"Hello\" > subdir/nested/file1.txt\n echo \"World\" > subdir/file2.txt\n >>>\n output + {\n Array[File] matched_files_top = glob(\"subdir/*.txt\")\n Array[File] + matched_files_nested = glob(\"subdir/**/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:56.780Z","start":"2025-01-28T19:22:19.018Z","id":"6a921318-d1b5-4e96-b311-6e389ac7dc62","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-6a921318-d1b5-4e96-b311-6e389ac7dc62"},"submission":"2025-01-28T19:20:42.481Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"globSubdir.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-ee3a9c1c6860f417d1e9ff1a72d2b62d/file2.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-4c0cd9dc6b12aa01233bbc214341aae1/file1.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:26:51.897Z","start":"2025-02-26T22:26:15.136Z","id":"ac181a44-3a7a-4635-9881-84057b4beca0","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-ac181a44-3a7a-4635-9881-84057b4beca0"},"submission":"2025-02-26T22:22:25.201Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:44 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1805' + - '1953' status: code: 200 message: OK @@ -177,46 +321,68 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f53b93ef-62ae-4cad-b78a-9996f93c24e7/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:58.996Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:59.014Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n# This workflow takes a tab separated file where each row is a set of - data to be used in each \n# of the independent scattered task series that - you have as your workflow process. This file \n# will, for example, have - column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows - you to know that regardless of the order of the columns in your batch file, - the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile - {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter - (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile - = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR - WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: - in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over - the batch file\n# Outputs that will be retained when execution is complete\n output - {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### - TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just - to echo them as a dummy example\ntask test {\n input {\n String in1\n String - in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo - ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required - workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:59.014Z","start":"2025-01-28T19:21:58.997Z","id":"57bfb303-9a45-4661-825c-7c11d17a2240","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-57bfb303-9a45-4661-825c-7c11d17a2240"},"submission":"2025-01-28T19:20:42.520Z"}' + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:55.263Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:55.292Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This workflow demonstrates the usage of conditional statements in + WDL\n## by selectively processing samples based on their properties\n\nstruct + SampleInfo {\n String name\n Float quality_score\n String type\n}\n\nworkflow + conditional_example {\n input {\n Array[SampleInfo] samples\n Float + quality_threshold\n }\n\n # Demonstrate if statement in scatter\n scatter + (sample in samples) {\n if (sample.quality_score >= quality_threshold) + {\n call process_high_quality {\n input:\n sample + = sample\n }\n }\n }\n\n # Create string arrays for + the QC report\n scatter (sample in samples) {\n String sample_line + = \"~{sample.name},~{sample.type},~{sample.quality_score}\"\n }\n\n # + Demonstrate single conditional task\n call run_qc_report {\n input:\n sample_lines + = sample_line\n }\n\n # Calculate number of high quality samples\n Int + num_high_quality = length(select_all(process_high_quality.message))\n\n # + Demonstrate separate conditional blocks (WDL 1.0 approach instead of if/else)\n Boolean + has_multiple_samples = num_high_quality > 1\n \n if (has_multiple_samples) + {\n call summarize {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Multiple + high-quality samples processed\"\n }\n }\n\n if (!has_multiple_samples) + {\n call summarize as summarize_few {\n input:\n messages + = select_all(process_high_quality.message),\n report = \"Few + or no high-quality samples found\"\n }\n }\n\n output {\n String + final_summary = select_first([summarize.summary, summarize_few.summary])\n File + qc_report = run_qc_report.report_csv\n }\n}\n\ntask process_high_quality + {\n input {\n SampleInfo sample\n }\n\n command <<<\n echo + \"Processing high quality ~{sample.type} sample ~{sample.name} (Q=~{sample.quality_score})\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask run_qc_report {\n input {\n Array[String] + sample_lines\n }\n\n command <<<\n echo \"Quality Score Summary:\"\n echo + \"Sample Name,Type,Quality Score\" > report.csv\n ~{sep=\"\\n\" sample_lines} + >> report.csv\n cat report.csv\n >>>\n\n output {\n String + report = read_string(stdout())\n File report_csv = \"report.csv\"\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask summarize + {\n input {\n Array[String] messages\n String report\n }\n\n command + <<<\n echo \"~{report}\"\n echo \"Number of samples processed: + ~{length(messages)}\"\n >>>\n\n output {\n String summary = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"message":"Workflow + input processing failed","causedBy":[{"message":"Required workflow input ''conditional_example.samples'' + not specified","causedBy":[]},{"causedBy":[],"message":"Required workflow + input ''conditional_example.quality_threshold'' not specified"}]}],"end":"2025-02-26T22:27:55.292Z","start":"2025-02-26T22:27:55.264Z","id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f53b93ef-62ae-4cad-b78a-9996f93c24e7"},"submission":"2025-02-26T22:22:25.244Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:44 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '2267' + - '4186' status: code: 200 message: OK @@ -230,38 +396,45 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/06446845-f189-451d-9e8f-221af10dc37e/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloModuleHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:20:58.908Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:45.040Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for module functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloModuleHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n modules: - \"Python/3.7.4-foss-2019b-fh1\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:35.234Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:27:35.259Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow jsonTaskOrderTest {\n input {\n String input_json # JSON + string used as input for both tasks\n }\n\n call Task1 { input: input_json + = input_json }\n call Task2 { input: input_json = input_json, previous_output + = Task1.output_file }\n\n output {\n File task1_output = Task1.output_file\n File + task2_output = Task2.output_file\n }\n}\n\ntask Task1 {\n input {\n String + input_json\n }\n \n command <<<\n echo \"Processing JSON in Task1: ~{input_json}\" + > task1_output.txt\n echo \"Task1 completed\" >> task1_output.txt\n >>>\n \n output + {\n File output_file = \"task1_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n\ntask Task2 {\n input {\n String input_json\n File + previous_output\n }\n \n command <<<\n echo \"Processing JSON in Task2: + ~{input_json}\" > task2_output.txt\n echo \"Task2 completed after Task1\" + >> task2_output.txt\n cat ~{previous_output} >> task2_output.txt\n >>>\n \n output + {\n File output_file = \"task2_output.txt\"\n }\n \n runtime {\n cpu: + 1\n memory: \"2G\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloModuleHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:45.040Z","start":"2025-01-28T19:20:58.908Z","id":"06446845-f189-451d-9e8f-221af10dc37e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-06446845-f189-451d-9e8f-221af10dc37e"},"submission":"2025-01-28T19:20:42.560Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''jsonTaskOrderTest.input_json'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:27:35.259Z","start":"2025-02-26T22:27:35.235Z","id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c"},"submission":"2025-02-26T22:22:25.287Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:45 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1890' + - '2130' status: code: 200 message: OK @@ -275,34 +448,204 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/3daeca54-daf0-4498-af26-04c84a42641c/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:21:18.945Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:18.938Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### - WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask - oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime - { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed - to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value - ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow - input processing failed"}],"end":"2025-01-28T19:21:18.945Z","start":"2025-01-28T19:21:18.939Z","id":"3daeca54-daf0-4498-af26-04c84a42641c","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-3daeca54-daf0-4498-af26-04c84a42641c"},"submission":"2025-01-28T19:20:42.598Z"}' + string: '{"workflowName":"emptyGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:27:15.213Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:28:01.127Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow emptyGlobTest {\n call create_empty_directory\n\n output + {\n Array[File] no_files = create_empty_directory.no_files\n }\n}\n\ntask + create_empty_directory {\n command {\n mkdir empty_dir\n }\n output + {\n Array[File] no_files = glob(\"empty_dir/*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"emptyGlobTest.no_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/emptyGlobTest/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:28:01.127Z","start":"2025-02-26T22:27:15.214Z","id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-e97ae0ae-90cb-4e1a-b367-1a6f21ad438d"},"submission":"2025-02-26T22:22:25.328Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:45 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1307' + - '1355' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:29:26.537Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:35.164Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that returns the Docker image name and tag\n## + and measures execution time of the Hostname task.\n\n#### WORKFLOW DEFINITION\n\nworkflow + HelloDockerHostname {\n input {\n String docker_image = \"ubuntu:20.04\" # + Default value but can be overridden\n }\n\n call GetStartTime\n\n call + Hostname {\n input:\n expected_image = docker_image,\n start_time + = GetStartTime.timestamp # Add dependency on start time\n }\n\n call GetEndTime + {\n input:\n hostname_done = Hostname.out # Add dependency on Hostname + completion\n }\n\n call ValidateExecutionTime {\n input:\n start_time + = GetStartTime.timestamp,\n end_time = GetEndTime.timestamp\n }\n\n output + {\n File stdout = Hostname.out\n Float execution_time_seconds = ValidateExecutionTime.duration_seconds\n Boolean + within_time_limit = ValidateExecutionTime.within_limit\n }\n\n parameter_meta + {\n docker_image: \"Docker image to run the task in (e.g. ubuntu:latest)\"\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask GetStartTime {\n command <<<\n date +%s.%N\n >>>\n\n output + {\n Float timestamp = read_float(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask GetEndTime + {\n input {\n File hostname_done # Add dependency on Hostname completion\n }\n\n command + <<<\n date +%s.%N\n >>>\n\n output {\n Float timestamp = read_float(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask + ValidateExecutionTime {\n input {\n Float start_time\n Float end_time\n }\n\n command + <<<\n # Calculate duration using awk for floating point arithmetic\n duration=$(awk + \"BEGIN {print ~{end_time} - ~{start_time}}\")\n echo \"$duration\" > duration.txt\n \n # + Check if duration is less than 120 seconds (2 minutes)\n awk -v dur=\"$duration\" + ''BEGIN {if (dur < 120) exit 0; exit 1}''\n if [ $? -eq 0 ]; then\n echo + \"true\" > within_limit.txt\n else\n echo \"false\" > within_limit.txt\n fi\n >>>\n\n output + {\n Float duration_seconds = read_float(\"duration.txt\")\n Boolean + within_limit = read_boolean(\"within_limit.txt\")\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n cpu: 1\n memory: \"1 GB\"\n }\n}\n\ntask Hostname + {\n input {\n String expected_image\n Float start_time # Add start_time + as input to create dependency\n }\n\n command <<<\n # Split expected + image into name and tag\n EXPECTED_IMAGE_NAME=$(echo \"~{expected_image}\" + | cut -d'':'' -f1)\n EXPECTED_TAG=$(echo \"~{expected_image}\" | cut -d'':'' + -f2)\n\n # Get current image info\n CURRENT_IMAGE=$(grep \"ID=\" /etc/os-release + | head -n1 | cut -d''='' -f2)\n CURRENT_VERSION=$(grep \"VERSION_ID=\" + /etc/os-release | cut -d''\"'' -f2)\n\n # Compare image name\n if [[ + \"$CURRENT_IMAGE\" != \"$EXPECTED_IMAGE_NAME\" ]]; then\n echo \"Error: + Expected Docker image $EXPECTED_IMAGE_NAME but got: $CURRENT_IMAGE\"\n exit + 1\n fi\n\n # Compare version/tag\n if [[ \"$CURRENT_VERSION\" != + \"$EXPECTED_TAG\" ]]; then\n echo \"Error: Expected version $EXPECTED_TAG + but got: $CURRENT_VERSION\"\n exit 1\n fi\n\n echo \"Verified Docker + Image: $CURRENT_IMAGE:$CURRENT_VERSION\"\n echo \"Expected Image: ~{expected_image}\"\n echo + \"Hostname: $(hostname)\"\n >>>\n\n output {\n File out = stdout()\n }\n\n runtime + {\n cpu: 1\n memory: \"1 GB\"\n docker: \"~{expected_image}\"\n }\n\n parameter_meta + {\n expected_image: \"Docker image that should be running this task\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","HelloDockerHostname.execution_time_seconds":77.894,"HelloDockerHostname.within_time_limit":true},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:29:26.537Z","start":"2025-02-26T22:26:35.165Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","inputs":{"docker_image":"ubuntu:20.04"},"labels":{"cromwell-workflow-id":"cromwell-bd479cb8-15bf-41e9-8f9d-98473cdb2b58"},"submission":"2025-02-26T22:22:25.370Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '4957' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/826b54df-2d82-4365-adf0-ae03996b055d/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"globNonmatching","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:33.807Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:55.015Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow globNonmatching {\n call create_files\n output {\n Array[File] + unmatched_files = create_files.unmatched_files\n }\n}\n\ntask create_files + {\n command <<<\n echo \"Test file\" > test.txt\n >>>\n output + {\n Array[File] unmatched_files = glob(\"*.log\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"globNonmatching.unmatched_files":[]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globNonmatching/826b54df-2d82-4365-adf0-ae03996b055d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:33.807Z","start":"2025-02-26T22:24:55.016Z","id":"826b54df-2d82-4365-adf0-ae03996b055d","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-826b54df-2d82-4365-adf0-ae03996b055d"},"submission":"2025-02-26T22:22:25.411Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1367' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"test_nonstandard_outputs","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:22:54.845Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:39.768Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow test_nonstandard_outputs {\n call generate_diverse_outputs\n \n output + {\n File special_chars = generate_diverse_outputs.file_special_chars\n File + no_extension = generate_diverse_outputs.file_no_extension\n File nested_output + = generate_diverse_outputs.nested_file\n File symlink_file = generate_diverse_outputs.symlink_output\n Array[File] + glob_files = generate_diverse_outputs.pattern_files\n }\n}\n\ntask generate_diverse_outputs + {\n command <<<\n # File with special characters\n echo \"test + content\" > \"test@file#1.txt\"\n \n # File without extension\n echo + \"no extension\" > datafile\n \n # Nested directory output\n mkdir + -p nested/dir\n echo \"nested content\" > nested/dir/test.txt\n \n # + Create a symlink\n echo \"original\" > original.txt\n ln -s + original.txt link.txt\n \n # Multiple pattern files\n for + i in {1..3}; do\n echo \"pattern $i\" > \"pattern_$i.out\"\n done\n >>>\n\n output + {\n File file_special_chars = \"test@file#1.txt\"\n File file_no_extension + = \"datafile\"\n File nested_file = \"nested/dir/test.txt\"\n File + symlink_output = \"link.txt\"\n Array[File] pattern_files = glob(\"pattern_*.out\")\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"test_nonstandard_outputs.symlink_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/link.txt","test_nonstandard_outputs.nested_output":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/nested/dir/test.txt","test_nonstandard_outputs.glob_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_1.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_2.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_3.out"],"test_nonstandard_outputs.no_extension":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/datafile","test_nonstandard_outputs.special_chars":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/test@file#1.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:39.768Z","start":"2025-02-26T22:22:54.847Z","id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e"},"submission":"2025-02-26T22:22:25.452Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '3987' status: code: 200 message: OK @@ -316,14 +659,80 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/7dd646ef-2577-4d8d-9596-3e3384f3b09d/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/c4747ccd-c78a-4c47-8873-83b63e0334ab/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:22:44.170Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:22:39.046Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:26:55.217Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:26:55.193Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n## This workflow demonstrates advanced struct features in WDL including:\n## + 1. Optional fields\n## 2. Nested structs\n## 3. Default values (handled in + the workflow)\n\n#### STRUCT DEFINITIONS\n\n# Nested struct for sequencing + metadata\nstruct SequencingInfo {\n String platform\n String? flowcell_id\n Int? + lane_number\n}\n\n# Nested struct for quality metrics\nstruct QualityMetrics + {\n Float quality_score\n Float? gc_content\n Int? duplicate_rate\n}\n\n# + Main struct with nested structures and optional fields\nstruct SampleInfo + {\n String name\n String? type\n Int? read_length\n String? library_prep\n SequencingInfo + sequencing\n QualityMetrics metrics\n}\n\n#### WORKFLOW DEFINITION\n\nworkflow + struct_example {\n input {\n Array[SampleInfo] sample_information\n }\n\n scatter + (sample_info in sample_information) {\n SampleInfo processed_sample + = object {\n name: sample_info.name,\n type: select_first([sample_info.type, + \"normal\"]),\n read_length: select_first([sample_info.read_length, + 100]),\n library_prep: sample_info.library_prep,\n sequencing: + sample_info.sequencing,\n metrics: sample_info.metrics\n }\n\n call + process_sample {\n input:\n sample = processed_sample\n }\n }\n}\n\n#### + TASK DEFINITIONS\n\ntask process_sample {\n input {\n SampleInfo + sample\n }\n\n command <<<\n echo \"Processing ~{sample.name} + (~{sample.type})\"\n echo \"Read Length: ~{sample.read_length}\"\n echo + \"Sequencing Platform: ~{sample.sequencing.platform}\"\n echo \"Flowcell + ID: ~{select_first([sample.sequencing.flowcell_id, ''N/A''])}\"\n echo + \"Lane Number: ~{select_first([sample.sequencing.lane_number, -1])}\"\n echo + \"Quality Score: ~{sample.metrics.quality_score}\"\n echo \"GC Content: + ~{select_first([sample.metrics.gc_content, 0])}\"\n echo \"Duplicate + Rate: ~{select_first([sample.metrics.duplicate_rate, 0])}%\"\n echo + \"Library Prep: ~{select_first([sample.library_prep, ''Standard''])}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''struct_example.sample_information'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:26:55.217Z","start":"2025-02-26T22:26:55.194Z","id":"c4747ccd-c78a-4c47-8873-83b63e0334ab","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-c4747ccd-c78a-4c47-8873-83b63e0334ab"},"submission":"2025-02-26T22:22:25.494Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '3341' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/43845110-ee3b-4503-a08c-3bb165ee8635/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"basicTaskTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:14.873Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:23.067Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version 1.0\n\n# The basicTaskTest workflow calls a task named simpleTask, which takes a string input and writes it to a file called output.txt. It demonstrates a basic execution of a task with file output.\n\n# This tests basic task execution, @@ -332,15 +741,15 @@ interactions: {\n input {\n String text = \"Hello, World!\"\n }\n\n call simpleTask {\n input:\n message = text\n }\n}\n\ntask simpleTask {\n input {\n String message\n }\n\n command <<<\n echo \"${message}\" > output.txt\n >>>\n\n output - {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:22:44.170Z","start":"2025-01-28T19:22:39.046Z","id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d","inputs":{"text":"Hello, - World!"},"labels":{"cromwell-workflow-id":"cromwell-7dd646ef-2577-4d8d-9596-3e3384f3b09d"},"submission":"2025-01-28T19:20:42.640Z"}' + {\n File outputFile = \"output.txt\"\n }\n\n runtime {\n docker: \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/cacheCopy/execution/output.txt"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:23:23.067Z","start":"2025-02-26T22:23:14.874Z","id":"43845110-ee3b-4503-a08c-3bb165ee8635","inputs":{"text":"Hello, + World!"},"labels":{"cromwell-workflow-id":"cromwell-43845110-ee3b-4503-a08c-3bb165ee8635"},"submission":"2025-02-26T22:22:25.535Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:45 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: @@ -360,38 +769,268 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/5150f1dc-5451-4dc4-b288-ef0ddf8da487/metadata?expandSubWorkflows=false&excludeKey=calls + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/52bdecf2-4a27-443f-8748-af12730327d8/metadata?expandSubWorkflows=false&excludeKey=calls response: body: - string: '{"workflowName":"HelloDockerHostname","workflowProcessingEvents":[{"cromwellId":"cromid-b65ea54","description":"PickedUp","timestamp":"2025-01-28T19:21:38.968Z","cromwellVersion":"87"},{"cromwellId":"cromid-b65ea54","description":"Finished","timestamp":"2025-01-28T19:23:24.051Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version - 1.0\n## This is a test workflow that returns the hostname of the node \n## - the job is submitted to as a test for Docker functionality on Gizmo.\n\n#### - WORKFLOW DEFINITION\n\nworkflow HelloDockerHostname {\n call Hostname {\n }\n\n output - {\n File stdout = Hostname.out\n }\n\n parameter_meta {\n stdout: - \"hostname of the node the job was submitted to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask - Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File - out = stdout()\n }\n\n runtime {\n cpu: 1\n memory: \"1 GB\"\n docker: - \"ubuntu:latest\"\n }\n\n parameter_meta {\n out: \"hostname of the node - the job was submitted to\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:23:34.905Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:23:34.936Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow enhanced_map_test {\n input {\n # Original inputs\n Array[String] + samples\n Map[String, String] sample_metadata\n Map[String, + Int] read_lengths\n\n # New test inputs\n Map[String, Map[String, + String]] nested_map = {\n \"patient1\": {\n \"sample1\": + \"normal\",\n \"sample2\": \"tumor\"\n },\n \"patient2\": + {\n \"sample3\": \"normal\",\n \"sample4\": + \"tumor\"\n }\n }\n # We need to provide keys as + arrays since WDL 1.0 doesn''t have a keys() function\n Array[String] + patient_ids = [\"patient1\", \"patient2\"]\n }\n\n # Test nested map + processing\n scatter (patient_id in patient_ids) {\n call process_nested_map + {\n input:\n patient_id = patient_id,\n patient_data + = nested_map[patient_id],\n # We need to provide the sample + names explicitly\n samples_for_patient = if patient_id == \"patient1\" + then [\"sample1\", \"sample2\"] else [\"sample3\", \"sample4\"]\n }\n }\n\n # + Original sample processing with output map generation\n scatter (sample + in samples) {\n call process_sample {\n input:\n sample_name + = sample,\n sample_type = sample_metadata[sample],\n read_length + = read_lengths[sample]\n }\n }\n\n # Aggregate results into a + map\n call create_result_map {\n input:\n sample_names + = samples,\n processing_messages = process_sample.message\n }\n\n output + {\n Map[String, String] result_map = create_result_map.output_map\n Array[String] + nested_map_results = process_nested_map.message\n }\n}\n\ntask process_nested_map + {\n input {\n String patient_id\n Map[String, String] patient_data\n Array[String] + samples_for_patient\n }\n\n # First get the first sample ID\n String + first_sample = samples_for_patient[0]\n # Then use it to index the patient + data\n String sample_type = patient_data[first_sample]\n\n command {\n echo + \"Processing patient ${patient_id} with sample type ${sample_type}\"\n for + sample in ${sep='' '' samples_for_patient}; do\n echo \"Sample: + $sample\"\n done\n }\n\n output {\n String message = read_string(stdout())\n }\n\n runtime + {\n docker: \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask process_sample + {\n input {\n String sample_name\n String sample_type\n Int + read_length\n }\n\n command <<<\n echo \"Processing ~{sample_name} + (~{sample_type}) with read length ~{read_length}\"\n >>>\n\n output + {\n String message = read_string(stdout())\n }\n\n runtime {\n docker: + \"ubuntu:noble-20241118.1\"\n }\n}\n\ntask create_result_map {\n input + {\n Array[String] sample_names\n Array[String] processing_messages\n }\n\n command + <<<\n python <>>\n\n output + {\n Map[String, String] output_map = read_map(''output.txt'')\n }\n\n runtime + {\n docker: \"python:3.8-slim\"\n }\n}","root":"","options":"{\n \"read_from_cache\": false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": - false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout"},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-01-28T19:23:24.050Z","start":"2025-01-28T19:21:38.969Z","id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-5150f1dc-5451-4dc4-b288-ef0ddf8da487"},"submission":"2025-01-28T19:20:42.683Z"}' + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.read_lengths'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.sample_metadata'' not specified"},{"causedBy":[],"message":"Required + workflow input ''enhanced_map_test.samples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:23:34.936Z","start":"2025-02-26T22:23:34.906Z","id":"52bdecf2-4a27-443f-8748-af12730327d8","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-52bdecf2-4a27-443f-8748-af12730327d8"},"submission":"2025-02-26T22:22:25.577Z"}' headers: Connection: - keep-alive Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:23:45 GMT + - Wed, 26 Feb 2025 22:30:25 GMT Server: - nginx/1.25.3 Transfer-Encoding: - chunked content-length: - - '1875' + - '4807' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96bdebd9-cded-49d8-a73c-aba36b2282dc/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:35.073Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:35.092Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\n# Define the structure for sampleDetails\nstruct sampleDetails {\n String + experimentType\n String prepMethod\n String tissueType\n}\n\n# Define + the main structure for the single sample\nstruct singleSample {\n String + sampleName\n String aboutSample\n String sampleDescription\n sampleDetails + details # Use the sampleDetails struct here\n}\n\nworkflow testNestedJsonArray + {\n input {\n String cellNumber\n Array[singleSample] batchOfSamples # + Array of objects representing each sample\n }\n\n scatter (sample in batchOfSamples) + {\n call processSample {\n input:\n sample = sample,\n base_file_name + = sample.sampleName \n }\n }\n\n output {\n # Collect all the fields + together from each sample into one list\n Array[File] result_allSampleInfo + = processSample.allSampleInfo\n }\n}\n\ntask processSample {\n input {\n singleSample + sample # Use singleSample type, not Object\n String base_file_name\n }\n\n command + <<<\n # Format the sample information as a single string\n allSampleInfo=\"~{sample.sampleName} + | ~{sample.aboutSample} | ~{sample.sampleDescription} | ~{sample.details.experimentType} + | ~{sample.details.prepMethod} | ~{sample.details.tissueType}\"\n \n # + Output the concatenated sample info to a file\n echo \"${allSampleInfo}\" + > ~{base_file_name}.allSampleInfo.txt\n >>>\n\n output {\n # Read all + sample info from the file and output it as an Array of Strings\n File allSampleInfo + = \"${base_file_name}.allSampleInfo.txt\"\n }\n\n runtime {\n docker: + \"ubuntu:20.04\"\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.cellNumber'' not specified"},{"causedBy":[],"message":"Required + workflow input ''testNestedJsonArray.batchOfSamples'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:35.092Z","start":"2025-02-26T22:25:35.074Z","id":"96bdebd9-cded-49d8-a73c-aba36b2282dc","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96bdebd9-cded-49d8-a73c-aba36b2282dc"},"submission":"2025-02-26T22:22:25.619Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2731' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowName":"basicGlobTest","workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:15.045Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:53.863Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n\nworkflow basicGlobTest {\n call create_files\n output {\n Array[File] + matched_files = create_files.txt_files\n }\n}\n\ntask create_files {\n command + <<<\n echo \"File 1\" > file1.txt\n echo \"File 2\" > file2.txt\n >>>\n output + {\n Array[File] txt_files = glob(\"*.txt\")\n }\n}\n","root":"","options":"{\n \"read_from_cache\": + false,\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n \"write_to_cache\": + false\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{"basicGlobTest.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file1.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file2.txt"]},"workflowRoot":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b","actualWorkflowLanguage":"WDL","status":"Succeeded","end":"2025-02-26T22:25:53.863Z","start":"2025-02-26T22:25:15.046Z","id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-95d1ea6f-f6b7-452e-9ee1-650a661cce7b"},"submission":"2025-02-26T22:22:25.660Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1741' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:25:55.122Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:25:55.104Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n# This workflow takes a tab separated file where each row is a set of + data to be used in each \n# of the independent scattered task series that + you have as your workflow process. This file \n# will, for example, have + column names `sampleName`, `bamLocation`, and `bedlocation`. This\n# allows + you to know that regardless of the order of the columns in your batch file, + the correct\n# inputs will be used for the tasks you define. \nworkflow parseBatchFile + {\n input {\n File batchFile\n }\n Array[Object] batchInfo = read_objects(batchFile)\n scatter + (job in batchInfo){\n String sampleName = job.sampleName\n File bamFile + = job.bamLocation\n File bedFile = job.bedLocation\n\n ## INSERT YOUR + WORKFLOW TO RUN PER LINE IN YOUR BATCH FILE HERE!!!!\n call test {\n input: + in1=sampleName, in2=bamFile, in3=bedFile\n }\n\n } # End Scatter over + the batch file\n# Outputs that will be retained when execution is complete\n output + {\n Array[File] outputArray = test.item_out\n }\n# End workflow\n}\n\n#### + TASK DEFINITIONS\n# echo some text to stdout, treats files as strings just + to echo them as a dummy example\ntask test {\n input {\n String in1\n String + in2\n String in3\n }\n command {\n echo ~{in1}\n echo ~{in2}\n echo + ~{in3}\n }\n output {\n File item_out = stdout()\n }\n}","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Required + workflow input ''parseBatchFile.batchFile'' not specified"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:25:55.122Z","start":"2025-02-26T22:25:55.105Z","id":"96c23315-8890-4eed-a885-394958a2312e","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-96c23315-8890-4eed-a885-394958a2312e"},"submission":"2025-02-26T22:22:25.701Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '2267' + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7d18588e-1455-4741-8e5d-d1b15c998a83/metadata?expandSubWorkflows=false&excludeKey=calls + response: + body: + string: '{"workflowProcessingEvents":[{"cromwellId":"cromid-2f25be4","description":"PickedUp","timestamp":"2025-02-26T22:24:34.985Z","cromwellVersion":"87"},{"cromwellId":"cromid-2f25be4","description":"Finished","timestamp":"2025-02-26T22:24:35.003Z","cromwellVersion":"87"}],"actualWorkflowLanguageVersion":"1.0","submittedFiles":{"workflow":"version + 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### + WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask + oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime + { docker: docker_image }\n}\n","root":"","options":"{\n\n}","inputs":"{}","workflowUrl":"","labels":"{}"},"calls":{},"outputs":{},"actualWorkflowLanguage":"WDL","status":"Failed","failures":[{"causedBy":[{"causedBy":[],"message":"Failed + to process task definition ''oopsie'' (reason 1 of 1): Cannot lookup value + ''docker_image'', it is never declared. Available values are: [''str'']"}],"message":"Workflow + input processing failed"}],"end":"2025-02-26T22:24:35.003Z","start":"2025-02-26T22:24:34.986Z","id":"7d18588e-1455-4741-8e5d-d1b15c998a83","inputs":{},"labels":{"cromwell-workflow-id":"cromwell-7d18588e-1455-4741-8e5d-d1b15c998a83"},"submission":"2025-02-26T22:22:25.741Z"}' + headers: + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:30:25 GMT + Server: + - nginx/1.25.3 + Transfer-Encoding: + - chunked + content-length: + - '1307' status: code: 200 message: OK diff --git a/tests/cromwellapi/cassettes/test-outputs/test_outputs.yaml b/tests/cromwellapi/cassettes/test-outputs/test_outputs.yaml index 867750b..6e8833d 100644 --- a/tests/cromwellapi/cassettes/test-outputs/test_outputs.yaml +++ b/tests/cromwellapi/cassettes/test-outputs/test_outputs.yaml @@ -9,14 +9,46 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/b4c610ff-437a-40a5-9562-499ffbc50566/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/outputs response: body: - string: '{"outputs":{},"id":"b4c610ff-437a-40a5-9562-499ffbc50566"}' + string: '{"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/0ab308de-6ffc-44f9-8c9c-bd6c8a007185/call-Hostname/execution/stdout"},"id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185"}' + headers: + Connection: + - keep-alive + Content-Length: + - '217' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/fd02ca92-818d-40da-8b39-8e8e1666042d/outputs + response: + body: + string: '{"outputs":{},"id":"fd02ca92-818d-40da-8b39-8e8e1666042d"}' headers: Connection: - keep-alive @@ -25,7 +57,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:20 GMT + - Wed, 26 Feb 2025 22:31:57 GMT Server: - nginx/1.25.3 status: @@ -41,23 +73,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/6a921318-d1b5-4e96-b311-6e389ac7dc62/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/626d1502-f95c-42dd-a364-6257818dd175/outputs response: body: - string: '{"outputs":{"HelloHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloHostname/6a921318-d1b5-4e96-b311-6e389ac7dc62/call-Hostname/execution/stdout"},"id":"6a921318-d1b5-4e96-b311-6e389ac7dc62"}' + string: '{"outputs":{},"id":"626d1502-f95c-42dd-a364-6257818dd175"}' headers: Connection: - keep-alive Content-Length: - - '217' + - '58' Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:20 GMT + - Wed, 26 Feb 2025 22:31:57 GMT Server: - nginx/1.25.3 status: @@ -73,14 +105,110 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/57bfb303-9a45-4661-825c-7c11d17a2240/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/6cb0a219-9b72-462a-93be-dfcf07456d01/outputs response: body: - string: '{"outputs":{},"id":"57bfb303-9a45-4661-825c-7c11d17a2240"}' + string: '{"outputs":{"testFileoperations.created_file1":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file1.txt","testFileoperations.renamed_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/file3_renamed.txt","testFileoperations.moved_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/testFileoperations/6cb0a219-9b72-462a-93be-dfcf07456d01/call-file_operations/cacheCopy/execution/output_dir/file2.txt"},"id":"6cb0a219-9b72-462a-93be-dfcf07456d01"}' + headers: + Connection: + - keep-alive + Content-Length: + - '663' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/ac181a44-3a7a-4635-9881-84057b4beca0/outputs + response: + body: + string: '{"outputs":{"globSubdir.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-ee3a9c1c6860f417d1e9ff1a72d2b62d/file2.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/globSubdir/ac181a44-3a7a-4635-9881-84057b4beca0/call-create_nested_files/execution/glob-4c0cd9dc6b12aa01233bbc214341aae1/file1.txt"]},"id":"ac181a44-3a7a-4635-9881-84057b4beca0"}' + headers: + Connection: + - keep-alive + Content-Length: + - '458' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f53b93ef-62ae-4cad-b78a-9996f93c24e7/outputs + response: + body: + string: '{"outputs":{},"id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7"}' + headers: + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c/outputs + response: + body: + string: '{"outputs":{},"id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c"}' headers: Connection: - keep-alive @@ -89,7 +217,39 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:21 GMT + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/e97ae0ae-90cb-4e1a-b367-1a6f21ad438d/outputs + response: + body: + string: '{"outputs":{"emptyGlobTest.no_files":[]},"id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d"}' + headers: + Connection: + - keep-alive + Content-Length: + - '85' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT Server: - nginx/1.25.3 status: @@ -105,23 +265,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/06446845-f189-451d-9e8f-221af10dc37e/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/outputs response: body: - string: '{"outputs":{"HelloModuleHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloModuleHostname/06446845-f189-451d-9e8f-221af10dc37e/call-Hostname/execution/stdout"},"id":"06446845-f189-451d-9e8f-221af10dc37e"}' + string: '{"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/bd479cb8-15bf-41e9-8f9d-98473cdb2b58/call-Hostname/execution/stdout","HelloDockerHostname.execution_time_seconds":77.894,"HelloDockerHostname.within_time_limit":true},"id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58"}' headers: Connection: - keep-alive Content-Length: - - '229' + - '326' Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:21 GMT + - Wed, 26 Feb 2025 22:31:57 GMT Server: - nginx/1.25.3 status: @@ -137,14 +297,78 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/3daeca54-daf0-4498-af26-04c84a42641c/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/826b54df-2d82-4365-adf0-ae03996b055d/outputs response: body: - string: '{"outputs":{},"id":"3daeca54-daf0-4498-af26-04c84a42641c"}' + string: '{"outputs":{"globNonmatching.unmatched_files":[]},"id":"826b54df-2d82-4365-adf0-ae03996b055d"}' + headers: + Connection: + - keep-alive + Content-Length: + - '94' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/outputs + response: + body: + string: '{"outputs":{"test_nonstandard_outputs.symlink_file":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/link.txt","test_nonstandard_outputs.nested_output":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/nested/dir/test.txt","test_nonstandard_outputs.glob_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_1.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_2.out","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/glob-4ded3a97b6654226f2cdd04e2711b93c/pattern_3.out"],"test_nonstandard_outputs.no_extension":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/datafile","test_nonstandard_outputs.special_chars":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/test_nonstandard_outputs/36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e/call-generate_diverse_outputs/execution/test@file#1.txt"},"id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e"}' + headers: + Connection: + - keep-alive + Content-Length: + - '1568' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/c4747ccd-c78a-4c47-8873-83b63e0334ab/outputs + response: + body: + string: '{"outputs":{},"id":"c4747ccd-c78a-4c47-8873-83b63e0334ab"}' headers: Connection: - keep-alive @@ -153,7 +377,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:21 GMT + - Wed, 26 Feb 2025 22:31:57 GMT Server: - nginx/1.25.3 status: @@ -169,14 +393,14 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/7dd646ef-2577-4d8d-9596-3e3384f3b09d/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/43845110-ee3b-4503-a08c-3bb165ee8635/outputs response: body: - string: '{"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/7dd646ef-2577-4d8d-9596-3e3384f3b09d/call-simpleTask/cacheCopy/execution/output.txt"},"id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d"}' + string: '{"outputs":{"basicTaskTest.simpleTask.outputFile":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicTaskTest/43845110-ee3b-4503-a08c-3bb165ee8635/call-simpleTask/cacheCopy/execution/output.txt"},"id":"43845110-ee3b-4503-a08c-3bb165ee8635"}' headers: Connection: - keep-alive @@ -185,7 +409,135 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:21 GMT + - Wed, 26 Feb 2025 22:31:57 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/52bdecf2-4a27-443f-8748-af12730327d8/outputs + response: + body: + string: '{"outputs":{},"id":"52bdecf2-4a27-443f-8748-af12730327d8"}' + headers: + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:58 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96bdebd9-cded-49d8-a73c-aba36b2282dc/outputs + response: + body: + string: '{"outputs":{},"id":"96bdebd9-cded-49d8-a73c-aba36b2282dc"}' + headers: + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:58 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/outputs + response: + body: + string: '{"outputs":{"basicGlobTest.matched_files":["/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file1.txt","/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/basicGlobTest/95d1ea6f-f6b7-452e-9ee1-650a661cce7b/call-create_files/execution/glob-ef5df339533c1334f081dc8cc75ee4f3/file2.txt"]},"id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b"}' + headers: + Connection: + - keep-alive + Content-Length: + - '453' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:58 GMT + Server: + - nginx/1.25.3 + status: + code: 200 + message: OK +- request: + body: '' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + host: + - gizmok92.fhcrc.org:38409 + user-agent: + - python-httpx/0.28.1 + method: GET + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/96c23315-8890-4eed-a885-394958a2312e/outputs + response: + body: + string: '{"outputs":{},"id":"96c23315-8890-4eed-a885-394958a2312e"}' + headers: + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: @@ -201,23 +553,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/5150f1dc-5451-4dc4-b288-ef0ddf8da487/outputs + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/7d18588e-1455-4741-8e5d-d1b15c998a83/outputs response: body: - string: '{"outputs":{"HelloDockerHostname.stdout":"/redacted/_DaSL/user/svc_proof_test/cromwell-scratch/HelloDockerHostname/5150f1dc-5451-4dc4-b288-ef0ddf8da487/call-Hostname/execution/stdout"},"id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487"}' + string: '{"outputs":{},"id":"7d18588e-1455-4741-8e5d-d1b15c998a83"}' headers: Connection: - keep-alive Content-Length: - - '229' + - '58' Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-search/test_search_no_results.yaml b/tests/cromwellapi/cassettes/test-search/test_search_no_results.yaml index 7a79abb..e3382b1 100644 --- a/tests/cromwellapi/cassettes/test-search/test_search_no_results.yaml +++ b/tests/cromwellapi/cassettes/test-search/test_search_no_results.yaml @@ -9,11 +9,11 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/query?submission=2025-01-30T00%3A00Z + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/query?submission=2025-02-28T00%3A00Z response: body: string: '{"results":[],"totalResultsCount":0}' @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-search/test_search_results.yaml b/tests/cromwellapi/cassettes/test-search/test_search_results.yaml index 2e88073..a83ab33 100644 --- a/tests/cromwellapi/cassettes/test-search/test_search_results.yaml +++ b/tests/cromwellapi/cassettes/test-search/test_search_results.yaml @@ -9,23 +9,23 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1/query?submission=2025-01-27T00%3A00Z + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1/query?submission=2025-02-25T00%3A00Z response: body: - string: '{"results":[{"id":"d4151ded-6a70-4002-a09b-8efe3f526ca7","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T19:23:59.000Z","status":"Running","submission":"2025-01-28T19:23:40.000Z"},{"end":"2025-01-28T19:23:24.000Z","id":"5150f1dc-5451-4dc4-b288-ef0ddf8da487","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T19:21:38.000Z","status":"Succeeded","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:22:56.000Z","id":"6a921318-d1b5-4e96-b311-6e389ac7dc62","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T19:22:19.000Z","status":"Succeeded","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:22:59.000Z","id":"b4c610ff-437a-40a5-9562-499ffbc50566","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:22:59.000Z","status":"Failed","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:22:45.000Z","id":"06446845-f189-451d-9e8f-221af10dc37e","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T19:20:58.000Z","status":"Succeeded","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:22:44.000Z","id":"7dd646ef-2577-4d8d-9596-3e3384f3b09d","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T19:22:39.000Z","status":"Succeeded","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:21:59.000Z","id":"57bfb303-9a45-4661-825c-7c11d17a2240","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:21:58.000Z","status":"Failed","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:21:18.000Z","id":"3daeca54-daf0-4498-af26-04c84a42641c","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:21:18.000Z","status":"Failed","submission":"2025-01-28T19:20:42.000Z"},{"id":"8c838f7b-f771-4cc5-94bc-a509f26dbcf0","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T19:20:42.000Z"},{"id":"ec04a1f3-7ae5-4ab9-9b96-44ccd289d02e","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T19:20:42.000Z"},{"id":"8761261f-03aa-4409-b913-8933c5215f1b","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T19:20:42.000Z"},{"end":"2025-01-28T19:08:26.000Z","id":"b32818f0-8a10-4f8b-b82e-50bfff6ded65","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T19:07:38.000Z","status":"Succeeded","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:08:05.000Z","id":"ec784bf2-6e59-4027-827a-91fa99172019","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T19:07:58.000Z","status":"Succeeded","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:07:35.000Z","id":"56cb7326-79e7-4e34-864d-416b7c3dec74","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T19:06:58.000Z","status":"Succeeded","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:07:18.000Z","id":"73fbc829-5071-4221-a058-6e3de23a641e","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:07:18.000Z","status":"Failed","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:06:57.000Z","id":"47039ac4-4600-43e8-99b5-758c87f23ba1","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T19:06:17.000Z","status":"Succeeded","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:06:38.000Z","id":"47904e72-8fb8-47bb-820f-9909b8549f2c","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:06:38.000Z","status":"Failed","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T19:05:57.000Z","id":"409f790b-6302-4610-8ea3-8fb740955bf6","metadataArchiveStatus":"Unarchived","start":"2025-01-28T19:05:57.000Z","status":"Failed","submission":"2025-01-28T19:05:56.000Z"},{"end":"2025-01-28T18:53:18.000Z","id":"a5a73155-97d6-4936-8143-fd4b0c107c89","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:52:37.000Z","status":"Succeeded","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:53:02.000Z","id":"60dd19a9-7d5b-4fd6-a8b7-13f83a4e55a8","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:52:17.000Z","status":"Succeeded","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:52:57.000Z","id":"f55ad056-8aaf-453c-9667-2bf037f479b0","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:52:57.000Z","status":"Failed","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:51:57.000Z","id":"60187859-89b2-4364-a77d-c163da33f095","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:51:57.000Z","status":"Failed","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:51:44.000Z","id":"59eec6d5-2f7f-4bbb-8c26-b20fc84f40c0","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:51:37.000Z","status":"Succeeded","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:51:36.000Z","id":"0949b1de-5f90-4d51-af7a-7fc615e33427","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:50:57.000Z","status":"Succeeded","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:51:17.000Z","id":"2e0014ae-f986-4e0e-b9c1-c6ff93a6cd06","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:51:17.000Z","status":"Failed","submission":"2025-01-28T18:49:42.000Z"},{"end":"2025-01-28T18:50:55.000Z","id":"bcef949e-0796-4be5-874b-4e4020ae185c","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:50:16.000Z","status":"Succeeded","submission":"2025-01-28T18:46:53.000Z"},{"end":"2025-01-28T18:50:44.000Z","id":"fbdaac82-6d35-4707-a203-eab20553a8dd","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:50:37.000Z","status":"Succeeded","submission":"2025-01-28T18:46:53.000Z"},{"end":"2025-01-28T18:50:38.000Z","id":"27897a62-985a-42f7-97db-f132c6e8d157","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:49:56.000Z","status":"Succeeded","submission":"2025-01-28T18:46:53.000Z"},{"end":"2025-01-28T18:49:36.000Z","id":"0be2b5e3-4d43-4b16-8407-aa84df3b55fd","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:49:36.000Z","status":"Failed","submission":"2025-01-28T18:46:53.000Z"},{"end":"2025-01-28T18:49:16.000Z","id":"8a04e0c8-407c-4e81-aaa4-95ca998bc176","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:49:16.000Z","status":"Failed","submission":"2025-01-28T18:46:52.000Z"},{"end":"2025-01-28T18:49:20.000Z","id":"04d9292f-befd-425b-aab7-b639360ff26a","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:48:36.000Z","status":"Succeeded","submission":"2025-01-28T18:46:52.000Z"},{"end":"2025-01-28T18:48:56.000Z","id":"143023fb-c961-4ec3-a885-0290384c8583","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:48:56.000Z","status":"Failed","submission":"2025-01-28T18:46:52.000Z"},{"end":"2025-01-28T18:48:16.000Z","id":"dfdb3afd-7f92-4c8e-9fe9-a75d854130fd","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:48:16.000Z","status":"Failed","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:47:56.000Z","id":"ce7ac5bb-0b81-4c18-a6c2-968f6290916f","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:47:56.000Z","status":"Failed","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:47:44.000Z","id":"ad320692-146f-4567-8936-7247daf3cec4","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:47:36.000Z","status":"Succeeded","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:47:39.000Z","id":"90f0e6d2-d748-4e06-b21b-17880d0a9e04","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:46:56.000Z","status":"Succeeded","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:47:18.000Z","id":"7bf5ed23-a2ce-48a9-a015-110a6d92432d","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:46:36.000Z","status":"Succeeded","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:47:16.000Z","id":"9fb60cba-086e-4b3c-a624-f902b55c60c5","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:47:16.000Z","status":"Failed","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:46:55.000Z","id":"4dc8170f-31da-488d-9a36-7977fd5fefdb","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:46:16.000Z","status":"Succeeded","submission":"2025-01-28T18:45:53.000Z"},{"end":"2025-01-28T18:45:56.000Z","id":"fe7357c1-a430-4a81-b87e-c21b55dcc527","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:45:56.000Z","status":"Failed","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:45:36.000Z","id":"d84de4b0-19a6-4b40-ae8f-ce949b38911a","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:45:36.000Z","status":"Failed","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:45:23.000Z","id":"c8dbe24d-d29e-4a44-9173-1945b19085c9","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:45:16.000Z","status":"Succeeded","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:45:18.000Z","id":"73a8cfbe-4c2a-4f1f-9e1e-ab4160de8bd8","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:44:36.000Z","status":"Succeeded","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:44:57.000Z","id":"5ba54b30-ddec-4791-a403-2b7e9a12de80","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:44:16.000Z","status":"Succeeded","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:44:56.000Z","id":"965f0012-b9d0-4229-9edf-a3dd26c8e634","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:44:56.000Z","status":"Failed","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:44:42.000Z","id":"46489475-7dce-467c-9579-a855b537ad34","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:43:56.000Z","status":"Succeeded","submission":"2025-01-28T18:42:05.000Z"},{"end":"2025-01-28T18:43:56.000Z","id":"e78722b0-8fd8-4968-be48-d4f2bcada413","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:43:16.000Z","status":"Succeeded","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:43:36.000Z","id":"fb8281b5-4d0e-40ba-a202-1a60bf3ccda4","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:43:36.000Z","status":"Failed","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:43:35.000Z","id":"de0d21ab-fc67-41d1-9efe-cf5eb783f8b3","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:42:56.000Z","status":"Succeeded","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:42:43.000Z","id":"46f643f8-ac71-40c1-b606-fef74bbdcb11","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:41:56.000Z","status":"Succeeded","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:42:36.000Z","id":"c4ac5831-cfb8-4a77-b25f-fed5473845bd","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:42:36.000Z","status":"Failed","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:42:16.000Z","id":"b2ee7fe6-958e-4f7a-b7fb-6b1b03b2dcea","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:42:16.000Z","status":"Failed","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:41:44.000Z","id":"46f61702-017b-45de-9301-15f60d135fb9","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:41:36.000Z","status":"Succeeded","submission":"2025-01-28T18:41:31.000Z"},{"end":"2025-01-28T18:32:25.000Z","id":"8a010604-56a1-4af7-80aa-69394632c8f9","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:30:35.000Z","status":"Succeeded","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:31:55.000Z","id":"e1a368ba-d53a-4f0c-be99-bff49a7b5b33","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:31:55.000Z","status":"Failed","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:31:35.000Z","id":"d92651ea-472b-41db-ae85-dc95aef7b5fc","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:31:35.000Z","status":"Failed","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:31:23.000Z","id":"8e865d96-ca92-4e73-b468-82325a873323","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:31:15.000Z","status":"Succeeded","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:30:54.000Z","id":"78940e20-0b87-471d-89c0-96e03241585a","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:30:15.000Z","status":"Succeeded","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:30:55.000Z","id":"8cd7e20b-9a59-4ea0-bb53-f33c69da4127","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:30:55.000Z","status":"Failed","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:30:39.000Z","id":"34dc7da1-a457-492f-a21e-e4d9262b7916","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:29:55.000Z","status":"Succeeded","submission":"2025-01-28T18:24:19.000Z"},{"end":"2025-01-28T18:30:19.000Z","id":"1627c116-de15-4a24-856e-d8925ee68b28","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:29:35.000Z","status":"Succeeded","submission":"2025-01-28T18:23:49.000Z"},{"end":"2025-01-28T18:29:23.000Z","id":"83f2940e-0106-4cb2-b4f5-a74fd79b8a93","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:29:15.000Z","status":"Succeeded","submission":"2025-01-28T18:23:48.000Z"},{"end":"2025-01-28T18:29:21.000Z","id":"2e96f904-15e0-4fbb-9fab-da8a1803dc81","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:28:35.000Z","status":"Succeeded","submission":"2025-01-28T18:23:45.000Z"},{"end":"2025-01-28T18:28:55.000Z","id":"20c6e8e0-379a-42a3-bd37-8bfc6af33a9a","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:28:55.000Z","status":"Failed","submission":"2025-01-28T18:23:47.000Z"},{"end":"2025-01-28T18:28:35.000Z","id":"5034b26a-396a-46f2-99b7-b93c725efaca","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:27:55.000Z","status":"Succeeded","submission":"2025-01-28T18:23:44.000Z"},{"end":"2025-01-28T18:28:15.000Z","id":"5c52a962-7522-43f4-860a-f8ced6fc9f3e","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:28:15.000Z","status":"Failed","submission":"2025-01-28T18:23:44.000Z"},{"end":"2025-01-28T18:27:55.000Z","id":"170fbe38-43ac-43f0-80df-fa9a251d8705","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:27:15.000Z","status":"Succeeded","submission":"2025-01-28T18:22:49.000Z"},{"end":"2025-01-28T18:27:35.000Z","id":"7f8183cf-27f0-477a-919a-e8fa3c99a699","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:27:35.000Z","status":"Failed","submission":"2025-01-28T18:23:43.000Z"},{"end":"2025-01-28T18:27:05.000Z","id":"8bc56c2e-158c-4afd-bdaa-fbc020671447","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:26:55.000Z","status":"Succeeded","submission":"2025-01-28T18:22:48.000Z"},{"end":"2025-01-28T18:26:36.000Z","id":"7e73e5ca-1f18-45e2-bea7-9d12cfe3fa83","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:25:55.000Z","status":"Succeeded","submission":"2025-01-28T18:22:47.000Z"},{"end":"2025-01-28T18:26:35.000Z","id":"62fa18a3-ea7b-48c4-b7e8-0c8ea26ce4ad","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:26:35.000Z","status":"Failed","submission":"2025-01-28T18:22:48.000Z"},{"end":"2025-01-28T18:26:15.000Z","id":"90f9bb9a-d02f-47c1-8796-e101be1d299c","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:26:15.000Z","status":"Failed","submission":"2025-01-28T18:22:47.000Z"},{"end":"2025-01-28T18:25:55.000Z","id":"163b7316-8e36-47e0-bd6e-a750ef5e8559","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:25:15.000Z","status":"Succeeded","submission":"2025-01-28T18:22:46.000Z"},{"end":"2025-01-28T18:25:35.000Z","id":"fef30add-2af7-4e6a-9f0b-b2ff1f079c7b","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:25:35.000Z","status":"Failed","submission":"2025-01-28T18:22:46.000Z"},{"end":"2025-01-28T18:25:16.000Z","id":"6914119e-a184-4364-aab3-6a0d4c3c415f","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:24:35.000Z","status":"Succeeded","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:24:55.000Z","id":"644c2500-5c88-49d9-97f2-cdedd54602cd","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:24:15.000Z","status":"Succeeded","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:24:55.000Z","id":"e80c9e98-bf75-4e3d-91ab-8bd8b65a6f4a","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:24:55.000Z","status":"Failed","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:24:18.000Z","id":"374e2a29-cde6-498f-9e3c-de9ce27f22b1","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:23:35.000Z","status":"Succeeded","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:24:05.000Z","id":"5de0c84d-3ef5-4e1c-8340-b707a973b07d","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:23:55.000Z","status":"Succeeded","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:23:15.000Z","id":"2a1247ae-e554-42aa-8add-52a1eb491245","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:23:15.000Z","status":"Failed","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:22:55.000Z","id":"288abcc1-308b-4526-a342-62ac25a2a3fd","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:22:54.000Z","status":"Failed","submission":"2025-01-28T18:21:04.000Z"},{"end":"2025-01-28T18:22:36.000Z","id":"c65d4aec-f466-4cf6-b596-fcefb2d4d573","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T18:21:54.000Z","status":"Succeeded","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:22:34.000Z","id":"de270115-95a1-44da-8fb3-73ada1a2526b","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:22:34.000Z","status":"Failed","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:22:14.000Z","id":"c81f745d-27db-4544-9ab5-c99c0883c3ca","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:22:14.000Z","status":"Failed","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:21:36.000Z","id":"4e7070b9-421b-47fd-b1fe-39fc28550717","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T18:20:54.000Z","status":"Succeeded","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:21:34.000Z","id":"c3a14fd3-b6d4-468c-8209-e6bd9568e84b","metadataArchiveStatus":"Unarchived","start":"2025-01-28T18:21:34.000Z","status":"Failed","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:21:26.000Z","id":"a72ceac9-2fbf-425e-9d1d-e8241ac353a3","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T18:21:14.000Z","status":"Succeeded","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T18:21:16.000Z","id":"000b67f8-e9f8-4b1b-bd3e-ebae84b9755a","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T18:20:34.000Z","status":"Succeeded","submission":"2025-01-28T18:20:29.000Z"},{"end":"2025-01-28T03:52:09.000Z","id":"e060bb9f-483c-4034-b307-6c785755a3a6","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T03:51:22.000Z","status":"Succeeded","submission":"2025-01-28T03:48:05.000Z"},{"end":"2025-01-28T03:51:48.000Z","id":"5e311e45-61bf-4b45-858d-240b45ea7e27","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T03:51:02.000Z","status":"Succeeded","submission":"2025-01-28T03:47:54.000Z"},{"end":"2025-01-28T03:50:53.000Z","id":"bf4c7927-d045-4337-90f9-84f813985fbd","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T03:50:42.000Z","status":"Succeeded","submission":"2025-01-28T03:47:47.000Z"},{"end":"2025-01-28T03:50:48.000Z","id":"49d7d187-8835-4368-a506-58b7414fc430","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T03:50:02.000Z","status":"Succeeded","submission":"2025-01-28T03:47:47.000Z"},{"end":"2025-01-28T03:50:36.000Z","id":"bd85ca2e-1447-456c-9d73-e23756cf04af","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-01-28T03:50:22.000Z","status":"Succeeded","submission":"2025-01-28T03:47:47.000Z"},{"end":"2025-01-28T03:50:29.000Z","id":"edbec46b-e401-4f94-b43c-ef10b4d408bb","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T03:49:42.000Z","status":"Succeeded","submission":"2025-01-28T03:47:46.000Z"},{"end":"2025-01-28T03:49:22.000Z","id":"9d8d4b22-2edf-43dc-bc77-92fe741fb244","metadataArchiveStatus":"Unarchived","start":"2025-01-28T03:49:22.000Z","status":"Failed","submission":"2025-01-28T03:47:46.000Z"},{"end":"2025-01-28T03:49:04.000Z","id":"e4c80c71-9c3d-4d61-8d8e-47c42b393aa4","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T03:48:22.000Z","status":"Succeeded","submission":"2025-01-28T03:47:45.000Z"},{"end":"2025-01-28T03:49:02.000Z","id":"4195838f-0a15-4637-8707-3057ac98bb44","metadataArchiveStatus":"Unarchived","start":"2025-01-28T03:49:02.000Z","status":"Failed","submission":"2025-01-28T03:47:46.000Z"},{"end":"2025-01-28T03:48:42.000Z","id":"02c84e44-244e-4b33-a23e-a19961b1ef32","metadataArchiveStatus":"Unarchived","start":"2025-01-28T03:48:42.000Z","status":"Failed","submission":"2025-01-28T03:47:46.000Z"},{"end":"2025-01-28T03:48:02.000Z","id":"be1d3b0d-441a-4243-a4c5-3ecfdf56b08e","metadataArchiveStatus":"Unarchived","start":"2025-01-28T03:48:02.000Z","status":"Failed","submission":"2025-01-28T03:47:45.000Z"},{"id":"bca87660-2f1c-4ab4-a906-c53ba462fa63","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T03:47:44.000Z"},{"id":"bbe541f4-4e19-4dca-855b-126c77d7fdad","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T03:47:45.000Z"},{"id":"667a3db1-00a8-4052-be28-2106f9bc4b07","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T03:47:44.000Z"},{"end":"2025-01-28T00:49:54.000Z","id":"7bd8e6fe-e66a-4e97-b947-a074a8ce6b27","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:47:51.000Z","status":"Succeeded","submission":"2025-01-28T00:44:27.000Z"},{"end":"2025-01-28T00:49:22.000Z","id":"0a88fc80-d775-4f02-ae9b-5e2d743525d3","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:47:31.000Z","status":"Succeeded","submission":"2025-01-28T00:44:22.000Z"},{"end":"2025-01-28T00:47:38.000Z","id":"78647c71-48d9-44c1-80c8-0de9b1c55b84","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T00:44:50.000Z","status":"Succeeded","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:47:16.000Z","id":"c6d5c072-c042-4cb8-8efd-33156fe47706","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:46:31.000Z","status":"Succeeded","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:47:11.000Z","id":"f3307173-9262-4c60-a775-0a9e428c6696","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:47:11.000Z","status":"Failed","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:46:51.000Z","id":"d2ede951-f88e-4be0-a4e6-d3ebc8f273f3","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:46:51.000Z","status":"Failed","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:46:11.000Z","id":"b5af4f18-0d64-4fb0-bb98-8ae8369a9d74","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:46:11.000Z","status":"Failed","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:46:05.000Z","id":"9280e9cc-32d6-4f1e-9365-ab1a74ca28fe","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T00:45:51.000Z","status":"Succeeded","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:45:31.000Z","id":"8ff28f2d-bd32-4454-9b68-5a7ee261b83f","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:45:31.000Z","status":"Failed","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:45:24.000Z","id":"7ec34037-efdf-4558-8f61-997d2e860aab","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-01-28T00:45:10.000Z","status":"Succeeded","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:45:16.000Z","id":"37a3c597-2d15-4648-92e3-7f23e2432f24","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T00:44:30.000Z","status":"Succeeded","submission":"2025-01-28T00:44:17.000Z"},{"id":"b2022301-0882-4664-ab27-89b009b6e4d2","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:44:17.000Z"},{"id":"6794f906-ea4c-4196-bf28-2a2d0a73cfeb","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:44:17.000Z"},{"id":"ae4a6702-9eb0-42cb-b1a3-b964323ecd50","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:44:17.000Z"},{"end":"2025-01-28T00:20:49.000Z","id":"70370b82-e47d-42c4-a19e-75b4f81c9a44","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:20:09.000Z","status":"Succeeded","submission":"2025-01-28T00:16:44.000Z"},{"end":"2025-01-28T00:20:26.000Z","id":"08e73e94-bd05-47c5-8e8c-f201af9cac41","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:19:49.000Z","status":"Succeeded","submission":"2025-01-28T00:16:39.000Z"},{"end":"2025-01-28T00:19:46.000Z","id":"6ef2a463-a668-4b1e-a263-acac4b66dd11","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T00:19:09.000Z","status":"Succeeded","submission":"2025-01-28T00:16:35.000Z"},{"end":"2025-01-28T00:19:36.000Z","id":"9ad4985b-638c-4ef6-b602-e9772324ed51","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-01-28T00:19:29.000Z","status":"Succeeded","submission":"2025-01-28T00:16:35.000Z"},{"end":"2025-01-28T00:19:31.000Z","id":"6775ec3c-8297-477a-ae54-426506950562","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T00:18:49.000Z","status":"Succeeded","submission":"2025-01-28T00:16:35.000Z"},{"end":"2025-01-28T00:18:34.000Z","id":"15c1cd3e-2bf9-424a-a612-9bf3bd435791","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:16:49.000Z","status":"Succeeded","submission":"2025-01-28T00:16:34.000Z"},{"end":"2025-01-28T00:18:29.000Z","id":"39f53a8a-04d4-4cb2-a519-8005928d1014","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:18:29.000Z","status":"Failed","submission":"2025-01-28T00:16:35.000Z"},{"end":"2025-01-28T00:18:09.000Z","id":"0a854f9f-5621-4889-8ef0-ff4c64c698b4","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:18:09.000Z","status":"Failed","submission":"2025-01-28T00:16:35.000Z"},{"end":"2025-01-28T00:17:53.000Z","id":"fc586bce-0fad-4a21-999c-70fcd57efab2","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T00:17:49.000Z","status":"Succeeded","submission":"2025-01-28T00:16:34.000Z"},{"end":"2025-01-28T00:17:29.000Z","id":"fafdf6a5-ad72-4882-bbe8-8cea48074592","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:17:29.000Z","status":"Failed","submission":"2025-01-28T00:16:34.000Z"},{"end":"2025-01-28T00:17:09.000Z","id":"c5f8184e-df28-413a-966f-6e56c1b5bab4","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:17:09.000Z","status":"Failed","submission":"2025-01-28T00:16:34.000Z"},{"id":"ab1b4954-2182-4f2b-a702-ac0c90affcfe","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:16:34.000Z"},{"id":"57260b0e-8639-4e43-89d4-1ed43bcd0d47","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:16:34.000Z"},{"id":"46949bc2-b915-4792-b9f8-3584a409f735","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-28T00:16:34.000Z"},{"end":"2025-01-28T00:06:28.000Z","id":"f5ecb3ac-131b-459a-90ac-efd4325c1c58","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T00:05:48.000Z","status":"Succeeded","submission":"2025-01-28T00:02:46.000Z"},{"end":"2025-01-28T00:05:30.000Z","id":"3f701a9c-5f12-4c75-a253-ea99eed3f8c7","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T00:04:48.000Z","status":"Succeeded","submission":"2025-01-28T00:02:46.000Z"},{"end":"2025-01-28T00:05:28.000Z","id":"d0edf8c5-e298-42a0-8119-03e60fc94b84","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:05:28.000Z","status":"Failed","submission":"2025-01-28T00:02:46.000Z"},{"end":"2025-01-28T00:05:08.000Z","id":"91a25c89-1ec3-453a-a424-c1c4db76db89","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:05:08.000Z","status":"Failed","submission":"2025-01-28T00:02:46.000Z"},{"end":"2025-01-28T00:04:47.000Z","id":"bbdd21fd-ef10-4df2-90d6-9237aaad24c4","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:04:08.000Z","status":"Succeeded","submission":"2025-01-28T00:02:45.000Z"},{"end":"2025-01-28T00:04:35.000Z","id":"304da12e-79cf-4415-87f4-186c5d27272e","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T00:04:28.000Z","status":"Succeeded","submission":"2025-01-28T00:02:46.000Z"},{"end":"2025-01-28T00:04:07.000Z","id":"fb0ff990-0881-42ff-b368-cd15a08dfac3","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-28T00:03:28.000Z","status":"Succeeded","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:03:48.000Z","id":"0e76288f-6f18-4a8d-9384-68ac2edeee0c","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:03:48.000Z","status":"Failed","submission":"2025-01-28T00:02:45.000Z"},{"end":"2025-01-28T00:03:07.000Z","id":"c95a22b5-7423-44f3-8f64-6d5bcb63237e","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-28T00:02:28.000Z","status":"Succeeded","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:03:08.000Z","id":"f797da9a-eabf-4580-90b0-f41587ef5162","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:03:08.000Z","status":"Failed","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:02:56.000Z","id":"e536341a-a5a2-443e-8e42-7edc2fa5d0ac","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-28T00:02:48.000Z","status":"Succeeded","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:02:11.000Z","id":"169a03f7-ae60-4585-870a-3f8ebd2b53e1","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-28T00:01:28.000Z","status":"Succeeded","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:02:08.000Z","id":"a95451f4-d9d5-485e-9634-251c5c508fbd","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:02:08.000Z","status":"Failed","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-28T00:01:48.000Z","id":"95bff6c9-3183-48f8-aeb3-e18ab76186b8","metadataArchiveStatus":"Unarchived","start":"2025-01-28T00:01:48.000Z","status":"Failed","submission":"2025-01-28T00:01:12.000Z"},{"end":"2025-01-27T23:46:08.000Z","id":"95e58b58-b104-425c-ac0c-74946e6ad104","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T23:45:27.000Z","status":"Succeeded","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:45:44.000Z","id":"5cf2e27b-4cc7-4b00-8344-8dc42dd91ae8","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T23:45:07.000Z","status":"Succeeded","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:45:24.000Z","id":"53c5f2c8-7e8b-4ceb-9107-13c880adb364","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T23:44:47.000Z","status":"Succeeded","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:44:27.000Z","id":"4ff9ea31-23ea-4875-8a29-5bbf99c1dfd1","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:44:27.000Z","status":"Failed","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:44:14.000Z","id":"4d298246-1f9b-42f8-9f14-bf47b5705bc3","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T23:44:07.000Z","status":"Succeeded","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:43:47.000Z","id":"472ba7ca-cc59-4018-96fa-e5c11021650e","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:43:47.000Z","status":"Failed","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:43:27.000Z","id":"3c0d7484-8a6f-41bd-884b-df46806ac8b4","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:43:27.000Z","status":"Failed","submission":"2025-01-27T23:43:13.000Z"},{"end":"2025-01-27T23:41:06.000Z","id":"df645352-7919-4459-872f-413a642d7c4b","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T23:40:26.000Z","status":"Succeeded","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:40:48.000Z","id":"bc86f1a0-3293-4fc5-a31e-d4be8d82131c","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T23:40:06.000Z","status":"Succeeded","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:40:26.000Z","id":"81373990-b655-4679-95eb-60c23dd9b929","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T23:39:46.000Z","status":"Succeeded","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:39:35.000Z","id":"4e6624d2-511f-403c-9b88-e7c031afafc1","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T23:39:26.000Z","status":"Succeeded","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:39:06.000Z","id":"410d0b7c-c23d-4f75-8fb1-2275ea7192d8","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:39:06.000Z","status":"Failed","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:38:46.000Z","id":"2a43d229-efc4-4826-8f8d-b556c01161e5","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:38:46.000Z","status":"Failed","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T23:38:26.000Z","id":"04cad7f4-5925-4bc8-8895-596d743ebd7b","metadataArchiveStatus":"Unarchived","start":"2025-01-27T23:38:26.000Z","status":"Failed","submission":"2025-01-27T23:38:11.000Z"},{"end":"2025-01-27T22:55:31.000Z","id":"dfd64cdc-d7c1-4125-b434-db637e62f060","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:54:44.000Z","status":"Succeeded","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:54:24.000Z","id":"c2a05e30-8d2e-44e9-b1c7-5bbbe7cefc5a","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:54:23.000Z","status":"Failed","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:54:08.000Z","id":"7bf9fae6-df60-4ee0-b721-98864d94e803","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T22:53:23.000Z","status":"Succeeded","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:54:03.000Z","id":"ad994b34-aad6-46c5-9a07-11c82367186f","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:54:03.000Z","status":"Failed","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:53:43.000Z","id":"8e7ba087-30bb-43b8-a93d-ba3515c669d7","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:53:43.000Z","status":"Failed","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:53:24.000Z","id":"22d6323b-11e0-4655-ab57-9787d3a3511b","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T22:52:43.000Z","status":"Succeeded","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:53:14.000Z","id":"6a84736a-bdc7-4990-b5d2-1d9562031251","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T22:53:03.000Z","status":"Succeeded","submission":"2025-01-27T22:52:33.000Z"},{"end":"2025-01-27T22:47:46.000Z","id":"acdf9425-0809-4cca-a079-f563a50d48c2","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T22:46:23.000Z","status":"Succeeded","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:47:43.000Z","id":"e0b23bd4-92e7-4655-a2cd-de36b2acb829","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:47:43.000Z","status":"Failed","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:47:44.000Z","id":"c577c415-7671-47cd-81b2-66d90318afbc","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:47:03.000Z","status":"Succeeded","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:47:26.000Z","id":"b546df59-d364-4795-bfe4-86197c0b20a6","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T22:46:43.000Z","status":"Succeeded","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:47:23.000Z","id":"c5f7f870-4435-4f5b-9821-09f1aa504d7b","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:47:23.000Z","status":"Failed","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:46:14.000Z","id":"997e328a-5257-48e8-81ed-56162b001970","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T22:46:03.000Z","status":"Succeeded","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:45:43.000Z","id":"35e3c735-ae95-4055-8fac-9201213a1c32","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:45:43.000Z","status":"Failed","submission":"2025-01-27T22:45:42.000Z"},{"end":"2025-01-27T22:39:54.000Z","id":"faccd2ea-d92d-45ac-8a36-cb40d3120490","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:38:22.000Z","status":"Succeeded","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:38:14.000Z","id":"d1fab1e1-0988-4e62-9750-1e12e72bc3d4","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T22:38:02.000Z","status":"Succeeded","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:37:42.000Z","id":"bee49697-c1da-43c5-b651-f4a8522a250a","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:37:42.000Z","status":"Failed","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:37:22.000Z","id":"b22e960e-8ae3-49bc-9d6f-772928234254","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:37:22.000Z","status":"Failed","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:37:24.000Z","id":"48f2b832-1c5e-4bd2-b4fe-38d4c3f259f7","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T22:36:42.000Z","status":"Succeeded","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:37:09.000Z","id":"399d447c-ae74-4839-b54d-08a4e1b067d8","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T22:36:22.000Z","status":"Succeeded","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:37:02.000Z","id":"510bed6a-2a51-45e7-b824-cb741323d6e8","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:37:02.000Z","status":"Failed","submission":"2025-01-27T22:36:05.000Z"},{"end":"2025-01-27T22:34:51.000Z","id":"fe4274de-415e-4d28-ab3f-7aaafba46211","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T22:34:02.000Z","status":"Succeeded","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:34:05.000Z","id":"cbcf767e-1cfb-4077-bdf6-d02a4eb485d7","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T22:33:22.000Z","status":"Succeeded","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:33:56.000Z","id":"f4e4fa10-4f41-4d0b-ad19-7e8eb884c4f6","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T22:33:42.000Z","status":"Succeeded","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:33:44.000Z","id":"a4f07e1a-be2c-4418-bddc-aea0acf2555e","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:33:02.000Z","status":"Succeeded","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:32:42.000Z","id":"31a27d05-6dcf-4d14-b1a0-c84299016588","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:32:42.000Z","status":"Failed","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:32:22.000Z","id":"258cb0c3-7680-41de-987f-9e44db7304fb","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:32:22.000Z","status":"Failed","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:32:02.000Z","id":"1ebdca80-b8ed-4ad2-9462-70fb2238f32a","metadataArchiveStatus":"Unarchived","start":"2025-01-27T22:32:02.000Z","status":"Failed","submission":"2025-01-27T22:32:00.000Z"},{"end":"2025-01-27T22:21:36.000Z","id":"e736579b-e16c-4173-982e-66dd8157a117","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:21:21.000Z","status":"Succeeded","submission":"2025-01-27T22:21:14.000Z"},{"end":"2025-01-27T22:20:46.000Z","id":"9808f260-c11d-4976-ba64-f16529648cff","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T22:20:01.000Z","status":"Succeeded","submission":"2025-01-27T22:19:44.000Z"},{"end":"2025-01-27T21:22:24.000Z","id":"fd07ca11-561b-4027-b153-554ef84eaaaf","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T21:22:18.000Z","status":"Succeeded","submission":"2025-01-27T21:22:16.000Z"},{"end":"2025-01-27T21:21:06.000Z","id":"fefcb579-cd95-4121-887d-1b964dfb3842","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T21:20:58.000Z","status":"Succeeded","submission":"2025-01-27T21:20:43.000Z"},{"end":"2025-01-27T21:17:24.000Z","id":"f2f09181-bbf5-47b8-9d38-5100af322a39","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T21:17:17.000Z","status":"Succeeded","submission":"2025-01-27T21:16:58.000Z"},{"end":"2025-01-27T21:16:06.000Z","id":"b275cef0-7433-4f6e-97f6-b7686d4189fb","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T21:15:57.000Z","status":"Succeeded","submission":"2025-01-27T21:15:49.000Z"},{"end":"2025-01-27T21:09:06.000Z","id":"57274a49-9821-4f11-9d8c-a8fac95493a9","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T21:08:57.000Z","status":"Succeeded","submission":"2025-01-27T21:08:37.000Z"},{"end":"2025-01-27T19:52:36.000Z","id":"38acb1f3-41a8-4943-99f1-a0135048d7f9","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T19:50:32.000Z","status":"Succeeded","submission":"2025-01-27T19:47:09.000Z"},{"end":"2025-01-27T19:52:07.000Z","id":"12ed4d36-473c-4d05-9c77-b495f1935b1a","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T19:50:12.000Z","status":"Succeeded","submission":"2025-01-27T19:47:03.000Z"},{"end":"2025-01-27T19:52:04.000Z","id":"ecc9feb6-0b1f-4238-98d8-c1d16257c0d4","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-01-27T19:49:51.000Z","status":"Succeeded","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:49:31.000Z","id":"e7cd6f68-eae6-4523-bf2f-556130f9896c","metadataArchiveStatus":"Unarchived","start":"2025-01-27T19:49:31.000Z","status":"Failed","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:49:18.000Z","id":"bc059bff-5024-4c72-b599-fe77dcf685d6","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-01-27T19:48:31.000Z","status":"Succeeded","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:49:11.000Z","id":"db112f6b-c030-4f5f-89be-47b01d51bbed","metadataArchiveStatus":"Unarchived","start":"2025-01-27T19:49:11.000Z","status":"Failed","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:49:06.000Z","id":"d2266196-1ef7-4aac-8101-0ca915aec091","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-01-27T19:48:51.000Z","status":"Succeeded","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:48:39.000Z","id":"6a07241f-95d6-4fef-bfb1-b88f5cdaacce","metadataArchiveStatus":"Unarchived","name":"HelloModuleHostname","start":"2025-01-27T19:47:51.000Z","status":"Succeeded","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:48:26.000Z","id":"b6022949-6ad7-45d5-8d12-afaeaf284f0e","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-01-27T19:48:11.000Z","status":"Succeeded","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:47:31.000Z","id":"375d5067-6c36-4822-8653-3d5ec3c9b1c5","metadataArchiveStatus":"Unarchived","start":"2025-01-27T19:47:31.000Z","status":"Failed","submission":"2025-01-27T19:46:58.000Z"},{"end":"2025-01-27T19:47:11.000Z","id":"00053b78-ebc6-4a1f-a642-9b787fa87c9d","metadataArchiveStatus":"Unarchived","start":"2025-01-27T19:47:11.000Z","status":"Failed","submission":"2025-01-27T19:46:58.000Z"},{"id":"abd590d0-c50b-4598-878e-1259059e7918","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-27T19:46:58.000Z"},{"id":"19a88204-fc1e-4952-b13e-79c89753c5bd","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-27T19:46:58.000Z"},{"id":"758aa5c5-04c6-4a02-aa95-18881a240661","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-01-27T19:46:58.000Z"}],"totalResultsCount":207}' + string: '{"results":[{"end":"2025-02-26T22:31:11.000Z","id":"cd7fd02d-13ce-46e8-877b-14df40f53433","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T22:30:35.000Z","status":"Succeeded","submission":"2025-02-26T22:30:20.000Z"},{"end":"2025-02-26T22:29:26.000Z","id":"bd479cb8-15bf-41e9-8f9d-98473cdb2b58","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-02-26T22:26:35.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:28:15.000Z","id":"fd02ca92-818d-40da-8b39-8e8e1666042d","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:28:15.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:28:01.000Z","id":"e97ae0ae-90cb-4e1a-b367-1a6f21ad438d","metadataArchiveStatus":"Unarchived","name":"emptyGlobTest","start":"2025-02-26T22:27:15.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:27:55.000Z","id":"f53b93ef-62ae-4cad-b78a-9996f93c24e7","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:27:55.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:27:35.000Z","id":"f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:27:35.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:26:55.000Z","id":"c4747ccd-c78a-4c47-8873-83b63e0334ab","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:26:55.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:26:51.000Z","id":"ac181a44-3a7a-4635-9881-84057b4beca0","metadataArchiveStatus":"Unarchived","name":"globSubdir","start":"2025-02-26T22:26:15.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:25:53.000Z","id":"95d1ea6f-f6b7-452e-9ee1-650a661cce7b","metadataArchiveStatus":"Unarchived","name":"basicGlobTest","start":"2025-02-26T22:25:15.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:25:55.000Z","id":"96c23315-8890-4eed-a885-394958a2312e","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:25:55.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:25:35.000Z","id":"96bdebd9-cded-49d8-a73c-aba36b2282dc","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:25:35.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:25:33.000Z","id":"826b54df-2d82-4365-adf0-ae03996b055d","metadataArchiveStatus":"Unarchived","name":"globNonmatching","start":"2025-02-26T22:24:55.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:24:35.000Z","id":"7d18588e-1455-4741-8e5d-d1b15c998a83","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:24:34.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:24:24.000Z","id":"6cb0a219-9b72-462a-93be-dfcf07456d01","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-02-26T22:24:14.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:23:54.000Z","id":"626d1502-f95c-42dd-a364-6257818dd175","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:23:54.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:23:39.000Z","id":"36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e","metadataArchiveStatus":"Unarchived","name":"test_nonstandard_outputs","start":"2025-02-26T22:22:54.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:23:34.000Z","id":"52bdecf2-4a27-443f-8748-af12730327d8","metadataArchiveStatus":"Unarchived","start":"2025-02-26T22:23:34.000Z","status":"Failed","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:23:23.000Z","id":"43845110-ee3b-4503-a08c-3bb165ee8635","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-02-26T22:23:14.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"end":"2025-02-26T22:23:15.000Z","id":"0ab308de-6ffc-44f9-8c9c-bd6c8a007185","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T22:22:34.000Z","status":"Succeeded","submission":"2025-02-26T22:22:25.000Z"},{"id":"7253aa1c-0570-4bc9-8f0f-0739c610769c","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T22:22:24.000Z"},{"id":"b981a95e-26bf-438b-9f73-18de960295b2","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T22:22:24.000Z"},{"end":"2025-02-26T21:05:25.000Z","id":"44f147f8-0986-46ec-bf00-e2e24c1e0dc3","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T21:04:30.000Z","status":"Succeeded","submission":"2025-02-26T21:04:12.000Z"},{"end":"2025-02-26T21:03:32.000Z","id":"b2edba6c-c182-46f3-ae4a-a36287d4da58","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T21:02:49.000Z","status":"Succeeded","submission":"2025-02-26T21:02:35.000Z"},{"end":"2025-02-26T21:01:38.000Z","id":"c23f23e7-68cc-4b3d-bcd3-9094d77a78bf","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-02-26T20:58:09.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:59:09.000Z","id":"ce845684-7a3d-46bb-820a-dbca8ad2184a","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:59:09.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:58:49.000Z","id":"cafb3c24-3c44-45d3-a2db-0cfc1b3f2b32","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:58:49.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:58:47.000Z","id":"b6547b24-cef2-4003-aaf6-c531e5207d82","metadataArchiveStatus":"Unarchived","name":"test_nonstandard_outputs","start":"2025-02-26T20:57:49.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:58:29.000Z","id":"c257351b-45d7-4b6f-96f7-937dd8190c78","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:58:29.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:58:17.000Z","id":"a8ed1141-19ff-4932-abfb-b6b2c34e6c43","metadataArchiveStatus":"Unarchived","name":"globNonmatching","start":"2025-02-26T20:57:29.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:57:59.000Z","id":"7affc4a5-6993-4bd7-bb1f-e9e136bfe7c7","metadataArchiveStatus":"Unarchived","name":"emptyGlobTest","start":"2025-02-26T20:57:09.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:57:12.000Z","id":"6ba20fa5-d803-4aa0-b2e1-fb3e6b8a4777","metadataArchiveStatus":"Unarchived","name":"basicGlobTest","start":"2025-02-26T20:56:29.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:56:49.000Z","id":"6fa43dfe-43dc-4302-aff6-da55404b8757","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:56:49.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:56:09.000Z","id":"63a56e09-74a5-472d-90d5-667a7eb5af7e","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:56:09.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:55:49.000Z","id":"3669a381-a39e-48a0-a52f-63e88293dfb7","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:55:49.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:55:41.000Z","id":"35faa410-6b30-403a-b68a-4954f8decae2","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-02-26T20:55:29.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:55:34.000Z","id":"298be52f-f034-40b6-baa7-8c69199e3cb4","metadataArchiveStatus":"Unarchived","name":"globSubdir","start":"2025-02-26T20:54:49.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:55:09.000Z","id":"2d6c7a97-af0a-4cc1-811e-e3dced1d40e9","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:55:09.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:54:33.000Z","id":"480cf62c-3acb-499b-bdb6-fc25f9ef37d7","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T20:53:29.000Z","status":"Succeeded","submission":"2025-02-26T20:53:26.000Z"},{"end":"2025-02-26T20:54:29.000Z","id":"2448c789-bbea-431d-aeb0-b1d072bbf38d","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:54:29.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:54:09.000Z","id":"20bc4af8-f149-49c2-8568-2b964f1181e9","metadataArchiveStatus":"Unarchived","start":"2025-02-26T20:54:09.000Z","status":"Failed","submission":"2025-02-26T20:53:27.000Z"},{"end":"2025-02-26T20:54:03.000Z","id":"11340759-d0a5-4f86-9f8e-9ad1c5fce2af","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-02-26T20:53:49.000Z","status":"Succeeded","submission":"2025-02-26T20:53:27.000Z"},{"id":"ea95994d-cb28-4794-b1d2-bce22893655e","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T20:53:26.000Z"},{"id":"564f4d20-e7d3-4715-a9db-497372d8f086","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T20:53:26.000Z"},{"end":"2025-02-26T18:09:55.000Z","id":"cbad276e-98a9-49c7-8499-96b02cf33efc","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T18:09:17.000Z","status":"Succeeded","submission":"2025-02-26T18:09:15.000Z"},{"end":"2025-02-26T18:08:40.000Z","id":"53823675-270f-4127-aac8-85d7eee1ee08","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T18:07:57.000Z","status":"Succeeded","submission":"2025-02-26T18:07:38.000Z"},{"end":"2025-02-26T18:06:23.000Z","id":"c412cae3-5d8f-45b5-ab8c-5cc504f6830f","metadataArchiveStatus":"Unarchived","name":"globSubdir","start":"2025-02-26T17:52:56.000Z","status":"Succeeded","submission":"2025-02-26T17:52:13.000Z"},{"end":"2025-02-26T17:57:56.000Z","id":"f6a3a071-07d7-47ec-a1e4-0aed07279643","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:57:56.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:57:37.000Z","id":"355c709d-6fb0-49c4-83bc-5c7c38fe84c8","metadataArchiveStatus":"Unarchived","name":"HelloDockerHostname","start":"2025-02-26T17:54:56.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:57:35.000Z","id":"a7fc017b-1043-442c-8981-93c38fdfc4e8","metadataArchiveStatus":"Unarchived","name":"globNonmatching","start":"2025-02-26T17:56:56.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:57:36.000Z","id":"e5770582-04b3-43ae-9c7a-916ce6fe07ef","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:57:36.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:57:22.000Z","id":"a820ddeb-d754-46f8-97a8-d10f349595d4","metadataArchiveStatus":"Unarchived","name":"basicTaskTest","start":"2025-02-26T17:57:16.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:56:36.000Z","id":"8756d0d8-02ac-4f8a-9481-afc70c8e07a7","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:56:36.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:56:32.000Z","id":"5f6c214c-5323-4863-9582-d174656fece9","metadataArchiveStatus":"Unarchived","name":"emptyGlobTest","start":"2025-02-26T17:55:56.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:56:16.000Z","id":"6fecaa00-adce-483e-9d6c-71dc391d1c3c","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:56:16.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:56:13.000Z","id":"57725888-ea3b-4de0-8029-7a7c293a397b","metadataArchiveStatus":"Unarchived","name":"basicGlobTest","start":"2025-02-26T17:55:36.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:55:15.000Z","id":"33d26940-0600-40ff-bdab-c5f19cc911aa","metadataArchiveStatus":"Unarchived","name":"test_nonstandard_outputs","start":"2025-02-26T17:54:36.000Z","status":"Succeeded","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:55:16.000Z","id":"36d6d257-e233-4e7b-8899-5991ddd7e9ab","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:55:16.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:54:20.000Z","id":"e3c222cb-2da8-414b-9b6b-9c636ac89fb1","metadataArchiveStatus":"Unarchived","name":"HelloHostname","start":"2025-02-26T17:53:36.000Z","status":"Succeeded","submission":"2025-02-26T17:52:13.000Z"},{"end":"2025-02-26T17:54:16.000Z","id":"18a2546c-8de6-4074-bfcf-dee0b0a8c51b","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:54:16.000Z","status":"Failed","submission":"2025-02-26T17:52:14.000Z"},{"end":"2025-02-26T17:53:56.000Z","id":"e765d47d-651a-4674-8db6-d1c429858edc","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:53:56.000Z","status":"Failed","submission":"2025-02-26T17:52:13.000Z"},{"end":"2025-02-26T17:53:16.000Z","id":"e1565429-06a7-4f94-84c8-ec9bd1594f75","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:53:16.000Z","status":"Failed","submission":"2025-02-26T17:52:13.000Z"},{"end":"2025-02-26T17:52:36.000Z","id":"58c29061-f933-487f-bae0-9bcc0a0a30ce","metadataArchiveStatus":"Unarchived","start":"2025-02-26T17:52:36.000Z","status":"Failed","submission":"2025-02-26T17:52:13.000Z"},{"end":"2025-02-26T17:52:24.000Z","id":"1b76fb1c-0e52-4dfb-98b7-ae4adeebd06d","metadataArchiveStatus":"Unarchived","name":"testFileoperations","start":"2025-02-26T17:52:16.000Z","status":"Succeeded","submission":"2025-02-26T17:52:13.000Z"},{"id":"e21672ad-7134-42bd-b9a7-eadd328e0fe9","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T17:52:13.000Z"},{"id":"2ee06bd5-5043-4c06-abb7-00e889dd6190","metadataArchiveStatus":"Unarchived","status":"Aborted","submission":"2025-02-26T17:52:13.000Z"}],"totalResultsCount":65}' headers: Connection: - keep-alive Content-Length: - - '45584' + - '14114' Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-submit/test_submit_works.yaml b/tests/cromwellapi/cassettes/test-submit/test_submit_works.yaml index 8253f52..42348e5 100644 --- a/tests/cromwellapi/cassettes/test-submit/test_submit_works.yaml +++ b/tests/cromwellapi/cassettes/test-submit/test_submit_works.yaml @@ -1,6 +1,6 @@ interactions: - request: - body: "--80319a54fd73dd9b562f9135ed9b6a43\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--44aae73978f42b964cd9608b76f7e40d\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"helloHostname.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion 1.0\n## This is a test workflow that returns the hostname of the node \n## the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow @@ -9,10 +9,10 @@ interactions: to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n\r\n--80319a54fd73dd9b562f9135ed9b6a43\r\nContent-Disposition: + of the node the job was submitted to\"\n }\n}\n\r\n--44aae73978f42b964cd9608b76f7e40d\r\nContent-Disposition: form-data; name=\"workflowOptions\"; filename=\"options.json\"\r\nContent-Type: application/json\r\n\r\n{\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n - \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--80319a54fd73dd9b562f9135ed9b6a43--\r\n" + \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--44aae73978f42b964cd9608b76f7e40d--\r\n" headers: accept: - '*/*' @@ -23,16 +23,16 @@ interactions: content-length: - '1071' content-type: - - multipart/form-data; boundary=80319a54fd73dd9b562f9135ed9b6a43 + - multipart/form-data; boundary=44aae73978f42b964cd9608b76f7e40d host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/workflows/v1 + uri: https://gizmok92.fhcrc.org:38409/api/workflows/v1 response: body: - string: '{"id":"89d410e7-4c03-4bff-b0ca-ac453ac19a62","status":"Submitted"}' + string: '{"id":"8ef41303-0747-4305-8b6b-3e949d8fc9b5","status":"Submitted"}' headers: Connection: - keep-alive @@ -41,7 +41,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-validate/test_validate_bad_wdl.yaml b/tests/cromwellapi/cassettes/test-validate/test_validate_bad_wdl.yaml index 20f0b91..e0e3801 100644 --- a/tests/cromwellapi/cassettes/test-validate/test_validate_bad_wdl.yaml +++ b/tests/cromwellapi/cassettes/test-validate/test_validate_bad_wdl.yaml @@ -1,11 +1,11 @@ interactions: - request: - body: "--b7b1cedc2eb94a6088ee58e59dca2018\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--7b6ff13c90279218b52d562c3615be33\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"badValMissingValue.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion 1.0\n## This is a test workflow that fails against womtool.\n## From https://github.com/broadinstitute/cromwell\n\n#### WORKFLOW DEFINITION\n\nworkflow oops {\n call oopsie\n}\n\n#### TASK DEFINITIONS\n\ntask oopsie {\n input {\n String str\n }\n command { echo ${str} }\n runtime - { docker: docker_image }\n}\n\r\n--b7b1cedc2eb94a6088ee58e59dca2018--\r\n" + { docker: docker_image }\n}\n\r\n--7b6ff13c90279218b52d562c3615be33--\r\n" headers: accept: - '*/*' @@ -16,13 +16,13 @@ interactions: content-length: - '515' content-type: - - multipart/form-data; boundary=b7b1cedc2eb94a6088ee58e59dca2018 + - multipart/form-data; boundary=7b6ff13c90279218b52d562c3615be33 host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/womtool/v1/describe + uri: https://gizmok92.fhcrc.org:38409/api/womtool/v1/describe response: body: string: '{"valid":false,"errors":["Failed to process task definition ''oopsie'' @@ -36,7 +36,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-validate/test_validate_good_wdl.yaml b/tests/cromwellapi/cassettes/test-validate/test_validate_good_wdl.yaml index 814cc5c..915e70a 100644 --- a/tests/cromwellapi/cassettes/test-validate/test_validate_good_wdl.yaml +++ b/tests/cromwellapi/cassettes/test-validate/test_validate_good_wdl.yaml @@ -1,6 +1,6 @@ interactions: - request: - body: "--3e8736ddeda25971c0d39b8adb242cfd\r\nContent-Disposition: form-data; name=\"workflowSource\"; + body: "--30de72b26017756b34a96d4ee02b08cf\r\nContent-Disposition: form-data; name=\"workflowSource\"; filename=\"helloHostname.wdl\"\r\nContent-Type: application/octet-stream\r\n\r\nversion 1.0\n## This is a test workflow that returns the hostname of the node \n## the job is submitted to as a test for the Gizmo backend. \n\n#### WORKFLOW DEFINITION\n\nworkflow @@ -9,10 +9,10 @@ interactions: to\"\n }\n}\n\n#### TASK DEFINITIONS\n\ntask Hostname {\n command <<<\n echo $(hostname)\n >>>\n\n output {\n File out = stdout()\n }\n \n runtime {\n cpu: 1\n memory: \"1 GB\"\n }\n\n parameter_meta {\n out: \"hostname - of the node the job was submitted to\"\n }\n}\n\r\n--3e8736ddeda25971c0d39b8adb242cfd\r\nContent-Disposition: + of the node the job was submitted to\"\n }\n}\n\r\n--30de72b26017756b34a96d4ee02b08cf\r\nContent-Disposition: form-data; name=\"workflowOptions\"; filename=\"options.json\"\r\nContent-Type: application/json\r\n\r\n{\n \"workflow_failure_mode\": \"ContinueWhilePossible\",\n - \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--3e8736ddeda25971c0d39b8adb242cfd--\r\n" + \ \"write_to_cache\": false,\n \"read_from_cache\": false\n}\n\r\n--30de72b26017756b34a96d4ee02b08cf--\r\n" headers: accept: - '*/*' @@ -23,13 +23,13 @@ interactions: content-length: - '1071' content-type: - - multipart/form-data; boundary=3e8736ddeda25971c0d39b8adb242cfd + - multipart/form-data; boundary=30de72b26017756b34a96d4ee02b08cf host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: POST - uri: https://gizmok96.fhcrc.org:38031/api/womtool/v1/describe + uri: https://gizmok92.fhcrc.org:38409/api/womtool/v1/describe response: body: string: '{"valid":true,"errors":[],"validWorkflow":true,"name":"HelloHostname","inputs":[],"outputs":[{"name":"stdout","valueType":{"typeName":"File"},"typeDisplayName":"File"}],"images":[],"submittedDescriptorType":{"descriptorType":"WDL","descriptorTypeVersion":"1.0"},"importedDescriptorTypes":[],"meta":{},"parameterMeta":{"stdout":"hostname @@ -42,7 +42,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/cassettes/test-version/test_version.yaml b/tests/cromwellapi/cassettes/test-version/test_version.yaml index 7815139..ddba05f 100644 --- a/tests/cromwellapi/cassettes/test-version/test_version.yaml +++ b/tests/cromwellapi/cassettes/test-version/test_version.yaml @@ -9,11 +9,11 @@ interactions: connection: - keep-alive host: - - gizmok96.fhcrc.org:38031 + - gizmok92.fhcrc.org:38409 user-agent: - python-httpx/0.28.1 method: GET - uri: https://gizmok96.fhcrc.org:38031/engine/v1/version + uri: https://gizmok92.fhcrc.org:38409/engine/v1/version response: body: string: '{"cromwell":"87"}' @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 28 Jan 2025 19:24:22 GMT + - Wed, 26 Feb 2025 22:31:58 GMT Server: - nginx/1.25.3 status: diff --git a/tests/cromwellapi/mocked_submissions.json b/tests/cromwellapi/mocked_submissions.json index 28f908e..69c81db 100644 --- a/tests/cromwellapi/mocked_submissions.json +++ b/tests/cromwellapi/mocked_submissions.json @@ -1,32 +1,92 @@ [ { - "id": "b4c610ff-437a-40a5-9562-499ffbc50566", + "id": "0ab308de-6ffc-44f9-8c9c-bd6c8a007185", + "status": "Submitted", + "path": "helloHostname/helloHostname.wdl" + }, + { + "id": "fd02ca92-818d-40da-8b39-8e8e1666042d", + "status": "Submitted", + "path": "WildcardsandConditions/WildcardsandConditions.wdl" + }, + { + "id": "626d1502-f95c-42dd-a364-6257818dd175", "status": "Submitted", "path": "arrayOperations/arrayOperations.wdl" }, { - "id": "6a921318-d1b5-4e96-b311-6e389ac7dc62", + "id": "6cb0a219-9b72-462a-93be-dfcf07456d01", "status": "Submitted", - "path": "helloHostname/helloHostname.wdl" + "path": "testFileoperations/testFileoperations.wdl" }, { - "id": "57bfb303-9a45-4661-825c-7c11d17a2240", + "id": "ac181a44-3a7a-4635-9881-84057b4beca0", "status": "Submitted", - "path": "badRunParseBatchFile/badRunParseBatchFile.wdl" + "path": "globSubdir/globSubdir.wdl" }, { - "id": "3daeca54-daf0-4498-af26-04c84a42641c", + "id": "f53b93ef-62ae-4cad-b78a-9996f93c24e7", "status": "Submitted", - "path": "badValMissingValue/badValMissingValue.wdl" + "path": "conditionalTest/conditionalTest.wdl" }, { - "id": "7dd646ef-2577-4d8d-9596-3e3384f3b09d", + "id": "f1a52023-aef8-4dbf-bbf7-b1bed4d9e92c", "status": "Submitted", - "path": "basicTaskExecution/basicTaskExecution.wdl" + "path": "jsonTaskOrderTest/jsonTaskOrderTest.wdl" }, { - "id": "5150f1dc-5451-4dc4-b288-ef0ddf8da487", + "id": "e97ae0ae-90cb-4e1a-b367-1a6f21ad438d", + "status": "Submitted", + "path": "emptyGlobTest/emptyGlobTest.wdl" + }, + { + "id": "bd479cb8-15bf-41e9-8f9d-98473cdb2b58", "status": "Submitted", "path": "helloDockerHostname/helloDockerHostname.wdl" + }, + { + "id": "826b54df-2d82-4365-adf0-ae03996b055d", + "status": "Submitted", + "path": "globNonmatching/globNonmatching.wdl" + }, + { + "id": "36ba03c5-f562-4ea9-ad1d-c17b5b31eb2e", + "status": "Submitted", + "path": "nonstandardOutputs/nonstandardOutputs.wdl" + }, + { + "id": "c4747ccd-c78a-4c47-8873-83b63e0334ab", + "status": "Submitted", + "path": "structTypeTest/structTypeTest.wdl" + }, + { + "id": "43845110-ee3b-4503-a08c-3bb165ee8635", + "status": "Submitted", + "path": "basicTaskExecution/basicTaskExecution.wdl" + }, + { + "id": "52bdecf2-4a27-443f-8748-af12730327d8", + "status": "Submitted", + "path": "mapTypeTest/mapTypeTest.wdl" + }, + { + "id": "96bdebd9-cded-49d8-a73c-aba36b2282dc", + "status": "Submitted", + "path": "testNestedJsonArray/testNestedJsonArray.wdl" + }, + { + "id": "95d1ea6f-f6b7-452e-9ee1-650a661cce7b", + "status": "Submitted", + "path": "basicGlobTest/basicGlobTest.wdl" + }, + { + "id": "96c23315-8890-4eed-a885-394958a2312e", + "status": "Submitted", + "path": "badRunParseBatchFile/badRunParseBatchFile.wdl" + }, + { + "id": "7d18588e-1455-4741-8e5d-d1b15c998a83", + "status": "Submitted", + "path": "badValMissingValue/badValMissingValue.wdl" } ] \ No newline at end of file