wdl-doc 0.10.0

Documentation generator for Workflow Description Language (WDL) documents.
Documentation
<!DOCTYPE html><html x-data="{ DEFAULT_THEME: '' }" x-bind:class="(localStorage.getItem('theme') ?? DEFAULT_THEME) === 'light' ? 'light' : ''" x-cloak><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>validate_read_group</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&amp;display=swap" rel="stylesheet"><script defer src="https://cdn.jsdelivr.net/npm/@alpinejs/persist@3.x.x/dist/cdn.min.js"></script><script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script><script defer src="../../index.js"></script><link rel="stylesheet" type="text/css" href="../../style.css"></head><body class="body--base"><div class="layout__container layout__container--alt-layout" x-transition x-data="{
                sidebarState: $persist(window.innerWidth &lt; 768 ? 'hidden' : 'normal').using(sessionStorage),
                get showSidebarButtons() { return this.sidebarState !== 'hidden'; },
                get showCenterButtons() { return this.sidebarState === 'hidden'; },
                get containerClasses() {
                    const base = 'layout__container layout__container--alt-layout';
                    switch(this.sidebarState) {
                        case 'hidden': return base + ' layout__container--left-hidden';
                        case 'xl': return base + ' layout__container--left-xl';
                        default: return base;
                    }
                },
                getSidebarButtonClass(state) {
                    return 'left-sidebar__size-button ' + (this.sidebarState === state ? 'left-sidebar__size-button--active' : '');
                },
                collapseSidebar() { this.sidebarState = 'hidden'; },
                restoreSidebar() { this.sidebarState = 'normal'; },
                expandSidebar() { this.sidebarState = 'xl'; }
            }" x-bind:class="containerClasses"><div class="layout__sidebar-left" x-transition><div class="absolute top-5 right-2 flex gap-1 z-10" x-cloak x-show="showSidebarButtons"><button x-on:click="collapseSidebar()" x-bind:disabled="sidebarState === 'hidden'" x-bind:class="getSidebarButtonClass('hidden')"><img src="../../assets/sidebar-icon-hide.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-hide.light.svg" alt="" class="hidden light:block"></img></button><button x-on:click="restoreSidebar()" x-bind:disabled="sidebarState === 'normal'" x-bind:class="getSidebarButtonClass('normal')"><img src="../../assets/sidebar-icon-default.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-default.light.svg" alt="" class="hidden light:block"></img></button><button x-on:click="expandSidebar()" x-bind:disabled="sidebarState === 'xl'" x-bind:class="getSidebarButtonClass('xl')"><img src="../../assets/sidebar-icon-expand.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-expand.light.svg" alt="" class="hidden light:block"></img></button></div><div x-data="{
                showWorkflows: $persist(false).using(sessionStorage),
                search: $persist('').using(sessionStorage),
                dirOpen: '../../assets/chevron-up.svg',
                dirClosed: '../../assets/chevron-down.svg',
                nodes: [{&quot;key&quot;:&quot;data_structures&quot;,&quot;display_name&quot;:&quot;data_structures&quot;,&quot;parent&quot;:&quot;&quot;,&quot;search_name&quot;:&quot;&quot;,&quot;icon&quot;:null,&quot;href&quot;:null,&quot;ancestor&quot;:true,&quot;current&quot;:false,&quot;nest_level&quot;:1,&quot;children&quot;:[&quot;data_structures_flag_filter&quot;,&quot;data_structures_read_group&quot;]}, {&quot;key&quot;:&quot;data_structures_flag_filter&quot;,&quot;display_name&quot;:&quot;flag_filter&quot;,&quot;parent&quot;:&quot;data_structures/flag_filter&quot;,&quot;search_name&quot;:&quot;data_structures/flag_filter/index.html&quot;,&quot;icon&quot;:&quot;../../assets/wdl-dir-unselected.svg&quot;,&quot;href&quot;:&quot;../flag_filter/index.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:2,&quot;children&quot;:[&quot;data_structures_flag_filter_FlagFilter_struct_html&quot;,&quot;data_structures_flag_filter_validate_flag_filter_workflow_html&quot;,&quot;data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html&quot;]}, {&quot;key&quot;:&quot;data_structures_flag_filter_FlagFilter_struct_html&quot;,&quot;display_name&quot;:&quot;FlagFilter&quot;,&quot;parent&quot;:&quot;data_structures/flag_filter&quot;,&quot;search_name&quot;:&quot;data_structures/flag_filter/FlagFilter-struct.html&quot;,&quot;icon&quot;:&quot;../../assets/struct-unselected.svg&quot;,&quot;href&quot;:&quot;../flag_filter/FlagFilter-struct.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_flag_filter_validate_flag_filter_workflow_html&quot;,&quot;display_name&quot;:&quot;validate_flag_filter&quot;,&quot;parent&quot;:&quot;data_structures/flag_filter&quot;,&quot;search_name&quot;:&quot;data_structures/flag_filter/validate_flag_filter-workflow.html&quot;,&quot;icon&quot;:&quot;../../assets/workflow-unselected.svg&quot;,&quot;href&quot;:&quot;../flag_filter/validate_flag_filter-workflow.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html&quot;,&quot;display_name&quot;:&quot;validate_string_is_12bit_oct_dec_or_hex&quot;,&quot;parent&quot;:&quot;data_structures/flag_filter&quot;,&quot;search_name&quot;:&quot;data_structures/flag_filter/validate_string_is_12bit_oct_dec_or_hex-task.html&quot;,&quot;icon&quot;:&quot;../../assets/task-unselected.svg&quot;,&quot;href&quot;:&quot;../flag_filter/validate_string_is_12bit_oct_dec_or_hex-task.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_read_group&quot;,&quot;display_name&quot;:&quot;read_group&quot;,&quot;parent&quot;:&quot;data_structures/read_group&quot;,&quot;search_name&quot;:&quot;data_structures/read_group/index.html&quot;,&quot;icon&quot;:&quot;../../assets/wdl-dir-selected.svg&quot;,&quot;href&quot;:&quot;index.html&quot;,&quot;ancestor&quot;:true,&quot;current&quot;:false,&quot;nest_level&quot;:2,&quot;children&quot;:[&quot;data_structures_read_group_ReadGroup_struct_html&quot;,&quot;data_structures_read_group_get_read_groups_task_html&quot;,&quot;data_structures_read_group_read_group_to_string_task_html&quot;,&quot;data_structures_read_group_validate_read_group_task_html&quot;]}, {&quot;key&quot;:&quot;data_structures_read_group_ReadGroup_struct_html&quot;,&quot;display_name&quot;:&quot;ReadGroup&quot;,&quot;parent&quot;:&quot;data_structures/read_group&quot;,&quot;search_name&quot;:&quot;data_structures/read_group/ReadGroup-struct.html&quot;,&quot;icon&quot;:&quot;../../assets/struct-unselected.svg&quot;,&quot;href&quot;:&quot;ReadGroup-struct.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_read_group_get_read_groups_task_html&quot;,&quot;display_name&quot;:&quot;get_read_groups&quot;,&quot;parent&quot;:&quot;data_structures/read_group&quot;,&quot;search_name&quot;:&quot;data_structures/read_group/get_read_groups-task.html&quot;,&quot;icon&quot;:&quot;../../assets/task-unselected.svg&quot;,&quot;href&quot;:&quot;get_read_groups-task.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_read_group_read_group_to_string_task_html&quot;,&quot;display_name&quot;:&quot;read_group_to_string&quot;,&quot;parent&quot;:&quot;data_structures/read_group&quot;,&quot;search_name&quot;:&quot;data_structures/read_group/read_group_to_string-task.html&quot;,&quot;icon&quot;:&quot;../../assets/task-unselected.svg&quot;,&quot;href&quot;:&quot;read_group_to_string-task.html&quot;,&quot;ancestor&quot;:false,&quot;current&quot;:false,&quot;nest_level&quot;:3,&quot;children&quot;:[]}, {&quot;key&quot;:&quot;data_structures_read_group_validate_read_group_task_html&quot;,&quot;display_name&quot;:&quot;validate_read_group&quot;,&quot;parent&quot;:&quot;data_structures/read_group&quot;,&quot;search_name&quot;:&quot;data_structures/read_group/validate_read_group-task.html&quot;,&quot;icon&quot;:&quot;../../assets/task-selected.svg&quot;,&quot;href&quot;:&quot;validate_read_group-task.html&quot;,&quot;ancestor&quot;:true,&quot;current&quot;:true,&quot;nest_level&quot;:3,&quot;children&quot;:[]}],
                get searchedNodes() {
                    if (this.search === '') {
                        return [];
                    }
                    this.showWorkflows = false;
                    return this.nodes.filter(node =&gt; node.search_name.toLowerCase().includes(this.search.toLowerCase()));
                },
                get shownNodes() {
                    if (this.search !== '') {
                        return [];
                    }
                    return this.nodes.filter(node =&gt; this.showSelfCache[node.key]);
                },
                dag: {'data_structures': ['data_structures_flag_filter', 'data_structures_read_group'], 'data_structures_flag_filter': ['data_structures_flag_filter_FlagFilter_struct_html', 'data_structures_flag_filter_validate_flag_filter_workflow_html', 'data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html'], 'data_structures_flag_filter_FlagFilter_struct_html': [], 'data_structures_flag_filter_validate_flag_filter_workflow_html': [], 'data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html': [], 'data_structures_read_group': ['data_structures_read_group_ReadGroup_struct_html', 'data_structures_read_group_get_read_groups_task_html', 'data_structures_read_group_read_group_to_string_task_html', 'data_structures_read_group_validate_read_group_task_html'], 'data_structures_read_group_ReadGroup_struct_html': [], 'data_structures_read_group_get_read_groups_task_html': [], 'data_structures_read_group_read_group_to_string_task_html': [], 'data_structures_read_group_validate_read_group_task_html': []},
                showSelfCache: $persist({'data_structures': true, 'data_structures_flag_filter': true, 'data_structures_flag_filter_FlagFilter_struct_html': true, 'data_structures_flag_filter_validate_flag_filter_workflow_html': true, 'data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html': true, 'data_structures_read_group': true, 'data_structures_read_group_ReadGroup_struct_html': true, 'data_structures_read_group_get_read_groups_task_html': true, 'data_structures_read_group_read_group_to_string_task_html': true, 'data_structures_read_group_validate_read_group_task_html': true}).using(sessionStorage),
                showChildrenCache: $persist({'data_structures': true, 'data_structures_flag_filter': true, 'data_structures_flag_filter_FlagFilter_struct_html': true, 'data_structures_flag_filter_validate_flag_filter_workflow_html': true, 'data_structures_flag_filter_validate_string_is_12bit_oct_dec_or_hex_task_html': true, 'data_structures_read_group': true, 'data_structures_read_group_ReadGroup_struct_html': true, 'data_structures_read_group_get_read_groups_task_html': true, 'data_structures_read_group_read_group_to_string_task_html': true, 'data_structures_read_group_validate_read_group_task_html': true}).using(sessionStorage),
                children(key) {
                    return this.dag[key];
                },
                toggleChildren(key) {
                    this.nodes.forEach(n =&gt; {
                        if (n.key === key) {
                            this.showChildrenCache[key] = !this.showChildrenCache[key];
                            this.children(key).forEach(child =&gt; {
                                this.setShow(child, this.showChildrenCache[key]);
                            });
                        }
                    });
                },
                setShow(key, value) {
                    this.nodes.forEach(n =&gt; {
                        if (n.key === key) {
                            this.showSelfCache[key] = value;
                            this.showChildrenCache[key] = value;
                            this.children(key).forEach(child =&gt; {
                                this.setShow(child, value);
                            });
                        }
                    });
                },
                reset() {
                    this.nodes.forEach(n =&gt; {
                        this.showSelfCache[n.key] = true;
                        this.showChildrenCache[n.key] = true;
                    });
                }
            }" x-cloak x-init="$nextTick(() =&gt; { document.querySelector('.is-scrolled-to')?.scrollIntoView({ block: 'center', behavior: 'instant' }); })" class="left-sidebar__container"><div class="sticky px-4"><a href="../../index.html"><img src="../../assets/logo.svg" class="w-[120px] flex-none mb-8 block light:hidden" alt="Logo"><img src="../../assets/logo.light.svg" class="w-[120px] flex-none mb-8 hidden light:block" alt="Logo"></a><div class="relative w-full h-10"><input id="searchbox" x-model.debounce="search" type="text" placeholder="Search..." class="left-sidebar__searchbox"><img src="../../assets/search.svg" class="absolute left-2 top-1/2 -translate-y-1/2 size-6 pointer-events-none block light:hidden" alt="Search icon"><img src="../../assets/search.light.svg" class="absolute left-2 top-1/2 -translate-y-1/2 size-6 pointer-events-none hidden light:block" alt="Search icon"><img src="../../assets/x-mark.svg" class="absolute right-2 top-1/2 -translate-y-1/2 size-6 hover:cursor-pointer block light:hidden" alt="Clear icon" x-show="search !== ''" x-on:click="search = ''"><img src="../../assets/x-mark.light.svg" class="absolute right-2 top-1/2 -translate-y-1/2 size-6 hover:cursor-pointer hidden light:block" alt="Clear icon" x-show="search !== ''" x-on:click="search = ''"></div><div class="left-sidebar__tabs-container mt-4"><button x-on:click="showWorkflows = true; search = ''; $nextTick(() =&gt; { document.querySelector('.is-scrolled-to')?.scrollIntoView({ block: 'center', behavior: 'instant' }); })" class="left-sidebar__tabs text-slate-50 border-b-slate-50" x-bind:class="! showWorkflows ? 'opacity-40 light:opacity-60 hover:opacity-80' : ''"><img src="../../assets/list-bullet-selected.svg" class="left-sidebar__icon block light:hidden" alt="List icon"><img src="../../assets/list-bullet-selected.light.svg" class="left-sidebar__icon hidden light:block" alt="List icon"><p>Workflows</p></button><button x-on:click="showWorkflows = false; $nextTick(() =&gt; { document.querySelector('.is-scrolled-to')?.scrollIntoView({ block: 'center', behavior: 'instant' }); })" class="left-sidebar__tabs text-slate-50 border-b-slate-50" x-bind:class="showWorkflows ? 'opacity-50 light:opacity-60 hover:opacity-80' : ''"><img src="../../assets/folder-selected.svg" class="left-sidebar__icon block light:hidden" alt="List icon"><img src="../../assets/folder-selected.light.svg" class="left-sidebar__icon hidden light:block" alt="List icon"><p>Full Directory</p></button></div></div><div x-cloak class="left-sidebar__content-container pt-4"><ul x-show="! showWorkflows || search != ''" class="left-sidebar__content"><sprocket-tooltip content="docs" class="block"><a href="../../index.html" x-show="search === ''" aria-label="docs" class="left-sidebar__row hover:bg-slate-700/40"><div class="left-sidebar__content-item-container crop-ellipsis"><div class="relative shrink-0"><img src="../../assets/dir-open.svg" class="left-sidebar__icon block light:hidden" alt="Directory icon"><img src="../../assets/dir-open.light.svg" class="left-sidebar__icon hidden light:block" alt="Directory icon"></div><div class="text-slate-50">docs</div></div></a></sprocket-tooltip><template x-for="node in shownNodes"><sprocket-tooltip x-bind:content="node.display_name" class="block isolate"><a x-bind:href="node.href" x-show="showSelfCache[node.key]" x-on:click="if (node.href === null) toggleChildren(node.key)" x-bind:aria-label="node.display_name" class="left-sidebar__row" x-bind:class="`${node.current ? 'is-scrolled-to left-sidebar__row--active' : (node.href === null) ? showChildrenCache[node.key] ? 'left-sidebar__row-folder left-sidebar__row-folder--open' : 'left-sidebar__row-folder left-sidebar__row-folder--closed' : 'left-sidebar__row-page'} ${node.ancestor ? 'left-sidebar__content-item-container--ancestor' : ''}`"><template x-for="i in Array.from({ length: node.nest_level })"><div class="left-sidebar__indent -z-1"></div></template><div class="left-sidebar__content-item-container crop-ellipsis"><div class="relative left-sidebar__icon shrink-0"><img x-bind:src="node.icon || dirOpen" class="left-sidebar__icon block light:hidden" alt="Node icon" x-bind:class="`${(node.icon === null) &amp;&amp; !showChildrenCache[node.key] ? 'rotate-180' : ''}`"><img x-bind:src="(node.icon || dirOpen).replace('.svg', '.light.svg')" class="left-sidebar__icon hidden light:block" alt="Node icon" x-bind:class="`${(node.icon === null) &amp;&amp; !showChildrenCache[node.key] ? 'rotate-180' : ''}`"></div><div class="crop-ellipsis" x-text="node.display_name"></div></div></a></sprocket-tooltip></template><template x-for="node in searchedNodes"><li class="left-sidebar__search-result-item"><p class="text-xs text-slate-500 crop-ellipsis" x-text="node.parent"></p><div class="left-sidebar__search-result-item-container"><img x-bind:src="node.icon" class="left-sidebar__icon" alt="Node icon"><sprocket-tooltip class="crop-ellipsis" x-bind:content="node.display_name"><a x-bind:href="node.href" x-text="node.display_name"></a></sprocket-tooltip></div></li></template><li x-show="search !== '' &amp;&amp; searchedNodes.length === 0" class="flex place-content-center"><img src="../../assets/search.svg" class="size-8 block light:hidden" alt="Search icon"><img src="../../assets/search.light.svg" class="size-8 hidden light:block" alt="Search icon"></li><li x-show="search !== '' &amp;&amp; searchedNodes.length === 0" class="flex gap-1 place-content-center text-center break-words whitespace-normal text-sm text-slate-500"><span x-text="'No results found for'"></span><span x-text="`&quot;${search}&quot;`" class="text-slate-50"></span></li></ul><ul x-show="showWorkflows &amp;&amp; search === ''" class="left-sidebar__content"><li class=""><div class="left-sidebar__row left-sidebar__row--unclickable"><img src="../../assets/category-selected.svg" class="left-sidebar__icon block light:hidden" alt="Category icon"><img src="../../assets/category-selected.light.svg" class="left-sidebar__icon hidden light:block" alt="Category icon"><p class="text-slate-50">Other</p></div><ul class=""><a href="../flag_filter/validate_flag_filter-workflow.html" x-data="{
                                    node: {
                                        current: false,
                                        icon: '../../assets/workflow-unselected.svg',
                                    }
                                }" class="left-sidebar__row" x-bind:class="node.current ? 'bg-slate-600/50 is-scrolled-to' : 'hover:bg-slate-700/40'"><div class="left-sidebar__indent -1"></div><div class="left-sidebar__content-item-container crop-ellipsis"><img x-bind:src="node.icon" class="left-sidebar__icon light:hidden" alt="Workflow icon"><img x-bind:src="node.icon?.replace('.svg', '.light.svg')" class="left-sidebar__icon hidden light:block" alt="Workflow icon"><sprocket-tooltip content="validate_flag_filter" class="crop-ellipsis" x-bind:class="node.current ? 'text-slate-50' : 'group-hover:text-slate-50'"><span>validate_flag_filter</span></sprocket-tooltip></div></a></ul></li></ul></div></div></div><div class="layout__main-center"><div class="layout__main-center-content"><div><div class="flex gap-1 mb-3" x-show="showCenterButtons"><button x-on:click="collapseSidebar()" x-bind:disabled="sidebarState === 'hidden'" x-bind:class="getSidebarButtonClass('hidden')"><img src="../../assets/sidebar-icon-hide.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-hide.light.svg" alt="" class="hidden light:block"></img></button><button x-on:click="restoreSidebar()" x-bind:disabled="sidebarState === 'normal'" x-bind:class="getSidebarButtonClass('normal')"><img src="../../assets/sidebar-icon-default.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-default.light.svg" alt="" class="hidden light:block"></img></button><button x-on:click="expandSidebar()" x-bind:disabled="sidebarState === 'xl'" x-bind:class="getSidebarButtonClass('xl')"><img src="../../assets/sidebar-icon-expand.svg" alt="" class="block light:hidden"></img><img src="../../assets/sidebar-icon-expand.light.svg" alt="" class="hidden light:block"></img></button></div><div class="flex flex-row-reverse items-start justify-between"><button x-on:click="
                                document.documentElement.classList.toggle('light')
                                localStorage.setItem('theme', document.documentElement.classList.contains('light') ? 'light' : 'dark')
                                " class="border border-slate-700 rounded-md h-8 flex items-center justify-center text-slate-300 text-lg w-8 cursor-pointer hover:border-slate-500">☀︎</button><div class="layout__breadcrumbs"><div class="layout__breadcrumb-container"><a class="layout__breadcrumb-clickable" href="../../index.html">docs</a><span> / </span><span class="layout__breadcrumb-inactive">data_structures</span><span> / </span><a href="index.html" class="layout__breadcrumb-clickable">read_group</a><span> / </span><span class="layout__breadcrumb-inactive">validate_read_group</span></div></div></div></div><div class="main__container"><span class="text-brand-violet-400">Task</span><h1 id="title" class="main__title"><code>validate_read_group</code></h1><div class="markdown-body mb-4">Validate a ReadGroup struct's fields are defined</div><div class="main__badge-container"><div class="main__badge"><span class="main__badge-text">WDL Version</span><div class="main__badge-inner"><span class="main__badge-inner-text">1.1</span></div></div></div><div x-data="{ unix: true }" class="main__run-with-container"><div class="main__run-with-label"><span class="main__run-with-label-text">RUN WITH</span><button x-on:click="unix = !unix" class="main__run-with-toggle"><div x-bind:class="unix ? 'main__run-with-toggle-label--active' : 'main__run-with-toggle-label--inactive'">Unix</div><div x-bind:class="!unix ? 'main__run-with-toggle-label--active' : 'main__run-with-toggle-label--inactive'">Windows</div></button></div><div class="main__run-with-content"><p class="main__run-with-content-text">sprocket run --entrypoint validate_read_group <span x-show="unix">data_structures/read_group.wdl</span><span x-show="!unix">data_structures\read_group.wdl</span> [INPUTS]...</p></div></div><div class="main__section"><h2 id="inputs" class="main__section-header">Inputs</h2><h3 id="required-inputs" class="main__section-subheader">Required Inputs</h3><div class="main__grid-container"><div class="main__grid-req-inputs-container"><div class="main__grid-header-cell">Name</div><div class="main__grid-header-cell">Type</div><div class="main__grid-header-cell">Description</div><div class="main__grid-header-separator"></div><div class="main__grid-row" x-data="{ description_expanded: false }"><div class="main__grid-cell"><code>read_group</code></div><div class="main__grid-cell"><code>ReadGroup</code></div><div class="main__grid-cell">ReadGroup struct to validate</div><div x-show="description_expanded" class="main__grid-full-width-cell">ReadGroup struct to validate</div></div></div></div><h3 id="other-inputs" class="main__section-subheader">Other Inputs</h3><div class="main__grid-container"><div class="main__grid-non-req-param-container"><div class="main__grid-header-cell">Name</div><div class="main__grid-header-cell">Type</div><div class="main__grid-header-cell">Default</div><div class="main__grid-header-cell">Description</div><div class="main__grid-header-separator"></div><div class="main__grid-row" x-data="{ description_expanded: false, expr_expanded: false }"><div class="main__grid-cell"><code>required_fields</code></div><div class="main__grid-cell"><code>Array[String]</code></div><div class="main__grid-cell"><code>[]</code></div><div class="main__grid-cell">Array of read group fields that must be defined. The ID field is always required and does not need to be specified.</div><div x-show="description_expanded" class="main__grid-full-width-cell">Array of read group fields that must be defined. The ID field is always required and does not need to be specified.</div><div x-show="expr_expanded" class="main__grid-full-width-cell"><sprocket-code language="wdl">[]</sprocket-code></div></div><div class="main__grid-row-separator"></div><div class="main__grid-row" x-data="{ description_expanded: false, expr_expanded: false }"><div class="main__grid-cell"><code>restrictive</code></div><div class="main__grid-cell"><code>Boolean</code></div><div class="main__grid-cell"><code>true</code></div><div class="main__grid-cell">If true, run a less permissive validation of field values. Otherwise, check against SAM spec-defined values.</div><div x-show="description_expanded" class="main__grid-full-width-cell">If true, run a less permissive validation of field values. Otherwise, check against SAM spec-defined values.</div><div x-show="expr_expanded" class="main__grid-full-width-cell"><sprocket-code language="wdl">true</sprocket-code></div></div></div></div></div><div class="main__section"><h2 id="outputs" class="main__section-header">Outputs</h2><div class="main__grid-container"><div class="main__grid-non-req-param-container"><div class="main__grid-header-cell">Name</div><div class="main__grid-header-cell">Type</div><div class="main__grid-header-cell">Expression</div><div class="main__grid-header-cell">Description</div><div class="main__grid-header-separator"></div><div class="main__grid-row" x-data="{ description_expanded: false, expr_expanded: false }"><div class="main__grid-cell"><code>check</code></div><div class="main__grid-cell"><code>String</code></div><div class="main__grid-cell"><code>&quot;passed&quot;</code></div><div class="main__grid-cell">Dummy output to indicate success and enable call-caching</div><div x-show="description_expanded" class="main__grid-full-width-cell">Dummy output to indicate success and enable call-caching</div><div x-show="expr_expanded" class="main__grid-full-width-cell"><sprocket-code language="wdl">&quot;passed&quot;</sprocket-code></div></div></div></div></div><div class="main__section"><h2 id="runtime" class="main__section-header">Default Runtime Attributes</h2><div class="main__grid-container"><div class="main__grid-runtime-container"><div class="main__grid-header-cell">Attribute</div><div class="main__grid-header-cell">Value</div><div class="main__grid-header-separator"></div><div class="main__grid-row"><div class="main__grid-cell"><code>memory</code></div><div class="main__grid-cell"><code>&quot;4 GB&quot;</code></div></div><div class="main__grid-row-separator"></div><div class="main__grid-row"><div class="main__grid-cell"><code>disks</code></div><div class="main__grid-cell"><code>&quot;10 GB&quot;</code></div></div><div class="main__grid-row-separator"></div><div class="main__grid-row"><div class="main__grid-cell"><code>container</code></div><div class="main__grid-cell"><code>&quot;ghcr.io/stjudecloud/util:1.4.0&quot;</code></div></div><div class="main__grid-row-separator"></div><div class="main__grid-row"><div class="main__grid-cell"><code>maxRetries</code></div><div class="main__grid-cell"><code>0</code></div></div></div></div></div><div class="main__section"><h2 id="command" class="main__section-header">Command</h2><sprocket-code language="wdl" class="pt-8">error=0
