dagster-dg-cli 1.12.11__tar.gz → 1.12.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {dagster_dg_cli-1.12.11/dagster_dg_cli.egg-info → dagster_dg_cli-1.12.13}/PKG-INFO +4 -4
  2. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/commands.py +93 -0
  3. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/deploy_session.py +37 -11
  4. dagster_dg_cli-1.12.13/dagster_dg_cli/cli/plus/deploy/validation.py +70 -0
  5. dagster_dg_cli-1.12.13/dagster_dg_cli/version.py +1 -0
  6. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13/dagster_dg_cli.egg-info}/PKG-INFO +4 -4
  7. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/SOURCES.txt +1 -0
  8. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/requires.txt +3 -3
  9. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/setup.py +3 -3
  10. dagster_dg_cli-1.12.11/dagster_dg_cli/version.py +0 -1
  11. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/LICENSE +0 -0
  12. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/MANIFEST.in +0 -0
  13. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/README.md +0 -0
  14. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/__init__.py +0 -0
  15. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/__init__.py +0 -0
  16. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/__init__.py +0 -0
  17. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/agent.py +0 -0
  18. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/asset.py +0 -0
  19. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/deployments.py +0 -0
  20. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/run.py +0 -0
  21. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/run_event.py +0 -0
  22. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/schedule.py +0 -0
  23. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/secret.py +0 -0
  24. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/api/sensor.py +0 -0
  25. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/__init__.py +0 -0
  26. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/agent.py +0 -0
  27. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/asset.py +0 -0
  28. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/deployment.py +0 -0
  29. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/run.py +0 -0
  30. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/run_event.py +0 -0
  31. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/schedule.py +0 -0
  32. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/secret.py +0 -0
  33. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/graphql_adapter/sensor.py +0 -0
  34. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/__init__.py +0 -0
  35. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/agent.py +0 -0
  36. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/asset.py +0 -0
  37. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/deployment.py +0 -0
  38. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/run.py +0 -0
  39. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/run_event.py +0 -0
  40. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/schedule.py +0 -0
  41. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/secret.py +0 -0
  42. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/api_layer/schemas/sensor.py +0 -0
  43. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/__init__.py +0 -0
  44. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/__main__.py +0 -0
  45. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/__init__.py +0 -0
  46. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/agent.py +0 -0
  47. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/asset.py +0 -0
  48. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/cli_group.py +0 -0
  49. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/client.py +0 -0
  50. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/deployment.py +0 -0
  51. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/formatters.py +0 -0
  52. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/log.py +0 -0
  53. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/run.py +0 -0
  54. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/run_event.py +0 -0
  55. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/schedule.py +0 -0
  56. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/secret.py +0 -0
  57. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/sensor.py +0 -0
  58. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/api/shared.py +0 -0
  59. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/check.py +0 -0
  60. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/defs_state.py +0 -0
  61. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/dev.py +0 -0
  62. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/entrypoint.py +0 -0
  63. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/launch.py +0 -0
  64. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/list.py +0 -0
  65. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/mcp_server.py +0 -0
  66. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/__init__.py +0 -0
  67. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/constants.py +0 -0
  68. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/create/__init__.py +0 -0
  69. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/create/ci_api_token.py +0 -0
  70. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/create/env.py +0 -0
  71. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/__init__.py +0 -0
  72. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/configure/__init__.py +0 -0
  73. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/configure/commands.py +0 -0
  74. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/configure/configure_build_artifacts.py +0 -0
  75. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/configure/configure_ci.py +0 -0
  76. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/deploy/configure/utils.py +0 -0
  77. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/login.py +0 -0
  78. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/pull/__init__.py +0 -0
  79. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/plus/pull/env.py +0 -0
  80. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/__init__.py +0 -0
  81. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/CLAUDE.md +0 -0
  82. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/__init__.py +0 -0
  83. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/ai.py +0 -0
  84. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/claude/__init__.py +0 -0
  85. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/claude/diagnostics.py +0 -0
  86. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/claude/sdk_client.py +0 -0
  87. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/command.py +0 -0
  88. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/constants.py +0 -0
  89. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/dg_scaffold_pr_sequencing_plan.md +0 -0
  90. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/git.py +0 -0
  91. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/models.py +0 -0
  92. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/planning.py +0 -0
  93. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/pr1_diagnostics_implementation_plan.md +0 -0
  94. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/prompts/best_practices.md +0 -0
  95. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/prompts/planning_prompt.md +0 -0
  96. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/branch/version_utils.py +0 -0
  97. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/build_artifacts.py +0 -0
  98. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/component.py +0 -0
  99. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/defs.py +0 -0
  100. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/scaffold/github_actions.py +0 -0
  101. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/cli/utils.py +0 -0
  102. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/docs/.gitignore +0 -0
  103. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/mcp/__init__.py +0 -0
  104. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/mcp/server.py +0 -0
  105. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/py.typed +0 -0
  106. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/scaffold.py +0 -0
  107. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/COMPONENT_TYPE/COMPONENT_TYPE_NAME_PLACEHOLDER.py.jinja +0 -0
  108. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/build-location-fragment-gitlab.yaml +0 -0
  109. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/build-location-fragment.yaml +0 -0
  110. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/deploy_uv_Dockerfile.jinja +0 -0
  111. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/deploy_uv_editable_Dockerfile.jinja +0 -0
  112. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/hybrid-github-action.yaml +0 -0
  113. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/hybrid-gitlab-ci.yaml +0 -0
  114. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/github/azure-container-registry-login-fragment.yaml +0 -0
  115. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/github/dockerhub-login-fragment.yaml +0 -0
  116. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/github/ecr-login-fragment.yaml +0 -0
  117. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/github/gcr-login-fragment.yaml +0 -0
  118. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/github/github-container-registry-login-fragment.yaml +0 -0
  119. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/gitlab/azure-container-registry-login-fragment.yaml +0 -0
  120. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/gitlab/dockerhub-login-fragment.yaml +0 -0
  121. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/gitlab/ecr-login-fragment.yaml +0 -0
  122. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/gitlab/gcr-login-fragment.yaml +0 -0
  123. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/registry_fragments/gitlab/github-container-registry-login-fragment.yaml +0 -0
  124. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/serverless-github-action.yaml +0 -0
  125. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/templates/serverless-gitlab-ci.yaml +0 -0
  126. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/__init__.py +0 -0
  127. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/claude_utils.py +0 -0
  128. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/plus/__init__.py +0 -0
  129. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/plus/build.py +0 -0
  130. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/plus/defs_state_storage.py +0 -0
  131. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/plus/gql.py +0 -0
  132. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/plus/gql_client.py +0 -0
  133. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/ui.py +0 -0
  134. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli/utils/yaml_template_generator.py +0 -0
  135. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/dependency_links.txt +0 -0
  136. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/entry_points.txt +0 -0
  137. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/not-zip-safe +0 -0
  138. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/dagster_dg_cli.egg-info/top_level.txt +0 -0
  139. {dagster_dg_cli-1.12.11 → dagster_dg_cli-1.12.13}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dg-cli
