redeploy 0.2.56__tar.gz → 0.2.57__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.
- {redeploy-0.2.56 → redeploy-0.2.57}/PKG-INFO +6 -6
- {redeploy-0.2.56 → redeploy-0.2.57}/README.md +5 -5
- {redeploy-0.2.56 → redeploy-0.2.57}/pyproject.toml +1 -1
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/__init__.py +1 -1
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/parsers/compose.py +9 -5
- redeploy-0.2.57/redeploy/models/enums.py +69 -0
- redeploy-0.2.57/redeploy/models/persisted.py +27 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/PKG-INFO +6 -6
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/SOURCES.txt +2 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/exceptions.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/executor.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/handlers.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/progress.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/rollback.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/state.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/state_apply.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/utils/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/apply/utils/run_container_build.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/audit.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/extractor.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/generators/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/generators/docker_compose.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/generators/migration.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/sources/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/sources/compose.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/sources/hardware.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/sources/infra.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/blueprint/sources/migration.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/audit.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/blueprint.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/bump_fix.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/detect.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/device_map.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/device_map_renderers.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/devices.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/diagnose.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/diff.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/exec_.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/export.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/hardware.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/import_.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/init.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/inspect.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/mcp_cmd.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/patterns.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/plan_apply.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/plugin.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/probe.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/prompt_cmd.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/push.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/state.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/status.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/target.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/commands.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/helpers.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/monorepo.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/release.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/version/scanner.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/commands/workflow.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/core.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/display.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli/query.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/cli.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/config_apply/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/config_apply/applier.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/config_apply/loader.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/data_sync.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/builtin/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/detector.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/hardware.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/hardware_rules.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/probes.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/remote.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/templates.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/detect/workflow.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/discovery.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl/loader.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl/parser.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/context.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/decorators.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/docker_steps.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/exceptions.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/runner.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/dsl_python/steps.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/fleet.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/config_txt.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/data/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/data/hyperpixel.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/data/official.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/data/waveshare.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/fixes.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/kiosk/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/kiosk/autostart.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/kiosk/browsers.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/kiosk/compositors.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/kiosk/output_profiles.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/panels.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/hardware/raspi_config.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/decider.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/hint_provider.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/log_writer.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/loop_detector.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal/runner.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/heal.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/base.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/config_hints.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/docker_compose.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/parsers/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/iac/registry.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/integrations/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/integrations/op3_bridge.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/markpact/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/markpact/compiler.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/markpact/models.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/markpact/parser.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/mcp_server.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/models.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/observe.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/parse.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/patterns.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plan/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plan/planner.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/browser_reload.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/hardware_diagnostic.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/notify.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/process_control.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/plugins/builtin/systemd_reload.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/schema.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/spec_loader.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/ssh.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/steps/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/steps/builtins.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/steps/kiosk.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_audit.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_cli.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_data_sync.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_discovery.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_dsl.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_examples.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_executor.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_fleet.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_git_integration.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_heal.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_heal_decider.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_hooks.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_iac.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_iac_compose_contract.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_iac_docker_compose_contract.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_manifest.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_markpact_compiler.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_markpact_parser.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_models.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_observe.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_parse.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_patterns.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_planner_edge.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_plugins.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_probes.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_public_api.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_resume.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_spec_loader.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_ssh.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_templates.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_verify.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_version.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_version_changelog.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_version_cli.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_version_manifest.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_version_sources.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/tests/test_workflow.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/verify.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/bump.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/changelog.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/commits.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/diff.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/git_integration.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/git_transaction.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/manifest.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/__init__.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/base.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/json_.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/plain.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/regex.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/toml_.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/sources/yaml_.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version/transaction.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy/version.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/dependency_links.txt +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/entry_points.txt +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/requires.txt +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/redeploy.egg-info/top_level.txt +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/setup.cfg +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_blueprint_sources.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_blueprint_sources_compose.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_cli_query.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_example_argocd_flux_plugin.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_example_gitops_ci_plugin.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_example_helm_kustomize_plugin.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_hardware_config.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_hardware_kiosk.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_hardware_rules.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_heal_decider.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_heal_loop_detector.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_iac.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_iac_config_hints.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_iac_plugin_loading.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_import_plugin_template.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_parse.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_prompt_llm.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_redeploy.py +0 -0
- {redeploy-0.2.56 → redeploy-0.2.57}/tests/test_steps_kiosk.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redeploy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.57
|
|
4
4
|
Summary: Infrastructure migration toolkit: detect → plan → apply
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -32,17 +32,17 @@ Requires-Dist: mcp>=1.0; extra == "mcp"
|
|
|
32
32
|
|
|
33
33
|
## AI Cost Tracking
|
|
34
34
|
|
|
35
|
-
     
|
|
36
|
+
  
|
|
37
37
|
|
|
38
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
39
|
-
- 👤 **Human dev:** ~$
|
|
38
|
+
- 🤖 **LLM usage:** $7.5000 (77 commits)
|
|
39
|
+
- 👤 **Human dev:** ~$2886 (28.9h @ $100/h, 30min dedup)
|
|
40
40
|
|
|
41
41
|
Generated on 2026-04-21 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
    
|
|
46
46
|
|
|
47
47
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
48
48
|
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
     
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
9
|
+
- 🤖 **LLM usage:** $7.5000 (77 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$2886 (28.9h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
12
|
Generated on 2026-04-21 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
    
|
|
17
17
|
|
|
18
18
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
19
19
|
|
|
@@ -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.
|
|
10
|
+
__version__ = "0.2.57"
|
|
11
11
|
|
|
12
12
|
# ── Core models ───────────────────────────────────────────────────────────────
|
|
13
13
|
from .models import ( # noqa: F401
|
|
@@ -20,7 +20,6 @@ from typing import Any, Optional
|
|
|
20
20
|
import yaml
|
|
21
21
|
|
|
22
22
|
from ..base import (
|
|
23
|
-
ConversionWarning,
|
|
24
23
|
ParsedSpec,
|
|
25
24
|
PortInfo,
|
|
26
25
|
ServiceInfo,
|
|
@@ -91,8 +90,7 @@ class DockerComposeParser:
|
|
|
91
90
|
spec.networks.append(net_name)
|
|
92
91
|
|
|
93
92
|
# top-level volumes
|
|
94
|
-
for vol_name,
|
|
95
|
-
vol_def = vol_def or {}
|
|
93
|
+
for vol_name, _ in (raw.get("volumes") or {}).items():
|
|
96
94
|
spec.volumes.append(VolumeInfo(
|
|
97
95
|
target="",
|
|
98
96
|
source=vol_name,
|
|
@@ -131,6 +129,12 @@ class DockerComposeParser:
|
|
|
131
129
|
if svc.image and svc.image not in spec.images:
|
|
132
130
|
spec.images.append(svc.image)
|
|
133
131
|
|
|
132
|
+
def _parse_service_networks(self, d: dict) -> list[str]:
|
|
133
|
+
return list(d.get("networks") or [])
|
|
134
|
+
|
|
135
|
+
def _parse_service_replicas(self, d: dict) -> int:
|
|
136
|
+
return int((d.get("deploy") or {}).get("replicas", 1))
|
|
137
|
+
|
|
134
138
|
def _parse_service(self, name: str, d: dict, spec: ParsedSpec) -> ServiceInfo:
|
|
135
139
|
svc = ServiceInfo(name=name)
|
|
136
140
|
|
|
@@ -140,11 +144,11 @@ class DockerComposeParser:
|
|
|
140
144
|
svc.build_context = self._parse_build(d.get("build"))
|
|
141
145
|
svc.command = self._parse_command(d.get("command"))
|
|
142
146
|
svc.restart = d.get("restart") or None
|
|
143
|
-
svc.replicas =
|
|
147
|
+
svc.replicas = self._parse_service_replicas(d)
|
|
144
148
|
|
|
145
149
|
svc.ports = self._parse_ports(d.get("ports") or [], spec)
|
|
146
150
|
svc.volumes = self._parse_volumes(d.get("volumes") or [], spec)
|
|
147
|
-
svc.networks =
|
|
151
|
+
svc.networks = self._parse_service_networks(d)
|
|
148
152
|
svc.env, svc.env_files = self._parse_env(d, spec)
|
|
149
153
|
svc.depends_on = self._parse_depends_on(d.get("depends_on"))
|
|
150
154
|
svc.labels = self._parse_labels(d.get("labels"))
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Shared enums and type aliases for redeploy models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from enum import Enum
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ConflictSeverity(str, Enum):
|
|
8
|
+
LOW = "low"
|
|
9
|
+
MEDIUM = "medium"
|
|
10
|
+
HIGH = "high"
|
|
11
|
+
CRITICAL = "critical"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class StepAction(str, Enum):
|
|
15
|
+
SYSTEMCTL_STOP = "systemctl_stop"
|
|
16
|
+
SYSTEMCTL_DISABLE = "systemctl_disable"
|
|
17
|
+
SYSTEMCTL_START = "systemctl_start"
|
|
18
|
+
KUBECTL_DELETE = "kubectl_delete"
|
|
19
|
+
DOCKER_COMPOSE_UP = "docker_compose_up"
|
|
20
|
+
DOCKER_COMPOSE_DOWN = "docker_compose_down"
|
|
21
|
+
DOCKER_BUILD = "docker_build"
|
|
22
|
+
DOCKER_HEALTH_WAIT = "docker_health_wait"
|
|
23
|
+
CONTAINER_LOG_TAIL = "container_log_tail"
|
|
24
|
+
PODMAN_BUILD = "podman_build"
|
|
25
|
+
RSYNC = "rsync"
|
|
26
|
+
SCP = "scp"
|
|
27
|
+
SSH_CMD = "ssh_cmd"
|
|
28
|
+
HTTP_CHECK = "http_check"
|
|
29
|
+
VERSION_CHECK = "version_check"
|
|
30
|
+
WAIT = "wait"
|
|
31
|
+
PLUGIN = "plugin"
|
|
32
|
+
INLINE_SCRIPT = "inline_script"
|
|
33
|
+
ENSURE_CONFIG_LINE = "ensure_config_line"
|
|
34
|
+
RASPI_CONFIG = "raspi_config"
|
|
35
|
+
ENSURE_KANSHI_PROFILE = "ensure_kanshi_profile"
|
|
36
|
+
ENSURE_AUTOSTART_ENTRY = "ensure_autostart_entry"
|
|
37
|
+
ENSURE_BROWSER_KIOSK_SCRIPT = "ensure_browser_kiosk_script"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class StepStatus(str, Enum):
|
|
41
|
+
PENDING = "pending"
|
|
42
|
+
RUNNING = "running"
|
|
43
|
+
DONE = "done"
|
|
44
|
+
FAILED = "failed"
|
|
45
|
+
SKIPPED = "skipped"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class DeployStrategy(str, Enum):
|
|
49
|
+
DOCKER_FULL = "docker_full"
|
|
50
|
+
NATIVE_KIOSK = "native_kiosk"
|
|
51
|
+
DOCKER_KIOSK = "docker_kiosk"
|
|
52
|
+
KIOSK_APPLIANCE = "kiosk_appliance"
|
|
53
|
+
PODMAN_QUADLET = "podman_quadlet"
|
|
54
|
+
K3S = "k3s"
|
|
55
|
+
SYSTEMD = "systemd"
|
|
56
|
+
UNKNOWN = "unknown"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# doql / external tool aliases → canonical DeployStrategy values
|
|
60
|
+
_STRATEGY_ALIASES: dict[str, str] = {
|
|
61
|
+
"docker-compose": "docker_full",
|
|
62
|
+
"quadlet": "podman_quadlet",
|
|
63
|
+
"kiosk-appliance": "kiosk_appliance",
|
|
64
|
+
"kiosk_appliance": "kiosk_appliance",
|
|
65
|
+
"kubernetes": "k3s",
|
|
66
|
+
"k8s": "k3s",
|
|
67
|
+
"native-kiosk": "native_kiosk",
|
|
68
|
+
"docker-kiosk": "docker_kiosk",
|
|
69
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""PersistedModel mixin — YAML serialization for BaseModel subclasses."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
import yaml
|
|
8
|
+
from pydantic import BaseModel
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class PersistedModel(BaseModel):
|
|
12
|
+
"""Mixin for models that can be persisted to/from YAML files."""
|
|
13
|
+
|
|
14
|
+
def to_yaml(self) -> str:
|
|
15
|
+
"""Serialize model to YAML string."""
|
|
16
|
+
return yaml.dump(
|
|
17
|
+
self.model_dump(mode="json"),
|
|
18
|
+
allow_unicode=True,
|
|
19
|
+
sort_keys=False,
|
|
20
|
+
default_flow_style=False,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def load(cls, path: Path) -> Self:
|
|
25
|
+
"""Load model from YAML file."""
|
|
26
|
+
raw = yaml.safe_load(path.read_text())
|
|
27
|
+
return cls(**raw)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redeploy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.57
|
|
4
4
|
Summary: Infrastructure migration toolkit: detect → plan → apply
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -32,17 +32,17 @@ Requires-Dist: mcp>=1.0; extra == "mcp"
|
|
|
32
32
|
|
|
33
33
|
## AI Cost Tracking
|
|
34
34
|
|
|
35
|
-
     
|
|
36
|
+
  
|
|
37
37
|
|
|
38
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
39
|
-
- 👤 **Human dev:** ~$
|
|
38
|
+
- 🤖 **LLM usage:** $7.5000 (77 commits)
|
|
39
|
+
- 👤 **Human dev:** ~$2886 (28.9h @ $100/h, 30min dedup)
|
|
40
40
|
|
|
41
41
|
Generated on 2026-04-21 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
    
|
|
46
46
|
|
|
47
47
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
48
48
|
|
|
@@ -135,6 +135,8 @@ redeploy/markpact/__init__.py
|
|
|
135
135
|
redeploy/markpact/compiler.py
|
|
136
136
|
redeploy/markpact/models.py
|
|
137
137
|
redeploy/markpact/parser.py
|
|
138
|
+
redeploy/models/enums.py
|
|
139
|
+
redeploy/models/persisted.py
|
|
138
140
|
redeploy/plan/__init__.py
|
|
139
141
|
redeploy/plan/planner.py
|
|
140
142
|
redeploy/plugins/__init__.py
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|