shipit-cli 0.19.8__tar.gz → 0.20.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 (54) hide show
  1. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/PKG-INFO +1 -1
  2. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/pyproject.toml +1 -1
  3. shipit_cli-0.20.0/src/shipit/assets/node/optimize-node-modules.sh +34 -0
  4. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/hugo.py +18 -6
  5. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/laravel.py +32 -19
  6. shipit_cli-0.20.0/src/shipit/providers/node.py +1048 -0
  7. shipit_cli-0.20.0/src/shipit/providers/node_static.py +674 -0
  8. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/registry.py +2 -0
  9. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/runners/wasmer.py +91 -30
  10. shipit_cli-0.20.0/src/shipit/version.py +5 -0
  11. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_e2e.py +319 -11
  12. shipit_cli-0.20.0/tests/test_node_provider.py +422 -0
  13. shipit_cli-0.20.0/tests/test_node_static_provider.py +550 -0
  14. shipit_cli-0.20.0/tests/test_wasmer_annotations.py +254 -0
  15. shipit_cli-0.19.8/src/shipit/providers/node_static.py +0 -752
  16. shipit_cli-0.19.8/src/shipit/version.py +0 -5
  17. shipit_cli-0.19.8/tests/test_wasmer_annotations.py +0 -118
  18. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/.gitignore +0 -0
  19. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/README.md +0 -0
  20. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/__init__.py +0 -0
  21. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/assets/php/php.ini +0 -0
  22. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/assets/wordpress/.htaccess +0 -0
  23. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/assets/wordpress/install.sh +0 -0
  24. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/assets/wordpress/start.php +0 -0
  25. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/assets/wordpress/wp-config.php +0 -0
  26. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/builders/__init__.py +0 -0
  27. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/builders/base.py +0 -0
  28. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/builders/docker.py +0 -0
  29. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/builders/local.py +0 -0
  30. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/cli.py +0 -0
  31. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/generator.py +0 -0
  32. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/procfile.py +0 -0
  33. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/base.py +0 -0
  34. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/go.py +0 -0
  35. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/jekyll.py +0 -0
  36. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/mkdocs.py +0 -0
  37. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/php.py +0 -0
  38. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/python.py +0 -0
  39. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/staticfile.py +0 -0
  40. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/providers/wordpress.py +0 -0
  41. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/runners/__init__.py +0 -0
  42. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/runners/base.py +0 -0
  43. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/runners/local.py +0 -0
  44. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/shipit_types.py +0 -0
  45. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/ui.py +0 -0
  46. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/utils.py +0 -0
  47. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/src/shipit/volumes.py +0 -0
  48. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_cli_after_deploy.py +0 -0
  49. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_generate_shipit_examples.py +0 -0
  50. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_php_provider.py +0 -0
  51. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_staticfile_provider.py +0 -0
  52. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_version.py +0 -0
  53. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_volumes.py +0 -0
  54. {shipit_cli-0.19.8 → shipit_cli-0.20.0}/tests/test_wordpress_phpix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shipit-cli
3
- Version: 0.19.8
3
+ Version: 0.20.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "shipit-cli"
3
- version = "0.19.8"
3
+ version = "0.20.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"
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="${1:-node_modules}"
5
+
6
+ if [[ ! -d "$root" ]]; then
7
+ exit 0
8
+ fi
9
+
10
+ is_wasm() {
11
+ local file="$1"
12
+ local magic
13
+
14
+ case "$file" in
15
+ *.wasm | *.WASM)
16
+ return 0
17
+ ;;
18
+ esac
19
+
20
+ magic="$(dd if="$file" bs=4 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n')"
21
+ [[ "$magic" == "0061736d" ]]
22
+ }
23
+
24
+ while IFS= read -r -d "" file; do
25
+ if is_wasm "$file"; then
26
+ continue
27
+ fi
28
+
29
+ if ! grep -Iq . "$file"; then
30
+ rm -f -- "$file"
31
+ fi
32
+ done < <(
33
+ find "$root" -type f \( -perm -100 -o -perm -010 -o -perm -001 \) -print0
34
+ )
@@ -17,20 +17,32 @@ from pydantic_settings import SettingsConfigDict
17
17
  import toml
18
18
  import json
19
19
  import yaml
20
- from pyripgrep import Grep
21
20
 
22
21
 
23
- def is_old_hugo(src_dir: Path) -> dict:
24
- rg = Grep()
22
+ def _contains_text(src_dir: Path, text: str) -> bool:
23
+ skipped_dirs = {".git", ".shipit", "node_modules"}
24
+ for path in src_dir.rglob("*"):
25
+ if any(part in skipped_dirs for part in path.parts):
26
+ continue
27
+ if not path.is_file():
28
+ continue
29
+ try:
30
+ if text in path.read_text(errors="ignore"):
31
+ return True
32
+ except OSError:
33
+ continue
34
+ return False
35
+
25
36
 