3
- Version: 1.12.11
3
+ Version: 1.12.13
4
4
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dg-cli
5
5
  Author: Dagster Labs
6
6
  Author-email: hello@dagsterlabs.com
@@ -13,9 +13,9 @@ Classifier: Programming Language :: Python :: 3.14
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Operating System :: OS Independent
15
15
  License-File: LICENSE
16
- Requires-Dist: dagster-dg-core==1.12.11
17
- Requires-Dist: dagster==1.12.11
18
- Requires-Dist: dagster-cloud-cli==1.12.11
16
+ Requires-Dist: dagster-dg-core==1.12.13
17
+ Requires-Dist: dagster==1.12.13
18
+ Requires-Dist: dagster-cloud-cli==1.12.13
19
19
  Requires-Dist: typer
20
20
  Provides-Extra: test
21
21
  Requires-Dist: syrupy>=4.0.0; extra == "test"
@@ -31,6 +31,7 @@ from dagster_dg_cli.cli.plus.deploy.deploy_session import (
31
31
  finish_deploy_session,
32
32
  init_deploy_session,
33
33
  )
34
+ from dagster_dg_cli.cli.plus.deploy.validation import _extract_dagster_env_from_url
34
35
  from dagster_dg_cli.utils.plus.build import get_agent_type
