shipit-cli 0.21.7__tar.gz → 0.22.0__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 (179) hide show
  1. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/PKG-INFO +27 -3
  2. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/README.md +26 -2
  3. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/pyproject.toml +1 -16
  4. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/builders/base.py +1 -1
  5. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/cli.py +240 -476
  6. shipit_cli-0.22.0/src/shipit/evaluator.py +291 -0
  7. shipit_cli-0.22.0/src/shipit/generator.py +170 -0
  8. shipit_cli-0.22.0/src/shipit/providers/base.py +69 -0
  9. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/go.py +2 -69
  10. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/hugo.py +8 -40
  11. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/install_context.py +0 -4
  12. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/jekyll.py +7 -63
  13. shipit_cli-0.22.0/src/shipit/providers/laravel.py +58 -0
  14. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/mkdocs.py +2 -45
  15. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/node.py +26 -348
  16. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/node_static.py +32 -66
  17. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/php.py +13 -140
  18. shipit_cli-0.22.0/src/shipit/providers/python.py +395 -0
  19. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/staticfile.py +49 -118
  20. shipit_cli-0.22.0/src/shipit/providers/wordpress.py +165 -0
  21. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/runners/wasmer.py +35 -26
  22. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/shipit_types.py +0 -7
  23. shipit_cli-0.22.0/src/shipit/starlark_loader.py +158 -0
  24. shipit_cli-0.22.0/src/shipit/starlib/prelude.shipit +11 -0
  25. shipit_cli-0.22.0/src/shipit/starlib/serve.shipit +120 -0
  26. shipit_cli-0.22.0/src/shipit/starlib/tools/go.shipit +50 -0
  27. shipit_cli-0.22.0/src/shipit/starlib/tools/hugo.shipit +24 -0
  28. shipit_cli-0.22.0/src/shipit/starlib/tools/jekyll.shipit +33 -0
  29. shipit_cli-0.22.0/src/shipit/starlib/tools/laravel.shipit +45 -0
  30. shipit_cli-0.22.0/src/shipit/starlib/tools/mkdocs.shipit +26 -0
  31. shipit_cli-0.22.0/src/shipit/starlib/tools/node.shipit +221 -0
  32. shipit_cli-0.22.0/src/shipit/starlib/tools/node_static.shipit +45 -0
  33. shipit_cli-0.22.0/src/shipit/starlib/tools/php.shipit +113 -0
  34. shipit_cli-0.22.0/src/shipit/starlib/tools/python.shipit +264 -0
  35. shipit_cli-0.22.0/src/shipit/starlib/tools/staticfile.shipit +84 -0
  36. shipit_cli-0.22.0/src/shipit/starlib/tools/wordpress.shipit +155 -0
  37. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/version.py +1 -1
  38. shipit_cli-0.22.0/tests/plan_helpers.py +57 -0
  39. shipit_cli-0.22.0/tests/plan_snapshots/go-graphql.json +60 -0
  40. shipit_cli-0.22.0/tests/plan_snapshots/go-simple.json +60 -0
  41. shipit_cli-0.22.0/tests/plan_snapshots/hugo.json +54 -0
  42. shipit_cli-0.22.0/tests/plan_snapshots/mkdocs-with-plugins.json +87 -0
  43. shipit_cli-0.22.0/tests/plan_snapshots/mkdocs-with-plugins__cross.json +87 -0
  44. shipit_cli-0.22.0/tests/plan_snapshots/mkdocs.json +84 -0
  45. shipit_cli-0.22.0/tests/plan_snapshots/mkdocs__cross.json +84 -0
  46. shipit_cli-0.22.0/tests/plan_snapshots/node-astro.json +93 -0
  47. shipit_cli-0.22.0/tests/plan_snapshots/node-elysia.json +81 -0
  48. shipit_cli-0.22.0/tests/plan_snapshots/node-express.json +74 -0
  49. shipit_cli-0.22.0/tests/plan_snapshots/node-fastify.json +81 -0
  50. shipit_cli-0.22.0/tests/plan_snapshots/node-h3.json +74 -0
  51. shipit_cli-0.22.0/tests/plan_snapshots/node-hono.json +81 -0
  52. shipit_cli-0.22.0/tests/plan_snapshots/node-hydrogen.json +74 -0
  53. shipit_cli-0.22.0/tests/plan_snapshots/node-koa.json +74 -0
  54. shipit_cli-0.22.0/tests/plan_snapshots/node-mastra.json +74 -0
  55. shipit_cli-0.22.0/tests/plan_snapshots/node-mcp.json +74 -0
  56. shipit_cli-0.22.0/tests/plan_snapshots/node-nestjs.json +74 -0
  57. shipit_cli-0.22.0/tests/plan_snapshots/node-next.json +89 -0
  58. shipit_cli-0.22.0/tests/plan_snapshots/node-nitro.json +74 -0
  59. shipit_cli-0.22.0/tests/plan_snapshots/node-npm-file-subdir.json +87 -0
  60. shipit_cli-0.22.0/tests/plan_snapshots/node-pnpm-workspace-subdir.json +92 -0
  61. shipit_cli-0.22.0/tests/plan_snapshots/node-react-router.json +74 -0
  62. shipit_cli-0.22.0/tests/plan_snapshots/node-remix.json +74 -0
  63. shipit_cli-0.22.0/tests/plan_snapshots/node-solidstart.json +74 -0
  64. shipit_cli-0.22.0/tests/plan_snapshots/node-tanstack-start.json +74 -0
  65. shipit_cli-0.22.0/tests/plan_snapshots/node-xmcp.json +74 -0
  66. shipit_cli-0.22.0/tests/plan_snapshots/node.json +81 -0
  67. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-angular.json +76 -0
  68. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-assemble.json +83 -0
  69. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-astro.json +83 -0
  70. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-brunch.json +76 -0
  71. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-create-react-app.json +76 -0
  72. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-docusaurus-old.json +76 -0
  73. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-docusaurus.json +76 -0
  74. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-eleventy.json +83 -0
  75. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-ember.json +76 -0
  76. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-gatsby.json +83 -0
  77. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-harp.json +83 -0
  78. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-hexo.json +83 -0
  79. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-ionic-angular.json +76 -0
  80. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-ionic-react.json +76 -0
  81. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-metalsmith.json +83 -0
  82. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-next.json +83 -0
  83. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-nuxt.json +83 -0
  84. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-parcel.json +76 -0
  85. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-polymer.json +76 -0
  86. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-preact.json +76 -0
  87. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-remix.json +76 -0
  88. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-sanity.json +76 -0
  89. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-stencil.json +76 -0
  90. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-storybook.json +76 -0
  91. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-svelte.json +76 -0
  92. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-sveltekit.json +76 -0
  93. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-umijs.json +76 -0
  94. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-vite-react.json +76 -0
  95. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-vite.json +76 -0
  96. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-vitepress.json +83 -0
  97. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-vue.json +76 -0
  98. shipit_cli-0.22.0/tests/plan_snapshots/nodestatic-vuepress.json +83 -0
  99. shipit_cli-0.22.0/tests/plan_snapshots/php-api.json +84 -0
  100. shipit_cli-0.22.0/tests/plan_snapshots/php-laravel-react.json +148 -0
  101. shipit_cli-0.22.0/tests/plan_snapshots/php-nobuild.json +59 -0
  102. shipit_cli-0.22.0/tests/plan_snapshots/php-wordpress-empty.json +120 -0
  103. shipit_cli-0.22.0/tests/plan_snapshots/php-wordpress-plugin.json +114 -0
  104. shipit_cli-0.22.0/tests/plan_snapshots/php-wordpress-theme.json +114 -0
  105. shipit_cli-0.22.0/tests/plan_snapshots/php-wordpress.json +111 -0
  106. shipit_cli-0.22.0/tests/plan_snapshots/python-django.json +121 -0
  107. shipit_cli-0.22.0/tests/plan_snapshots/python-django__cross.json +136 -0
  108. shipit_cli-0.22.0/tests/plan_snapshots/python-fastapi.json +105 -0
  109. shipit_cli-0.22.0/tests/plan_snapshots/python-fastapi__cross.json +120 -0
  110. shipit_cli-0.22.0/tests/plan_snapshots/python-fasthtml.json +104 -0
  111. shipit_cli-0.22.0/tests/plan_snapshots/python-fasthtml__cross.json +122 -0
  112. shipit_cli-0.22.0/tests/plan_snapshots/python-ffmpeg.json +105 -0
  113. shipit_cli-0.22.0/tests/plan_snapshots/python-ffmpeg__cross.json +123 -0
  114. shipit_cli-0.22.0/tests/plan_snapshots/python-flask.json +104 -0
  115. shipit_cli-0.22.0/tests/plan_snapshots/python-flask__cross.json +122 -0
  116. shipit_cli-0.22.0/tests/plan_snapshots/python-mcp-chatgpt.json +106 -0
  117. shipit_cli-0.22.0/tests/plan_snapshots/python-mcp-chatgpt__cross.json +132 -0
  118. shipit_cli-0.22.0/tests/plan_snapshots/python-mcp.json +112 -0
  119. shipit_cli-0.22.0/tests/plan_snapshots/python-mcp__cross.json +135 -0
  120. shipit_cli-0.22.0/tests/plan_snapshots/python-pandoc.json +105 -0
  121. shipit_cli-0.22.0/tests/plan_snapshots/python-pandoc__cross.json +123 -0
  122. shipit_cli-0.22.0/tests/plan_snapshots/python-pillow.json +104 -0
  123. shipit_cli-0.22.0/tests/plan_snapshots/python-pillow__cross.json +122 -0
  124. shipit_cli-0.22.0/tests/plan_snapshots/python-procfile.json +81 -0
  125. shipit_cli-0.22.0/tests/plan_snapshots/python-procfile__cross.json +81 -0
  126. shipit_cli-0.22.0/tests/plan_snapshots/python-streamlit.json +105 -0
  127. shipit_cli-0.22.0/tests/plan_snapshots/python-streamlit__cross.json +123 -0
  128. shipit_cli-0.22.0/tests/plan_snapshots/static-htmlwithjs.json +36 -0
  129. shipit_cli-0.22.0/tests/plan_snapshots/static-nobuild.json +36 -0
  130. shipit_cli-0.22.0/tests/plan_snapshots/staticfile-redirects.json +46 -0
  131. shipit_cli-0.22.0/tests/plan_snapshots/staticfile.json +36 -0
  132. shipit_cli-0.22.0/tests/plan_snapshots/synthetic__go_subdir.json +64 -0
  133. shipit_cli-0.22.0/tests/plan_snapshots/synthetic__jekyll_bare.json +69 -0
  134. shipit_cli-0.22.0/tests/plan_snapshots/synthetic__jekyll_gemfile.json +68 -0
  135. shipit_cli-0.22.0/tests/plan_snapshots/synthetic__python_subdir.json +109 -0
  136. shipit_cli-0.22.0/tests/plan_snapshots/synthetic__static_subdir.json +36 -0
  137. shipit_cli-0.22.0/tests/test_command_overrides.py +79 -0
  138. shipit_cli-0.22.0/tests/test_evaluator.py +50 -0
  139. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_generate_shipit_examples.py +12 -2
  140. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_install_context.py +43 -24
  141. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_node_provider.py +81 -71
  142. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_php_provider.py +7 -4
  143. shipit_cli-0.22.0/tests/test_plan_snapshots.py +315 -0
  144. shipit_cli-0.22.0/tests/test_project_context.py +34 -0
  145. shipit_cli-0.22.0/tests/test_python_detection.py +96 -0
  146. shipit_cli-0.22.0/tests/test_starlark_loader.py +81 -0
  147. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_staticfile_provider.py +4 -10
  148. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_subdir.py +192 -61
  149. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_version.py +14 -0
  150. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_volumes.py +2 -4
  151. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_wasmer_annotations.py +13 -6
  152. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_wordpress_phpix.py +75 -20
  153. shipit_cli-0.21.7/src/shipit/generator.py +0 -243
  154. shipit_cli-0.21.7/src/shipit/providers/base.py +0 -154
  155. shipit_cli-0.21.7/src/shipit/providers/laravel.py +0 -109
  156. shipit_cli-0.21.7/src/shipit/providers/python.py +0 -630
  157. shipit_cli-0.21.7/src/shipit/providers/wordpress.py +0 -333
  158. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/.gitignore +0 -0
  159. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/__init__.py +0 -0
  160. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/node/optimize-node-modules.sh +0 -0
  161. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/php/php.ini +0 -0
  162. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/wordpress/.htaccess +0 -0
  163. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/wordpress/install.sh +0 -0
  164. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/wordpress/start.php +0 -0
  165. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/assets/wordpress/wp-config.php +0 -0
  166. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/builders/__init__.py +0 -0
  167. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/builders/docker.py +0 -0
  168. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/builders/local.py +0 -0
  169. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/procfile.py +0 -0
  170. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/providers/registry.py +0 -0
  171. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/runners/__init__.py +0 -0
  172. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/runners/base.py +0 -0
  173. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/runners/local.py +0 -0
  174. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/ui.py +0 -0
  175. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/utils.py +0 -0
  176. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/src/shipit/volumes.py +0 -0
  177. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_cli_after_deploy.py +0 -0
  178. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_e2e.py +0 -0
  179. {shipit_cli-0.21.7 → shipit_cli-0.22.0}/tests/test_node_static_provider.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shipit-cli
