Shipyard

आधिकारिक

शिपयार्ड CLI एक MCP सर्वर प्रदान करता है जो एजेंटों को सीधे शिपयार्ड वातावरण प्रबंधित करने में सक्षम बनाता है: लॉग खींचकर, ब्रांचों की तुलना करके, परीक्षण चलाकर, और वातावरण को रोककर/शुरू करके।

Shipyard MCP के साथ आप क्या कर सकते हैं?

  • पर्यावरणों की सूची देखें — पूछें कि कौन-से पर्यावरण चल रहे हैं; रिपॉज़िटरी, ब्रांच, पुल रिक्वेस्ट नंबर या नाम के आधार पर फ़िल्टर करें।
  • किसी पर्यावरण का निरीक्षण करें — UUID के आधार पर किसी विशिष्ट पर्यावरण का विवरण प्राप्त करें, जिसमें उसकी सेवाएँ और एक्सपोज़ किए गए पोर्ट शामिल हैं।
  • सेवा लॉग पढ़ें — चल रहे पर्यावरण में किसी सेवा के लॉग दिखाएँ; चाहें तो आउटपुट को लगातार देखते रहें।
  • पर्यावरण का जीवनचक्र प्रबंधित करें — UUID के आधार पर किसी पर्यावरण को रोकें, फिर से शुरू करें, रद्द करें, दोबारा बनाएँ या पुनर्जीवित करें।
  • पर्यावरण वेरिएबल कॉन्फ़िगर करें — किसी पर्यावरण पर env vars सेट करें और उन्हें लागू करने के लिए सेवा को फिर से शुरू करें।
  • पुश किए गए बदलाव की पुष्टि करें — verify प्रॉम्प्ट का उपयोग करके किसी पुश किए गए बदलाव को उसके पर्यावरण के विरुद्ध जाँचें।

दस्तावेज़

Shipyard CLI

Shipyard प्लेटफ़ॉर्म पर Ephemeral Environments को प्रबंधित करने का एक टूल।

AI assistant का उपयोग कर रहे हैं? CLI में एक MCP server शामिल है: AI assistant से Shipyard का उपयोग करें देखें।

इंस्टॉलेशन

  • Linux और macOS

    curl https://www.shipyard.sh/install.sh | bash
    

    यह /usr/local/bin में इंस्टॉल होता है और वहाँ लिखने में असमर्थ होने पर ही sudo का उपयोग करता है। किसी दूसरी जगह, जैसे कि आपकी अपनी किसी डायरेक्टरी में इंस्टॉल करने के लिए, SHIPYARD_INSTALL_DIR सेट करें:

    curl https://www.shipyard.sh/install.sh | SHIPYARD_INSTALL_DIR="$HOME/.local/bin" bash
    
  • Windows रिलीज़ पेज पर जाएँ और Windows के लिए एक्ज़ीक्यूटेबल डाउनलोड करें।

  • Homebrew

    brew tap shipyard/tap
    brew install shipyard
    

डाउनलोड की पुष्टि करना

हर रिलीज़ में एक checksums.txt प्रकाशित होता है, जिसमें हर बाइनरी का SHA-256 होता है। इंस्टॉल स्क्रिप्ट बाइनरी की उससे जाँच करती है और मेल न होने पर इंस्टॉल करने से मना कर देती है। खुद डाउनलोड की गई बाइनरी की जाँच करने के लिए:

grep " shipyard-darwin-arm64$" checksums.txt | shasum -a 256 -c -

checksums.txt उसी रिलीज़ से आता है जिससे बाइनरी आती है, इसलिए यह खराब या अधूरे डाउनलोड का पता लगाता है, न कि ऐसी रिलीज़ का जिसकी फ़ाइलें बदल दी गई हों। नीचे दिया गया attestation यह जाँचता है कि बाइनरी इस repo के रिलीज़ workflow से बनाई गई थी।