35
36
 
36
37
  if TYPE_CHECKING:
@@ -91,8 +92,50 @@ org_and_deploy_option_group = make_option_group(
91
92
  )
92
93
 
93
94
 
95
+ build_strategy_option_group = make_option_group(
96
+ {
97
+ not_none(option.name): option
98
+ for option in [
99
+ click.Option(
100
+ ["--build-strategy"],
101
+ type=click.Choice(["docker", "python-executable"]),
102
+ default="docker",
103
+ help=(
104
+ "Build strategy used to build code locations. 'docker' builds a Docker image "
105
+ "(required for Hybrid agents). 'python-executable' builds PEX files "
106
+ "(Serverless agents only)."
107
+ ),
108
+ envvar="DAGSTER_BUILD_STRATEGY",
109
+ ),
110
+ ]
111
+ }
112
+ )
113
+
114
+
115
+ pex_build_method_option_group = make_option_group(
116
+ {
117
+ not_none(option.name): option
118
+ for option in [
119
+ click.Option(
120
+ ["--pex-build-method"],
121
+ type=click.Choice(["local", "docker", "docker-fallback"]),
122
+ default="docker-fallback",
123
+ help=(
124
+ "Build method for PEX dependencies. 'docker-fallback' tries local first then Docker (default), "
125
+ "'local' uses only the current environment, 'docker' uses only a Docker builder. "
126
+ "Only applies when --build-strategy=python-executable."
127
+ ),
128
+ envvar="DAGSTER_PEX_BUILD_METHOD",
129
+ ),
130
+ ]
131
+ }
132
+ )
133
+
134
+
94
135
  @click.group(name="deploy", cls=DgClickGroup, invoke_without_command=True)
95
136
  @org_and_deploy_option_group
137
+ @build_strategy_option_group
138
+ @pex_build_method_option_group
96
139
  @click.option(
97
140
  "--python-version",
98
141
  "python_version",
@@ -141,6 +184,11 @@ org_and_deploy_option_group = make_option_group(
141
184
  ]
142
185
  ),
143
186
  )
187
+ @click.option(
188
+ "--skip-validation",
189
+ is_flag=True,
190
+ help="Skip configuration validation checks (not recommended).",
191
+ )
144
192
  @dg_editable_dagster_options
145
193
  @dg_path_options
146
194
  @dg_global_options