3
- Version: 0.21.7
3
+ Version: 0.22.0
4
4
  Summary: Shipit CLI is the best way to build, serve and deploy your projects anywhere.
5
5
  Project-URL: homepage, https://wasmer.io
6
6
  Project-URL: repository, https://github.com/wasmerio/shipit
@@ -66,8 +66,8 @@ uvx shipit-cli generate .
66
66
  ```
67
67
 
68
68
  Create or refresh the `Shipit` file. Override build and run commands with
69
- `--install-command`, `--build-command`, or `--start-command`. Pick a exlicit provider
70
- with `--use-provider`.
69
+ `--install-command`, `--build-command`, or `--start-command`. Pick an explicit
70
+ provider with `--use-provider`.
71
71
 
72
72
  ### `plan`
73
73
 
@@ -106,6 +106,30 @@ uvx shipit-cli deploy
106
106
  Deploy a Wasmer package generated by `shipit build --wasmer`. Use
107
107
  `--wasmer-deploy-config` to write deployment metadata instead of publishing.
108
108
 
109
+ ## The Shipit file
110
+
111
+ `shipit generate` writes a small, editable Starlark file that pairs a
112
+ provider build with a serve:
113
+
114
+ ```python
115
+ load("//shipit/tools:python.shipit", "python_build", "python_serve")
116
+
117
+ build = python_build(config)
118
+
119
+ python_serve(config, build, name = "my-app")
120
+ ```
121
+
122
+ The file is yours: add steps around the build (`build_pre` / `build_post`),
123
+ extend the runtime (`extra_deps`, `extra_env`), attach services, or compose
124
+ builds and serves from different providers (a Hugo build served by the
125
+ shared static serve, a PHP build with a Node asset build folded in). Any
126
+ config field can also be overridden without editing anything, via `SHIPIT_*`
127
+ environment variables (e.g. `SHIPIT_PHPIX=true`) or `--config` JSON.
128
+
129
+ See [docs/shipit-files.md](docs/shipit-files.md) for the full format
130
+ reference: builtins, `file_exists()`, load labels, the serve override
131
+ surface, and composition examples.
132
+
109
133
  ## Supported Technologies
110
134
 
111
135
  Shipit works with three execution environments:
@@ -43,8 +43,8 @@ uvx shipit-cli generate .
43
43
  ```