1.9.0 के बाद की रिलीज़ में, हर बाइनरी के साथ एक signed build provenance attestation भी होता है, जो बताता है कि उसे किस workflow run, commit और tag ने बनाया, और एक SPDX SBOM (shipyard-<os>-<arch>.sbom.json; Windows पर .exe.sbom.json) होता है, जिसमें बताया जाता है कि उसे किन चीज़ों से बनाया गया था। डाउनलोड की गई रिलीज़ का नाम देकर GitHub CLI से attestation की पुष्टि करें (यहाँ v1.10.0):

gh attestation verify shipyard-darwin-arm64 -R shipyard/shipyard-cli \
  --signer-workflow shipyard/shipyard-cli/.github/workflows/release.yaml \
  --source-ref refs/tags/v1.10.0

--source-ref को बनाए रखें: इसके बिना, जाँच किसी भी branch पर workflow की कॉपी से signed किसी भी चीज़ के लिए पास हो जाती है, न कि सिर्फ़ उस रिलीज़ के tag build के लिए।

जाँच tag का नाम लेती है, commit का नहीं। वापस ली गई रिलीज़ के attestations हटाए नहीं जाते, इसलिए अगर कोई version कभी उसी tag के तहत फिर से रिलीज़ किया जाता है, तो उसकी वापस ली गई बाइनरी भी जाँच में पास हो जाती है। Commit को भी पिन करने के लिए, --source-digest <commit SHA> को उस commit के साथ जोड़ें जिस पर tag इंगित करता है।

रिलीज़ को फिर से बनाना

1.10.0 के बाद की रिलीज़ reproducible हैं: उसी Go और GoReleaser versions के साथ रिलीज़ tag को फिर से build करने पर, किसी भी डायरेक्टरी में byte-identical बाइनरी मिलती हैं। उस tag के .github/workflows/release.yaml में versions GO_VERSION और GORELEASER_VERSION हैं। उस GoReleaser को इंस्टॉल करके, और नीचे 1.26.11 की जगह GO_VERSION रखकर (GOTOOLCHAIN Go को ठीक वही version इस्तेमाल करने देता है, ज़रूरत पड़ने पर उसे डाउनलोड करके, और GOFLAGS= आपके अपने build flags हटा देता है):

git clone https://github.com/shipyard/shipyard-cli && cd shipyard-cli
git checkout vX.Y.Z
GOTOOLCHAIN=go1.26.11 GOFLAGS= goreleaser release --clean --skip=publish,sbom
grep " shipyard-linux-amd64$" dist/checksums.txt

Digest रिलीज़ के checksums.txt में उसी पंक्ति से मेल खाना चाहिए। अगर ऐसा नहीं है, तो रिलीज़ पर संदेह करने से पहले अपने Go और GoReleaser versions (GOTOOLCHAIN=go1.26.11 go version, goreleaser --version) जाँचें। रिलीज़ workflow हर रिलीज़ commit पर, रिलीज़ build करने से पहले, इसकी जाँच करता है (scripts/check-reproducible.sh)। SBOM reproducible नहीं होते: उनमें उनके बनाए जाने का समय दर्ज होता है। CLI के अपने module की entry में version (devel) दिखता है, क्योंकि build में Go का VCS stamp शामिल नहीं होता; shipyard --version रिलीज़ version दिखाता है।

अपग्रेड करना

shipyard upgrade

shipyard update भी यही काम करता है। यह नवीनतम रिलीज़ इंस्टॉल करता है और उसके रिलीज़ नोट दिखाता है। Homebrew इंस्टॉल को brew upgrade shipyard से अपग्रेड किया जाता है; अन्य सभी इंस्टॉल में रिलीज़ बाइनरी डाउनलोड होती है, रिलीज़ के checksums.txt से उसकी पुष्टि की जाती है और चल रही बाइनरी को उससे बदल दिया जाता है। अगर वह बाइनरी ऐसी डायरेक्टरी में है जहाँ आप लिख नहीं सकते, जैसे /usr/local/bin, तो sudo shipyard upgrade चलाएँ।

प्री-रिलीज़ शामिल करने के लिए --prerelease जोड़ें, या मौजूदा रिलीज़ फिर से इंस्टॉल करने के लिए --force जोड़ें (Homebrew इंस्टॉल के लिए, इसके बजाय brew reinstall shipyard का उपयोग करें)।

