PageSourceSearch

https://www.rwx.com/docs/_next/static/chunks/pages/captain/test-fr…/javascript/cucumber-aa7e81d36b671bd3.js

js rwx.com collected 2026-10-02 08:03:19 UTC 32,518 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1057],{18108:(s,n,o)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/captain/test-frameworks/javascript/cucumber",function(){return o(37419)}])},37419:(s,n,o)=>{"use strict";o.r(n),o.d(n,{__N_SSG:()=>t,default:()=>i});var a=o(37876),e=o(91668);function r(s){let n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,e.R)(),...s.components},{CodeGroup:o,Note:r,Template:t}=n;return o||p("CodeGroup",!0),r||p("Note",!0),t||p("Template",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"cucumber",children:"Cucumber"}),"\n",(0,a.jsx)(t,{name:"getting-started-intro",framework:"Cucumber",children:(0,a.jsx)(n.p,{children:"To use Captain with Cucumber, you need to configure your test suite to output test results to a file and then tell Captain where to find those test results."})}),"\n",(0,a.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,a.jsxs)(n.p,{children:["Cucumber can output test results to a file using the ",(0,a.jsx)(n.code,{children:"--format"})," flag. Configure Captain by creating a ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml",children:(0,a.jsx)(n.code,{children:".captain/config.yml"})})," file in the root directory of your repository:"]}),"\n",(0,a.jsx)(t,{name:"config-reference-note",children:(0,a.jsx)(r,{children:(0,a.jsxs)(n.p,{children:["For additional configuration options, see ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml",children:"the\nreference"})," for the configuration file."]})})}),"\n",(0,a.jsx)(n.pre,{language:"yaml",code:"test-suites:\n  your-project-cucumber:\n    command: npx cucumber-js --format json:tmp/cucumber.json --format summary\n    results:\n      language: JavaScript\n      framework: Cucumber\n      path: tmp/cucumber.json\n",children:(0,a.jsx)(n.code,{className:"language-yaml",children:'<span><span style="color: var(--shiki-token-keyword)">test-suites</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">your-project-cucumber</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">command</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npx cucumber-js --format json:tmp/cucumber.json --format summary</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">results</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">language</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">JavaScript</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">framework</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">Cucumber</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">path</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">tmp/cucumber.json</span></span>\n<span></span>'})}),"\n",(0,a.jsx)(t,{name:"suite-name-and-command",frameworkSlug:"cucumber",exampleCommand:"npx cucumber-js",resultsPath:"tmp/cucumber.json",children:(0,a.jsxs)(n.p,{children:["You can change ",(0,a.jsx)(n.code,{children:"your-project-cucumber"})," to any name you like, but we typically recommend using the name of your project followed by a dash followed by ",(0,a.jsx)(n.code,{children:"cucumber"}),".\nThe ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml#test-suites-command",children:(0,a.jsx)(n.code,{children:"command"})})," is the command you already use to run your test suite. Captain will invoke this command to run your tests. The example above shows what you might use if you use ",(0,a.jsx)(n.code,{children:"npx cucumber-js"})," and want to store test results in ",(0,a.jsx)(n.code,{children:"tmp/cucumber.json"}),"."]})}),"\n",(0,a.jsxs)(t,{name:"configured-check",frameworkSlug:"cucumber",children:[(0,a.jsxs)(n.p,{children:["Once Captain is configured, you can run ",(0,a.jsx)(n.code,{children:"captain run your-project-cucumber --print-summary"}),". If you see your typical test output followed by a ",(0,a.jsx)(n.code,{children:"captain"})," block like this:"]}),(0,a.jsx)(n.pre,{code:"--------------------------------------------------------------------------------\n----------------------------------- Captain ------------------------------------\n--------------------------------------------------------------------------------\n",children:(0,a.jsx)(n.code,{children:"--------------------------------------------------------------------------------\n----------------------------------- Captain ------------------------------------\n--------------------------------------------------------------------------------\n"})}),(0,a.jsx)(n.p,{children:"then you've configured everything correctly! You can now supercharge your test framework's capabilities. See below for c
1onfiguring each of Captain's features."})]}),"\n",(0,a.jsx)(n.h2,{id:"identifying-tests",children:"Identifying tests"}),"\n",(0,a.jsxs)(t,{name:"identifying-tests-intro",children:[(0,a.jsx)(n.p,{children:'Captain uses framework specific "identity recipes" to identify the tests in your suite.\nThese recipes are order dependent components extracted from native test framework output.'}),(0,a.jsx)(n.p,{children:"We use this identity to track the executions of a test over the course of their lifetime in your suite.\nThis enables us to do things like flake detection, quarantining, and retries."})]}),"\n",(0,a.jsxs)(n.p,{children:["For Cucumber, Captain constructs the identity by parsing out the ",(0,a.jsx)(n.code,{children:"file"})," and ",(0,a.jsx)(n.code,{children:"description"})," attributes."]}),"\n",(0,a.jsx)(n.h2,{id:"quarantining-tests",children:"Quarantining tests"}),"\n",(0,a.jsxs)(t,{name:"quarantining-intro",children:[(0,a.jsx)(n.p,{children:"Captain makes managing flaky tests easier than ever. When a test is identified as flaky, you can quarantine the test without modifying it, so that if only those tests fail, Captain reports a success with a 0 exit code. Unlike skipped tests, quarantined tests will continue to run, so you can still view their failure messages and see how frequently they are failing."}),(0,a.jsx)(r,{children:(0,a.jsx)(n.p,{children:"If you're using Captain Cloud or RWX, you can quarantine tests directly from\nthe web interface instead of managing quarantined tests in your repository, so\nno code commit is required. Metrics are built-in to help you monitor how\nfrequently your quarantines are being applied."})})]}),"\n",(0,a.jsxs)(n.p,{children:["You can quarantine tests in OSS mode with ",(0,a.jsx)(n.code,{children:"captain add quarantine"})," like so:"]}),"\n",(0,a.jsx)(n.pre,{language:"bash",code:'captain add quarantine your-project-cucumber \\\n  --file features/rule.feature \\\n  --description "Rule Sample > A passing example"\n',children:(0,a.jsx)(n.code,{className:"language-bash",children:'<span><span style="color: var(--shiki-token-function)">captain</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">add</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">quarantine</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">your-project-cucumber</span><span style="color: var(--shiki-color-text)"> \\</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-string)">--file</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">features/rule.feature</span><span style="color: var(--shiki-color-text)"> \\</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-string)">--description</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">&quot;Rule Sample &gt; A passing example&quot;</span></span>\n<span></span>'})}),"\n",(0,a.jsx)(t,{name:"quarantine-identifying-tests-link",children:(0,a.jsxs)(n.p,{children:["See ",(0,a.jsx)(n.a,{href:"/captain/oss/guide#managing-quarantined-tests",children:"the OSS quarantining guide"})," for more information on managing quarantined tests in OSS mode."]})}),"\n",(0,a.jsx)(n.h2,{id:"retrying-tests",children:"Retrying tests"}),"\n",(0,a.jsx)(t,{name:"retrying-intro",children:(0,a.jsxs)(n.p,{children:["You can configure Captain to automatically retry failed tests to help you determine if failing tests are flaky or are genuinely failing. To configure retries, update your ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml",children:(0,a.jsx)(n.code,{children:".captain/config.yml"})})," file like so:"]})}),"\n",(0,a.jsx)(n.pre,{language:"yaml",code:"test-suites:\n  your-project-cucumber:\n    command: npx cucumber-js --format json:tmp/cucumber.json --format summary\n    results:\n      language: JavaScript\n      framework: Cucumber\n      path: tmp/cucumber.json\n    output:\n      print-summary: true\n    retries:\n      attempts: 2\n      command: npx cucumber-js --format json:tmp/cucumber.json --format summary {{ scenarios }}\n",children:(0,a.jsx)(n.code,{className:"language-yaml",children:'<span><span style="color: var(--shiki-token-keyword)">test-suites</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">your-project-cucumber</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">command</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npx cucumber-js --format json:tmp/cucumber.json --format summary</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">results</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">language</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">JavaScript</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">framework</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">Cucumber</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">path</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">tmp/cucumber.json</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">output</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">print-summary</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">retries</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">attempts</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">2</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">command</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npx cucumber-js --format json:tmp/cucumber.json --format summary {{ scenarios }}</span></span>\n<span></span>'})}),"\n",(0,a.jsx)(t,{name:"retries-explanation",children:(0,a.jsxs)(n.p,{children:["Once configured, Captain will invoke your original test command, check for any failures, and retry your tests however many times you've specified (in this example, two additional times) by templating the failures into the command specified by ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml#test-suites-retries-command",children:(0,a.jsx)(n.code,{children:"retries.command"})}),". The ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml#test-suites-output-print-summary",children:(0,a.jsx)(n.code,{children:"output.print-summary"})})," option is not required, but we've added it for convenience in understanding the overall results after the retries have been factored 
1in."]})}),"\n",(0,a.jsx)(t,{name:"retries-quarantine-note",children:(0,a.jsx)(r,{children:(0,a.jsx)(n.p,{children:"Retries work with quarantining enabled, so feel free to use them together.\nTests will be retried according to the configuration; if they fail after\nexhausting all attempts, quarantines will be applied to the remaining\nfailures."})})}),"\n",(0,a.jsx)(n.h2,{id:"partitioning",children:"Partitioning"}),"\n",(0,a.jsxs)(t,{name:"partitioning-intro",children:[(0,a.jsx)(n.p,{children:"Captain can optimally partition your test suite's files into multiple groups for execution on multiple CI nodes.\nCaptain tracks your test file runtime so that it can balance each partition."}),(0,a.jsxs)(n.p,{children:["Configure partitioning in ",(0,a.jsx)(n.code,{children:".captain/config.yml"}),":"]})]}),"\n",(0,a.jsx)(n.pre,{language:"yaml",code:"test-suites:\n  your-project-cucumber:\n    command: npx cucumber-js --format json:tmp/cucumber.json --format summary\n    results:\n      language: JavaScript\n      framework: Cucumber\n      path: tmp/cucumber.json\n    output:\n      print-summary: true\n    partition:\n      command: npx cucumber-js --format json:tmp/cucumber.json --format summary {{ testFiles }}\n      globs:\n        - features/**/*.feature\n",children:(0,a.jsx)(n.code,{className:"language-yaml",children:'<span><span style="color: var(--shiki-token-keyword)">test-suites</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">your-project-cucumber</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">command</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npx cucumber-js --format json:tmp/cucumber.json --format summary</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">results</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">language</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">JavaScript</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">framework</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">Cucumber</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">path</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">tmp/cucumber.json</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">output</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">print-summary</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">partition</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">command</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npx cucumber-js --format json:tmp/cucumber.json --format summary {{ testFiles }}</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">globs</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">        - </span><span style="color: var(--shiki-token-string-expression)">features/**/*.feature</span></span>\n<span></span>'})}),"\n",(0,a.jsx)(t,{name:"partition-test-files",children:(0,a.jsxs)(n.p,{children:["Captain will fill in the ",(0,a.jsx)(n.code,{children:"testFiles"})," placeholder of your ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml#test-suites-partition-command",children:(0,a.jsx)(n.code,{children:"partition.command"})}
1)," with the files resulting from expanding your configured ",(0,a.jsx)(n.a,{href:"/captain/cli-configuration/config-yaml#test-suites-partition-globs",children:(0,a.jsx)(n.code,{children:"partition.globs"})}),"."]})}),"\n",(0,a.jsx)(n.p,{children:"Then partition across your CI provider's parallel jobs:"}),"\n",(0,a.jsxs)(o,{children:[(0,a.jsx)(n.pre,{language:"yaml",code:"# .rwx/ci.yml\n\ntasks:\n  - key: code\n    call: git/clone 2.2.0\n\n  - key: node\n    call: nodejs/install 1.2.0\n    with:\n      node-version: 20\n\n  - key: deps\n    use: [code, node]\n    run: npm ci\n\n  - key: captain\n    call: rwx/install-captain 1.2.0\n\n  - key: cucumber\n    use: [deps, captain]\n    parallel: 8\n    run: captain run your-project-cucumber\n",children:(0,a.jsx)(n.code,{className:"language-yaml",children:'<span><span style="color: var(--shiki-token-comment)"># .rwx/ci.yml</span></span>\n<span></span>\n<span><span style="color: var(--shiki-token-keyword)">tasks</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">  - </span><span style="color: var(--shiki-token-keyword)">key</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">code</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">call</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">git/clone 2.2.0</span></span>\n<span></span>\n<span><span style="color: var(--shiki-color-text)">  - </span><span style="color: var(--shiki-token-keyword)">key</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">node</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">call</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">nodejs/install 1.2.0</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">with</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">node-version</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">20</span></span>\n<span></span>\n<span><span style="color: var(--shiki-color-text)">  - </span><span style="color: var(--shiki-token-keyword)">key</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">deps</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">use</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> [</span><span style="color: var(--shiki-token-string)">code</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">node</span><span style="color: var(--shiki-color-text)">]</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">run</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npm ci</span></span>\n<span></span>\n<span><span style="color: var(--shiki-color-text)">  - </span><span style="color: var(--shiki-token-keyword)">key</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">captain</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">call</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">rwx/install-captain 1.2.0</span></span>\n<span></span>\n<span><span style="color: var(--shiki-color-text)">  - </span><span style="color: var(--shiki-token-keyword)">key</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">cucumber</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">
1use</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> [</span><span style="color: var(--shiki-token-string)">deps</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">captain</span><span style="color: var(--shiki-color-text)">]</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">parallel</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">8</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">run</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">captain run your-project-cucumber</span></span>\n<span></span>'}),...{title:"RWX"}}),(0,a.jsx)(n.pre,{language:"yaml",code:"# .github/workflows/ci.yml\n\nrun_tests:\n  runs-on: ubuntu-latest\n  strategy:\n    fail-fast: false\n    matrix:\n      partition_index: [0, 1, 2, 3, 4, 5, 6, 7]\n      partition_total: [8]\n  steps:\n    - uses: actions/checkout@v3\n    - uses: actions/setup-node@v3\n    - run: npm install\n    - uses: rwx-research/setup-captain@v1\n    - env:\n        RWX_ACCESS_TOKEN: ${{ secrets.RWX_ACCESS_TOKEN }}\n      run: |\n        captain run your-project-cucumber \\\n        --partition-index ${{ matrix.partition_index }} \\\n        --partition-total ${{ matrix.partition_total }}\n",children:(0,a.jsx)(n.code,{className:"language-yaml",children:'<span><span style="color: var(--shiki-token-comment)"># .github/workflows/ci.yml</span></span>\n<span></span>\n<span><span style="color: var(--shiki-token-keyword)">run_tests</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">runs-on</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">ubuntu-latest</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">strategy</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">fail-fast</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span></span>\n<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-keyword)">matrix</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">partition_index</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> [</span><span style="color: var(--shiki-token-constant)">0</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">1</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">2</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">3</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">4</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">5</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">6</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">7</span><span style="color: var(--shiki-color-text)">]</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">partition_total</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> [</span><span style="color: var(--shiki-token-constant)">8</span><span style="color: var(--shiki-color-text)">]</span></span>\n<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">steps</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">    - </span><span style="color: var(--shiki-token-keyword)">uses</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">actions/checkout@v3</span></span>\n<span><span style="color: var(--shiki-color-text)">    - </span><span style="color: var(--shiki-token-keyword)">uses</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">actions/setup-node@v3</span></span>\n<span><span style="color: var(--shiki-color-text)">    - </span><span style="color: var(--shiki-token-keyword)">run</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">npm install</span></span>\n<span><span style="color: var(--shiki-color-text)">    - </span><span style="color: var(--shiki-token-keyword)">uses</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">rwx-research/setup-captain@v1</span></span>\n<span><span style="color: var(--shiki-color-text)">    - </span><span style="color: var(--shiki-token-keyword)">
1env</span><span style="color: var(--shiki-token-keyword)">:</span></span>\n<span><span style="color: var(--shiki-color-text)">        </span><span style="color: var(--shiki-token-keyword)">RWX_ACCESS_TOKEN</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">${{ secrets.RWX_ACCESS_TOKEN }}</span></span>\n<span><span style="color: var(--shiki-color-text)">      </span><span style="color: var(--shiki-token-keyword)">run</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">|</span></span>\n<span><span style="color: var(--shiki-token-string)">        captain run your-project-cucumber \\</span></span>\n<span><span style="color: var(--shiki-token-string)">        --partition-index ${{ matrix.partition_index }} \\</span></span>\n<span><span style="color: var(--shiki-token-string)">        --partition-total ${{ matrix.partition_total }}</span></span>\n<span></span>'}),...{title:"GitHub Actions"}})]}),"\n",(0,a.jsx)(t,{name:"partition-verify-note",frameworkSlug:"cucumber",children:(0,a.jsxs)(r,{children:[(0,a.jsxs)(n.p,{children:["To verify your config before wiring it into CI, run"," "]}),(0,a.jsx)("code",{children:"captain run your-project-cucumber --partition-index 0 --partition-total 8"})," ",(0,a.jsx)(n.p,{children:"locally and compare the test count to an unpartitioned run."})]})})]})}var t=!0;function i(s={}){let{wrapper:n}={...(0,e.R)(),...s.components};return n?(0,a.jsx)(n,{...s,children:(0,a.jsx)(r,{...s})}):r(s)}function p(s,n){throw Error("Expected "+(n?"component":"object")+" `"+s+"` to be defined: you likely forgot to import, pass, or provide it.")}}},s=>{s.O(0,[636,6593,8792],()=>s(s.s=18108)),_N_E=s.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.