44
44
 
45
45
  Create or refresh the `Shipit` file. Override build and run commands with
46
- `--install-command`, `--build-command`, or `--start-command`. Pick a exlicit provider
47
- with `--use-provider`.
46
+ `--install-command`, `--build-command`, or `--start-command`. Pick an explicit
47
+ provider with `--use-provider`.
48
48
 
49
49
  ### `plan`
50
50
 
@@ -83,6 +83,30 @@ uvx shipit-cli deploy
83
83
  Deploy a Wasmer package generated by `shipit build --wasmer`. Use
84
84
  `--wasmer-deploy-config` to write deployment metadata instead of publishing.
85
85
 
86
+ ## The Shipit file
87
+
88
+ `shipit generate` writes a small, editable Starlark file that pairs a
89
+ provider build with a serve:
90
+
91
+ ```python
92
+ load("//shipit/tools:python.shipit", "python_build", "python_serve")
93
+
94
+ build = python_build(config)
95
+
96
+ python_serve(config, build, name = "my-app")
97
+ ```
98
+
99
+ The file is yours: add steps around the build (`build_pre` / `build_post`),
100
+ extend the runtime (`extra_deps`, `extra_env`), attach services, or compose
101
+ builds and serves from different providers (a Hugo build served by the
102
+ shared static serve, a PHP build with a Node asset build folded in). Any
103
+ config field can also be overridden without editing anything, via `SHIPIT_*`
104
+ environment variables (e.g. `SHIPIT_PHPIX=true`) or `--config` JSON.
105
+
106
+ See [docs/shipit-files.md](docs/shipit-files.md) for the full format
107
+ reference: builtins, `file_exists()`, load labels, the serve override
108
+ surface, and composition examples.
109
+
86
110
  ## Supported Technologies