1.9.0 या उससे पुराने version से अपग्रेड करना

1.9.0 और उससे पुराने versions में shipyard update versions की तुलना टेक्स्ट के रूप में करता है, इसलिए यह 1.10.0 और उसके बाद के versions को आपके मौजूदा version से पुराना बताता है। जिस तरीके से आपने इंस्टॉल किया था, उसी तरीके से एक बार अपग्रेड करें; उसके बाद से shipyard upgrade काम करेगा:

  • Linux और macOS: curl https://www.shipyard.sh/install.sh | bash
  • Windows: रिलीज़ पेज से एक्ज़ीक्यूटेबल डाउनलोड करें
  • Homebrew: brew upgrade shipyard

अपडेट सूचनाएँ

नई रिलीज़ आने पर, CLI किसी कमांड के पूरा होने के बाद आपको बताता है, दिन में अधिकतम एक बार:

A new version of shipyard is available: 1.9.0 → 1.10.0
Run `shipyard upgrade` to install it. Release notes: https://github.com/shipyard/shipyard-cli/releases/tag/v1.10.0

यह कभी कुछ पूछता नहीं है और न ही इनपुट का इंतज़ार करता है। जाँच आपके कमांड के चलने के दौरान बैकग्राउंड में होती है; अगर कमांड पूरा होने तक यह खत्म नहीं हुई, तो CLI इसके लिए अधिकतम एक सेकंड इंतज़ार करता है। ऐसा सिर्फ़ तब होता है जब यह GitHub से संपर्क कर रहा हो—दिन में लगभग एक बार, या आपके छूटे हुए रिलीज़ नोट लाने के लिए। किसी अन्य तरीके से अपग्रेड करने के बाद पहली बार चलाने पर, जैसे brew upgrade, वे नोट दिखते हैं।

