redeploy 0.2.14__tar.gz → 0.2.16__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 (109) hide show
  1. {redeploy-0.2.14 → redeploy-0.2.16}/PKG-INFO +6 -6
  2. {redeploy-0.2.14 → redeploy-0.2.16}/README.md +5 -5
  3. {redeploy-0.2.14 → redeploy-0.2.16}/pyproject.toml +1 -1
  4. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/__init__.py +1 -1
  5. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/markpact/parser.py +1 -1
  6. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_markpact_compiler.py +7 -7
  7. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_markpact_parser.py +1 -1
  8. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/PKG-INFO +6 -6
  9. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/apply/__init__.py +0 -0
  10. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/apply/executor.py +0 -0
  11. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/cli.py +0 -0
  12. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/data_sync.py +0 -0
  13. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/__init__.py +0 -0
  14. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/detector.py +0 -0
  15. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/probes.py +0 -0
  16. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/remote.py +0 -0
  17. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/templates.py +0 -0
  18. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/detect/workflow.py +0 -0
  19. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/discovery.py +0 -0
  20. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl/__init__.py +0 -0
  21. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl/loader.py +0 -0
  22. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl/parser.py +0 -0
  23. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/__init__.py +0 -0
  24. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/context.py +0 -0
  25. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/decorators.py +0 -0
  26. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/docker_steps.py +0 -0
  27. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/exceptions.py +0 -0
  28. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/runner.py +0 -0
  29. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/dsl_python/steps.py +0 -0
  30. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/fleet.py +0 -0
  31. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/__init__.py +0 -0
  32. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/base.py +0 -0
  33. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/docker_compose.py +0 -0
  34. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/parsers/__init__.py +0 -0
  35. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/parsers/compose.py +0 -0
  36. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/iac/registry.py +0 -0
  37. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/markpact/__init__.py +0 -0
  38. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/markpact/compiler.py +0 -0
  39. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/markpact/models.py +0 -0
  40. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/models.py +0 -0
  41. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/observe.py +0 -0
  42. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/parse.py +0 -0
  43. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/patterns.py +0 -0
  44. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plan/__init__.py +0 -0
  45. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plan/planner.py +0 -0
  46. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plugins/__init__.py +0 -0
  47. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plugins/builtin/__init__.py +0 -0
  48. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plugins/builtin/browser_reload.py +0 -0
  49. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plugins/builtin/notify.py +0 -0
  50. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/plugins/builtin/systemd_reload.py +0 -0
  51. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/spec_loader.py +0 -0
  52. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/ssh.py +0 -0
  53. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/steps.py +0 -0
  54. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/__init__.py +0 -0
  55. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_cli.py +0 -0
  56. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_data_sync.py +0 -0
  57. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_discovery.py +0 -0
  58. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_dsl.py +0 -0
  59. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_examples.py +0 -0
  60. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_executor.py +0 -0
  61. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_fleet.py +0 -0
  62. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_git_integration.py +0 -0
  63. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_iac.py +0 -0
  64. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_manifest.py +0 -0
  65. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_models.py +0 -0
  66. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_observe.py +0 -0
  67. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_parse.py +0 -0
  68. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_patterns.py +0 -0
  69. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_planner_edge.py +0 -0
  70. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_plugins.py +0 -0
  71. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_probes.py +0 -0
  72. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_public_api.py +0 -0
  73. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_spec_loader.py +0 -0
  74. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_ssh.py +0 -0
  75. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_templates.py +0 -0
  76. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_verify.py +0 -0
  77. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_version.py +0 -0
  78. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_version_changelog.py +0 -0
  79. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_version_cli.py +0 -0
  80. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_version_manifest.py +0 -0
  81. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_version_sources.py +0 -0
  82. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/tests/test_workflow.py +0 -0
  83. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/verify.py +0 -0
  84. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/__init__.py +0 -0
  85. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/bump.py +0 -0
  86. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/changelog.py +0 -0
  87. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/commits.py +0 -0
  88. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/diff.py +0 -0
  89. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/git_integration.py +0 -0
  90. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/git_transaction.py +0 -0
  91. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/manifest.py +0 -0
  92. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/__init__.py +0 -0
  93. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/base.py +0 -0
  94. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/json_.py +0 -0
  95. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/plain.py +0 -0
  96. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/regex.py +0 -0
  97. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/toml_.py +0 -0
  98. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/sources/yaml_.py +0 -0
  99. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version/transaction.py +0 -0
  100. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy/version.py +0 -0
  101. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/SOURCES.txt +0 -0
  102. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/dependency_links.txt +0 -0
  103. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/entry_points.txt +0 -0
  104. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/requires.txt +0 -0
  105. {redeploy-0.2.14 → redeploy-0.2.16}/redeploy.egg-info/top_level.txt +0 -0
  106. {redeploy-0.2.14 → redeploy-0.2.16}/setup.cfg +0 -0
  107. {redeploy-0.2.14 → redeploy-0.2.16}/tests/test_iac.py +0 -0
  108. {redeploy-0.2.14 → redeploy-0.2.16}/tests/test_parse.py +0 -0
  109. {redeploy-0.2.14 → redeploy-0.2.16}/tests/test_redeploy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redeploy