87
111
 
88
112
  Shipit works with three execution environments:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "shipit-cli"
3
- version = "0.21.7"
3
+ version = "0.22.0"
4
4
  description = "Shipit CLI is the best way to build, serve and deploy your projects anywhere."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -74,20 +74,5 @@ ignore_missing_imports = true
74
74
  warn_redundant_casts = true
75
75
  warn_unused_ignores = true
76
76
 
77
- [[tool.mypy.overrides]]
78
- module = [
79
- "shipit.cli",
80
- "shipit.generator",
81
- "shipit.providers.go",
82
- "shipit.providers.hugo",
83
- "shipit.providers.jekyll",
84
- "shipit.providers.node_static",
85
- "shipit.providers.python",
86
- "shipit.providers.staticfile",
87
- "shipit.runners.wasmer",
88
- "tests.test_e2e",
89
- ]
90
- ignore_errors = true
91
-
92
77
  [tool.uv.workspace]
93
78
  exclude = ["examples/*"]
@@ -2,7 +2,7 @@ from pathlib import Path
2
2
  from typing import Dict, List, Optional, Protocol, TYPE_CHECKING
3
3
 
4
4
  if TYPE_CHECKING:
5
- from shipit.cli import Mount, Step
5
+ from shipit.shipit_types import Mount, Step
6
6
 
7
7
 
8
8
  class BuildBackend(Protocol):