संदेश stderr पर जाता है और सिर्फ़ तब दिखता है जब stderr एक terminal हो। यह CI में, अपनी पहचान बताने वाले AI coding agents (Claude Code, Codex, Cursor's agent, Gemini CLI) के भीतर, या shipyard mcp serve के लिए कभी नहीं दिखता। इसे बंद करने के लिए, SHIPYARD_NO_UPDATE_CHECK=1 सेट करें या ~/.shipyard/config.yaml में update_check: false जोड़ें।

सेल्फ़-अपडेट बंद करना

ऐसे self-hosted Shipyard पर जो GitHub तक नहीं पहुँच सकता, CLI आपके Shipyard रिलीज़ के साथ आता है। वहाँ ~/.shipyard/config.yaml में self_update: false सेट करके, या SHIPYARD_SELF_UPDATE=false से सेल्फ़-अपडेट बंद करें। इसके बाद CLI कभी GitHub से संपर्क नहीं करता: न अपडेट सूचना, न shipyard mcp serve से बैकग्राउंड जाँच, और shipyard upgrade यह संदेश देकर मना कर देता है कि सेल्फ़-अपडेट बंद है। update_check: false सिर्फ़ सूचना और बैकग्राउंड जाँच बंद करता है।

लॉगिन

CLI को शुरू करने के लिए shipyard login चलाएँ। यह आपको ब्राउज़र में Shipyard में लॉगिन करने के लिए कहेगा। इसके बाद CLI आपका API token एक स्थानीय config में सेव करेगा। अब आप कमांड चलाना शुरू कर सकते हैं।

Self-hosted Shipyard

Self-hosted Shipyard का उपयोग करने के लिए, लॉगिन करने से पहले ~/.shipyard/config.yaml में उसके API का पता दें (या SHIPYARD_API_URL के साथ):

api_url: https://shipyard.example.internal/api/v1
self_update: false

इसके बाद shipyard login उस host का login page खोलेगा और हर कमांड उसी API को कॉल करेगा। अगर इंस्टॉल GitHub तक नहीं पहुँच सकता, तो self_update: false सेट करें (सेल्फ़-अपडेट बंद करना देखें)।

अगर आपने पहले ही किसी दूसरे Shipyard (जैसे shipyard.build) में लॉगिन किया है, तो shipyard login उस token को बनाए रखता है और बताता है कि आप लॉगिन हैं। Self-hosted इंस्टॉल में लॉगिन करने से पहले config फ़ाइल से api_token हटाएँ (और SHIPYARD_API_TOKEN को unset करें)।

या अपना Token मैन्युअल रूप से सेट करें

अपने Shipyard API token को SHIPYARD_API_TOKEN environment variable की value के रूप में सेट करें।

इसे पाने के लिए अपने profile page पर जाएँ।

अगर आप अपने org के लिए API access चालू करना चाहते हैं, तो support@shipyard.build पर हमसे संपर्क करें। अगर आपके कोई और सवाल हैं, तो हमारे समुदाय के Slack में शामिल हों।

shipyard set token

इसके बजाय, आप डिफ़ॉल्ट रूप से $HOME/.shipyard/config.yaml में रखी गई configuration फ़ाइल का उपयोग कर सकते हैं। पहली बार CLI चलाने पर यह एक डिफ़ॉल्ट खाली config बनाएगा, जिसे आप फिर संपादित कर सकते हैं।

किसी भी कमांड में --config {path} flag जोड़कर, आप डिफ़ॉल्ट के अलावा किसी दूसरे config path को भी निर्दिष्ट कर सकते हैं।

अपने config में कोई भी configuration values जोड़ें और सुनिश्चित करें कि फ़ाइल YAML syntax का पालन करती हो। उदाहरण के लिए:

api_token: <your-token>
org: <your-non-default-org>

आपके environment variables की values, config में उनकी संबंधित values को ओवरराइड करती हैं।

बुनियादी उपयोग

उन सभी orgs को देखें जिनके आप सदस्य हैं

shipyard get orgs

डिफ़ॉल्ट global org सेट करें

shipyard set org {org-name}

मौजूदा configured org देखें

shipyard get org

सभी environments की सूची देखें

shipyard get environments

उपलब्ध flags:

NameDescriptionTypeDefault Value
branchBranch name से फ़िल्टर करेंstring
deletedहटाए गए environments लौटाएँbooleanfalse
jsonपूरा JSON output प्रिंट करेंbooleanfalse
nameApplication के name से फ़िल्टर करेंstring
org-nameOrg name से फ़िल्टर करें, अगर आप कई orgs के सदस्य हैंstringआपका डिफ़ॉल्ट org
pageअनुरोधित page numberint1
page-sizeअनुरोधित page sizeint20
pull-request-numberPull request number से फ़िल्टर करेंstring
repo-nameRepo name से फ़िल्टर करेंstring

उदाहरण:

  • Branch main पर repo flask-backend चलाने वाले सभी environments की सूची देखें:
shipyard get environments --repo-name flask-backend --branch main
  • सभी हटाए गए environments की सूची देखें:
shipyard get environments --deleted

किसी environment के UUID से उसकी जानकारी देखें

shipyard get environment {environment_uuid}

उपलब्ध flags:

NameDescriptionTypeDefault Value
jsonपूरा JSON output प्रिंट करेंbooleanfalse
orgEnvironment का org, अगर आप कई orgs के सदस्य हैंstringआपका डिफ़ॉल्ट org
bypass-tokenScripts के लिए सिर्फ़ environment का bypass token प्रिंट करेंbooleanfalse

--bypass-token से कोई script token का उपयोग कर सकती है, बिना किसी के उसे टाइप या प्रिंट किए:

SHIPYARD_TOKEN=$(shipyard get environment {environment_uuid} --bypass-token) && \
  export SHIPYARD_TOKEN && curl -b "shipyard_token=$SHIPYARD_TOKEN" https://your-environment-url/

चल रहे environment को रोकें

shipyard stop environment {environment_uuid}

रुके हुए environment को फिर से शुरू करें

shipyard restart environment {environment_uuid}

किसी environment का जारी build रद्द करें

shipyard cancel environment {environment_uuid}

किसी environment को फिर से build करें

shipyard rebuild environment {environment_uuid}

हटाए गए environment को फिर से सक्रिय करें

shipyard revive environment {environment_uuid}

Detached environment deploy करें

मौजूदा application build को clone करके एक नया, स्वतंत्र ("detached") environment बनाएँ। इसके लिए आपके org में detached environments चालू होने चाहिए।

shipyard detached deploy {application_build_uuid} --name my-detached-env

हर repo के लिए branches ओवरराइड करें और नियंत्रित करें कि नए commits आने पर detached environment फिर से build हो या नहीं:

# Override the branch for a repo, and never rebuild on new commits
shipyard detached deploy {application_build_uuid} --name my-detached-env --branch web=feature-x --build-on-commit never

# Per-repo build-on-commit settings (always | inherit | never)
shipyard detached deploy {application_build_uuid} --build-on-commit-for web=always --build-on-commit-for api=never

Detached environment हटाएँ

Environment का UUID दें, या उसके किसी भी application build का UUID दें (जो build detail page के URL में होता है)। इस तरीके से सिर्फ़ detached environments हटाए जा सकते हैं; base, pull request या remote environment को हटाने से मना कर दिया जाएगा। पहले से हटाए गए environment को फिर से हटाने पर भी सफलता मिलती है।

shipyard detached delete {environment_uuid}
shipyard detached delete {application_build_uuid}

किसी environment के सभी services और exposed ports देखें

shipyard get services --env {environment_uuid}

चल रहे environment की service में Exec करें

किसी running environment की दी गई service में, किसी भी arguments और flags के साथ कोई भी command चलाएँ। Command arguments को double slash के बाद दें। Session environment को idle होने के कारण रुकने से सिर्फ़ तब तक बचाए रखता है जब तक आप उसमें टाइप करते हैं, अधिकतम 12 घंटे तक।

shipyard exec --env {environment_uuid} --service {service_name} -- bash

चल रहे environment की service के port को Port forward करें

shipyard port-forward --env {environment_uuid} --service {service_name} --ports {local_port}:{service_container_port}

खुला हुआ port-forward या logs --follow environment को idle होने के कारण रुकने से अधिकतम 12 घंटे तक बचाए रखता है।

चल रहे environment की service के logs देखें

shipyard logs --env {environment_uuid} --service {service_name}

किसी environment पर जाएँ

shipyard visit {environment_uuid}

उपलब्ध flags:

NameDescriptionTypeDefault Value
followLogs output को लगातार दिखाएँbooleanfalse
tailदिखाने के लिए हाल की log lines की संख्याint3000

Volumes के साथ काम करें

किसी environment के सभी volumes की सूची देखें

shipyard get volumes --env {environment_uuid}

किसी environment के सभी volume snapshots की सूची देखें

shipyard get snapshots --env {environment_uuid}

किसी environment में volume रीसेट करें

shipyard reset volume --env {environment_uuid}

किसी environment में snapshot बनाएँ

shipyard create snapshot --env {environment_uuid}

किसी environment में volume snapshot लोड करें

shipyard load snapshot --env {environment_uuid} --sequence-number {n}

किसी environment के volume में फ़ाइल अपलोड करें

shipyard upload volume --env {environment_uuid} --volume {volume} --file {filepath.bz2}

REST API को सीधे कॉल करें

shipyard api /api/v1/environment
shipyard api -X PUT /api/v1/environment/{environment_uuid}/env-vars --input body.json

Paths की शुरुआत /api/v1 या /api/v2 से होनी चाहिए; आपका token और org अपने आप जोड़ दिए जाते हैं। bypass_token और kubeconfig credentials को छिपा दिया जाता है, जब तक कि आप --include-secrets पास न करें।

Telepresence से कनेक्ट करें

shipyard telepresence connect --env {environment_uuid}

वहाँ से, आप नेमस्पेस के सभी पॉड्स से सीधे संवाद कर पाएँगे। सेवाओं से संवाद करने के लिए आपको शायद नेमस्पेस होस्टनेम का उपयोग करना पड़े, जिसे आप Namespace फ़ील्ड के अंतर्गत telepresence status से प्राप्त कर सकते हैं। उदाहरण के लिए, redis से संवाद करने के लिए आप redis.shipyard-app-build-{uuid} का उपयोग करेंगे।

कोड से निष्पादन योग्य फ़ाइल बनाएँ:

आप निम्न कमांड चलाकर एक निष्पादन योग्य फ़ाइल बना सकते हैं:

make

इस नई निष्पादन योग्य फ़ाइल को चलाने के लिए:

./shipyard

ऑटोकम्प्लीशन सक्षम करें

Bash

यह स्क्रिप्ट bash-completion पैकेज पर निर्भर करती है। यदि यह पहले से इंस्टॉल नहीं है, तो आप इसे अपने OS के पैकेज मैनेजर के माध्यम से इंस्टॉल कर सकते हैं। अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:

source <(shipyard completion bash)

हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, निम्नलिखित को एक बार चलाएँ।

Linux पर:

shipyard completion bash > /etc/bash_completion.d/shipyard

macOS पर:

shipyard completion bash > $(brew --prefix)/etc/bash_completion.d/shipyard

Zsh

यदि आपके परिवेश में शेल कम्प्लीशन पहले से सक्षम नहीं है, तो आपको इसे सक्षम करना होगा। आप निम्नलिखित को एक बार चला सकते हैं:

echo "autoload -U compinit; compinit" >> ~/.zshrc

अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:

source <(shipyard completion zsh); compdef _shipyard shipyard

हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, निम्नलिखित को एक बार चलाएँ।

Linux पर:

shipyard completion zsh > "${fpath[1]}/_shipyard"

macOS पर:

shipyard completion zsh > $(brew --prefix)/share/zsh/site-functions/_shipyard

इस सेटअप को प्रभावी होने के लिए आपको एक नया शेल शुरू करना होगा।

Fish

अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:

$ shipyard completion fish | source

हर सत्र के लिए कम्प्लीशन लोड करने हेतु, इसे एक बार चलाएँ:

shipyard completion fish > ~/.config/fish/completions/shipyard.fish

PowerShell

अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:

shipyard completion powershell | Out-String | Invoke-Expression

हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, चलाएँ:

shipyard completion powershell > shipyard.ps1

और इस फ़ाइल को अपनी PowerShell प्रोफ़ाइल से सोर्स करें।

AI सहायक से Shipyard का उपयोग करें (MCP)

shipyard mcp serve एक Model Context Protocol सर्वर चलाता है, ताकि Claude Code, Claude Desktop, Cursor या Codex जैसा कोई सहायक आपके परिवेशों की सूची बना सके, उनका निरीक्षण कर सके, उन्हें फिर से बना सके और कॉन्फ़िगर कर सके, सेवा लॉग पढ़ सके, वॉल्यूम प्रबंधित कर सके, और पुश किए गए बदलाव को उसके परिवेश के विरुद्ध सत्यापित कर सके।

CLI में लॉग इन होने के बाद, इसे Claude Code में जोड़ें:

claude mcp add shipyard -- shipyard mcp serve

फिर इस तरह के प्रश्न पूछें:

  • "कौन-से परिवेश web repo के लिए चल रहे हैं?"
  • "मेरी branch के परिवेश पर api सेवा के लॉग दिखाएँ।"
  • "इस परिवेश का नवीनतम बिल्ड क्यों विफल हुआ?"
  • "इस परिवेश पर FEATURE_FLAGS=beta सेट करें और worker सेवा को रीस्टार्ट करें।"
  • "मैंने अभी पुश किया है। बदलाव को उसके परिवेश के विरुद्ध सत्यापित करें।" (या /mcp__shipyard__verify)

इसे अन्य क्लाइंट में सेट अप करने, कॉन्फ़िगरेशन, टूल की पूरी सूची, verify प्रॉम्प्ट और समस्या निवारण के लिए MCP guide देखें।