[{"data":1,"prerenderedAt":692},["ShallowReactive",2],{"navigation":3,"\u002Factions\u002Fquickstart":194,"\u002Factions\u002Fquickstart-surround":687},[4,18,31,64,81,102,111,132,149],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Getting started","\u002Fgetting-started","1.getting-started",[9,13],{"title":10,"path":11,"stem":12},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Run your first workflow","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Core concepts","\u002Fconcepts","2.concepts",[23,27],{"title":24,"path":25,"stem":26},"The platform model","\u002Fconcepts\u002Fplatform","2.concepts\u002F1.platform",{"title":28,"path":29,"stem":30},"Architecture and boundaries","\u002Fconcepts\u002Farchitecture","2.concepts\u002F2.architecture",{"title":32,"path":33,"stem":34,"children":35,"page":17},"Installation","\u002Finstallation","3.installation",[36,40,44,48,52,56,60],{"title":37,"path":38,"stem":39},"Overview and requirements","\u002Finstallation\u002Foverview","3.installation\u002F1.overview",{"title":41,"path":42,"stem":43},"Local evaluation","\u002Finstallation\u002Flocal-evaluation","3.installation\u002F2.local-evaluation",{"title":45,"path":46,"stem":47},"Install the server","\u002Finstallation\u002Fserver","3.installation\u002F3.server",{"title":49,"path":50,"stem":51},"Install a runner","\u002Finstallation\u002Frunner","3.installation\u002F4.runner",{"title":53,"path":54,"stem":55},"Verify the installation","\u002Finstallation\u002Fverification","3.installation\u002F5.verification",{"title":57,"path":58,"stem":59},"Upgrade the platform","\u002Finstallation\u002Fupgrades","3.installation\u002F6.upgrades",{"title":61,"path":62,"stem":63},"Guided installer","\u002Finstallation\u002Finstaller","3.installation\u002F7.installer",{"title":65,"path":66,"stem":67,"children":68,"page":17},"Build workflows","\u002Fworkflows","4.workflows",[69,73,77],{"title":70,"path":71,"stem":72},"Build a Definition","\u002Fworkflows\u002Fdefinitions","4.workflows\u002F0.definitions",{"title":74,"path":75,"stem":76},"Deploy and run workflows","\u002Fworkflows\u002Fruns","4.workflows\u002F1.runs",{"title":78,"path":79,"stem":80},"Inputs, context, and secrets","\u002Fworkflows\u002Finputs-and-secrets","4.workflows\u002F2.inputs-and-secrets",{"title":82,"path":83,"stem":84,"children":85,"page":17},"Run and recover","\u002Foperations","5.operations",[86,90,94,98],{"title":87,"path":88,"stem":89},"Monitor Runs","\u002Foperations\u002Fmonitoring","5.operations\u002F1.monitoring",{"title":91,"path":92,"stem":93},"Approve prepared steps","\u002Foperations\u002Fapprovals","5.operations\u002F2.approvals",{"title":95,"path":96,"stem":97},"Recover or cancel execution","\u002Foperations\u002Frecovery","5.operations\u002F3.recovery",{"title":99,"path":100,"stem":101},"Troubleshooting","\u002Foperations\u002Ftroubleshooting","5.operations\u002F4.troubleshooting",{"title":103,"path":104,"stem":105,"children":106,"page":17},"Action catalog","\u002Fcatalog","6.catalog",[107],{"title":108,"path":109,"stem":110},"Find and use Actions","\u002Fcatalog\u002Foverview","6.catalog\u002F1.overview",{"title":112,"path":113,"stem":114,"children":115,"page":17},"Administration","\u002Fadministration","7.administration",[116,120,124,128],{"title":117,"path":118,"stem":119},"Registries and Environments","\u002Fadministration\u002Fenvironments","7.administration\u002F2.environments",{"title":121,"path":122,"stem":123},"Manage runners","\u002Fadministration\u002Frunners","7.administration\u002F3.runners",{"title":125,"path":126,"stem":127},"Access and approval policies","\u002Fadministration\u002Faccess","7.administration\u002F4.access",{"title":129,"path":130,"stem":131},"Backups and upgrades","\u002Fadministration\u002Fmaintenance","7.administration\u002F5.maintenance",{"title":133,"path":134,"stem":135,"children":136,"page":17},"Develop Actions","\u002Factions","8.actions",[137,141,145],{"title":138,"path":139,"stem":140},"Build your first Action","\u002Factions\u002Fquickstart","8.actions\u002F1.quickstart",{"title":142,"path":143,"stem":144},"Local development","\u002Factions\u002Flocal-development","8.actions\u002F2.local-development",{"title":146,"path":147,"stem":148},"Publish an Action","\u002Factions\u002Fpublishing","8.actions\u002F3.publishing",{"title":150,"path":151,"stem":152,"children":153,"page":17},"Reference","\u002Freference","9.reference",[154,158,162,166,170,174,178,182,186,190],{"title":155,"path":156,"stem":157},"Operator CLI","\u002Freference\u002Foperator-cli","9.reference\u002F1.operator-cli",{"title":159,"path":160,"stem":161},"Installer CLI","\u002Freference\u002Finstaller-cli","9.reference\u002F10.installer-cli",{"title":163,"path":164,"stem":165},"Definition syntax","\u002Freference\u002Fdefinition","9.reference\u002F2.definition",{"title":167,"path":168,"stem":169},"CLI configuration","\u002Freference\u002Fconfiguration","9.reference\u002F3.configuration",{"title":171,"path":172,"stem":173},"API integration","\u002Freference\u002Fapi","9.reference\u002F4.api",{"title":175,"path":176,"stem":177},"Action CLI","\u002Freference\u002Faction-cli","9.reference\u002F5.action-cli",{"title":179,"path":180,"stem":181},"Action SDK","\u002Freference\u002Fsdk","9.reference\u002F6.sdk",{"title":183,"path":184,"stem":185},"Contracts and compatibility","\u002Freference\u002Fcontracts","9.reference\u002F7.contracts",{"title":187,"path":188,"stem":189},"Server configuration","\u002Freference\u002Fserver-configuration","9.reference\u002F8.server-configuration",{"title":191,"path":192,"stem":193},"Runner configuration","\u002Freference\u002Frunner-configuration","9.reference\u002F9.runner-configuration",{"id":195,"title":138,"body":196,"description":682,"extension":683,"meta":684,"navigation":375,"path":139,"seo":685,"stem":140,"__hash__":686},"docs\u002F8.actions\u002F1.quickstart.md",{"type":197,"value":198,"toc":675},"minimark",[199,207,212,232,239,269,277,280,284,293,307,311,318,576,588,592,636,643,647,662,671],[200,201,202,203,206],"p",{},"Custom Actions extend the operations your team can automate. This guide is for integration authors. To use existing Actions or deployed workflows, start with ",[204,205,14],"a",{"href":15},".",[208,209,211],"h2",{"id":210},"prerequisites","Prerequisites",[200,213,214,215,219,220,224,225,228,229,206],{},"Install the ",[216,217,218],"code",{},"pyplines-action"," binary for your operating system and architecture from the ",[221,222,223],"release-link",{},"matching GitHub release",". Put it on your ",[216,226,227],{},"PATH"," and check ",[216,230,231],{},"pyplines-action version",[200,233,234,235,238],{},"With ",[216,236,237],{},"pyplines-installer"," installed, create an Action tooling configuration and\napply it:",[240,241,247],"pre",{"className":242,"code":243,"filename":244,"language":245,"meta":246,"style":246},"language-sh shiki shiki-themes pyplines-light pyplines-light pyplines-dark","pyplines-installer init --preset action --output action-tools.yml\npyplines-installer run action-tools.yml\npyplines-action version\n","Terminal","sh","",[216,248,249,257,263],{"__ignoreMap":246},[250,251,254],"span",{"class":252,"line":253},"line",1,[250,255,256],{},"pyplines-installer init --preset action --output action-tools.yml\n",[250,258,260],{"class":252,"line":259},2,[250,261,262],{},"pyplines-installer run action-tools.yml\n",[250,264,266],{"class":252,"line":265},3,[250,267,268],{},"pyplines-action version\n",[200,270,271,272,276],{},"See ",[204,273,275],{"href":274},"\u002Finstallation\u002Finstaller#install-the-action-development-cli","Action CLI installation","\nfor tooling version selection, authentication, and PATH setup.",[200,278,279],{},"Local development also requires Docker Engine or Desktop with Buildx, uv (tested with 0.12.18), and Python 3.14. The Docker daemon must have access to the same filesystem paths as the CLI.",[208,281,283],{"id":282},"create-the-project","Create the project",[240,285,287],{"className":242,"code":286,"filename":244,"language":245,"meta":246,"style":246},"pyplines-action init .\u002Fhello-world\n",[216,288,289],{"__ignoreMap":246},[250,290,291],{"class":252,"line":253},[250,292,286],{},[200,294,295,296,299,300,303,304,306],{},"The command creates the project and generates ",[216,297,298],{},"uv.lock",". Commit both ",[216,301,302],{},"pyproject.toml"," and ",[216,305,298],{},". The Action's declared SDK requirement and lock select its runtime bases.",[208,308,310],{"id":309},"write-the-handler","Write the handler",[200,312,313,314,317],{},"Replace ",[216,315,316],{},"src\u002Fhello_world\u002F__init__.py"," with the handler below, and save the input file in the project directory. The highlighted lines declare the input and output contracts.",[319,320,323],"code-example",{":line-numbers":321,"caption":322},"true","The Python handler declares typed input and output contracts; input.json supplies an example request.",[324,325,326,543],"code-group",{},[240,327,336],{"className":328,"code":329,"filename":316,"highlights":330,"language":335,"meta":246,"style":246},"language-python shiki shiki-themes pyplines-light pyplines-light pyplines-dark","from pyplines.actions import Context, Inputs, Outputs\n\nclass HelloInputs(Inputs):\n    name: str\n\nclass HelloOutputs(Outputs):\n    greeting: str\n\ndef handler(inputs: HelloInputs, context: Context) -> HelloOutputs:\n    context.log(\"Preparing greeting\")\n    return HelloOutputs(greeting=f\"Hello, {inputs.name}!\")\n",[265,331,332,333,334],4,5,6,7,"python",[216,337,338,371,377,397,409,414,429,439,444,483,508],{"__ignoreMap":246},[250,339,340,344,348,351,354,357,360,363,366,368],{"class":252,"line":253},[250,341,343],{"class":342},"sYpJS","from",[250,345,347],{"class":346},"smnRP"," pyplines",[250,349,206],{"class":350},"sgMYo",[250,352,353],{"class":346},"actions ",[250,355,356],{"class":342},"import",[250,358,359],{"class":346}," Context",[250,361,362],{"class":350},",",[250,364,365],{"class":346}," Inputs",[250,367,362],{"class":350},[250,369,370],{"class":346}," Outputs\n",[250,372,373],{"class":252,"line":259},[250,374,376],{"emptyLinePlaceholder":375},true,"\n",[250,378,381,384,388,391,394],{"class":379,"line":265},[252,380],"highlight",[250,382,383],{"class":342},"class",[250,385,387],{"class":386},"sNIIm"," HelloInputs",[250,389,390],{"class":350},"(",[250,392,393],{"class":346},"Inputs",[250,395,396],{"class":350},"):\n",[250,398,400,403,406],{"class":399,"line":331},[252,380],[250,401,402],{"class":346},"    name",[250,404,405],{"class":350},":",[250,407,408],{"class":386}," str\n",[250,410,412],{"class":411,"line":332},[252,380],[250,413,376],{"emptyLinePlaceholder":375},[250,415,417,419,422,424,427],{"class":416,"line":333},[252,380],[250,418,383],{"class":342},[250,420,421],{"class":386}," HelloOutputs",[250,423,390],{"class":350},[250,425,426],{"class":346},"Outputs",[250,428,396],{"class":350},[250,430,432,435,437],{"class":431,"line":334},[252,380],[250,433,434],{"class":346},"    greeting",[250,436,405],{"class":350},[250,438,408],{"class":386},[250,440,442],{"class":252,"line":441},8,[250,443,376],{"emptyLinePlaceholder":375},[250,445,447,450,454,456,459,461,463,465,468,470,472,475,478,480],{"class":252,"line":446},9,[250,448,449],{"class":342},"def",[250,451,453],{"class":452},"swm4T"," handler",[250,455,390],{"class":350},[250,457,458],{"class":346},"inputs",[250,460,405],{"class":350},[250,462,387],{"class":346},[250,464,362],{"class":350},[250,466,467],{"class":346}," context",[250,469,405],{"class":350},[250,471,359],{"class":346},[250,473,474],{"class":350},")",[250,476,477],{"class":350}," ->",[250,479,421],{"class":346},[250,481,482],{"class":350},":\n",[250,484,486,489,491,494,496,499,503,505],{"class":252,"line":485},10,[250,487,488],{"class":346},"    context",[250,490,206],{"class":350},[250,492,493],{"class":346},"log",[250,495,390],{"class":350},[250,497,498],{"class":350},"\"",[250,500,502],{"class":501},"sfDcV","Preparing greeting",[250,504,498],{"class":350},[250,506,507],{"class":350},")\n",[250,509,511,514,516,518,521,524,527,530,533,535,538,541],{"class":252,"line":510},11,[250,512,513],{"class":342},"    return",[250,515,421],{"class":346},[250,517,390],{"class":350},[250,519,520],{"class":346},"greeting",[250,522,523],{"class":342},"=",[250,525,526],{"class":342},"f",[250,528,529],{"class":501},"\"Hello, ",[250,531,532],{"class":346},"{inputs",[250,534,206],{"class":350},[250,536,537],{"class":346},"name}",[250,539,540],{"class":501},"!\"",[250,542,507],{"class":350},[240,544,549],{"className":545,"code":546,"filename":547,"language":548,"meta":246,"style":246},"language-json shiki shiki-themes pyplines-light pyplines-light pyplines-dark","{\"name\": \"Engineer\"}\n","input.json","json",[216,550,551],{"__ignoreMap":246},[250,552,553,556,558,561,563,565,568,571,573],{"class":252,"line":253},[250,554,555],{"class":350},"{",[250,557,498],{"class":350},[250,559,560],{"class":386},"name",[250,562,498],{"class":350},[250,564,405],{"class":350},[250,566,567],{"class":350}," \"",[250,569,570],{"class":501},"Engineer",[250,572,498],{"class":350},[250,574,575],{"class":350},"}\n",[200,577,578,579,581,582,584,585,206],{},"The scaffold declares the handler entry point in ",[216,580,302],{},". The input file supplies the ",[216,583,560],{}," field declared by ",[216,586,587],{},"HelloInputs",[208,589,591],{"id":590},"run-locally","Run locally",[593,594,596,608],"command-output",{"label":595},"Local execution",[597,598,599],"template",{"v-slot:command":246},[240,600,602],{"className":242,"code":601,"language":245,"meta":246,"style":246},"pyplines-action run .\u002Fhello-world --input .\u002Fhello-world\u002Finput.json\n",[216,603,604],{"__ignoreMap":246},[250,605,606],{"class":252,"line":253},[250,607,601],{},[597,609,610],{"v-slot:output":246},[240,611,613],{"className":545,"code":612,"language":548,"meta":246,"style":246},"{\"greeting\": \"Hello, Engineer!\"}\n",[216,614,615],{"__ignoreMap":246},[250,616,617,619,621,623,625,627,629,632,634],{"class":252,"line":253},[250,618,555],{"class":350},[250,620,498],{"class":350},[250,622,520],{"class":386},[250,624,498],{"class":350},[250,626,405],{"class":350},[250,628,567],{"class":350},[250,630,631],{"class":501},"Hello, Engineer!",[250,633,498],{"class":350},[250,635,575],{"class":350},[200,637,638,639,642],{},"Successful output contains ",[216,640,641],{},"{\"greeting\":\"Hello, Engineer!\"}",". Action logs go to stderr; redirected stdout contains the output JSON object.",[208,644,646],{"id":645},"validate-the-packaged-action","Validate the packaged Action",[240,648,650],{"className":242,"code":649,"filename":244,"language":245,"meta":246,"style":246},"pyplines-action run .\u002Fhello-world --input .\u002Fhello-world\u002Finput.json --packaged\npyplines-action validate .\u002Fhello-world\n",[216,651,652,657],{"__ignoreMap":246},[250,653,654],{"class":252,"line":253},[250,655,656],{},"pyplines-action run .\u002Fhello-world --input .\u002Fhello-world\u002Finput.json --packaged\n",[250,658,659],{"class":252,"line":259},[250,660,661],{},"pyplines-action validate .\u002Fhello-world\n",[200,663,664,665,303,668,206],{},"Packaged execution tests the installed Action. Validation builds the image and captures its typed interface. Continue with ",[204,666,667],{"href":143},"local development",[204,669,670],{"href":147},"publishing",[672,673,674],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYpJS, html code.shiki .sYpJS{--shiki-light:#806000;--shiki-default:#806000;--shiki-dark:#F2CD66}html pre.shiki code .smnRP, html code.shiki .smnRP{--shiki-light:#243247;--shiki-default:#243247;--shiki-dark:#DCE6F0}html pre.shiki code .sgMYo, html code.shiki .sgMYo{--shiki-light:#54657A;--shiki-default:#54657A;--shiki-dark:#A9B8CA}html pre.shiki code .sNIIm, html code.shiki .sNIIm{--shiki-light:#326C9A;--shiki-default:#326C9A;--shiki-dark:#A7CDEB}html pre.shiki code .swm4T, html code.shiki .swm4T{--shiki-light:#286394;--shiki-default:#286394;--shiki-dark:#8EBBE4}html pre.shiki code .sfDcV, html code.shiki .sfDcV{--shiki-light:#34694B;--shiki-default:#34694B;--shiki-dark:#9BC9AD}",{"title":246,"searchDepth":259,"depth":259,"links":676},[677,678,679,680,681],{"id":210,"depth":259,"text":211},{"id":282,"depth":259,"text":283},{"id":309,"depth":259,"text":310},{"id":590,"depth":259,"text":591},{"id":645,"depth":259,"text":646},"Scaffold a typed Python Action and execute it locally.","md",{},{"title":138,"description":682},"fEtszvcqu2Jv8npebnap0eUaNJHO8wOt7HtMAesHSqo",[688,690],{"title":129,"path":130,"stem":131,"description":689,"children":-1},"Preserve platform state and maintain a supported component combination.",{"title":142,"path":143,"stem":144,"description":691,"children":-1},"Iterate on source, inspect failures, and test the packaged runtime.",1792213696490]