[{"data":1,"prerenderedAt":892},["ShallowReactive",2],{"navigation_docs":3,"-remote-ci":144,"-remote-ci-surround":887},[4,35,84,109,124,134,139],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Get Started","\u002Fget-started","1.get-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fget-started\u002Fintroduction","1.get-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fget-started\u002Finstallation","1.get-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick start","\u002Fget-started\u002Fquickstart","1.get-started\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Project structure","\u002Fget-started\u002Fproject-structure","1.get-started\u002F4.project-structure","i-lucide-folder-tree",{"title":30,"path":31,"stem":32,"icon":33},"Dashboard","\u002Fget-started\u002Fdashboard","1.get-started\u002F5.dashboard","i-lucide-layout-dashboard",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Concepts","\u002Fconcepts","2.concepts",[40,45,50,55,60,65,69,74,79],{"title":41,"path":42,"stem":43,"icon":44},"Architecture","\u002Fconcepts\u002Farchitecture","2.concepts\u002F1.architecture","i-lucide-layers",{"title":46,"path":47,"stem":48,"icon":49},"Machines","\u002Fconcepts\u002Fmachines","2.concepts\u002F2.machines","i-lucide-server",{"title":51,"path":52,"stem":53,"icon":54},"Colony & users","\u002Fconcepts\u002Fcolony","2.concepts\u002F3.colony","i-lucide-users",{"title":56,"path":57,"stem":58,"icon":59},"Transport","\u002Fconcepts\u002Ftransport","2.concepts\u002F4.transport","i-lucide-network",{"title":61,"path":62,"stem":63,"icon":64},"Configuration","\u002Fconcepts\u002Fconfiguration","2.concepts\u002F5.configuration","i-lucide-settings",{"title":66,"path":67,"stem":68,"icon":23},"Deploy","\u002Fconcepts\u002Fdeploy","2.concepts\u002F6.deploy",{"title":70,"path":71,"stem":72,"icon":73},"Groups","\u002Fconcepts\u002Fgroups","2.concepts\u002F7.groups","i-lucide-boxes",{"title":75,"path":76,"stem":77,"icon":78},"Templates","\u002Fconcepts\u002Ftemplates","2.concepts\u002F8.templates","i-lucide-package-plus",{"title":80,"path":81,"stem":82,"icon":83},"Existing projects","\u002Fconcepts\u002Fexisting-projects","2.concepts\u002F9.existing-projects","i-lucide-folder-open",{"title":85,"path":86,"stem":87,"children":88,"page":34},"Remote","\u002Fremote","3.remote",[89,94,99,104],{"title":90,"path":91,"stem":92,"icon":93},"Remote machines","\u002Fremote\u002Foverview","3.remote\u002F1.overview","i-lucide-cloud",{"title":95,"path":96,"stem":97,"icon":98},"Remote deploy","\u002Fremote\u002Fdeploy","3.remote\u002F2.deploy","i-lucide-send",{"title":100,"path":101,"stem":102,"icon":103},"CI","\u002Fremote\u002Fci","3.remote\u002F3.ci","i-lucide-workflow",{"title":105,"path":106,"stem":107,"icon":108},"Tunnels","\u002Fremote\u002Ftunnel","3.remote\u002F4.tunnel","i-lucide-cable",{"title":110,"path":111,"stem":112,"children":113,"page":34},"Security","\u002Fsecurity","4.security",[114,119],{"title":115,"path":116,"stem":117,"icon":118},"Security model","\u002Fsecurity\u002Fmodel","4.security\u002F1.model","i-lucide-shield",{"title":120,"path":121,"stem":122,"icon":123},"Known issues","\u002Fsecurity\u002Fknown-issues","4.security\u002F2.known-issues","i-lucide-triangle-alert",{"title":125,"path":126,"stem":127,"children":128,"page":34},"Reference","\u002Freference","5.reference",[129],{"title":130,"path":131,"stem":132,"icon":133},"CLI reference","\u002Freference\u002Fcli","5.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"Changelog","\u002Fchangelog","changelog","i-lucide-history",{"title":140,"path":141,"stem":142,"icon":143},"Communities","\u002Fcommunities","communities","i-lucide-heart-handshake",{"id":145,"title":100,"body":146,"description":879,"extension":880,"links":881,"meta":882,"navigation":883,"path":101,"seo":884,"stem":102,"__hash__":886},"docs\u002F3.remote\u002F3.ci.md",{"type":147,"value":148,"toc":870},"minimark",[149,158,163,270,274,527,531,663,683,687,690,724,739,745,749,755,770,807,811,820,830,834,866],[150,151,152,153,157],"p",{},"Ant is a single binary, so a CI job is three steps: install it, sign in with a\n",[154,155,156],"code",{},"ci","-role account, and deploy. Nothing prompts, and every failure exits\nnon-zero.",[159,160,162],"h2",{"id":161},"one-time-setup","One-time setup",[164,165,166,233,247],"ol",{},[167,168,169,176,177,179,180,209,212,213],"li",{},[170,171,172,173,175],"strong",{},"Invite the pipeline's account with the ",[154,174,156],{}," role."," ",[154,178,156],{}," can deploy, roll\nback, and read status and logs; it cannot change the roster, read the audit\nlog, or hold OS accounts.",[181,182,187],"pre",{"className":183,"code":184,"language":185,"meta":186,"style":186},"language-sh shiki shiki-themes material-theme-lighter github-light github-dark","ant colony invite --role ci --machine prod\n# or, once the account's NodeID is known:\nant colony users add \u003Cnodeid> --machine prod --role ci\n","sh","",[154,188,189,197,203],{"__ignoreMap":186},[190,191,194],"span",{"class":192,"line":193},"line",1,[190,195,196],{},"ant colony invite --role ci --machine prod\n",[190,198,200],{"class":192,"line":199},2,[190,201,202],{},"# or, once the account's NodeID is known:\n",[190,204,206],{"class":192,"line":205},3,[190,207,208],{},"ant colony users add \u003Cnodeid> --machine prod --role ci\n",[210,211],"br",{},"The pipeline needs its own account identity: sign up once, redeem the\ninvite, then export it.",[181,214,216],{"className":183,"code":215,"language":185,"meta":186,"style":186},"ant colony signup --name ci\nant colony join --token \"$(cat invite.txt)\" --alias prod\nant colony export --out ant-ci.json\n",[154,217,218,223,228],{"__ignoreMap":186},[190,219,220],{"class":192,"line":193},[190,221,222],{},"ant colony signup --name ci\n",[190,224,225],{"class":192,"line":199},[190,226,227],{},"ant colony join --token \"$(cat invite.txt)\" --alias prod\n",[190,229,230],{"class":192,"line":205},[190,231,232],{},"ant colony export --out ant-ci.json\n",[167,234,235,238,239,242,243,246],{},[170,236,237],{},"Store the bundle and passphrase as CI secrets",": the bundle file as\n",[154,240,241],{},"ANT_BUNDLE"," and its passphrase as ",[154,244,245],{},"ANT_PASSPHRASE"," (masked).",[167,248,249,252,253,256,257,260,261],{},[170,250,251],{},"Register the machine"," so the runner can dial it. The NodeID comes from\n",[154,254,255],{},"ant nest bootstrap","'s output or ",[154,258,259],{},"ant nest identity show"," on the machine:",[181,262,264],{"className":183,"code":263,"language":185,"meta":186,"style":186},"ant nest machines add prod --hostname prod.example.com --node-id \u003Cnodeid>\n",[154,265,266],{"__ignoreMap":186},[190,267,268],{"class":192,"line":193},[190,269,263],{},[159,271,273],{"id":272},"github-actions","GitHub Actions",[181,275,279],{"className":276,"code":277,"language":278,"meta":186,"style":186},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","name: Deploy\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    env:\n      ANT_MACHINE: prod\n      ANT_PASSPHRASE: ${{ secrets.ANT_PASSPHRASE }}\n    steps:\n      - uses: actions\u002Fcheckout@v6\n      - name: Install ant\n        run: |\n          curl -fsSL https:\u002F\u002Fants-docs.pages.dev\u002Fdl\u002Finstall.sh | sh\n          echo \"$HOME\u002F.local\u002Fbin\" >> \"$GITHUB_PATH\"\n      - name: Sign in\n        run: |\n          printf '%s' \"${{ secrets.ANT_BUNDLE }}\" > \u002Ftmp\u002Fant-ci.json\n          ant colony login --bundle \u002Ftmp\u002Fant-ci.json\n      - name: Register the machine\n        run: ant nest machines add prod --node-id \"${{ vars.ANT_MACHINE_NODE_ID }}\"\n      - name: Deploy\n        run: ant trail deploy --release \"$GITHUB_SHA\" --json | tee deploy.json\n","yaml",[154,280,281,295,304,311,328,335,343,351,362,370,381,392,400,414,427,439,445,451,463,472,478,484,496,506,517],{"__ignoreMap":186},[190,282,283,287,291],{"class":192,"line":193},[190,284,286],{"class":285},"sQzsp","name",[190,288,290],{"class":289},"sP7_E",":",[190,292,294],{"class":293},"s_sjI"," Deploy\n",[190,296,297,301],{"class":192,"line":199},[190,298,300],{"class":299},"syTEX","on",[190,302,303],{"class":289},":\n",[190,305,306,309],{"class":192,"line":205},[190,307,308],{"class":285},"  push",[190,310,303],{"class":289},[190,312,314,317,319,322,325],{"class":192,"line":313},4,[190,315,316],{"class":285},"    branches",[190,318,290],{"class":289},[190,320,321],{"class":289}," [",[190,323,324],{"class":293},"main",[190,326,327],{"class":289},"]\n",[190,329,331],{"class":192,"line":330},5,[190,332,334],{"emptyLinePlaceholder":333},true,"\n",[190,336,338,341],{"class":192,"line":337},6,[190,339,340],{"class":285},"jobs",[190,342,303],{"class":289},[190,344,346,349],{"class":192,"line":345},7,[190,347,348],{"class":285},"  deploy",[190,350,303],{"class":289},[190,352,354,357,359],{"class":192,"line":353},8,[190,355,356],{"class":285},"    runs-on",[190,358,290],{"class":289},[190,360,361],{"class":293}," ubuntu-latest\n",[190,363,365,368],{"class":192,"line":364},9,[190,366,367],{"class":285},"    env",[190,369,303],{"class":289},[190,371,373,376,378],{"class":192,"line":372},10,[190,374,375],{"class":285},"      ANT_MACHINE",[190,377,290],{"class":289},[190,379,380],{"class":293}," prod\n",[190,382,384,387,389],{"class":192,"line":383},11,[190,385,386],{"class":285},"      ANT_PASSPHRASE",[190,388,290],{"class":289},[190,390,391],{"class":293}," ${{ secrets.ANT_PASSPHRASE }}\n",[190,393,395,398],{"class":192,"line":394},12,[190,396,397],{"class":285},"    steps",[190,399,303],{"class":289},[190,401,403,406,409,411],{"class":192,"line":402},13,[190,404,405],{"class":289},"      -",[190,407,408],{"class":285}," uses",[190,410,290],{"class":289},[190,412,413],{"class":293}," actions\u002Fcheckout@v6\n",[190,415,417,419,422,424],{"class":192,"line":416},14,[190,418,405],{"class":289},[190,420,421],{"class":285}," name",[190,423,290],{"class":289},[190,425,426],{"class":293}," Install ant\n",[190,428,430,433,435],{"class":192,"line":429},15,[190,431,432],{"class":285},"        run",[190,434,290],{"class":289},[190,436,438],{"class":437},"sVHd0"," |\n",[190,440,442],{"class":192,"line":441},16,[190,443,444],{"class":293},"          curl -fsSL https:\u002F\u002Fants-docs.pages.dev\u002Fdl\u002Finstall.sh | sh\n",[190,446,448],{"class":192,"line":447},17,[190,449,450],{"class":293},"          echo \"$HOME\u002F.local\u002Fbin\" >> \"$GITHUB_PATH\"\n",[190,452,454,456,458,460],{"class":192,"line":453},18,[190,455,405],{"class":289},[190,457,421],{"class":285},[190,459,290],{"class":289},[190,461,462],{"class":293}," Sign in\n",[190,464,466,468,470],{"class":192,"line":465},19,[190,467,432],{"class":285},[190,469,290],{"class":289},[190,471,438],{"class":437},[190,473,475],{"class":192,"line":474},20,[190,476,477],{"class":293},"          printf '%s' \"${{ secrets.ANT_BUNDLE }}\" > \u002Ftmp\u002Fant-ci.json\n",[190,479,481],{"class":192,"line":480},21,[190,482,483],{"class":293},"          ant colony login --bundle \u002Ftmp\u002Fant-ci.json\n",[190,485,487,489,491,493],{"class":192,"line":486},22,[190,488,405],{"class":289},[190,490,421],{"class":285},[190,492,290],{"class":289},[190,494,495],{"class":293}," Register the machine\n",[190,497,499,501,503],{"class":192,"line":498},23,[190,500,432],{"class":285},[190,502,290],{"class":289},[190,504,505],{"class":293}," ant nest machines add prod --node-id \"${{ vars.ANT_MACHINE_NODE_ID }}\"\n",[190,507,509,511,513,515],{"class":192,"line":508},24,[190,510,405],{"class":289},[190,512,421],{"class":285},[190,514,290],{"class":289},[190,516,294],{"class":293},[190,518,520,522,524],{"class":192,"line":519},25,[190,521,432],{"class":285},[190,523,290],{"class":289},[190,525,526],{"class":293}," ant trail deploy --release \"$GITHUB_SHA\" --json | tee deploy.json\n",[159,528,530],{"id":529},"gitlab-ci","GitLab CI",[181,532,534],{"className":276,"code":533,"language":278,"meta":186,"style":186},"deploy:\n  stage: deploy\n  image: docker:27\n  services: [docker:27-dind]\n  variables:\n    ANT_MACHINE: prod\n  script:\n    - apk add --no-cache curl\n    - curl -fsSL https:\u002F\u002Fants-docs.pages.dev\u002Fdl\u002Finstall.sh | sh\n    - export PATH=\"$HOME\u002F.local\u002Fbin:$PATH\"\n    - printf '%s' \"$ANT_BUNDLE\" > \u002Ftmp\u002Fant-ci.json\n    - ant colony login --bundle \u002Ftmp\u002Fant-ci.json\n    - ant nest machines add prod --node-id \"$ANT_MACHINE_NODE_ID\"\n    - ant trail deploy --release \"$CI_COMMIT_SHA\" --json\n  only: [main]\n",[154,535,536,543,553,563,577,584,593,600,608,615,622,629,636,643,650],{"__ignoreMap":186},[190,537,538,541],{"class":192,"line":193},[190,539,540],{"class":285},"deploy",[190,542,303],{"class":289},[190,544,545,548,550],{"class":192,"line":199},[190,546,547],{"class":285},"  stage",[190,549,290],{"class":289},[190,551,552],{"class":293}," deploy\n",[190,554,555,558,560],{"class":192,"line":205},[190,556,557],{"class":285},"  image",[190,559,290],{"class":289},[190,561,562],{"class":293}," docker:27\n",[190,564,565,568,570,572,575],{"class":192,"line":313},[190,566,567],{"class":285},"  services",[190,569,290],{"class":289},[190,571,321],{"class":289},[190,573,574],{"class":293},"docker:27-dind",[190,576,327],{"class":289},[190,578,579,582],{"class":192,"line":330},[190,580,581],{"class":285},"  variables",[190,583,303],{"class":289},[190,585,586,589,591],{"class":192,"line":337},[190,587,588],{"class":285},"    ANT_MACHINE",[190,590,290],{"class":289},[190,592,380],{"class":293},[190,594,595,598],{"class":192,"line":345},[190,596,597],{"class":285},"  script",[190,599,303],{"class":289},[190,601,602,605],{"class":192,"line":353},[190,603,604],{"class":289},"    -",[190,606,607],{"class":293}," apk add --no-cache curl\n",[190,609,610,612],{"class":192,"line":364},[190,611,604],{"class":289},[190,613,614],{"class":293}," curl -fsSL https:\u002F\u002Fants-docs.pages.dev\u002Fdl\u002Finstall.sh | sh\n",[190,616,617,619],{"class":192,"line":372},[190,618,604],{"class":289},[190,620,621],{"class":293}," export PATH=\"$HOME\u002F.local\u002Fbin:$PATH\"\n",[190,623,624,626],{"class":192,"line":383},[190,625,604],{"class":289},[190,627,628],{"class":293}," printf '%s' \"$ANT_BUNDLE\" > \u002Ftmp\u002Fant-ci.json\n",[190,630,631,633],{"class":192,"line":394},[190,632,604],{"class":289},[190,634,635],{"class":293}," ant colony login --bundle \u002Ftmp\u002Fant-ci.json\n",[190,637,638,640],{"class":192,"line":402},[190,639,604],{"class":289},[190,641,642],{"class":293}," ant nest machines add prod --node-id \"$ANT_MACHINE_NODE_ID\"\n",[190,644,645,647],{"class":192,"line":416},[190,646,604],{"class":289},[190,648,649],{"class":293}," ant trail deploy --release \"$CI_COMMIT_SHA\" --json\n",[190,651,652,655,657,659,661],{"class":192,"line":429},[190,653,654],{"class":285},"  only",[190,656,290],{"class":289},[190,658,321],{"class":289},[190,660,324],{"class":293},[190,662,327],{"class":289},[150,664,665,667,668,670,671,674,675,678,679,682],{},[154,666,245],{},", ",[154,669,241],{},", and ",[154,672,673],{},"ANT_MACHINE_NODE_ID"," are masked CI\nvariables. The install script and the release downloads need no credentials.\nA runner with Docker is only needed for source builds; a project with\n",[154,676,677],{},"deploy.build: none"," (or the ",[154,680,681],{},"--image"," form) builds nothing locally.",[159,684,686],{"id":685},"split-build-and-deploy","Split build and deploy",[150,688,689],{},"Build once in a fast job, push to the registry, and deploy in another job that\nneeds neither the source nor a local build:",[181,691,693],{"className":183,"code":692,"language":185,"meta":186,"style":186},"# job A, needs deploy.registry in ant.yaml and ANT_REGISTRY_PASSWORD\nant haul --push --release \"$GITHUB_SHA\"\n\n# job B, runs the pushed image on the machine; set ANT_REGISTRY_USERNAME and\n# ANT_REGISTRY_PASSWORD here too, and the pull credential travels with the deploy\nant trail deploy --image ghcr.io\u002Forg\u002Fapp:\"$GITHUB_SHA\" --pull --machine prod\n",[154,694,695,700,705,709,714,719],{"__ignoreMap":186},[190,696,697],{"class":192,"line":193},[190,698,699],{},"# job A, needs deploy.registry in ant.yaml and ANT_REGISTRY_PASSWORD\n",[190,701,702],{"class":192,"line":199},[190,703,704],{},"ant haul --push --release \"$GITHUB_SHA\"\n",[190,706,707],{"class":192,"line":205},[190,708,334],{"emptyLinePlaceholder":333},[190,710,711],{"class":192,"line":313},[190,712,713],{},"# job B, runs the pushed image on the machine; set ANT_REGISTRY_USERNAME and\n",[190,715,716],{"class":192,"line":330},[190,717,718],{},"# ANT_REGISTRY_PASSWORD here too, and the pull credential travels with the deploy\n",[190,720,721],{"class":192,"line":337},[190,722,723],{},"ant trail deploy --image ghcr.io\u002Forg\u002Fapp:\"$GITHUB_SHA\" --pull --machine prod\n",[150,725,726,727,730,731,734,735,738],{},"For a private image, job B either sets ",[154,728,729],{},"ANT_REGISTRY_USERNAME"," +\n",[154,732,733],{},"ANT_REGISTRY_PASSWORD"," (the credential rides the deploy to the machine and is\ngone when it finishes) or the machine carries its own ",[154,736,737],{},"docker login",".",[150,740,741,744],{},[154,742,743],{},"ant haul --push"," always builds on the runner (the image must exist there to be\npushed) and supports container projects; compose projects push their service\nimages with docker.",[159,746,748],{"id":747},"reading-the-result","Reading the result",[150,750,751,754],{},[154,752,753],{},"--json"," prints the deploy or rollback result on stdout while build output\nstays on stderr, so a pipeline can consume it directly:",[181,756,758],{"className":183,"code":757,"language":185,"meta":186,"style":186},"release=$(ant trail deploy --json | jq -r .release)\nant trail rollback --to \"$release\" --json\n",[154,759,760,765],{"__ignoreMap":186},[190,761,762],{"class":192,"line":193},[190,763,764],{},"release=$(ant trail deploy --json | jq -r .release)\n",[190,766,767],{"class":192,"line":199},[190,768,769],{},"ant trail rollback --to \"$release\" --json\n",[150,771,772,773,667,776,667,779,667,782,667,785,667,788,791,792,667,795,667,798,667,801,667,804,738],{},"Fields: ",[154,774,775],{},"app",[154,777,778],{},"deployment",[154,780,781],{},"machine",[154,783,784],{},"runner",[154,786,787],{},"builder",[154,789,790],{},"image",",\n",[154,793,794],{},"release",[154,796,797],{},"container",[154,799,800],{},"compose",[154,802,803],{},"routes",[154,805,806],{},"warnings",[159,808,810],{"id":809},"rollback-from-ci","Rollback from CI",[181,812,814],{"className":183,"code":813,"language":185,"meta":186,"style":186},"ant trail rollback --to \"$PREVIOUS_RELEASE\" --json\n",[154,815,816],{"__ignoreMap":186},[190,817,818],{"class":192,"line":193},[190,819,813],{},[150,821,822,825,826,829],{},[154,823,824],{},"rollback.keep_releases"," (or ",[154,827,828],{},"deploy.keep_images",") controls how many releases\nstay on the machine; the target image tag must still exist there.",[159,831,833],{"id":832},"notes","Notes",[835,836,837,840,850,860],"ul",{},[167,838,839],{},"The runner needs a Linux amd64\u002Farm64 build with CGO; the release binaries\nare. The macOS\u002FWindows CLI builds run local-first and cannot reach a machine.",[167,841,842,845,846,849],{},[154,843,844],{},"ANT_MACHINE"," is the environment fallback for ",[154,847,848],{},"--machine",", so a pipeline sets\nthe target once.",[167,851,852,853,856,857,859],{},"The bundle ",[170,854,855],{},"is"," the account key. Scope it with the ",[154,858,156],{}," role per machine,\nkeep it in a secret store, and rotate by removing the member and issuing a\nnew invite.",[167,861,862,863,865],{},"Worker and CLI must speak the same protocol version; upgrade the machine with\n",[154,864,255],{}," when the CLI reports a mismatch.",[867,868,869],"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 .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":186,"searchDepth":199,"depth":199,"links":871},[872,873,874,875,876,877,878],{"id":161,"depth":199,"text":162},{"id":272,"depth":199,"text":273},{"id":529,"depth":199,"text":530},{"id":685,"depth":199,"text":686},{"id":747,"depth":199,"text":748},{"id":809,"depth":199,"text":810},{"id":832,"depth":199,"text":833},"Deploy to a machine from a CI pipeline.","md",null,{},{"icon":103},{"title":100,"description":885},"Use a ci-role account and a credential bundle to deploy from GitHub Actions or GitLab CI.","x7l2iawbcwKXyH5Uq2HyFFxvaNhVfsVgdhjKcznqi8Q",[888,890],{"title":95,"path":96,"stem":97,"description":889,"icon":98,"children":-1},"Build and run a project on a registered machine.",{"title":105,"path":106,"stem":107,"description":891,"icon":108,"children":-1},"Reach a managed container port from your machine: no inbound port on either side.",1791494557018]