[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-astronomer-managing-astro-deployments":3,"mdc-c2w72v-key":55,"related-repo-astronomer-managing-astro-deployments":2308,"related-org-astronomer-managing-astro-deployments":2409},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":50,"sourceUrl":53,"mdContent":54},"managing-astro-deployments","manage Astronomer production deployments","Manage Astronomer production deployments with Astro CLI. Use when the user wants to authenticate, switch workspaces, create\u002Fupdate\u002Fdelete deployments, or deploy code to production.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"astronomer","Astronomer","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fastronomer.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Airflow","airflow",{"name":20,"slug":21,"type":15},"CLI","cli",{"name":23,"slug":24,"type":15},"Deployment","deployment",412,"https:\u002F\u002Fgithub.com\u002Fastronomer\u002Fagents","2026-07-01T08:11:51.141679",null,55,[31,32,33,34,18,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"agentic-workflow","agents","ai","ai-agents","apache-airflow","claude","cursor","dag","data-engineering","data-pipelines","dbt","llm","mcp","orchestrator","skills","workflow-automation","workflow-management","workflow-orchestration","workflows",{"repoUrl":26,"stars":25,"forks":29,"topics":51,"description":52},[31,32,33,34,18,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"AI agent tooling for data engineering workflows.","https:\u002F\u002Fgithub.com\u002Fastronomer\u002Fagents\u002Ftree\u002FHEAD\u002Fskills\u002Fmanaging-astro-deployments","---\nname: managing-astro-deployments\ndescription: Manage Astronomer production deployments with Astro CLI. Use when the user wants to authenticate, switch workspaces, create\u002Fupdate\u002Fdelete deployments, or deploy code to production.\n---\n\n# Astro Deployment Management\n\nThis skill helps you manage production Astronomer deployments using the Astro CLI.\n\n> **For local development**, see the **managing-astro-local-env** skill.\n> **For production troubleshooting**, see the **troubleshooting-astro-deployments** skill.\n\n---\n\n## Authentication\n\nAll deployment operations require authentication:\n\n```bash\n# Login to Astronomer (opens browser for OAuth)\nastro login\n```\n\nAuthentication tokens are stored locally for subsequent commands. Run this before any deployment operations.\n\n---\n\n## Workspace Management\n\nDeployments are organized into workspaces:\n\n```bash\n# List all accessible workspaces\nastro workspace list\n\n# Switch to a specific workspace\nastro workspace switch \u003CWORKSPACE_ID>\n```\n\nWorkspace context is maintained between sessions. Most deployment commands operate within the current workspace context.\n\n---\n\n## List and Inspect Deployments\n\n```bash\n# List deployments in current workspace\nastro deployment list\n\n# List deployments across all workspaces\nastro deployment list --all\n\n# Inspect specific deployment (detailed info)\nastro deployment inspect \u003CDEPLOYMENT_ID>\n\n# Inspect by name (alternative to ID)\nastro deployment inspect --deployment-name data-service-stg\n```\n\n### What `inspect` Shows\n\n- Deployment status (HEALTHY, UNHEALTHY)\n- Runtime version and Airflow version\n- Executor type (CELERY, KUBERNETES, LOCAL)\n- Scheduler configuration (size, count)\n- Worker queue settings (min\u002Fmax workers, concurrency, worker type)\n- Resource quotas (CPU, memory)\n- Environment variables\n- Last deployment timestamp and current tag\n- Webserver and API URLs\n- High availability status\n\n---\n\n## Create Deployments\n\n```bash\n# Create with default settings\nastro deployment create\n\n# Create with specific executor\nastro deployment create --label production --executor celery\nastro deployment create --label staging --executor kubernetes\n\n# Executor options:\n#   - celery: Best for most production workloads\n#   - kubernetes: Best for dynamic scaling, isolated tasks\n#   - local: Best for development only\n```\n\n---\n\n## Update Deployments\n\n```bash\n# Enable DAG-only deploys (faster iteration)\nastro deployment update \u003CDEPLOYMENT_ID> --dag-deploy-enabled\n\n# Update other settings (use --help for full options)\nastro deployment update \u003CDEPLOYMENT_ID> --help\n```\n\n---\n\n## Delete Deployments\n\n```bash\n# Delete a deployment (requires confirmation)\nastro deployment delete \u003CDEPLOYMENT_ID>\n```\n\n**Destructive**: This cannot be undone. All DAGs, task history, and metadata will be lost.\n\n---\n\n## Deploy Code to Production\n\n### Full Deploy\n\nDeploy both DAGs and Docker image (required when dependencies change):\n\n```bash\nastro deploy \u003CDEPLOYMENT_ID>\n```\n\nUse when:\n- Dependencies changed (`requirements.txt`, `packages.txt`, `Dockerfile`)\n- First deployment of new project\n- Significant infrastructure changes\n\n### DAG-Only Deploy (Recommended for Iteration)\n\nDeploy only DAG files, skip Docker image rebuild:\n\n```bash\nastro deploy \u003CDEPLOYMENT_ID> --dags\n```\n\nUse when:\n- Only DAG files changed (Python files in `dags\u002F` directory)\n- Quick iteration during development\n- Much faster than full deploy (seconds vs minutes)\n\n**Requires**: `--dag-deploy-enabled` flag set on deployment (see Update Deployments)\n\n### Image-Only Deploy\n\nDeploy only Docker image, skip DAG sync:\n\n```bash\nastro deploy \u003CDEPLOYMENT_ID> --image-only\n```\n\nUse when:\n- Only dependencies changed\n- Dockerfile or requirements updated\n- No DAG changes\n\n### Force Deploy\n\nBypass safety checks and deploy:\n\n```bash\nastro deploy \u003CDEPLOYMENT_ID> --force\n```\n\n**Caution**: Skips validation that could prevent broken deployments.\n\n---\n\n## Deployment API Tokens\n\nManage API tokens for programmatic access to deployments:\n\n```bash\n# List tokens for a deployment\nastro deployment token list --deployment-id \u003CDEPLOYMENT_ID>\n\n# Create a new token\nastro deployment token create \\\n  --deployment-id \u003CDEPLOYMENT_ID> \\\n  --name \"CI\u002FCD Pipeline\" \\\n  --role DEPLOYMENT_ADMIN\n\n# Create token with expiration\nastro deployment token create \\\n  --deployment-id \u003CDEPLOYMENT_ID> \\\n  --name \"Temporary Access\" \\\n  --role DEPLOYMENT_ADMIN \\\n  --expiry 30  # Days until expiration (0 = never expires)\n```\n\n**Roles**:\n- `DEPLOYMENT_ADMIN`: Full access to deployment\n\n**Note**: Token value is only shown at creation time. Store it securely.\n\n---\n\n## Common Workflows\n\n### First-Time Production Deployment\n\n```bash\n# 1. Login\nastro login\n\n# 2. Switch to production workspace\nastro workspace list\nastro workspace switch \u003CPROD_WORKSPACE_ID>\n\n# 3. Create deployment\nastro deployment create --label production --executor celery\n\n# 4. Note the deployment ID, then deploy\nastro deploy \u003CDEPLOYMENT_ID>\n```\n\n### Iterative DAG Development\n\n```bash\n# 1. Enable fast deploys (one-time setup)\nastro deployment update \u003CDEPLOYMENT_ID> --dag-deploy-enabled\n\n# 2. Make DAG changes locally\n\n# 3. Deploy quickly\nastro deploy \u003CDEPLOYMENT_ID> --dags\n```\n\n### Promoting Code from Staging to Production\n\n```bash\n# 1. Deploy to staging first\nastro workspace switch \u003CSTAGING_WORKSPACE_ID>\nastro deploy \u003CSTAGING_DEPLOYMENT_ID>\n\n# 2. Test in staging\n\n# 3. Deploy same code to production\nastro workspace switch \u003CPROD_WORKSPACE_ID>\nastro deploy \u003CPROD_DEPLOYMENT_ID>\n```\n\n---\n\n## Configuration Management\n\n```bash\n# View CLI configuration\nastro config get\n\n# Set configuration value\nastro config set \u003CKEY> \u003CVALUE>\n\n# Check CLI version\nastro version\n\n# Upgrade CLI to latest version\nastro upgrade\n```\n\n---\n\n## Tips\n\n- Use `--dags` flag for fast iteration (seconds vs minutes)\n- Always test in staging workspace before production\n- Use `deployment inspect` to verify deployment health before deploying\n- Deployment IDs are permanent, names can change\n- Most commands work with deployment ID; `inspect` also accepts `--deployment-name`\n- Set `--dag-deploy-enabled` once per deployment for fast deploys\n- Keep workspace context visible with `astro workspace list` (shows asterisk for current)\n\n---\n\n## Related Skills\n\n- **troubleshooting-astro-deployments**: Investigate deployment issues, view logs, manage environment variables\n- **managing-astro-local-env**: Manage local Airflow development environment\n- **setting-up-astro-project**: Initialize and configure Astro projects\n",{"data":56,"body":57},{"name":4,"description":6},{"type":58,"children":59},"root",[60,69,75,110,114,121,126,166,171,174,180,185,275,280,283,289,450,465,520,523,529,683,686,692,796,799,805,852,862,865,871,877,882,917,922,963,969,974,1013,1017,1043,1061,1067,1072,1111,1115,1133,1139,1144,1183,1193,1196,1202,1207,1498,1508,1522,1532,1535,1541,1547,1723,1729,1840,1846,2010,2013,2019,2172,2175,2181,2262,2265,2271,2302],{"type":61,"tag":62,"props":63,"children":65},"element","h1",{"id":64},"astro-deployment-management",[66],{"type":67,"value":68},"text","Astro Deployment Management",{"type":61,"tag":70,"props":71,"children":72},"p",{},[73],{"type":67,"value":74},"This skill helps you manage production Astronomer deployments using the Astro CLI.",{"type":61,"tag":76,"props":77,"children":78},"blockquote",{},[79],{"type":61,"tag":70,"props":80,"children":81},{},[82,88,90,95,97,102,103,108],{"type":61,"tag":83,"props":84,"children":85},"strong",{},[86],{"type":67,"value":87},"For local development",{"type":67,"value":89},", see the ",{"type":61,"tag":83,"props":91,"children":92},{},[93],{"type":67,"value":94},"managing-astro-local-env",{"type":67,"value":96}," skill.\n",{"type":61,"tag":83,"props":98,"children":99},{},[100],{"type":67,"value":101},"For production troubleshooting",{"type":67,"value":89},{"type":61,"tag":83,"props":104,"children":105},{},[106],{"type":67,"value":107},"troubleshooting-astro-deployments",{"type":67,"value":109}," skill.",{"type":61,"tag":111,"props":112,"children":113},"hr",{},[],{"type":61,"tag":115,"props":116,"children":118},"h2",{"id":117},"authentication",[119],{"type":67,"value":120},"Authentication",{"type":61,"tag":70,"props":122,"children":123},{},[124],{"type":67,"value":125},"All deployment operations require authentication:",{"type":61,"tag":127,"props":128,"children":133},"pre",{"className":129,"code":130,"language":131,"meta":132,"style":132},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Login to Astronomer (opens browser for OAuth)\nastro login\n","bash","",[134],{"type":61,"tag":135,"props":136,"children":137},"code",{"__ignoreMap":132},[138,150],{"type":61,"tag":139,"props":140,"children":143},"span",{"class":141,"line":142},"line",1,[144],{"type":61,"tag":139,"props":145,"children":147},{"style":146},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[148],{"type":67,"value":149},"# Login to Astronomer (opens browser for OAuth)\n",{"type":61,"tag":139,"props":151,"children":153},{"class":141,"line":152},2,[154,160],{"type":61,"tag":139,"props":155,"children":157},{"style":156},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[158],{"type":67,"value":159},"astro",{"type":61,"tag":139,"props":161,"children":163},{"style":162},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[164],{"type":67,"value":165}," login\n",{"type":61,"tag":70,"props":167,"children":168},{},[169],{"type":67,"value":170},"Authentication tokens are stored locally for subsequent commands. Run this before any deployment operations.",{"type":61,"tag":111,"props":172,"children":173},{},[],{"type":61,"tag":115,"props":175,"children":177},{"id":176},"workspace-management",[178],{"type":67,"value":179},"Workspace Management",{"type":61,"tag":70,"props":181,"children":182},{},[183],{"type":67,"value":184},"Deployments are organized into workspaces:",{"type":61,"tag":127,"props":186,"children":188},{"className":129,"code":187,"language":131,"meta":132,"style":132},"# List all accessible workspaces\nastro workspace list\n\n# Switch to a specific workspace\nastro workspace switch \u003CWORKSPACE_ID>\n",[189],{"type":61,"tag":135,"props":190,"children":191},{"__ignoreMap":132},[192,200,217,227,236],{"type":61,"tag":139,"props":193,"children":194},{"class":141,"line":142},[195],{"type":61,"tag":139,"props":196,"children":197},{"style":146},[198],{"type":67,"value":199},"# List all accessible workspaces\n",{"type":61,"tag":139,"props":201,"children":202},{"class":141,"line":152},[203,207,212],{"type":61,"tag":139,"props":204,"children":205},{"style":156},[206],{"type":67,"value":159},{"type":61,"tag":139,"props":208,"children":209},{"style":162},[210],{"type":67,"value":211}," workspace",{"type":61,"tag":139,"props":213,"children":214},{"style":162},[215],{"type":67,"value":216}," list\n",{"type":61,"tag":139,"props":218,"children":220},{"class":141,"line":219},3,[221],{"type":61,"tag":139,"props":222,"children":224},{"emptyLinePlaceholder":223},true,[225],{"type":67,"value":226},"\n",{"type":61,"tag":139,"props":228,"children":230},{"class":141,"line":229},4,[231],{"type":61,"tag":139,"props":232,"children":233},{"style":146},[234],{"type":67,"value":235},"# Switch to a specific workspace\n",{"type":61,"tag":139,"props":237,"children":239},{"class":141,"line":238},5,[240,244,248,253,259,264,270],{"type":61,"tag":139,"props":241,"children":242},{"style":156},[243],{"type":67,"value":159},{"type":61,"tag":139,"props":245,"children":246},{"style":162},[247],{"type":67,"value":211},{"type":61,"tag":139,"props":249,"children":250},{"style":162},[251],{"type":67,"value":252}," switch",{"type":61,"tag":139,"props":254,"children":256},{"style":255},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[257],{"type":67,"value":258}," \u003C",{"type":61,"tag":139,"props":260,"children":261},{"style":162},[262],{"type":67,"value":263},"WORKSPACE_I",{"type":61,"tag":139,"props":265,"children":267},{"style":266},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[268],{"type":67,"value":269},"D",{"type":61,"tag":139,"props":271,"children":272},{"style":255},[273],{"type":67,"value":274},">\n",{"type":61,"tag":70,"props":276,"children":277},{},[278],{"type":67,"value":279},"Workspace context is maintained between sessions. Most deployment commands operate within the current workspace context.",{"type":61,"tag":111,"props":281,"children":282},{},[],{"type":61,"tag":115,"props":284,"children":286},{"id":285},"list-and-inspect-deployments",[287],{"type":67,"value":288},"List and Inspect Deployments",{"type":61,"tag":127,"props":290,"children":292},{"className":129,"code":291,"language":131,"meta":132,"style":132},"# List deployments in current workspace\nastro deployment list\n\n# List deployments across all workspaces\nastro deployment list --all\n\n# Inspect specific deployment (detailed info)\nastro deployment inspect \u003CDEPLOYMENT_ID>\n\n# Inspect by name (alternative to ID)\nastro deployment inspect --deployment-name data-service-stg\n",[293],{"type":61,"tag":135,"props":294,"children":295},{"__ignoreMap":132},[296,304,320,327,335,356,364,373,407,415,424],{"type":61,"tag":139,"props":297,"children":298},{"class":141,"line":142},[299],{"type":61,"tag":139,"props":300,"children":301},{"style":146},[302],{"type":67,"value":303},"# List deployments in current workspace\n",{"type":61,"tag":139,"props":305,"children":306},{"class":141,"line":152},[307,311,316],{"type":61,"tag":139,"props":308,"children":309},{"style":156},[310],{"type":67,"value":159},{"type":61,"tag":139,"props":312,"children":313},{"style":162},[314],{"type":67,"value":315}," deployment",{"type":61,"tag":139,"props":317,"children":318},{"style":162},[319],{"type":67,"value":216},{"type":61,"tag":139,"props":321,"children":322},{"class":141,"line":219},[323],{"type":61,"tag":139,"props":324,"children":325},{"emptyLinePlaceholder":223},[326],{"type":67,"value":226},{"type":61,"tag":139,"props":328,"children":329},{"class":141,"line":229},[330],{"type":61,"tag":139,"props":331,"children":332},{"style":146},[333],{"type":67,"value":334},"# List deployments across all workspaces\n",{"type":61,"tag":139,"props":336,"children":337},{"class":141,"line":238},[338,342,346,351],{"type":61,"tag":139,"props":339,"children":340},{"style":156},[341],{"type":67,"value":159},{"type":61,"tag":139,"props":343,"children":344},{"style":162},[345],{"type":67,"value":315},{"type":61,"tag":139,"props":347,"children":348},{"style":162},[349],{"type":67,"value":350}," list",{"type":61,"tag":139,"props":352,"children":353},{"style":162},[354],{"type":67,"value":355}," --all\n",{"type":61,"tag":139,"props":357,"children":359},{"class":141,"line":358},6,[360],{"type":61,"tag":139,"props":361,"children":362},{"emptyLinePlaceholder":223},[363],{"type":67,"value":226},{"type":61,"tag":139,"props":365,"children":367},{"class":141,"line":366},7,[368],{"type":61,"tag":139,"props":369,"children":370},{"style":146},[371],{"type":67,"value":372},"# Inspect specific deployment (detailed info)\n",{"type":61,"tag":139,"props":374,"children":376},{"class":141,"line":375},8,[377,381,385,390,394,399,403],{"type":61,"tag":139,"props":378,"children":379},{"style":156},[380],{"type":67,"value":159},{"type":61,"tag":139,"props":382,"children":383},{"style":162},[384],{"type":67,"value":315},{"type":61,"tag":139,"props":386,"children":387},{"style":162},[388],{"type":67,"value":389}," inspect",{"type":61,"tag":139,"props":391,"children":392},{"style":255},[393],{"type":67,"value":258},{"type":61,"tag":139,"props":395,"children":396},{"style":162},[397],{"type":67,"value":398},"DEPLOYMENT_I",{"type":61,"tag":139,"props":400,"children":401},{"style":266},[402],{"type":67,"value":269},{"type":61,"tag":139,"props":404,"children":405},{"style":255},[406],{"type":67,"value":274},{"type":61,"tag":139,"props":408,"children":410},{"class":141,"line":409},9,[411],{"type":61,"tag":139,"props":412,"children":413},{"emptyLinePlaceholder":223},[414],{"type":67,"value":226},{"type":61,"tag":139,"props":416,"children":418},{"class":141,"line":417},10,[419],{"type":61,"tag":139,"props":420,"children":421},{"style":146},[422],{"type":67,"value":423},"# Inspect by name (alternative to ID)\n",{"type":61,"tag":139,"props":425,"children":427},{"class":141,"line":426},11,[428,432,436,440,445],{"type":61,"tag":139,"props":429,"children":430},{"style":156},[431],{"type":67,"value":159},{"type":61,"tag":139,"props":433,"children":434},{"style":162},[435],{"type":67,"value":315},{"type":61,"tag":139,"props":437,"children":438},{"style":162},[439],{"type":67,"value":389},{"type":61,"tag":139,"props":441,"children":442},{"style":162},[443],{"type":67,"value":444}," --deployment-name",{"type":61,"tag":139,"props":446,"children":447},{"style":162},[448],{"type":67,"value":449}," data-service-stg\n",{"type":61,"tag":451,"props":452,"children":454},"h3",{"id":453},"what-inspect-shows",[455,457,463],{"type":67,"value":456},"What ",{"type":61,"tag":135,"props":458,"children":460},{"className":459},[],[461],{"type":67,"value":462},"inspect",{"type":67,"value":464}," Shows",{"type":61,"tag":466,"props":467,"children":468},"ul",{},[469,475,480,485,490,495,500,505,510,515],{"type":61,"tag":470,"props":471,"children":472},"li",{},[473],{"type":67,"value":474},"Deployment status (HEALTHY, UNHEALTHY)",{"type":61,"tag":470,"props":476,"children":477},{},[478],{"type":67,"value":479},"Runtime version and Airflow version",{"type":61,"tag":470,"props":481,"children":482},{},[483],{"type":67,"value":484},"Executor type (CELERY, KUBERNETES, LOCAL)",{"type":61,"tag":470,"props":486,"children":487},{},[488],{"type":67,"value":489},"Scheduler configuration (size, count)",{"type":61,"tag":470,"props":491,"children":492},{},[493],{"type":67,"value":494},"Worker queue settings (min\u002Fmax workers, concurrency, worker type)",{"type":61,"tag":470,"props":496,"children":497},{},[498],{"type":67,"value":499},"Resource quotas (CPU, memory)",{"type":61,"tag":470,"props":501,"children":502},{},[503],{"type":67,"value":504},"Environment variables",{"type":61,"tag":470,"props":506,"children":507},{},[508],{"type":67,"value":509},"Last deployment timestamp and current tag",{"type":61,"tag":470,"props":511,"children":512},{},[513],{"type":67,"value":514},"Webserver and API URLs",{"type":61,"tag":470,"props":516,"children":517},{},[518],{"type":67,"value":519},"High availability status",{"type":61,"tag":111,"props":521,"children":522},{},[],{"type":61,"tag":115,"props":524,"children":526},{"id":525},"create-deployments",[527],{"type":67,"value":528},"Create Deployments",{"type":61,"tag":127,"props":530,"children":532},{"className":129,"code":531,"language":131,"meta":132,"style":132},"# Create with default settings\nastro deployment create\n\n# Create with specific executor\nastro deployment create --label production --executor celery\nastro deployment create --label staging --executor kubernetes\n\n# Executor options:\n#   - celery: Best for most production workloads\n#   - kubernetes: Best for dynamic scaling, isolated tasks\n#   - local: Best for development only\n",[533],{"type":61,"tag":135,"props":534,"children":535},{"__ignoreMap":132},[536,544,560,567,575,611,644,651,659,667,675],{"type":61,"tag":139,"props":537,"children":538},{"class":141,"line":142},[539],{"type":61,"tag":139,"props":540,"children":541},{"style":146},[542],{"type":67,"value":543},"# Create with default settings\n",{"type":61,"tag":139,"props":545,"children":546},{"class":141,"line":152},[547,551,555],{"type":61,"tag":139,"props":548,"children":549},{"style":156},[550],{"type":67,"value":159},{"type":61,"tag":139,"props":552,"children":553},{"style":162},[554],{"type":67,"value":315},{"type":61,"tag":139,"props":556,"children":557},{"style":162},[558],{"type":67,"value":559}," create\n",{"type":61,"tag":139,"props":561,"children":562},{"class":141,"line":219},[563],{"type":61,"tag":139,"props":564,"children":565},{"emptyLinePlaceholder":223},[566],{"type":67,"value":226},{"type":61,"tag":139,"props":568,"children":569},{"class":141,"line":229},[570],{"type":61,"tag":139,"props":571,"children":572},{"style":146},[573],{"type":67,"value":574},"# Create with specific executor\n",{"type":61,"tag":139,"props":576,"children":577},{"class":141,"line":238},[578,582,586,591,596,601,606],{"type":61,"tag":139,"props":579,"children":580},{"style":156},[581],{"type":67,"value":159},{"type":61,"tag":139,"props":583,"children":584},{"style":162},[585],{"type":67,"value":315},{"type":61,"tag":139,"props":587,"children":588},{"style":162},[589],{"type":67,"value":590}," create",{"type":61,"tag":139,"props":592,"children":593},{"style":162},[594],{"type":67,"value":595}," --label",{"type":61,"tag":139,"props":597,"children":598},{"style":162},[599],{"type":67,"value":600}," production",{"type":61,"tag":139,"props":602,"children":603},{"style":162},[604],{"type":67,"value":605}," --executor",{"type":61,"tag":139,"props":607,"children":608},{"style":162},[609],{"type":67,"value":610}," celery\n",{"type":61,"tag":139,"props":612,"children":613},{"class":141,"line":358},[614,618,622,626,630,635,639],{"type":61,"tag":139,"props":615,"children":616},{"style":156},[617],{"type":67,"value":159},{"type":61,"tag":139,"props":619,"children":620},{"style":162},[621],{"type":67,"value":315},{"type":61,"tag":139,"props":623,"children":624},{"style":162},[625],{"type":67,"value":590},{"type":61,"tag":139,"props":627,"children":628},{"style":162},[629],{"type":67,"value":595},{"type":61,"tag":139,"props":631,"children":632},{"style":162},[633],{"type":67,"value":634}," staging",{"type":61,"tag":139,"props":636,"children":637},{"style":162},[638],{"type":67,"value":605},{"type":61,"tag":139,"props":640,"children":641},{"style":162},[642],{"type":67,"value":643}," kubernetes\n",{"type":61,"tag":139,"props":645,"children":646},{"class":141,"line":366},[647],{"type":61,"tag":139,"props":648,"children":649},{"emptyLinePlaceholder":223},[650],{"type":67,"value":226},{"type":61,"tag":139,"props":652,"children":653},{"class":141,"line":375},[654],{"type":61,"tag":139,"props":655,"children":656},{"style":146},[657],{"type":67,"value":658},"# Executor options:\n",{"type":61,"tag":139,"props":660,"children":661},{"class":141,"line":409},[662],{"type":61,"tag":139,"props":663,"children":664},{"style":146},[665],{"type":67,"value":666},"#   - celery: Best for most production workloads\n",{"type":61,"tag":139,"props":668,"children":669},{"class":141,"line":417},[670],{"type":61,"tag":139,"props":671,"children":672},{"style":146},[673],{"type":67,"value":674},"#   - kubernetes: Best for dynamic scaling, isolated tasks\n",{"type":61,"tag":139,"props":676,"children":677},{"class":141,"line":426},[678],{"type":61,"tag":139,"props":679,"children":680},{"style":146},[681],{"type":67,"value":682},"#   - local: Best for development only\n",{"type":61,"tag":111,"props":684,"children":685},{},[],{"type":61,"tag":115,"props":687,"children":689},{"id":688},"update-deployments",[690],{"type":67,"value":691},"Update Deployments",{"type":61,"tag":127,"props":693,"children":695},{"className":129,"code":694,"language":131,"meta":132,"style":132},"# Enable DAG-only deploys (faster iteration)\nastro deployment update \u003CDEPLOYMENT_ID> --dag-deploy-enabled\n\n# Update other settings (use --help for full options)\nastro deployment update \u003CDEPLOYMENT_ID> --help\n",[696],{"type":61,"tag":135,"props":697,"children":698},{"__ignoreMap":132},[699,707,745,752,760],{"type":61,"tag":139,"props":700,"children":701},{"class":141,"line":142},[702],{"type":61,"tag":139,"props":703,"children":704},{"style":146},[705],{"type":67,"value":706},"# Enable DAG-only deploys (faster iteration)\n",{"type":61,"tag":139,"props":708,"children":709},{"class":141,"line":152},[710,714,718,723,727,731,735,740],{"type":61,"tag":139,"props":711,"children":712},{"style":156},[713],{"type":67,"value":159},{"type":61,"tag":139,"props":715,"children":716},{"style":162},[717],{"type":67,"value":315},{"type":61,"tag":139,"props":719,"children":720},{"style":162},[721],{"type":67,"value":722}," update",{"type":61,"tag":139,"props":724,"children":725},{"style":255},[726],{"type":67,"value":258},{"type":61,"tag":139,"props":728,"children":729},{"style":162},[730],{"type":67,"value":398},{"type":61,"tag":139,"props":732,"children":733},{"style":266},[734],{"type":67,"value":269},{"type":61,"tag":139,"props":736,"children":737},{"style":255},[738],{"type":67,"value":739},">",{"type":61,"tag":139,"props":741,"children":742},{"style":162},[743],{"type":67,"value":744}," --dag-deploy-enabled\n",{"type":61,"tag":139,"props":746,"children":747},{"class":141,"line":219},[748],{"type":61,"tag":139,"props":749,"children":750},{"emptyLinePlaceholder":223},[751],{"type":67,"value":226},{"type":61,"tag":139,"props":753,"children":754},{"class":141,"line":229},[755],{"type":61,"tag":139,"props":756,"children":757},{"style":146},[758],{"type":67,"value":759},"# Update other settings (use --help for full options)\n",{"type":61,"tag":139,"props":761,"children":762},{"class":141,"line":238},[763,767,771,775,779,783,787,791],{"type":61,"tag":139,"props":764,"children":765},{"style":156},[766],{"type":67,"value":159},{"type":61,"tag":139,"props":768,"children":769},{"style":162},[770],{"type":67,"value":315},{"type":61,"tag":139,"props":772,"children":773},{"style":162},[774],{"type":67,"value":722},{"type":61,"tag":139,"props":776,"children":777},{"style":255},[778],{"type":67,"value":258},{"type":61,"tag":139,"props":780,"children":781},{"style":162},[782],{"type":67,"value":398},{"type":61,"tag":139,"props":784,"children":785},{"style":266},[786],{"type":67,"value":269},{"type":61,"tag":139,"props":788,"children":789},{"style":255},[790],{"type":67,"value":739},{"type":61,"tag":139,"props":792,"children":793},{"style":162},[794],{"type":67,"value":795}," --help\n",{"type":61,"tag":111,"props":797,"children":798},{},[],{"type":61,"tag":115,"props":800,"children":802},{"id":801},"delete-deployments",[803],{"type":67,"value":804},"Delete Deployments",{"type":61,"tag":127,"props":806,"children":808},{"className":129,"code":807,"language":131,"meta":132,"style":132},"# Delete a deployment (requires confirmation)\nastro deployment delete \u003CDEPLOYMENT_ID>\n",[809],{"type":61,"tag":135,"props":810,"children":811},{"__ignoreMap":132},[812,820],{"type":61,"tag":139,"props":813,"children":814},{"class":141,"line":142},[815],{"type":61,"tag":139,"props":816,"children":817},{"style":146},[818],{"type":67,"value":819},"# Delete a deployment (requires confirmation)\n",{"type":61,"tag":139,"props":821,"children":822},{"class":141,"line":152},[823,827,831,836,840,844,848],{"type":61,"tag":139,"props":824,"children":825},{"style":156},[826],{"type":67,"value":159},{"type":61,"tag":139,"props":828,"children":829},{"style":162},[830],{"type":67,"value":315},{"type":61,"tag":139,"props":832,"children":833},{"style":162},[834],{"type":67,"value":835}," delete",{"type":61,"tag":139,"props":837,"children":838},{"style":255},[839],{"type":67,"value":258},{"type":61,"tag":139,"props":841,"children":842},{"style":162},[843],{"type":67,"value":398},{"type":61,"tag":139,"props":845,"children":846},{"style":266},[847],{"type":67,"value":269},{"type":61,"tag":139,"props":849,"children":850},{"style":255},[851],{"type":67,"value":274},{"type":61,"tag":70,"props":853,"children":854},{},[855,860],{"type":61,"tag":83,"props":856,"children":857},{},[858],{"type":67,"value":859},"Destructive",{"type":67,"value":861},": This cannot be undone. All DAGs, task history, and metadata will be lost.",{"type":61,"tag":111,"props":863,"children":864},{},[],{"type":61,"tag":115,"props":866,"children":868},{"id":867},"deploy-code-to-production",[869],{"type":67,"value":870},"Deploy Code to Production",{"type":61,"tag":451,"props":872,"children":874},{"id":873},"full-deploy",[875],{"type":67,"value":876},"Full Deploy",{"type":61,"tag":70,"props":878,"children":879},{},[880],{"type":67,"value":881},"Deploy both DAGs and Docker image (required when dependencies change):",{"type":61,"tag":127,"props":883,"children":885},{"className":129,"code":884,"language":131,"meta":132,"style":132},"astro deploy \u003CDEPLOYMENT_ID>\n",[886],{"type":61,"tag":135,"props":887,"children":888},{"__ignoreMap":132},[889],{"type":61,"tag":139,"props":890,"children":891},{"class":141,"line":142},[892,896,901,905,909,913],{"type":61,"tag":139,"props":893,"children":894},{"style":156},[895],{"type":67,"value":159},{"type":61,"tag":139,"props":897,"children":898},{"style":162},[899],{"type":67,"value":900}," deploy",{"type":61,"tag":139,"props":902,"children":903},{"style":255},[904],{"type":67,"value":258},{"type":61,"tag":139,"props":906,"children":907},{"style":162},[908],{"type":67,"value":398},{"type":61,"tag":139,"props":910,"children":911},{"style":266},[912],{"type":67,"value":269},{"type":61,"tag":139,"props":914,"children":915},{"style":255},[916],{"type":67,"value":274},{"type":61,"tag":70,"props":918,"children":919},{},[920],{"type":67,"value":921},"Use when:",{"type":61,"tag":466,"props":923,"children":924},{},[925,953,958],{"type":61,"tag":470,"props":926,"children":927},{},[928,930,936,938,944,945,951],{"type":67,"value":929},"Dependencies changed (",{"type":61,"tag":135,"props":931,"children":933},{"className":932},[],[934],{"type":67,"value":935},"requirements.txt",{"type":67,"value":937},", ",{"type":61,"tag":135,"props":939,"children":941},{"className":940},[],[942],{"type":67,"value":943},"packages.txt",{"type":67,"value":937},{"type":61,"tag":135,"props":946,"children":948},{"className":947},[],[949],{"type":67,"value":950},"Dockerfile",{"type":67,"value":952},")",{"type":61,"tag":470,"props":954,"children":955},{},[956],{"type":67,"value":957},"First deployment of new project",{"type":61,"tag":470,"props":959,"children":960},{},[961],{"type":67,"value":962},"Significant infrastructure changes",{"type":61,"tag":451,"props":964,"children":966},{"id":965},"dag-only-deploy-recommended-for-iteration",[967],{"type":67,"value":968},"DAG-Only Deploy (Recommended for Iteration)",{"type":61,"tag":70,"props":970,"children":971},{},[972],{"type":67,"value":973},"Deploy only DAG files, skip Docker image rebuild:",{"type":61,"tag":127,"props":975,"children":977},{"className":129,"code":976,"language":131,"meta":132,"style":132},"astro deploy \u003CDEPLOYMENT_ID> --dags\n",[978],{"type":61,"tag":135,"props":979,"children":980},{"__ignoreMap":132},[981],{"type":61,"tag":139,"props":982,"children":983},{"class":141,"line":142},[984,988,992,996,1000,1004,1008],{"type":61,"tag":139,"props":985,"children":986},{"style":156},[987],{"type":67,"value":159},{"type":61,"tag":139,"props":989,"children":990},{"style":162},[991],{"type":67,"value":900},{"type":61,"tag":139,"props":993,"children":994},{"style":255},[995],{"type":67,"value":258},{"type":61,"tag":139,"props":997,"children":998},{"style":162},[999],{"type":67,"value":398},{"type":61,"tag":139,"props":1001,"children":1002},{"style":266},[1003],{"type":67,"value":269},{"type":61,"tag":139,"props":1005,"children":1006},{"style":255},[1007],{"type":67,"value":739},{"type":61,"tag":139,"props":1009,"children":1010},{"style":162},[1011],{"type":67,"value":1012}," --dags\n",{"type":61,"tag":70,"props":1014,"children":1015},{},[1016],{"type":67,"value":921},{"type":61,"tag":466,"props":1018,"children":1019},{},[1020,1033,1038],{"type":61,"tag":470,"props":1021,"children":1022},{},[1023,1025,1031],{"type":67,"value":1024},"Only DAG files changed (Python files in ",{"type":61,"tag":135,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":67,"value":1030},"dags\u002F",{"type":67,"value":1032}," directory)",{"type":61,"tag":470,"props":1034,"children":1035},{},[1036],{"type":67,"value":1037},"Quick iteration during development",{"type":61,"tag":470,"props":1039,"children":1040},{},[1041],{"type":67,"value":1042},"Much faster than full deploy (seconds vs minutes)",{"type":61,"tag":70,"props":1044,"children":1045},{},[1046,1051,1053,1059],{"type":61,"tag":83,"props":1047,"children":1048},{},[1049],{"type":67,"value":1050},"Requires",{"type":67,"value":1052},": ",{"type":61,"tag":135,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":67,"value":1058},"--dag-deploy-enabled",{"type":67,"value":1060}," flag set on deployment (see Update Deployments)",{"type":61,"tag":451,"props":1062,"children":1064},{"id":1063},"image-only-deploy",[1065],{"type":67,"value":1066},"Image-Only Deploy",{"type":61,"tag":70,"props":1068,"children":1069},{},[1070],{"type":67,"value":1071},"Deploy only Docker image, skip DAG sync:",{"type":61,"tag":127,"props":1073,"children":1075},{"className":129,"code":1074,"language":131,"meta":132,"style":132},"astro deploy \u003CDEPLOYMENT_ID> --image-only\n",[1076],{"type":61,"tag":135,"props":1077,"children":1078},{"__ignoreMap":132},[1079],{"type":61,"tag":139,"props":1080,"children":1081},{"class":141,"line":142},[1082,1086,1090,1094,1098,1102,1106],{"type":61,"tag":139,"props":1083,"children":1084},{"style":156},[1085],{"type":67,"value":159},{"type":61,"tag":139,"props":1087,"children":1088},{"style":162},[1089],{"type":67,"value":900},{"type":61,"tag":139,"props":1091,"children":1092},{"style":255},[1093],{"type":67,"value":258},{"type":61,"tag":139,"props":1095,"children":1096},{"style":162},[1097],{"type":67,"value":398},{"type":61,"tag":139,"props":1099,"children":1100},{"style":266},[1101],{"type":67,"value":269},{"type":61,"tag":139,"props":1103,"children":1104},{"style":255},[1105],{"type":67,"value":739},{"type":61,"tag":139,"props":1107,"children":1108},{"style":162},[1109],{"type":67,"value":1110}," --image-only\n",{"type":61,"tag":70,"props":1112,"children":1113},{},[1114],{"type":67,"value":921},{"type":61,"tag":466,"props":1116,"children":1117},{},[1118,1123,1128],{"type":61,"tag":470,"props":1119,"children":1120},{},[1121],{"type":67,"value":1122},"Only dependencies changed",{"type":61,"tag":470,"props":1124,"children":1125},{},[1126],{"type":67,"value":1127},"Dockerfile or requirements updated",{"type":61,"tag":470,"props":1129,"children":1130},{},[1131],{"type":67,"value":1132},"No DAG changes",{"type":61,"tag":451,"props":1134,"children":1136},{"id":1135},"force-deploy",[1137],{"type":67,"value":1138},"Force Deploy",{"type":61,"tag":70,"props":1140,"children":1141},{},[1142],{"type":67,"value":1143},"Bypass safety checks and deploy:",{"type":61,"tag":127,"props":1145,"children":1147},{"className":129,"code":1146,"language":131,"meta":132,"style":132},"astro deploy \u003CDEPLOYMENT_ID> --force\n",[1148],{"type":61,"tag":135,"props":1149,"children":1150},{"__ignoreMap":132},[1151],{"type":61,"tag":139,"props":1152,"children":1153},{"class":141,"line":142},[1154,1158,1162,1166,1170,1174,1178],{"type":61,"tag":139,"props":1155,"children":1156},{"style":156},[1157],{"type":67,"value":159},{"type":61,"tag":139,"props":1159,"children":1160},{"style":162},[1161],{"type":67,"value":900},{"type":61,"tag":139,"props":1163,"children":1164},{"style":255},[1165],{"type":67,"value":258},{"type":61,"tag":139,"props":1167,"children":1168},{"style":162},[1169],{"type":67,"value":398},{"type":61,"tag":139,"props":1171,"children":1172},{"style":266},[1173],{"type":67,"value":269},{"type":61,"tag":139,"props":1175,"children":1176},{"style":255},[1177],{"type":67,"value":739},{"type":61,"tag":139,"props":1179,"children":1180},{"style":162},[1181],{"type":67,"value":1182}," --force\n",{"type":61,"tag":70,"props":1184,"children":1185},{},[1186,1191],{"type":61,"tag":83,"props":1187,"children":1188},{},[1189],{"type":67,"value":1190},"Caution",{"type":67,"value":1192},": Skips validation that could prevent broken deployments.",{"type":61,"tag":111,"props":1194,"children":1195},{},[],{"type":61,"tag":115,"props":1197,"children":1199},{"id":1198},"deployment-api-tokens",[1200],{"type":67,"value":1201},"Deployment API Tokens",{"type":61,"tag":70,"props":1203,"children":1204},{},[1205],{"type":67,"value":1206},"Manage API tokens for programmatic access to deployments:",{"type":61,"tag":127,"props":1208,"children":1210},{"className":129,"code":1209,"language":131,"meta":132,"style":132},"# List tokens for a deployment\nastro deployment token list --deployment-id \u003CDEPLOYMENT_ID>\n\n# Create a new token\nastro deployment token create \\\n  --deployment-id \u003CDEPLOYMENT_ID> \\\n  --name \"CI\u002FCD Pipeline\" \\\n  --role DEPLOYMENT_ADMIN\n\n# Create token with expiration\nastro deployment token create \\\n  --deployment-id \u003CDEPLOYMENT_ID> \\\n  --name \"Temporary Access\" \\\n  --role DEPLOYMENT_ADMIN \\\n  --expiry 30  # Days until expiration (0 = never expires)\n",[1211],{"type":61,"tag":135,"props":1212,"children":1213},{"__ignoreMap":132},[1214,1222,1263,1270,1278,1302,1330,1357,1370,1377,1385,1408,1436,1461,1478],{"type":61,"tag":139,"props":1215,"children":1216},{"class":141,"line":142},[1217],{"type":61,"tag":139,"props":1218,"children":1219},{"style":146},[1220],{"type":67,"value":1221},"# List tokens for a deployment\n",{"type":61,"tag":139,"props":1223,"children":1224},{"class":141,"line":152},[1225,1229,1233,1238,1242,1247,1251,1255,1259],{"type":61,"tag":139,"props":1226,"children":1227},{"style":156},[1228],{"type":67,"value":159},{"type":61,"tag":139,"props":1230,"children":1231},{"style":162},[1232],{"type":67,"value":315},{"type":61,"tag":139,"props":1234,"children":1235},{"style":162},[1236],{"type":67,"value":1237}," token",{"type":61,"tag":139,"props":1239,"children":1240},{"style":162},[1241],{"type":67,"value":350},{"type":61,"tag":139,"props":1243,"children":1244},{"style":162},[1245],{"type":67,"value":1246}," --deployment-id",{"type":61,"tag":139,"props":1248,"children":1249},{"style":255},[1250],{"type":67,"value":258},{"type":61,"tag":139,"props":1252,"children":1253},{"style":162},[1254],{"type":67,"value":398},{"type":61,"tag":139,"props":1256,"children":1257},{"style":266},[1258],{"type":67,"value":269},{"type":61,"tag":139,"props":1260,"children":1261},{"style":255},[1262],{"type":67,"value":274},{"type":61,"tag":139,"props":1264,"children":1265},{"class":141,"line":219},[1266],{"type":61,"tag":139,"props":1267,"children":1268},{"emptyLinePlaceholder":223},[1269],{"type":67,"value":226},{"type":61,"tag":139,"props":1271,"children":1272},{"class":141,"line":229},[1273],{"type":61,"tag":139,"props":1274,"children":1275},{"style":146},[1276],{"type":67,"value":1277},"# Create a new token\n",{"type":61,"tag":139,"props":1279,"children":1280},{"class":141,"line":238},[1281,1285,1289,1293,1297],{"type":61,"tag":139,"props":1282,"children":1283},{"style":156},[1284],{"type":67,"value":159},{"type":61,"tag":139,"props":1286,"children":1287},{"style":162},[1288],{"type":67,"value":315},{"type":61,"tag":139,"props":1290,"children":1291},{"style":162},[1292],{"type":67,"value":1237},{"type":61,"tag":139,"props":1294,"children":1295},{"style":162},[1296],{"type":67,"value":590},{"type":61,"tag":139,"props":1298,"children":1299},{"style":266},[1300],{"type":67,"value":1301}," \\\n",{"type":61,"tag":139,"props":1303,"children":1304},{"class":141,"line":358},[1305,1310,1314,1318,1322,1326],{"type":61,"tag":139,"props":1306,"children":1307},{"style":162},[1308],{"type":67,"value":1309},"  --deployment-id",{"type":61,"tag":139,"props":1311,"children":1312},{"style":255},[1313],{"type":67,"value":258},{"type":61,"tag":139,"props":1315,"children":1316},{"style":162},[1317],{"type":67,"value":398},{"type":61,"tag":139,"props":1319,"children":1320},{"style":266},[1321],{"type":67,"value":269},{"type":61,"tag":139,"props":1323,"children":1324},{"style":255},[1325],{"type":67,"value":739},{"type":61,"tag":139,"props":1327,"children":1328},{"style":266},[1329],{"type":67,"value":1301},{"type":61,"tag":139,"props":1331,"children":1332},{"class":141,"line":366},[1333,1338,1343,1348,1353],{"type":61,"tag":139,"props":1334,"children":1335},{"style":162},[1336],{"type":67,"value":1337},"  --name",{"type":61,"tag":139,"props":1339,"children":1340},{"style":255},[1341],{"type":67,"value":1342}," \"",{"type":61,"tag":139,"props":1344,"children":1345},{"style":162},[1346],{"type":67,"value":1347},"CI\u002FCD Pipeline",{"type":61,"tag":139,"props":1349,"children":1350},{"style":255},[1351],{"type":67,"value":1352},"\"",{"type":61,"tag":139,"props":1354,"children":1355},{"style":266},[1356],{"type":67,"value":1301},{"type":61,"tag":139,"props":1358,"children":1359},{"class":141,"line":375},[1360,1365],{"type":61,"tag":139,"props":1361,"children":1362},{"style":162},[1363],{"type":67,"value":1364},"  --role",{"type":61,"tag":139,"props":1366,"children":1367},{"style":162},[1368],{"type":67,"value":1369}," DEPLOYMENT_ADMIN\n",{"type":61,"tag":139,"props":1371,"children":1372},{"class":141,"line":409},[1373],{"type":61,"tag":139,"props":1374,"children":1375},{"emptyLinePlaceholder":223},[1376],{"type":67,"value":226},{"type":61,"tag":139,"props":1378,"children":1379},{"class":141,"line":417},[1380],{"type":61,"tag":139,"props":1381,"children":1382},{"style":146},[1383],{"type":67,"value":1384},"# Create token with expiration\n",{"type":61,"tag":139,"props":1386,"children":1387},{"class":141,"line":426},[1388,1392,1396,1400,1404],{"type":61,"tag":139,"props":1389,"children":1390},{"style":156},[1391],{"type":67,"value":159},{"type":61,"tag":139,"props":1393,"children":1394},{"style":162},[1395],{"type":67,"value":315},{"type":61,"tag":139,"props":1397,"children":1398},{"style":162},[1399],{"type":67,"value":1237},{"type":61,"tag":139,"props":1401,"children":1402},{"style":162},[1403],{"type":67,"value":590},{"type":61,"tag":139,"props":1405,"children":1406},{"style":266},[1407],{"type":67,"value":1301},{"type":61,"tag":139,"props":1409,"children":1411},{"class":141,"line":1410},12,[1412,1416,1420,1424,1428,1432],{"type":61,"tag":139,"props":1413,"children":1414},{"style":162},[1415],{"type":67,"value":1309},{"type":61,"tag":139,"props":1417,"children":1418},{"style":255},[1419],{"type":67,"value":258},{"type":61,"tag":139,"props":1421,"children":1422},{"style":162},[1423],{"type":67,"value":398},{"type":61,"tag":139,"props":1425,"children":1426},{"style":266},[1427],{"type":67,"value":269},{"type":61,"tag":139,"props":1429,"children":1430},{"style":255},[1431],{"type":67,"value":739},{"type":61,"tag":139,"props":1433,"children":1434},{"style":266},[1435],{"type":67,"value":1301},{"type":61,"tag":139,"props":1437,"children":1439},{"class":141,"line":1438},13,[1440,1444,1448,1453,1457],{"type":61,"tag":139,"props":1441,"children":1442},{"style":162},[1443],{"type":67,"value":1337},{"type":61,"tag":139,"props":1445,"children":1446},{"style":255},[1447],{"type":67,"value":1342},{"type":61,"tag":139,"props":1449,"children":1450},{"style":162},[1451],{"type":67,"value":1452},"Temporary Access",{"type":61,"tag":139,"props":1454,"children":1455},{"style":255},[1456],{"type":67,"value":1352},{"type":61,"tag":139,"props":1458,"children":1459},{"style":266},[1460],{"type":67,"value":1301},{"type":61,"tag":139,"props":1462,"children":1464},{"class":141,"line":1463},14,[1465,1469,1474],{"type":61,"tag":139,"props":1466,"children":1467},{"style":162},[1468],{"type":67,"value":1364},{"type":61,"tag":139,"props":1470,"children":1471},{"style":162},[1472],{"type":67,"value":1473}," DEPLOYMENT_ADMIN",{"type":61,"tag":139,"props":1475,"children":1476},{"style":266},[1477],{"type":67,"value":1301},{"type":61,"tag":139,"props":1479,"children":1481},{"class":141,"line":1480},15,[1482,1487,1493],{"type":61,"tag":139,"props":1483,"children":1484},{"style":162},[1485],{"type":67,"value":1486},"  --expiry",{"type":61,"tag":139,"props":1488,"children":1490},{"style":1489},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1491],{"type":67,"value":1492}," 30",{"type":61,"tag":139,"props":1494,"children":1495},{"style":146},[1496],{"type":67,"value":1497},"  # Days until expiration (0 = never expires)\n",{"type":61,"tag":70,"props":1499,"children":1500},{},[1501,1506],{"type":61,"tag":83,"props":1502,"children":1503},{},[1504],{"type":67,"value":1505},"Roles",{"type":67,"value":1507},":",{"type":61,"tag":466,"props":1509,"children":1510},{},[1511],{"type":61,"tag":470,"props":1512,"children":1513},{},[1514,1520],{"type":61,"tag":135,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":67,"value":1519},"DEPLOYMENT_ADMIN",{"type":67,"value":1521},": Full access to deployment",{"type":61,"tag":70,"props":1523,"children":1524},{},[1525,1530],{"type":61,"tag":83,"props":1526,"children":1527},{},[1528],{"type":67,"value":1529},"Note",{"type":67,"value":1531},": Token value is only shown at creation time. Store it securely.",{"type":61,"tag":111,"props":1533,"children":1534},{},[],{"type":61,"tag":115,"props":1536,"children":1538},{"id":1537},"common-workflows",[1539],{"type":67,"value":1540},"Common Workflows",{"type":61,"tag":451,"props":1542,"children":1544},{"id":1543},"first-time-production-deployment",[1545],{"type":67,"value":1546},"First-Time Production Deployment",{"type":61,"tag":127,"props":1548,"children":1550},{"className":129,"code":1549,"language":131,"meta":132,"style":132},"# 1. Login\nastro login\n\n# 2. Switch to production workspace\nastro workspace list\nastro workspace switch \u003CPROD_WORKSPACE_ID>\n\n# 3. Create deployment\nastro deployment create --label production --executor celery\n\n# 4. Note the deployment ID, then deploy\nastro deploy \u003CDEPLOYMENT_ID>\n",[1551],{"type":61,"tag":135,"props":1552,"children":1553},{"__ignoreMap":132},[1554,1562,1573,1580,1588,1603,1635,1642,1650,1681,1688,1696],{"type":61,"tag":139,"props":1555,"children":1556},{"class":141,"line":142},[1557],{"type":61,"tag":139,"props":1558,"children":1559},{"style":146},[1560],{"type":67,"value":1561},"# 1. Login\n",{"type":61,"tag":139,"props":1563,"children":1564},{"class":141,"line":152},[1565,1569],{"type":61,"tag":139,"props":1566,"children":1567},{"style":156},[1568],{"type":67,"value":159},{"type":61,"tag":139,"props":1570,"children":1571},{"style":162},[1572],{"type":67,"value":165},{"type":61,"tag":139,"props":1574,"children":1575},{"class":141,"line":219},[1576],{"type":61,"tag":139,"props":1577,"children":1578},{"emptyLinePlaceholder":223},[1579],{"type":67,"value":226},{"type":61,"tag":139,"props":1581,"children":1582},{"class":141,"line":229},[1583],{"type":61,"tag":139,"props":1584,"children":1585},{"style":146},[1586],{"type":67,"value":1587},"# 2. Switch to production workspace\n",{"type":61,"tag":139,"props":1589,"children":1590},{"class":141,"line":238},[1591,1595,1599],{"type":61,"tag":139,"props":1592,"children":1593},{"style":156},[1594],{"type":67,"value":159},{"type":61,"tag":139,"props":1596,"children":1597},{"style":162},[1598],{"type":67,"value":211},{"type":61,"tag":139,"props":1600,"children":1601},{"style":162},[1602],{"type":67,"value":216},{"type":61,"tag":139,"props":1604,"children":1605},{"class":141,"line":358},[1606,1610,1614,1618,1622,1627,1631],{"type":61,"tag":139,"props":1607,"children":1608},{"style":156},[1609],{"type":67,"value":159},{"type":61,"tag":139,"props":1611,"children":1612},{"style":162},[1613],{"type":67,"value":211},{"type":61,"tag":139,"props":1615,"children":1616},{"style":162},[1617],{"type":67,"value":252},{"type":61,"tag":139,"props":1619,"children":1620},{"style":255},[1621],{"type":67,"value":258},{"type":61,"tag":139,"props":1623,"children":1624},{"style":162},[1625],{"type":67,"value":1626},"PROD_WORKSPACE_I",{"type":61,"tag":139,"props":1628,"children":1629},{"style":266},[1630],{"type":67,"value":269},{"type":61,"tag":139,"props":1632,"children":1633},{"style":255},[1634],{"type":67,"value":274},{"type":61,"tag":139,"props":1636,"children":1637},{"class":141,"line":366},[1638],{"type":61,"tag":139,"props":1639,"children":1640},{"emptyLinePlaceholder":223},[1641],{"type":67,"value":226},{"type":61,"tag":139,"props":1643,"children":1644},{"class":141,"line":375},[1645],{"type":61,"tag":139,"props":1646,"children":1647},{"style":146},[1648],{"type":67,"value":1649},"# 3. Create deployment\n",{"type":61,"tag":139,"props":1651,"children":1652},{"class":141,"line":409},[1653,1657,1661,1665,1669,1673,1677],{"type":61,"tag":139,"props":1654,"children":1655},{"style":156},[1656],{"type":67,"value":159},{"type":61,"tag":139,"props":1658,"children":1659},{"style":162},[1660],{"type":67,"value":315},{"type":61,"tag":139,"props":1662,"children":1663},{"style":162},[1664],{"type":67,"value":590},{"type":61,"tag":139,"props":1666,"children":1667},{"style":162},[1668],{"type":67,"value":595},{"type":61,"tag":139,"props":1670,"children":1671},{"style":162},[1672],{"type":67,"value":600},{"type":61,"tag":139,"props":1674,"children":1675},{"style":162},[1676],{"type":67,"value":605},{"type":61,"tag":139,"props":1678,"children":1679},{"style":162},[1680],{"type":67,"value":610},{"type":61,"tag":139,"props":1682,"children":1683},{"class":141,"line":417},[1684],{"type":61,"tag":139,"props":1685,"children":1686},{"emptyLinePlaceholder":223},[1687],{"type":67,"value":226},{"type":61,"tag":139,"props":1689,"children":1690},{"class":141,"line":426},[1691],{"type":61,"tag":139,"props":1692,"children":1693},{"style":146},[1694],{"type":67,"value":1695},"# 4. Note the deployment ID, then deploy\n",{"type":61,"tag":139,"props":1697,"children":1698},{"class":141,"line":1410},[1699,1703,1707,1711,1715,1719],{"type":61,"tag":139,"props":1700,"children":1701},{"style":156},[1702],{"type":67,"value":159},{"type":61,"tag":139,"props":1704,"children":1705},{"style":162},[1706],{"type":67,"value":900},{"type":61,"tag":139,"props":1708,"children":1709},{"style":255},[1710],{"type":67,"value":258},{"type":61,"tag":139,"props":1712,"children":1713},{"style":162},[1714],{"type":67,"value":398},{"type":61,"tag":139,"props":1716,"children":1717},{"style":266},[1718],{"type":67,"value":269},{"type":61,"tag":139,"props":1720,"children":1721},{"style":255},[1722],{"type":67,"value":274},{"type":61,"tag":451,"props":1724,"children":1726},{"id":1725},"iterative-dag-development",[1727],{"type":67,"value":1728},"Iterative DAG Development",{"type":61,"tag":127,"props":1730,"children":1732},{"className":129,"code":1731,"language":131,"meta":132,"style":132},"# 1. Enable fast deploys (one-time setup)\nastro deployment update \u003CDEPLOYMENT_ID> --dag-deploy-enabled\n\n# 2. Make DAG changes locally\n\n# 3. Deploy quickly\nastro deploy \u003CDEPLOYMENT_ID> --dags\n",[1733],{"type":61,"tag":135,"props":1734,"children":1735},{"__ignoreMap":132},[1736,1744,1779,1786,1794,1801,1809],{"type":61,"tag":139,"props":1737,"children":1738},{"class":141,"line":142},[1739],{"type":61,"tag":139,"props":1740,"children":1741},{"style":146},[1742],{"type":67,"value":1743},"# 1. Enable fast deploys (one-time setup)\n",{"type":61,"tag":139,"props":1745,"children":1746},{"class":141,"line":152},[1747,1751,1755,1759,1763,1767,1771,1775],{"type":61,"tag":139,"props":1748,"children":1749},{"style":156},[1750],{"type":67,"value":159},{"type":61,"tag":139,"props":1752,"children":1753},{"style":162},[1754],{"type":67,"value":315},{"type":61,"tag":139,"props":1756,"children":1757},{"style":162},[1758],{"type":67,"value":722},{"type":61,"tag":139,"props":1760,"children":1761},{"style":255},[1762],{"type":67,"value":258},{"type":61,"tag":139,"props":1764,"children":1765},{"style":162},[1766],{"type":67,"value":398},{"type":61,"tag":139,"props":1768,"children":1769},{"style":266},[1770],{"type":67,"value":269},{"type":61,"tag":139,"props":1772,"children":1773},{"style":255},[1774],{"type":67,"value":739},{"type":61,"tag":139,"props":1776,"children":1777},{"style":162},[1778],{"type":67,"value":744},{"type":61,"tag":139,"props":1780,"children":1781},{"class":141,"line":219},[1782],{"type":61,"tag":139,"props":1783,"children":1784},{"emptyLinePlaceholder":223},[1785],{"type":67,"value":226},{"type":61,"tag":139,"props":1787,"children":1788},{"class":141,"line":229},[1789],{"type":61,"tag":139,"props":1790,"children":1791},{"style":146},[1792],{"type":67,"value":1793},"# 2. Make DAG changes locally\n",{"type":61,"tag":139,"props":1795,"children":1796},{"class":141,"line":238},[1797],{"type":61,"tag":139,"props":1798,"children":1799},{"emptyLinePlaceholder":223},[1800],{"type":67,"value":226},{"type":61,"tag":139,"props":1802,"children":1803},{"class":141,"line":358},[1804],{"type":61,"tag":139,"props":1805,"children":1806},{"style":146},[1807],{"type":67,"value":1808},"# 3. Deploy quickly\n",{"type":61,"tag":139,"props":1810,"children":1811},{"class":141,"line":366},[1812,1816,1820,1824,1828,1832,1836],{"type":61,"tag":139,"props":1813,"children":1814},{"style":156},[1815],{"type":67,"value":159},{"type":61,"tag":139,"props":1817,"children":1818},{"style":162},[1819],{"type":67,"value":900},{"type":61,"tag":139,"props":1821,"children":1822},{"style":255},[1823],{"type":67,"value":258},{"type":61,"tag":139,"props":1825,"children":1826},{"style":162},[1827],{"type":67,"value":398},{"type":61,"tag":139,"props":1829,"children":1830},{"style":266},[1831],{"type":67,"value":269},{"type":61,"tag":139,"props":1833,"children":1834},{"style":255},[1835],{"type":67,"value":739},{"type":61,"tag":139,"props":1837,"children":1838},{"style":162},[1839],{"type":67,"value":1012},{"type":61,"tag":451,"props":1841,"children":1843},{"id":1842},"promoting-code-from-staging-to-production",[1844],{"type":67,"value":1845},"Promoting Code from Staging to Production",{"type":61,"tag":127,"props":1847,"children":1849},{"className":129,"code":1848,"language":131,"meta":132,"style":132},"# 1. Deploy to staging first\nastro workspace switch \u003CSTAGING_WORKSPACE_ID>\nastro deploy \u003CSTAGING_DEPLOYMENT_ID>\n\n# 2. Test in staging\n\n# 3. Deploy same code to production\nastro workspace switch \u003CPROD_WORKSPACE_ID>\nastro deploy \u003CPROD_DEPLOYMENT_ID>\n",[1850],{"type":61,"tag":135,"props":1851,"children":1852},{"__ignoreMap":132},[1853,1861,1893,1921,1928,1936,1943,1951,1982],{"type":61,"tag":139,"props":1854,"children":1855},{"class":141,"line":142},[1856],{"type":61,"tag":139,"props":1857,"children":1858},{"style":146},[1859],{"type":67,"value":1860},"# 1. Deploy to staging first\n",{"type":61,"tag":139,"props":1862,"children":1863},{"class":141,"line":152},[1864,1868,1872,1876,1880,1885,1889],{"type":61,"tag":139,"props":1865,"children":1866},{"style":156},[1867],{"type":67,"value":159},{"type":61,"tag":139,"props":1869,"children":1870},{"style":162},[1871],{"type":67,"value":211},{"type":61,"tag":139,"props":1873,"children":1874},{"style":162},[1875],{"type":67,"value":252},{"type":61,"tag":139,"props":1877,"children":1878},{"style":255},[1879],{"type":67,"value":258},{"type":61,"tag":139,"props":1881,"children":1882},{"style":162},[1883],{"type":67,"value":1884},"STAGING_WORKSPACE_I",{"type":61,"tag":139,"props":1886,"children":1887},{"style":266},[1888],{"type":67,"value":269},{"type":61,"tag":139,"props":1890,"children":1891},{"style":255},[1892],{"type":67,"value":274},{"type":61,"tag":139,"props":1894,"children":1895},{"class":141,"line":219},[1896,1900,1904,1908,1913,1917],{"type":61,"tag":139,"props":1897,"children":1898},{"style":156},[1899],{"type":67,"value":159},{"type":61,"tag":139,"props":1901,"children":1902},{"style":162},[1903],{"type":67,"value":900},{"type":61,"tag":139,"props":1905,"children":1906},{"style":255},[1907],{"type":67,"value":258},{"type":61,"tag":139,"props":1909,"children":1910},{"style":162},[1911],{"type":67,"value":1912},"STAGING_DEPLOYMENT_I",{"type":61,"tag":139,"props":1914,"children":1915},{"style":266},[1916],{"type":67,"value":269},{"type":61,"tag":139,"props":1918,"children":1919},{"style":255},[1920],{"type":67,"value":274},{"type":61,"tag":139,"props":1922,"children":1923},{"class":141,"line":229},[1924],{"type":61,"tag":139,"props":1925,"children":1926},{"emptyLinePlaceholder":223},[1927],{"type":67,"value":226},{"type":61,"tag":139,"props":1929,"children":1930},{"class":141,"line":238},[1931],{"type":61,"tag":139,"props":1932,"children":1933},{"style":146},[1934],{"type":67,"value":1935},"# 2. Test in staging\n",{"type":61,"tag":139,"props":1937,"children":1938},{"class":141,"line":358},[1939],{"type":61,"tag":139,"props":1940,"children":1941},{"emptyLinePlaceholder":223},[1942],{"type":67,"value":226},{"type":61,"tag":139,"props":1944,"children":1945},{"class":141,"line":366},[1946],{"type":61,"tag":139,"props":1947,"children":1948},{"style":146},[1949],{"type":67,"value":1950},"# 3. Deploy same code to production\n",{"type":61,"tag":139,"props":1952,"children":1953},{"class":141,"line":375},[1954,1958,1962,1966,1970,1974,1978],{"type":61,"tag":139,"props":1955,"children":1956},{"style":156},[1957],{"type":67,"value":159},{"type":61,"tag":139,"props":1959,"children":1960},{"style":162},[1961],{"type":67,"value":211},{"type":61,"tag":139,"props":1963,"children":1964},{"style":162},[1965],{"type":67,"value":252},{"type":61,"tag":139,"props":1967,"children":1968},{"style":255},[1969],{"type":67,"value":258},{"type":61,"tag":139,"props":1971,"children":1972},{"style":162},[1973],{"type":67,"value":1626},{"type":61,"tag":139,"props":1975,"children":1976},{"style":266},[1977],{"type":67,"value":269},{"type":61,"tag":139,"props":1979,"children":1980},{"style":255},[1981],{"type":67,"value":274},{"type":61,"tag":139,"props":1983,"children":1984},{"class":141,"line":409},[1985,1989,1993,1997,2002,2006],{"type":61,"tag":139,"props":1986,"children":1987},{"style":156},[1988],{"type":67,"value":159},{"type":61,"tag":139,"props":1990,"children":1991},{"style":162},[1992],{"type":67,"value":900},{"type":61,"tag":139,"props":1994,"children":1995},{"style":255},[1996],{"type":67,"value":258},{"type":61,"tag":139,"props":1998,"children":1999},{"style":162},[2000],{"type":67,"value":2001},"PROD_DEPLOYMENT_I",{"type":61,"tag":139,"props":2003,"children":2004},{"style":266},[2005],{"type":67,"value":269},{"type":61,"tag":139,"props":2007,"children":2008},{"style":255},[2009],{"type":67,"value":274},{"type":61,"tag":111,"props":2011,"children":2012},{},[],{"type":61,"tag":115,"props":2014,"children":2016},{"id":2015},"configuration-management",[2017],{"type":67,"value":2018},"Configuration Management",{"type":61,"tag":127,"props":2020,"children":2022},{"className":129,"code":2021,"language":131,"meta":132,"style":132},"# View CLI configuration\nastro config get\n\n# Set configuration value\nastro config set \u003CKEY> \u003CVALUE>\n\n# Check CLI version\nastro version\n\n# Upgrade CLI to latest version\nastro upgrade\n",[2023],{"type":61,"tag":135,"props":2024,"children":2025},{"__ignoreMap":132},[2026,2034,2051,2058,2066,2118,2125,2133,2145,2152,2160],{"type":61,"tag":139,"props":2027,"children":2028},{"class":141,"line":142},[2029],{"type":61,"tag":139,"props":2030,"children":2031},{"style":146},[2032],{"type":67,"value":2033},"# View CLI configuration\n",{"type":61,"tag":139,"props":2035,"children":2036},{"class":141,"line":152},[2037,2041,2046],{"type":61,"tag":139,"props":2038,"children":2039},{"style":156},[2040],{"type":67,"value":159},{"type":61,"tag":139,"props":2042,"children":2043},{"style":162},[2044],{"type":67,"value":2045}," config",{"type":61,"tag":139,"props":2047,"children":2048},{"style":162},[2049],{"type":67,"value":2050}," get\n",{"type":61,"tag":139,"props":2052,"children":2053},{"class":141,"line":219},[2054],{"type":61,"tag":139,"props":2055,"children":2056},{"emptyLinePlaceholder":223},[2057],{"type":67,"value":226},{"type":61,"tag":139,"props":2059,"children":2060},{"class":141,"line":229},[2061],{"type":61,"tag":139,"props":2062,"children":2063},{"style":146},[2064],{"type":67,"value":2065},"# Set configuration value\n",{"type":61,"tag":139,"props":2067,"children":2068},{"class":141,"line":238},[2069,2073,2077,2082,2086,2091,2096,2100,2104,2109,2114],{"type":61,"tag":139,"props":2070,"children":2071},{"style":156},[2072],{"type":67,"value":159},{"type":61,"tag":139,"props":2074,"children":2075},{"style":162},[2076],{"type":67,"value":2045},{"type":61,"tag":139,"props":2078,"children":2079},{"style":162},[2080],{"type":67,"value":2081}," set",{"type":61,"tag":139,"props":2083,"children":2084},{"style":255},[2085],{"type":67,"value":258},{"type":61,"tag":139,"props":2087,"children":2088},{"style":162},[2089],{"type":67,"value":2090},"KE",{"type":61,"tag":139,"props":2092,"children":2093},{"style":266},[2094],{"type":67,"value":2095},"Y",{"type":61,"tag":139,"props":2097,"children":2098},{"style":255},[2099],{"type":67,"value":739},{"type":61,"tag":139,"props":2101,"children":2102},{"style":255},[2103],{"type":67,"value":258},{"type":61,"tag":139,"props":2105,"children":2106},{"style":162},[2107],{"type":67,"value":2108},"VALU",{"type":61,"tag":139,"props":2110,"children":2111},{"style":266},[2112],{"type":67,"value":2113},"E",{"type":61,"tag":139,"props":2115,"children":2116},{"style":255},[2117],{"type":67,"value":274},{"type":61,"tag":139,"props":2119,"children":2120},{"class":141,"line":358},[2121],{"type":61,"tag":139,"props":2122,"children":2123},{"emptyLinePlaceholder":223},[2124],{"type":67,"value":226},{"type":61,"tag":139,"props":2126,"children":2127},{"class":141,"line":366},[2128],{"type":61,"tag":139,"props":2129,"children":2130},{"style":146},[2131],{"type":67,"value":2132},"# Check CLI version\n",{"type":61,"tag":139,"props":2134,"children":2135},{"class":141,"line":375},[2136,2140],{"type":61,"tag":139,"props":2137,"children":2138},{"style":156},[2139],{"type":67,"value":159},{"type":61,"tag":139,"props":2141,"children":2142},{"style":162},[2143],{"type":67,"value":2144}," version\n",{"type":61,"tag":139,"props":2146,"children":2147},{"class":141,"line":409},[2148],{"type":61,"tag":139,"props":2149,"children":2150},{"emptyLinePlaceholder":223},[2151],{"type":67,"value":226},{"type":61,"tag":139,"props":2153,"children":2154},{"class":141,"line":417},[2155],{"type":61,"tag":139,"props":2156,"children":2157},{"style":146},[2158],{"type":67,"value":2159},"# Upgrade CLI to latest version\n",{"type":61,"tag":139,"props":2161,"children":2162},{"class":141,"line":426},[2163,2167],{"type":61,"tag":139,"props":2164,"children":2165},{"style":156},[2166],{"type":67,"value":159},{"type":61,"tag":139,"props":2168,"children":2169},{"style":162},[2170],{"type":67,"value":2171}," upgrade\n",{"type":61,"tag":111,"props":2173,"children":2174},{},[],{"type":61,"tag":115,"props":2176,"children":2178},{"id":2177},"tips",[2179],{"type":67,"value":2180},"Tips",{"type":61,"tag":466,"props":2182,"children":2183},{},[2184,2197,2202,2214,2219,2237,2249],{"type":61,"tag":470,"props":2185,"children":2186},{},[2187,2189,2195],{"type":67,"value":2188},"Use ",{"type":61,"tag":135,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":67,"value":2194},"--dags",{"type":67,"value":2196}," flag for fast iteration (seconds vs minutes)",{"type":61,"tag":470,"props":2198,"children":2199},{},[2200],{"type":67,"value":2201},"Always test in staging workspace before production",{"type":61,"tag":470,"props":2203,"children":2204},{},[2205,2206,2212],{"type":67,"value":2188},{"type":61,"tag":135,"props":2207,"children":2209},{"className":2208},[],[2210],{"type":67,"value":2211},"deployment inspect",{"type":67,"value":2213}," to verify deployment health before deploying",{"type":61,"tag":470,"props":2215,"children":2216},{},[2217],{"type":67,"value":2218},"Deployment IDs are permanent, names can change",{"type":61,"tag":470,"props":2220,"children":2221},{},[2222,2224,2229,2231],{"type":67,"value":2223},"Most commands work with deployment ID; ",{"type":61,"tag":135,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":67,"value":462},{"type":67,"value":2230}," also accepts ",{"type":61,"tag":135,"props":2232,"children":2234},{"className":2233},[],[2235],{"type":67,"value":2236},"--deployment-name",{"type":61,"tag":470,"props":2238,"children":2239},{},[2240,2242,2247],{"type":67,"value":2241},"Set ",{"type":61,"tag":135,"props":2243,"children":2245},{"className":2244},[],[2246],{"type":67,"value":1058},{"type":67,"value":2248}," once per deployment for fast deploys",{"type":61,"tag":470,"props":2250,"children":2251},{},[2252,2254,2260],{"type":67,"value":2253},"Keep workspace context visible with ",{"type":61,"tag":135,"props":2255,"children":2257},{"className":2256},[],[2258],{"type":67,"value":2259},"astro workspace list",{"type":67,"value":2261}," (shows asterisk for current)",{"type":61,"tag":111,"props":2263,"children":2264},{},[],{"type":61,"tag":115,"props":2266,"children":2268},{"id":2267},"related-skills",[2269],{"type":67,"value":2270},"Related Skills",{"type":61,"tag":466,"props":2272,"children":2273},{},[2274,2283,2292],{"type":61,"tag":470,"props":2275,"children":2276},{},[2277,2281],{"type":61,"tag":83,"props":2278,"children":2279},{},[2280],{"type":67,"value":107},{"type":67,"value":2282},": Investigate deployment issues, view logs, manage environment variables",{"type":61,"tag":470,"props":2284,"children":2285},{},[2286,2290],{"type":61,"tag":83,"props":2287,"children":2288},{},[2289],{"type":67,"value":94},{"type":67,"value":2291},": Manage local Airflow development environment",{"type":61,"tag":470,"props":2293,"children":2294},{},[2295,2300],{"type":61,"tag":83,"props":2296,"children":2297},{},[2298],{"type":67,"value":2299},"setting-up-astro-project",{"type":67,"value":2301},": Initialize and configure Astro projects",{"type":61,"tag":2303,"props":2304,"children":2305},"style",{},[2306],{"type":67,"value":2307},"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);}",{"items":2309,"total":2408},[2310,2324,2336,2353,2365,2382,2395],{"slug":18,"name":18,"fn":2311,"description":2312,"org":2313,"tags":2314,"stars":25,"repoUrl":26,"updatedAt":2323},"manage and troubleshoot Airflow via CLI","Queries, manages, and troubleshoots Apache Airflow using the `af` CLI. Use when working with anything related to Airflow - a DAG, a DAG run, a task log, an import or parse error, a broken DAG, or any Airflow operation. Covers listing and triggering DAGs, retrying runs, reading task logs, diagnosing failures, debugging import and parse errors, checking connections, variables and pools, exploring the REST API, and monitoring health (for example \"trigger a pipeline\", \"retry a run\", \"list connections\", \"check Airflow health\", \"why did my DAG fail\"). This is the entrypoint that routes to sibling skills for authoring, testing, deploying, and migrating Airflow 2 to 3. Not for warehouse\u002FSQL analytics on Airflow metadata tables (use analyzing-data); for deep root-cause reports use debugging-dags or airflow-investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2315,2316,2317,2320],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":2318,"slug":2319,"type":15},"Data Pipeline","data-pipeline",{"name":2321,"slug":2322,"type":15},"Debugging","debugging","2026-04-06T18:01:43.992997",{"slug":2325,"name":2325,"fn":2326,"description":2327,"org":2328,"tags":2329,"stars":25,"repoUrl":26,"updatedAt":2335},"airflow-hitl","add human-in-the-loop steps to Airflow DAGs","Builds human-in-the-loop (HITL) Airflow workflows - approval gates, form input, and human-driven branching. Use when a DAG needs a human in the loop - an approval or reject step, sign-off before a task runs, a decision or approval UI, branching on a human choice, or collecting form input mid-run; also on mentions of ApprovalOperator, HITLOperator, HITLBranchOperator, HITLEntryOperator, or HITLTrigger. Requires Airflow 3.1+. Not for AI\u002FLLM task calls (see migrating-ai-sdk-to-common-ai).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2330,2331,2334],{"name":17,"slug":18,"type":15},{"name":2332,"slug":2333,"type":15},"Approvals","approvals",{"name":2318,"slug":2319,"type":15},"2026-04-06T18:01:46.758548",{"slug":2337,"name":2337,"fn":2338,"description":2339,"org":2340,"tags":2341,"stars":25,"repoUrl":26,"updatedAt":2352},"airflow-plugins","build Airflow UI plugins","Builds Airflow 3.1+ plugins that embed FastAPI apps, custom UI pages, React components, middleware, macros, and operator links directly into the Airflow UI. Use when building anything custom inside Airflow 3.1+ that involves Python and a browser-facing interface - creating an Airflow plugin, adding a custom UI page or nav entry, building FastAPI-backed endpoints inside Airflow, serving static assets from a plugin, embedding a React app, adding middleware to the API server, creating custom operator extra links, or calling the Airflow REST API from inside a plugin; also when AirflowPlugin, fastapi_apps, external_views, react_apps, or plugin registration come up.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2342,2343,2346,2349],{"name":17,"slug":18,"type":15},{"name":2344,"slug":2345,"type":15},"Plugin Development","plugin-development",{"name":2347,"slug":2348,"type":15},"Python","python",{"name":2350,"slug":2351,"type":15},"UI Components","ui-components","2026-04-06T18:01:56.827891",{"slug":2354,"name":2354,"fn":2355,"description":2356,"org":2357,"tags":2358,"stars":25,"repoUrl":26,"updatedAt":2364},"airflow-state-store","persist Airflow task and asset state","Persists task and asset state across retries and DAG runs using Airflow 3.3's AIP-103 key\u002Fvalue stores (`task_state_store`, `asset_state_store`) and the crash-safe `ResumableJobMixin`. Use when the user asks about task state store, checkpointing in tasks, persisting state across retries, job IDs surviving worker crashes, watermarks, asset metadata, resumable tasks, crash-safe operators, or \"what's new in Airflow 3.3\". Also use proactively when reading a DAG that uses Variables or XCom for intra-task coordination state — flag the anti-pattern and recommend task_state_store or asset_state_store instead. Requires Airflow 3.3+.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2359,2360,2362,2363],{"name":17,"slug":18,"type":15},{"name":2361,"slug":39,"type":15},"Data Engineering",{"name":2318,"slug":2319,"type":15},{"name":13,"slug":14,"type":15},"2026-07-07T06:43:11.160671",{"slug":2366,"name":2366,"fn":2367,"description":2368,"org":2369,"tags":2370,"stars":25,"repoUrl":26,"updatedAt":2381},"analyzing-data","query data warehouses for business questions","Queries the data warehouse with SQL and answers business questions about data. Use when answering anything that needs warehouse data - counts, metrics, trends, aggregations, joins across tables, data lookups, or ad-hoc SQL analysis (for example \"who uses X\", \"how many Y\", \"show me Z\", \"find customers\", \"what is the count\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2371,2374,2377,2378],{"name":2372,"slug":2373,"type":15},"Analytics","analytics",{"name":2375,"slug":2376,"type":15},"Data Analysis","data-analysis",{"name":2361,"slug":39,"type":15},{"name":2379,"slug":2380,"type":15},"SQL","sql","2026-04-06T18:01:49.599775",{"slug":2383,"name":2383,"fn":2384,"description":2385,"org":2386,"tags":2387,"stars":25,"repoUrl":26,"updatedAt":2394},"annotating-task-lineage","annotate Airflow tasks with data lineage","Annotate Airflow tasks with data lineage using inlets and outlets. Use when the user wants to add lineage metadata to tasks, specify input\u002Foutput datasets, or enable lineage tracking for operators without built-in OpenLineage extraction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2388,2389,2390,2391],{"name":17,"slug":18,"type":15},{"name":2361,"slug":39,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2392,"slug":2393,"type":15},"Observability","observability","2026-04-06T18:02:03.487365",{"slug":2396,"name":2396,"fn":2397,"description":2398,"org":2399,"tags":2400,"stars":25,"repoUrl":26,"updatedAt":2407},"authoring-dags","author Airflow DAGs","Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up\u002Fdownstream task. ANY request shaped like 'add a DAG named X', 'write a pipeline', 'add a task that runs after Y', or 'extend the DAG'. For testing and debugging DAGs, see the testing-dags skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2401,2402,2403,2406],{"name":17,"slug":18,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2404,"slug":2405,"type":15},"ETL","etl",{"name":2347,"slug":2348,"type":15},"2026-04-06T18:01:52.679888",34,{"items":2410,"total":2408},[2411,2418,2424,2431,2438,2445,2452,2459,2474,2488,2498,2511],{"slug":18,"name":18,"fn":2311,"description":2312,"org":2412,"tags":2413,"stars":25,"repoUrl":26,"updatedAt":2323},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2414,2415,2416,2417],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2321,"slug":2322,"type":15},{"slug":2325,"name":2325,"fn":2326,"description":2327,"org":2419,"tags":2420,"stars":25,"repoUrl":26,"updatedAt":2335},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2421,2422,2423],{"name":17,"slug":18,"type":15},{"name":2332,"slug":2333,"type":15},{"name":2318,"slug":2319,"type":15},{"slug":2337,"name":2337,"fn":2338,"description":2339,"org":2425,"tags":2426,"stars":25,"repoUrl":26,"updatedAt":2352},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2427,2428,2429,2430],{"name":17,"slug":18,"type":15},{"name":2344,"slug":2345,"type":15},{"name":2347,"slug":2348,"type":15},{"name":2350,"slug":2351,"type":15},{"slug":2354,"name":2354,"fn":2355,"description":2356,"org":2432,"tags":2433,"stars":25,"repoUrl":26,"updatedAt":2364},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2434,2435,2436,2437],{"name":17,"slug":18,"type":15},{"name":2361,"slug":39,"type":15},{"name":2318,"slug":2319,"type":15},{"name":13,"slug":14,"type":15},{"slug":2366,"name":2366,"fn":2367,"description":2368,"org":2439,"tags":2440,"stars":25,"repoUrl":26,"updatedAt":2381},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2441,2442,2443,2444],{"name":2372,"slug":2373,"type":15},{"name":2375,"slug":2376,"type":15},{"name":2361,"slug":39,"type":15},{"name":2379,"slug":2380,"type":15},{"slug":2383,"name":2383,"fn":2384,"description":2385,"org":2446,"tags":2447,"stars":25,"repoUrl":26,"updatedAt":2394},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2448,2449,2450,2451],{"name":17,"slug":18,"type":15},{"name":2361,"slug":39,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2392,"slug":2393,"type":15},{"slug":2396,"name":2396,"fn":2397,"description":2398,"org":2453,"tags":2454,"stars":25,"repoUrl":26,"updatedAt":2407},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2455,2456,2457,2458],{"name":17,"slug":18,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2404,"slug":2405,"type":15},{"name":2347,"slug":2348,"type":15},{"slug":2460,"name":2460,"fn":2461,"description":2462,"org":2463,"tags":2464,"stars":25,"repoUrl":26,"updatedAt":2473},"authoring-go-sdk-tasks","implement Airflow tasks in Go","Writes Airflow task logic in Go using the Airflow Go SDK. Use when the user wants to implement Airflow tasks in Go, asks about `BundleProvider`\u002F`RegisterDags`, the `bundlev1` Registry\u002FDag interfaces, registering Go tasks (`AddTask`\u002F`AddTaskWithName`), dependency injection by parameter type (`context.Context`, `sdk.TIRunContext`, `*slog.Logger`, `sdk.Client`), or reading connections\u002Fvariables\u002FXComs from Go. This skill covers the Go-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building\u002Fpacking\u002Fshipping the bundle see deploying-go-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2465,2466,2469,2470],{"name":17,"slug":18,"type":15},{"name":2467,"slug":2468,"type":15},"API Development","api-development",{"name":2318,"slug":2319,"type":15},{"name":2471,"slug":2472,"type":15},"Go","go","2026-07-11T05:39:13.552213",{"slug":2475,"name":2475,"fn":2476,"description":2477,"org":2478,"tags":2479,"stars":25,"repoUrl":26,"updatedAt":2487},"authoring-java-sdk-tasks","implement Airflow tasks in Java","Writes Airflow task logic in Java, Kotlin, or any JVM language using the Airflow Java SDK. Use when the user wants to implement Airflow tasks in Java\u002FJVM, asks about `@Builder.Dag`\u002F`@Builder.Task`\u002F`@Builder.XCom`, the `Task`\u002F`BundleBuilder` interfaces, reading connections\u002Fvariables\u002FXComs from Java, the JSON-to-Java type mapping, or logging from Java tasks. This skill covers the Java-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building\u002Fshipping the bundle see deploying-java-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2480,2481,2484],{"name":2318,"slug":2319,"type":15},{"name":2482,"slug":2483,"type":15},"Engineering","engineering",{"name":2485,"slug":2486,"type":15},"Java","java","2026-07-18T05:48:13.374003",{"slug":2489,"name":2489,"fn":2490,"description":2491,"org":2492,"tags":2493,"stars":25,"repoUrl":26,"updatedAt":2497},"authoring-language-sdk-tasks","implement non-Python Airflow tasks","The language-neutral foundation for Airflow language SDKs — implement task logic in a non-Python language while the DAG stays in Python. Use when the user wants to run an Airflow task in another language (Java, Kotlin, Go, or other JVM\u002Fnative languages), asks how the Python `@task.stub` pairs with native task code, how task\u002FDAG IDs must match across the two sides, how data passes via XCom as JSON, or which language SDKs exist. This skill owns the shared Python-stub pattern and conceptual model; for a specific language's native API, build, and runtime, use that language's skill (e.g. authoring-java-sdk-tasks, authoring-go-sdk-tasks).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2494,2495,2496],{"name":17,"slug":18,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2482,"slug":2483,"type":15},"2026-07-18T05:11:54.496539",{"slug":2499,"name":2499,"fn":2500,"description":2501,"org":2502,"tags":2503,"stars":25,"repoUrl":26,"updatedAt":2510},"blueprint","build reusable Airflow task group templates","Define reusable Airflow task group templates with Pydantic validation and compose DAGs from YAML. Use when creating blueprint templates, composing DAGs from YAML, validating configurations, or enabling no-code DAG authoring for non-engineers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2504,2505,2506,2507],{"name":17,"slug":18,"type":15},{"name":2318,"slug":2319,"type":15},{"name":2404,"slug":2405,"type":15},{"name":2508,"slug":2509,"type":15},"Templates","templates","2026-04-06T18:01:45.361425",{"slug":2512,"name":2512,"fn":2513,"description":2514,"org":2515,"tags":2516,"stars":25,"repoUrl":26,"updatedAt":2523},"checking-freshness","check data freshness in warehouses","Quick data freshness check. Use when the user asks if data is up to date, when a table was last updated, if data is stale, or needs to verify data currency before using it.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2517,2518,2519,2522],{"name":17,"slug":18,"type":15},{"name":2361,"slug":39,"type":15},{"name":2520,"slug":2521,"type":15},"Data Quality","data-quality",{"name":2404,"slug":2405,"type":15},"2026-04-06T18:02:02.138565"]