@@ -148,6 +196,8 @@ org_and_deploy_option_group = make_option_group(
148
196
  def deploy_group(
149
197
  organization: Optional[str],
150
198
  deployment: Optional[str],
199
+ build_strategy: str,
200
+ pex_build_method: str,
151
201
  python_version: Optional[str],
152
202
  agent_type_str: str,
153
203
  deployment_type_str: Optional[str],
@@ -159,6 +209,7 @@ def deploy_group(
159
209
  target_path: Path,
160
210
  status_url: Optional[str],
161
211
  snapshot_base_condition_str: Optional[str],
212
+ skip_validation: bool,
162
213
  **global_options: object,
163
214
  ) -> None:
164
215
  """Deploy a project or workspace to Dagster Plus. Handles all state management for the deploy
@@ -171,6 +222,9 @@ def deploy_group(
171
222
  Each of the individual stages of the deploy is also available as its own subcommand for additional
172
223
  customization.
173
224
  """
225
+ from dagster_cloud_cli.commands.ci import BuildStrategy
226
+ from dagster_cloud_cli.core.pex_builder.deps import BuildMethod
227
+
174
228
  if click.get_current_context().invoked_subcommand:
175
229
  return
176
230
 
@@ -187,6 +241,12 @@ def deploy_group(
187
241
  organization = _get_organization(organization, plus_config)
188
242
  deployment = _get_deployment(deployment, plus_config)
189
243
 
244
+ # Extract dagster_env from config
245
+ dagster_env = None
246
+ if DagsterPlusCliConfig.exists():
247
+ config = DagsterPlusCliConfig.get()
248
+ dagster_env = _extract_dagster_env_from_url(config.url)
249
+
190
250
  dg_context = DgContext.for_workspace_or_project_environment(target_path, cli_config)
191
251
  _validate_location_names(dg_context, location_names, cli_config)
192
252
 
@@ -199,6 +259,9 @@ def deploy_group(
199
259
  else:
200
260
  agent_type = get_agent_type(plus_config)
201
261
 
262
+ build_strategy_enum = BuildStrategy(build_strategy)
263
+ pex_build_method_enum = BuildMethod(pex_build_method)
264
+
202
265
  init_deploy_session(
203
266
  organization,
204
267
  deployment,
@@ -211,11 +274,15 @@ def deploy_group(
211
274
  location_names,
212
275
  status_url,
213
276
  snapshot_base_condition,
277
+ dagster_env,
278
+ skip_validation,
214
279
  )
215
280
 
216
281
  build_artifact(
217
282
  dg_context,
218
283
  agent_type,
284
+ build_strategy_enum,
285
+ pex_build_method_enum,
219
286
  statedir,
220
287
  bool(use_editable_dagster),
221
288
  python_version,
@@ -281,6 +348,11 @@ def _validate_location_names(
281
348
  ]
282
349
  ),
283
350
  )
351
+ @click.option(
352
+ "--skip-validation",
353
+ is_flag=True,
354
+ help="Skip configuration validation checks (not recommended).",
355
+ )
284
356
  @dg_global_options
285
357
  @cli_telemetry_wrapper
286
358
  def start_deploy_session_command(
@@ -294,6 +366,7 @@ def start_deploy_session_command(
294
366
  target_path: Path,
295
367
  status_url: Optional[str],
296
368
  snapshot_base_condition_str: Optional[str],
369
+ skip_validation: bool,
297
370
  **global_options: object,
298
371
  ) -> None:
299
372
  """Start a new deploy session. Determines which code locations will be deployed and what
@@ -307,6 +380,12 @@ def start_deploy_session_command(
307
380
  organization = _get_organization(organization, plus_config)
308
381
  deployment = _get_deployment(deployment, plus_config)
309
382
 
383
+ # Extract dagster_env from config
384
+ dagster_env = None
385
+ if DagsterPlusCliConfig.exists():
386
+ config = DagsterPlusCliConfig.get()
387
+ dagster_env = _extract_dagster_env_from_url(config.url)
388
+
310
389
  dg_context = DgContext.for_workspace_or_project_environment(target_path, cli_config)
311
390
  _validate_location_names(dg_context, location_names, cli_config)
312
391
  statedir = _get_statedir()
@@ -329,6 +408,8 @@ def start_deploy_session_command(
329
408
  location_names,
330
409
  status_url,
331
410
  snapshot_base_condition,
411
+ dagster_env,
412
+ skip_validation,
332
413
  )
333
414
 
334
415
 
@@ -339,6 +420,8 @@ def start_deploy_session_command(
339
420
  type=click.Choice([agent_type.value.lower() for agent_type in DgPlusAgentType]),
340
421
  help="Whether this a Hybrid or serverless code location.",
341
422
  )
423
+ @build_strategy_option_group
424
+ @pex_build_method_option_group
342
425
  @click.option(
343
426
  "--python-version",
344
427
  "python_version",
@@ -360,6 +443,8 @@ def start_deploy_session_command(
360
443
  @cli_telemetry_wrapper
361
444
  def build_and_push_command(
362
445
  agent_type_str: str,
446
+ build_strategy: str,
447
+ pex_build_method: str,
363
448
  python_version: Optional[str],
364
449
  use_editable_dagster: Optional[str],
365
450
  location_names: tuple[str],
@@ -369,6 +454,9 @@ def build_and_push_command(
369
454
  """Builds a Docker image to be deployed, and pushes it to the registry
370
455
  that was configured when the deploy session was started.
371
456
  """
457
+ from dagster_cloud_cli.commands.ci import BuildStrategy
458
+ from dagster_cloud_cli.core.pex_builder.deps import BuildMethod
459
+
372
460
  cli_config = normalize_cli_config(global_options, click.get_current_context())
373
461
 
374
462
  dg_context = DgContext.for_workspace_or_project_environment(target_path, cli_config)
@@ -381,11 +469,16 @@ def build_and_push_command(
381
469
  plus_config = DagsterPlusCliConfig.get()
382
470
  agent_type = get_agent_type(plus_config)
383
471
 
472
+ build_strategy_enum = BuildStrategy(build_strategy)
473
+ pex_build_method_enum = BuildMethod(pex_build_method)
474
+
384
475
  statedir = _get_statedir()
385
476
 
386
477
  build_artifact(
387
478
  dg_context,
388
479
  agent_type,
480
+ build_strategy_enum,
481
+ pex_build_method_enum,
389
482
  statedir,
390
483
  bool(use_editable_dagster),
391
484
  python_version,
@@ -7,10 +7,6 @@ from pathlib import Path
7
7
  from typing import TYPE_CHECKING, Optional
8
8
 
9
9
  import click
10
-
11
- if TYPE_CHECKING:
12
- from dagster_cloud_cli.types import SnapshotBaseDeploymentCondition
13
-
14
10
  import dagster_shared.check as check
15
11
 
16
12
  # Expensive imports moved to lazy loading inside functions to improve CLI startup performance
@@ -22,6 +18,11 @@ from dagster_dg_cli.cli.plus.constants import DgPlusAgentType, DgPlusDeploymentT
22
18
  from dagster_dg_cli.cli.utils import create_temp_dagster_cloud_yaml_file
23
19
  from dagster_dg_cli.utils.plus.build import create_deploy_dockerfile, get_dockerfile_path
24
20
 
21
+ if TYPE_CHECKING:
22
+ from dagster_cloud_cli.commands.ci import BuildStrategy
23
+ from dagster_cloud_cli.core.pex_builder.deps import BuildMethod
24
+ from dagster_cloud_cli.types import SnapshotBaseDeploymentCondition
25
+
25
26
 
26
27
  def _guess_deployment_type(
27
28
  project_dir: Path, full_deployment_name: str
@@ -127,6 +128,8 @@ def init_deploy_session(
127
128
  location_names: tuple[str],
128
129
  status_url: Optional[str],
129
130
  snapshot_base_condition: Optional["SnapshotBaseDeploymentCondition"],
131
+ dagster_env: Optional[str],
132
+ skip_validation: bool = False,
130
133
  ):
131
134
  deployment_type = (
132
135
  input_deployment_type
@@ -144,7 +147,14 @@ def init_deploy_session(
144
147
 
145
148
  dagster_cloud_yaml_file = create_temp_dagster_cloud_yaml_file(dg_context, statedir)
146
149
 
147
- # Lazy import for test mocking and performance
150
+ from dagster_dg_cli.cli.plus.deploy.validation import validate_deploy_configuration
151
+
152
+ if not skip_validation:
153
+ validate_deploy_configuration(
154
+ dagster_cloud_yaml_path=dagster_cloud_yaml_file,
155
+ organization=organization,
156
+ )
157
+
148
158
  from dagster_cloud_cli.commands.ci import init_impl
149
159
 
150
160
  init_impl(
@@ -156,7 +166,7 @@ def init_deploy_session(
156
166
  require_branch_deployment=deployment_type == DgPlusDeploymentType.BRANCH_DEPLOYMENT,
157
167
  git_url=git_url,
158
168
  commit_hash=commit_hash,
159
- dagster_env=None,
169
+ dagster_env=dagster_env,
160
170
  status_url=status_url,
161
171
  snapshot_base_condition=snapshot_base_condition,
162
172
  clean_statedir=False,
@@ -167,20 +177,33 @@ def init_deploy_session(
167
177
  def build_artifact(
168
178
  dg_context: DgContext,
169
179
  agent_type: DgPlusAgentType,
180
+ build_strategy: "BuildStrategy",
181
+ pex_build_method: "BuildMethod",
170
182
  statedir: str,
171
183
  use_editable_dagster: bool,
172
184
  python_version: Optional[str],
173
185
  location_names: tuple[str],
174
186
  ):
187
+ from dagster_cloud_cli.commands.ci import BuildStrategy
188
+
175
189
  if not python_version:
176
190
  python_version = f"3.{sys.version_info.minor}"
177
191
 
192
+ # Validate build strategy compatibility with agent type
193
+ if agent_type == DgPlusAgentType.HYBRID and build_strategy == BuildStrategy.pex:
194
+ raise click.UsageError(
195
+ "Build strategy 'python-executable' is not supported for Hybrid agents. "
196
+ "Hybrid agents require 'docker' build strategy."
197
+ )
198
+
178
199
  requested_location_names = set(location_names)
179
200
 
180
201
  if dg_context.is_project:
181
202
  _build_artifact_for_project(
182
203
  dg_context,
183
204
  agent_type,
205
+ build_strategy,
206
+ pex_build_method,
184
207
  statedir,
185
208
  use_editable_dagster,
186
209
  python_version,
@@ -201,6 +224,8 @@ def build_artifact(
201
224
  _build_artifact_for_project(
202
225
  project_context,
203
226
  agent_type,
227
+ build_strategy,
228
+ pex_build_method,
204
229
  statedir,
205
230
  use_editable_dagster,
206
231
  python_version,
@@ -211,6 +236,8 @@ def build_artifact(
211
236
  def _build_artifact_for_project(
212
237
  dg_context: DgContext,
213
238
  agent_type: DgPlusAgentType,
239
+ build_strategy: "BuildStrategy",
240
+ pex_build_method: "BuildMethod",
214
241
  statedir: str,
215
242
  use_editable_dagster: bool,
216
243
  python_version: str,
@@ -247,10 +274,9 @@ def _build_artifact_for_project(
247
274
  )
248
275
 
249
276
  else:
250
- # Import BuildStrategy and deps locally since they're not needed for tests
277
+ # Import deps locally since they're not needed for tests
251
278
  # Lazy import for test mocking and performance
252
- from dagster_cloud_cli.commands.ci import BuildStrategy, build_impl
253
- from dagster_cloud_cli.core.pex_builder import deps
279
+ from dagster_cloud_cli.commands.ci import build_impl
254
280
 
255
281
  build_impl(
256
282
  statedir=str(statedir),
@@ -258,12 +284,12 @@ def _build_artifact_for_project(
258
284
  use_editable_dagster=use_editable_dagster,
259
285
  location_name=[dg_context.code_location_name],
260
286
  build_directory=str(build_directory),
261
- build_strategy=BuildStrategy.docker,
287
+ build_strategy=build_strategy,
262
288
  docker_image_tag=None,
263
289
  docker_base_image=None,
264
290
  docker_env=[],
265
291
  python_version=python_version,
266
- pex_build_method=deps.BuildMethod.LOCAL,
292
+ pex_build_method=pex_build_method,
267
293
  pex_deps_cache_from=None,
268
294
  pex_deps_cache_to=None,
269
295
  pex_base_image_tag=None,
@@ -0,0 +1,70 @@
1
+ """Validation for dg plus deploy commands."""
2
+
3
+ import pathlib
4
+ from typing import Optional
5
+
6
+ import click
7
+ from dagster_shared.plus.config import DagsterPlusCliConfig
8
+
9
+
10
+ def _extract_dagster_env_from_url(url: Optional[str]) -> Optional[str]:
11
+ """Extract dagster_env from a DagsterPlusCliConfig URL.
12
+
13
+ Args:
14
+ url: Base URL like "https://eu.dagster.cloud" or None
15
+
16
+ Returns:
17
+ "eu" if EU region, None otherwise
18
+ """
19
+ if url and "eu.dagster.cloud" in url:
20
+ return "eu"
21
+ return None
22
+
23
+
24
+ def validate_deploy_configuration(
25
+ dagster_cloud_yaml_path: str,
26
+ organization: str,
27
+ ) -> None:
28
+ """Validate deployment configuration before starting deploy session.
29
+
30
+ Performs:
31
+ - YAML schema validation (structure, required fields, build directories)
32
+ - API connectivity check (token + GraphQL query)
33
+
34
+ Args:
35
+ dagster_cloud_yaml_path: Path to the dagster_cloud.yaml file to validate
36
+ organization: Dagster Cloud organization name
37
+
38
+ Raises:
39
+ click.ClickException: If validation fails
40
+ """
41
+ # defer for import performance
42
+ from dagster_cloud_cli.commands.ci import checks
43
+ from dagster_cloud_cli.config_utils import get_org_url
44
+
45
+ yaml_path = pathlib.Path(dagster_cloud_yaml_path)
46
+
47
+ yaml_result = checks.check_dagster_cloud_yaml(yaml_path)
48
+
49
+ dagster_env = None
50
+ if DagsterPlusCliConfig.exists():
51
+ config = DagsterPlusCliConfig.get()
52
+ dagster_env = _extract_dagster_env_from_url(config.url)
53
+
54
+ url = get_org_url(organization, dagster_env)
55
+ connect_result = checks.check_connect_dagster_cloud(url)
56
+
57
+ all_errors = yaml_result.errors + connect_result.errors
58
+
59
+ if all_errors:
60
+ click.echo(click.style("\nConfiguration validation failed:", fg="red", bold=True))
61
+ click.echo()
62
+ for error in all_errors:
63
+ click.echo(f" • {error}")
64
+ click.echo()
65
+ click.echo(
66
+ click.style("Fix the errors above or use --skip-validation to bypass.", dim=True)
67
+ )
68
+ raise click.ClickException("Deploy configuration validation failed")
69
+
70
+ click.echo("Configuration validated")
@@ -0,0 +1 @@
1
+ __version__ = "1.12.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-dg-cli
3
- Version: 1.12.11
3
+ Version: 1.12.13
4
4
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-dg-cli
5
5
  Author: Dagster Labs
6
6
  Author-email: hello@dagsterlabs.com
@@ -13,9 +13,9 @@ Classifier: Programming Language :: Python :: 3.14
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Operating System :: OS Independent
15
15
  License-File: LICENSE
16
- Requires-Dist: dagster-dg-core==1.12.11
17
- Requires-Dist: dagster==1.12.11
18
- Requires-Dist: dagster-cloud-cli==1.12.11
16
+ Requires-Dist: dagster-dg-core==1.12.13
17
+ Requires-Dist: dagster==1.12.13
18
+ Requires-Dist: dagster-cloud-cli==1.12.13
19
19
  Requires-Dist: typer
20
20
  Provides-Extra: test
21
21
  Requires-Dist: syrupy>=4.0.0; extra == "test"
@@ -75,6 +75,7 @@ dagster_dg_cli/cli/plus/create/env.py
75
75
  dagster_dg_cli/cli/plus/deploy/__init__.py
76
76
  dagster_dg_cli/cli/plus/deploy/commands.py
77
77
  dagster_dg_cli/cli/plus/deploy/deploy_session.py
78
+ dagster_dg_cli/cli/plus/deploy/validation.py
78
79
  dagster_dg_cli/cli/plus/deploy/configure/__init__.py
79
80
  dagster_dg_cli/cli/plus/deploy/configure/commands.py
80
81
  dagster_dg_cli/cli/plus/deploy/configure/configure_build_artifacts.py
@@ -1,6 +1,6 @@
1
- dagster-dg-core==1.12.11
2
- dagster==1.12.11
3
- dagster-cloud-cli==1.12.11
1
+ dagster-dg-core==1.12.13
2
+ dagster==1.12.13
3
+ dagster-cloud-cli==1.12.13
4
4
  typer
5
5
 
6
6
  [ai]
@@ -36,9 +36,9 @@ setup(
36
36
  packages=find_packages(exclude=["dagster_dg_cli_tests*"]),
37
37
  include_package_data=True,
38
38
  install_requires=[
39
- "dagster-dg-core==1.12.11",
40
- "dagster==1.12.11",
41
- "dagster-cloud-cli==1.12.11",
39
+ "dagster-dg-core==1.12.13",
40
+ "dagster==1.12.13",
41
+ "dagster-cloud-cli==1.12.13",
42
42
  "typer",
43
43
  ],
44
44
  extras_require={
@@ -1 +0,0 @@
1
- __version__ = "1.12.11"