3
- Version: 0.2.14
3
+ Version: 0.2.16
4
4
  Summary: Infrastructure migration toolkit: detect → plan → apply
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -27,17 +27,17 @@ Requires-Dist: pfix>=0.1.60; extra == "dev"
27
27
 
28
28
  ## AI Cost Tracking
29
29
 
30
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
31
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-9.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
30
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
31
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$5.25-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-11.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
32
32
 
33
- - 🤖 **LLM usage:** $4.9500 (33 commits)
34
- - 👤 **Human dev:** ~$951 (9.5h @ $100/h, 30min dedup)
33
+ - 🤖 **LLM usage:** $5.2500 (35 commits)
34
+ - 👤 **Human dev:** ~$1128 (11.3h @ $100/h, 30min dedup)
35
35
 
36
36
  Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
37
37
 
38
38
  ---
39
39
 
40
- ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
40
+ ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
41
41
 
42
42
  Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
43
43
 
@@ -3,17 +3,17 @@
3
3
 
4
4
  ## AI Cost Tracking
5
5
 
6
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-9.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$5.25-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-11.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
8
 
9
- - 🤖 **LLM usage:** $4.9500 (33 commits)
10
- - 👤 **Human dev:** ~$951 (9.5h @ $100/h, 30min dedup)
9
+ - 🤖 **LLM usage:** $5.2500 (35 commits)
10
+ - 👤 **Human dev:** ~$1128 (11.3h @ $100/h, 30min dedup)
11
11
 
12
12
  Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
13
13
 
14
14
  ---
15
15
 
16
- ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
16
+ ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
17
17
 
18
18
  Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
19
19
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "redeploy"
7
- version = "0.2.14"
7
+ version = "0.2.16"
8
8
  description = "Infrastructure migration toolkit: detect → plan → apply"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -7,7 +7,7 @@ Public API (stable from 0.2.0, semver guaranteed)::
7
7
 
8
8
  Everything not listed in ``__all__`` is internal and may change without notice.
9
9
  """
10
- __version__ = "0.2.14"
10
+ __version__ = "0.2.16"
11
11
 
12
12
  # ── Core models ───────────────────────────────────────────────────────────────
13
13
  from .models import ( # noqa: F401
@@ -42,7 +42,7 @@ def parse_markpact_text(text: str, *, path: str | Path = "migration.md") -> Mark
42
42
 
43
43
  if not blocks:
44
44
  raise MarkpactParseError(
45
- f"No markpact blocks found in {source_path}. Expected fenced blocks like ```markpact:config yaml."
45
+ f"No markpact blocks found in {source_path}. Expected fenced blocks like ```yaml markpact:config."
46
46
  )
47
47
 
48
48
  return MarkpactDocument(path=source_path, blocks=blocks)
@@ -12,7 +12,7 @@ def test_compile_markpact_document_yaml_subset_to_spec():
12
12
  textwrap.dedent("""\