37
+ def is_old_hugo(src_dir: Path) -> bool:
26
38
  # Hard-fail signal: old Hugo
27
- if rg.search("resources.ToCSS", path=str(src_dir)):
39
+ if _contains_text(src_dir, "resources.ToCSS"):
28
40
  return True
29
41
 
30
42
  # Modern Hugo signal
31
- if rg.search("css.Sass", path=str(src_dir)):
43
+ if _contains_text(src_dir, "css.Sass"):
32
44
  return False
33
-
45
+
34
46
  return False
35
47
 
36
48
 
@@ -1,43 +1,52 @@
1
1
  from pathlib import Path
2
- from typing import Dict, Optional
2
+ from typing import Any, Dict, Optional
3
+
4
+ from pydantic_settings import SettingsConfigDict
3
5
 
4
6
  from .base import (
7
+ Config,
5
8
  DetectResult,
6
9
  DependencySpec,
7
- Provider,
8
- _exists,
9
10
  MountSpec,
10
11
  ServiceSpec,
11
12
  VolumeSpec,
12
- CustomCommands,
13
- Config,
13
+ _exists,
14
14
  )
15
+ from .node import NodeConfig, NodeProvider
15
16
  from .php import PhpConfig, PhpProvider
16
- from .node_static import NodeStaticConfig, NodeStaticProvider
17
- from pydantic_settings import SettingsConfigDict
18
17
 
19
18
 
20
- class LaravelConfig(PhpConfig, NodeStaticConfig):
19
+ class LaravelConfig(PhpConfig, NodeConfig):
21
20
  model_config = SettingsConfigDict(extra="ignore", env_prefix="SHIPIT_")
22
21
 
22
+ framework: Optional[Any] = None
23
+
24
+
25
+ class LaravelProvider(PhpProvider, NodeProvider):
26
+ config: LaravelConfig
23
27
 
24
- class LaravelProvider(PhpProvider):
25
28
  def __init__(self, path: Path, config: LaravelConfig):
26
29
  self.path = path
27
- self.node_provider = NodeStaticProvider(path, config, only_build=True)
28
30
  self.config = config
31
+ self.only_build = True
29
32
 
30
33
  @classmethod
31
- def load_config(cls, path: Path, base_config: Config) -> LaravelConfig:
34
+ def load_config(
35
+ cls,
36
+ path: Path,
37
+ base_config: Config,
38
+ infer_start: bool = False,
39
+ ) -> LaravelConfig:
32
40
  config = super().load_config(path, base_config)
33
41
  config.use_composer = True
34
- node_config = NodeStaticProvider.load_config(path, base_config)
35
- node_config.static_dir = None
36
- node_config.static_generator = None
42
+ node_config = NodeProvider.load_config(
43
+ path, base_config, infer_start=False
44
+ )
45
+ node_config_data = node_config.model_dump(exclude={"framework"})
37
46
  return LaravelConfig(
38
47
  **(
39
48
  config.model_dump()
40
- | node_config.model_dump()
49
+ | node_config_data
41
50
  | base_config.model_dump()
42
51
  )
43
52
  )
@@ -46,6 +55,10 @@ class LaravelProvider(PhpProvider):
46
55
  def name(cls) -> str:
47
56
  return "laravel"
48
57
 
58
+ @classmethod
59
+ def detect_framework(cls, *args: Any, **kwargs: Any) -> Any:
60
+ return PhpProvider.detect_framework(*args, **kwargs)
61
+
49
62
  @classmethod
50
63
  def detect(cls, path: Path, config: Config) -> Optional[DetectResult]:
51
64
  if _exists(path, "artisan") and _exists(path, "composer.json"):
@@ -55,12 +68,12 @@ class LaravelProvider(PhpProvider):
55
68
  def dependencies(self) -> list[DependencySpec]:
56
69
  return [
57
70
  *super().dependencies(),
58
- *self.node_provider.dependencies()
71
+ *NodeProvider.dependencies(self),
59
72
  ]
60
73
 
61
74
  def build_steps(self) -> list[str]:
62
- node_install = list(self.node_provider.build_steps_install())
63
- node_build = list(self.node_provider.build_steps_build())
75
+ node_install = list(NodeProvider.build_steps_install(self))
76
+ node_build = list(NodeProvider.build_steps_build(self))
64
77
  return super().build_steps_with_options(
65
78
  extra_ignore=["node_modules"],
66
79
  after_install=node_install,
@@ -84,7 +97,7 @@ class LaravelProvider(PhpProvider):
84
97
  }
85
98
 
86
99
  def mounts(self) -> list[MountSpec]:
87
- return [*super().mounts(), *self.node_provider.mounts()]
100
+ return [*super().mounts(), *NodeProvider.mounts(self)]
88
101
 
89
102
  def volumes(self) -> list[VolumeSpec]:
90
103
  return []