if [[ ~{restrictive} == &quot;true&quot; ]]
then
    if [[ ~{read_group.ID} =~ ^~{id_pattern}$ ]] \
    || [[ ~{read_group.ID} =~ ~{restrictive_pattern} ]]
    then
        &gt;&amp;2 echo &quot;ID (~{read_group.ID}) must not match patterns:&quot;
        &gt;&amp;2 echo &quot;'~{id_pattern}' or '~{restrictive_pattern}'&quot;
        error=1
    fi
fi
if [[ ! &quot;~{read_group.ID}&quot; =~ ^~{sam_spec_pattern}$ ]]
then
    &gt;&amp;2 echo &quot;ID must match pattern ~{sam_spec_pattern}&quot;
    error=1
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;SM&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.SM}&quot; ]
    then
        &gt;&amp;2 echo &quot;SM is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.SM)}&quot; == &quot;true&quot; ]
then
    if [[ ~{restrictive} == &quot;true&quot; ]]
    then
        if [[ &quot;~{read_group.SM}&quot; =~ ^~{sample_pattern}$ ]] \
        || [[ &quot;~{read_group.SM}&quot; =~ ~{restrictive_pattern} ]]
        then
            &gt;&amp;2 echo &quot;SM must not match patterns:&quot;
            &gt;&amp;2 echo &quot;'~{sample_pattern}' or '~{restrictive_pattern}'&quot;
            error=1
        fi
    fi
    if [[ ! &quot;~{read_group.SM}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;SM must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;BC&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.BC}&quot; ]
    then
        &gt;&amp;2 echo &quot;BC is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.BC)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.BC}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;BC must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;CN&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.CN}&quot; ]
    then
        &gt;&amp;2 echo &quot;CN is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.CN)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.CN}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;CN must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;DS&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.DS}&quot; ]
    then
        &gt;&amp;2 echo &quot;DS is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.DS)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.DS}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;DS must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;DT&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.DT}&quot; ]
    then
        &gt;&amp;2 echo &quot;DT is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.DT)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.DT}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;DT must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;FO&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.FO}&quot; ]
    then
        &gt;&amp;2 echo &quot;FO is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.FO)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.FO}&quot; =~ ^\*|[ACMGRSVTWYHKDBN]+$ ]]
    then
        &gt;&amp;2 echo &quot;FO must match pattern \*|[ACMGRSVTWYHKDBN]+&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;KS&quot;) -eq 1 ]
then
    if [ -z &quot;~{if defined(read_group.KS) then read_group.KS else &quot;&quot;}&quot; ]
    then
        &gt;&amp;2 echo &quot;KS is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.KS)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.KS}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;KS must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;LB&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.LB}&quot; ]
    then
        &gt;&amp;2 echo &quot;LB is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.LB)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.LB}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;LB must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;PG&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.PG}&quot; ]
    then
        &gt;&amp;2 echo &quot;PG is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.PG)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.PG}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;PG must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;PI&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.PI}&quot; ]
    then
        &gt;&amp;2 echo &quot;PI is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.PI)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.PI}&quot; =~ ^[0-9]+$ ]]
    then
        &gt;&amp;2 echo &quot;PI must match pattern [0-9]+&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;PL&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.PL}&quot; ]
    then
        &gt;&amp;2 echo &quot;PL is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.PL)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.PL}&quot; =~ ^~{sep(&quot;|&quot;, platforms)}$ ]]
    then
        &gt;&amp;2 echo &quot;PL must match pattern ~{sep(&quot;|&quot;, platforms)}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;PM&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.PM}&quot; ]
    then
        &gt;&amp;2 echo &quot;PM is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.PM)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.PM}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;PM must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi
if [ $(echo &quot;~{sep(&quot; &quot;, required_fields)}&quot; | grep -Ewc &quot;PU&quot;) -eq 1 ]
then
    if [ -z &quot;~{read_group.PU}&quot; ]
    then
        &gt;&amp;2 echo &quot;PU is required&quot;
        error=1
    fi
fi
if [ &quot;~{defined(read_group.PU)}&quot; == &quot;true&quot; ]
then
    if [[ ! &quot;~{read_group.PU}&quot; =~ ^~{sam_spec_pattern}$ ]]
    then
        &gt;&amp;2 echo &quot;PU must match pattern ~{sam_spec_pattern}&quot;
        error=1
    fi
fi

if [ $error -eq 1 ]
then
    exit 1
fi</sprocket-code></div></div></div></div><div class="layout__sidebar-right"><div class="right-sidebar__container"><div class="right-sidebar__header">ON THIS PAGE</div><a href="#inputs" class="right-sidebar__section-header">Inputs</a><div class="right-sidebar__section-items"><a href="#required-inputs" class="right-sidebar__section-item">Required Inputs</a></div><div class="right-sidebar__section-items"><a href="#other-inputs" class="right-sidebar__section-item">Other Inputs</a></div><a href="#outputs" class="right-sidebar__section-header">Outputs</a><a href="#runtime" class="right-sidebar__section-header">Runtime</a><a href="#command" class="right-sidebar__section-header">Command</a><div class="right-sidebar__back-to-top-container"><a href="#title" class="right-sidebar__back-to-top"><span class="right-sidebar__back-to-top-icon">↑</span><span class="right-sidebar__back-to-top-text">Back to top</span></a></div></div></div></div></body></html>