13
13
  # Demo
14
14
 
15
- ```markpact:config yaml
15
+ ```yaml markpact:config
16
16
  name: compiler test
17
17
  source:
18
18
  strategy: docker_full
@@ -27,7 +27,7 @@ def test_compile_markpact_document_yaml_subset_to_spec():
27
27
  remote_dir: ~/myapp
28
28
  ```
29
29
 
30
- ```markpact:steps yaml
30
+ ```yaml markpact:steps
31
31
  extra_steps:
32
32
  - id: sync_env
33
33
  src: .env
@@ -64,7 +64,7 @@ def test_compile_markpact_document_supports_toml_config_and_steps():
64
64
  remote_dir = "~/myapp"
65
65
  ```
66
66
 
67
- ```markpact:steps toml
67
+ ```toml markpact:steps
68
68
  [[extra_steps]]
69
69
  id = "wait_startup"
70
70
  seconds = 5
@@ -85,7 +85,7 @@ def test_compile_markpact_document_rejects_unsupported_block_kind():
85
85
  textwrap.dedent("""\
86
86
  # Demo
87
87
 
88
- ```markpact:config yaml
88
+ ```yaml markpact:config
89
89
  name: compiler test
90
90
  source:
91
91
  strategy: docker_full
@@ -98,7 +98,7 @@ def test_compile_markpact_document_rejects_unsupported_block_kind():
98
98
  remote_dir: ~/myapp
99
99
  ```
100
100
 
101
- ```markpact:python
101
+ ```python markpact:python
102
102
  print("unsupported")
103
103
  ```
104
104
  """),
@@ -116,7 +116,7 @@ def test_compile_markpact_document_rejects_unsupported_step_keys():
116
116
  textwrap.dedent("""\
117
117
  # Demo
118
118
 
119
- ```markpact:config yaml
119
+ ```yaml markpact:config
120
120
  name: compiler test
121
121
  source:
122
122
  strategy: docker_full
@@ -129,7 +129,7 @@ def test_compile_markpact_document_rejects_unsupported_step_keys():
129
129
  remote_dir: ~/myapp
130
130
  ```
131
131
 
132
- ```markpact:steps yaml
132
+ ```yaml markpact:steps
133
133
  extra_steps:
134
134
  - id: install_docker
135
135
  action: ssh_cmd
@@ -12,7 +12,7 @@ def test_parse_markpact_text_extracts_blocks_and_lines():
12
12
  textwrap.dedent("""\
13
13
  # Demo
14
14
 
15
- ```markpact:config yaml
15
+ ```yaml markpact:config
16
16
  name: parser test
17
17
  ```
18
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redeploy
3
- Version: 0.2.14
3
+ Version: 0.2.16
4
4
  Summary: Infrastructure migration toolkit: detect → plan → apply
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -27,17 +27,17 @@ Requires-Dist: pfix>=0.1.60; extra == "dev"
27
27
 
28
28
  ## AI Cost Tracking
29
29
 
30
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
31
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-9.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
30
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
31
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$5.25-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-11.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
32
32
 
33
- - 🤖 **LLM usage:** $4.9500 (33 commits)
34
- - 👤 **Human dev:** ~$951 (9.5h @ $100/h, 30min dedup)
33
+ - 🤖 **LLM usage:** $5.2500 (35 commits)
34
+ - 👤 **Human dev:** ~$1128 (11.3h @ $100/h, 30min dedup)
35
35
 
36
36
  Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
37
37
 
38
38
  ---
39
39
 
40
- ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.14-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
40
+ ![PyPI](https://img.shields.io/badge/pypi-redeploy-blue) ![Version](https://img.shields.io/badge/version-0.2.16-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
41
41
 
42
42
  Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
43
43
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes