ecreshore 1.0.1__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 (111) hide show
  1. ecreshore-1.0.1/PKG-INFO +195 -0
  2. ecreshore-1.0.1/README.md +176 -0
  3. ecreshore-1.0.1/pyproject.toml +88 -0
  4. ecreshore-1.0.1/setup.cfg +4 -0
  5. ecreshore-1.0.1/src/ecreshore/__init__.py +5 -0
  6. ecreshore-1.0.1/src/ecreshore/async_docker_client.py +434 -0
  7. ecreshore-1.0.1/src/ecreshore/aws_utils.py +43 -0
  8. ecreshore-1.0.1/src/ecreshore/cache_config.py +168 -0
  9. ecreshore-1.0.1/src/ecreshore/cli/__init__.py +73 -0
  10. ecreshore-1.0.1/src/ecreshore/cli/cluster/__init__.py +20 -0
  11. ecreshore-1.0.1/src/ecreshore/cli/cluster/inspect.py +108 -0
  12. ecreshore-1.0.1/src/ecreshore/cli/cluster/scan.py +92 -0
  13. ecreshore-1.0.1/src/ecreshore/cli/cluster/scan_formatters.py +341 -0
  14. ecreshore-1.0.1/src/ecreshore/cli/cluster/scan_helpers.py +58 -0
  15. ecreshore-1.0.1/src/ecreshore/cli/core/__init__.py +27 -0
  16. ecreshore-1.0.1/src/ecreshore/cli/core/auth_test.py +69 -0
  17. ecreshore-1.0.1/src/ecreshore/cli/core/batch.py +412 -0
  18. ecreshore-1.0.1/src/ecreshore/cli/core/copy.py +373 -0
  19. ecreshore-1.0.1/src/ecreshore/cli/repository/__init__.py +7 -0
  20. ecreshore-1.0.1/src/ecreshore/cli/repository/list_images.py +276 -0
  21. ecreshore-1.0.1/src/ecreshore/cli/repository/list_repositories.py +100 -0
  22. ecreshore-1.0.1/src/ecreshore/cli/repository/purge.py +749 -0
  23. ecreshore-1.0.1/src/ecreshore/cli/tools/__init__.py +7 -0
  24. ecreshore-1.0.1/src/ecreshore/cli/tools/completion.py +193 -0
  25. ecreshore-1.0.1/src/ecreshore/cli/tools/generate_config.py +33 -0
  26. ecreshore-1.0.1/src/ecreshore/cli/tools/terminal_info.py +94 -0
  27. ecreshore-1.0.1/src/ecreshore/cli/utils/__init__.py +7 -0
  28. ecreshore-1.0.1/src/ecreshore/cli/utils/completion.py +143 -0
  29. ecreshore-1.0.1/src/ecreshore/cli/utils/logging_setup.py +80 -0
  30. ecreshore-1.0.1/src/ecreshore/cli/utils/ui_helpers.py +35 -0
  31. ecreshore-1.0.1/src/ecreshore/cli/utils/validation.py +32 -0
  32. ecreshore-1.0.1/src/ecreshore/ecr_auth.py +163 -0
  33. ecreshore-1.0.1/src/ecreshore/services/__init__.py +1 -0
  34. ecreshore-1.0.1/src/ecreshore/services/async_transfer_service.py +227 -0
  35. ecreshore-1.0.1/src/ecreshore/services/base_service.py +87 -0
  36. ecreshore-1.0.1/src/ecreshore/services/batch_config.py +650 -0
  37. ecreshore-1.0.1/src/ecreshore/services/batch_error_aggregator.py +304 -0
  38. ecreshore-1.0.1/src/ecreshore/services/batch_processor.py +666 -0
  39. ecreshore-1.0.1/src/ecreshore/services/batch_progress.py +1147 -0
  40. ecreshore-1.0.1/src/ecreshore/services/buildx_transfer_service.py +411 -0
  41. ecreshore-1.0.1/src/ecreshore/services/cache_backends.py +382 -0
  42. ecreshore-1.0.1/src/ecreshore/services/cache_manager.py +163 -0
  43. ecreshore-1.0.1/src/ecreshore/services/cache_service.py +453 -0
  44. ecreshore-1.0.1/src/ecreshore/services/digest_verification.py +663 -0
  45. ecreshore-1.0.1/src/ecreshore/services/ecr_repository.py +1105 -0
  46. ecreshore-1.0.1/src/ecreshore/services/error_handler.py +326 -0
  47. ecreshore-1.0.1/src/ecreshore/services/hybrid_transfer_service.py +294 -0
  48. ecreshore-1.0.1/src/ecreshore/services/image_parser.py +165 -0
  49. ecreshore-1.0.1/src/ecreshore/services/image_presence_checker.py +1084 -0
  50. ecreshore-1.0.1/src/ecreshore/services/k8s_config.py +258 -0
  51. ecreshore-1.0.1/src/ecreshore/services/k8s_models.py +150 -0
  52. ecreshore-1.0.1/src/ecreshore/services/k8s_scanner.py +333 -0
  53. ecreshore-1.0.1/src/ecreshore/services/output_modes.py +14 -0
  54. ecreshore-1.0.1/src/ecreshore/services/platform_models.py +177 -0
  55. ecreshore-1.0.1/src/ecreshore/services/progress_reporter.py +256 -0
  56. ecreshore-1.0.1/src/ecreshore/services/purge_service.py +559 -0
  57. ecreshore-1.0.1/src/ecreshore/services/resume_service.py +486 -0
  58. ecreshore-1.0.1/src/ecreshore/services/retry_service.py +292 -0
  59. ecreshore-1.0.1/src/ecreshore/services/single_transfer_progress.py +405 -0
  60. ecreshore-1.0.1/src/ecreshore/services/transfer_request_builder.py +325 -0
  61. ecreshore-1.0.1/src/ecreshore/services/transfer_service.py +151 -0
  62. ecreshore-1.0.1/src/ecreshore/terminal_detection.py +215 -0
  63. ecreshore-1.0.1/src/ecreshore.egg-info/PKG-INFO +195 -0
  64. ecreshore-1.0.1/src/ecreshore.egg-info/SOURCES.txt +109 -0
  65. ecreshore-1.0.1/src/ecreshore.egg-info/dependency_links.txt +1 -0
  66. ecreshore-1.0.1/src/ecreshore.egg-info/entry_points.txt +2 -0
  67. ecreshore-1.0.1/src/ecreshore.egg-info/requires.txt +12 -0
  68. ecreshore-1.0.1/src/ecreshore.egg-info/top_level.txt +1 -0
  69. ecreshore-1.0.1/tests/test_async_transfer_service.py +217 -0
  70. ecreshore-1.0.1/tests/test_aws_utils.py +131 -0
  71. ecreshore-1.0.1/tests/test_batch_command_helpers.py +411 -0
  72. ecreshore-1.0.1/tests/test_batch_config.py +565 -0
  73. ecreshore-1.0.1/tests/test_batch_processor.py +382 -0
  74. ecreshore-1.0.1/tests/test_batch_progress_helpers.py +735 -0
  75. ecreshore-1.0.1/tests/test_batch_progress_simple.py +194 -0
  76. ecreshore-1.0.1/tests/test_buildx_digest_verification.py +169 -0
  77. ecreshore-1.0.1/tests/test_buildx_platform_limiting.py +220 -0
  78. ecreshore-1.0.1/tests/test_cache_service.py +570 -0
  79. ecreshore-1.0.1/tests/test_cached_decorator.py +329 -0
  80. ecreshore-1.0.1/tests/test_digest_verification.py +337 -0
  81. ecreshore-1.0.1/tests/test_ecr_auth.py +328 -0
  82. ecreshore-1.0.1/tests/test_ecr_cache_integration.py +365 -0
  83. ecreshore-1.0.1/tests/test_ecr_repository_helpers.py +336 -0
  84. ecreshore-1.0.1/tests/test_ecr_repository_statistics_helpers.py +306 -0
  85. ecreshore-1.0.1/tests/test_enhanced_copy_command.py +275 -0
  86. ecreshore-1.0.1/tests/test_error_handler.py +317 -0
  87. ecreshore-1.0.1/tests/test_field_parser.py +261 -0
  88. ecreshore-1.0.1/tests/test_finish_batch_refactoring.py +531 -0
  89. ecreshore-1.0.1/tests/test_hybrid_transfer_service.py +213 -0
  90. ecreshore-1.0.1/tests/test_image_parser.py +210 -0
  91. ecreshore-1.0.1/tests/test_image_presence_caching.py +370 -0
  92. ecreshore-1.0.1/tests/test_image_presence_checker.py +453 -0
  93. ecreshore-1.0.1/tests/test_k8s_config.py +296 -0
  94. ecreshore-1.0.1/tests/test_k8s_ecr_detection.py +172 -0
  95. ecreshore-1.0.1/tests/test_k8s_models.py +253 -0
  96. ecreshore-1.0.1/tests/test_list_images.py +448 -0
  97. ecreshore-1.0.1/tests/test_progress_reporter.py +369 -0
  98. ecreshore-1.0.1/tests/test_public_ecr_filtering.py +187 -0
  99. ecreshore-1.0.1/tests/test_purge_display_helpers.py +365 -0
  100. ecreshore-1.0.1/tests/test_purge_refactoring.py +418 -0
  101. ecreshore-1.0.1/tests/test_purge_service.py +707 -0
  102. ecreshore-1.0.1/tests/test_purge_service_helpers.py +403 -0
  103. ecreshore-1.0.1/tests/test_retry_service.py +398 -0
  104. ecreshore-1.0.1/tests/test_scan_formatters_helpers.py +404 -0
  105. ecreshore-1.0.1/tests/test_single_transfer_progress_helpers.py +296 -0
  106. ecreshore-1.0.1/tests/test_skip_decision_caching.py +393 -0
  107. ecreshore-1.0.1/tests/test_skip_if_present_e2e.py +366 -0
  108. ecreshore-1.0.1/tests/test_skip_if_present_fast.py +513 -0
  109. ecreshore-1.0.1/tests/test_skip_if_present_integration.py +263 -0
  110. ecreshore-1.0.1/tests/test_terminal_detection.py +609 -0
  111. ecreshore-1.0.1/tests/test_transfer_service.py +173 -0
@@ -0,0 +1,195 @@
1
+ Metadata-Version: 2.4
2
+ Name: ecreshore
3
+ Version: 1.0.1
4
+ Summary: cli utility for copying container images to private ECR
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: aiodocker==0.24.0
8
+ Requires-Dist: boto3==1.40.25
9
+ Requires-Dist: click==8.2.1
10
+ Requires-Dist: docker==7.1.0
11
+ Requires-Dist: kubernetes==33.1.0
12
+ Requires-Dist: pytest-asyncio>=1.1.0
13
+ Requires-Dist: pytest-cov>=7.0.0
14
+ Requires-Dist: radon>=6.0.1
15
+ Requires-Dist: rich==14.1.0
16
+ Requires-Dist: structlog==25.4.0
17
+ Requires-Dist: tenacity==9.1.2
18
+ Requires-Dist: yaml-for-humans==1.1.1
19
+
20
+ # ECReshore - Container Image Migration Tool
21
+
22
+ ECReshore is a CLI tool for copying container images to AWS ECR registries with intelligent multi-architecture support and batch processing capabilities.
23
+
24
+ ## Core Commands
25
+
26
+ ### `copy` - Copy Single Images
27
+
28
+ Copy container images to ECR with automatic multi-architecture detection.
29
+
30
+ **Basic Usage:**
31
+ ```bash
32
+ # Copy with automatic repository inference
33
+ ecreshore copy nginx:latest
34
+
35
+ # Copy with custom target repository
36
+ ecreshore copy nginx:latest my-nginx-repo
37
+
38
+ # Copy with specific platforms
39
+ ecreshore copy nginx:latest --platforms linux/amd64,linux/arm64
40
+
41
+ # Copy all architectures
42
+ ecreshore copy nginx:latest -A
43
+ ```
44
+
45
+ **Key Features:**
46
+ - **Smart repository inference** - Automatically determines target repository name
47
+ - **Multi-architecture support** - Preserves all platforms when Docker Buildx available
48
+ - **Skip-if-present** - Automatically skips if target image already exists with matching content
49
+ - **Force override** - Use `--force` to transfer even if target exists
50
+
51
+ ### `scan` - Kubernetes Cluster Scanning
52
+
53
+ Scan Kubernetes clusters to identify non-ECR container images.
54
+
55
+ **Basic Usage:**
56
+ ```bash
57
+ # Scan current cluster and generate batch config
58
+ ecreshore scan --export batch-config.yaml
59
+
60
+ # Scan specific namespace
61
+ ecreshore scan -n production
62
+
63
+ # Scan all namespaces
64
+ ecreshore scan -A
65
+
66
+ # Generate report format
67
+ ecreshore scan --output report
68
+ ```
69
+
70
+ **Key Features:**
71
+ - **Workload discovery** - Scans Deployments, DaemonSets, StatefulSets, Jobs, CronJobs, Pods
72
+ - **ECR filtering** - Only identifies non-ECR images that need migration
73
+ - **Batch config generation** - Creates ready-to-use configuration files
74
+ - **Namespace targeting** - Include/exclude specific namespaces
75
+
76
+ ### `batch` - Batch Processing
77
+
78
+ Execute multiple image transfers from YAML configuration files.
79
+
80
+ **Basic Usage:**
81
+ ```bash
82
+ # Execute batch transfers
83
+ ecreshore batch config.yaml
84
+
85
+ # Preview without executing
86
+ ecreshore batch config.yaml --dry-run
87
+
88
+ # Force rich UI display
89
+ ecreshore batch config.yaml --rich
90
+
91
+ # Output structured logs
92
+ ecreshore batch config.yaml --output log
93
+ ```
94
+
95
+ **Configuration Format:**
96
+ ```yaml
97
+ settings:
98
+ concurrent_transfers: 3 # Parallel transfers
99
+ retry_attempts: 3 # Retry attempts per transfer
100
+ verify_digests: true # Verify image integrity
101
+ region: us-east-2 # AWS region
102
+
103
+ transfers:
104
+ - source: nginx:latest
105
+ target: my-nginx
106
+ source_tag: latest
107
+ target_tag: latest
108
+ ```
109
+
110
+ **Key Features:**
111
+ - **Concurrent processing** - Configurable parallel transfers (default: 3)
112
+ - **Progress tracking** - Rich UI with real-time transfer status
113
+ - **Error handling** - Automatic retries with configurable attempts
114
+ - **Skip detection** - Automatically skips existing images with matching content
115
+
116
+ ### `purge` - Repository Cleanup
117
+
118
+ Remove images from ECR repositories with safety controls.
119
+
120
+ **Basic Usage:**
121
+ ```bash
122
+ # Preview deletion for specific repository
123
+ ecreshore purge my-repo --dry-run
124
+
125
+ # Purge repository, keeping latest image
126
+ ecreshore purge my-repo --keep-latest
127
+
128
+ # Preview deletion for all repositories
129
+ ecreshore purge -A --dry-run
130
+
131
+ # Purge with pattern matching
132
+ ecreshore purge -A --filter my-app-* --keep-latest
133
+ ```
134
+
135
+ **Key Features:**
136
+ - **Safety first** - Always use `--dry-run` to preview deletions
137
+ - **Selective deletion** - Target specific repositories or use patterns
138
+ - **Latest preservation** - `--keep-latest` protects most recent images
139
+ - **Bulk operations** - Process all repositories with filtering options
140
+
141
+ ## Common Workflow
142
+
143
+ 1. **Discovery**: Scan your cluster to identify images needing migration
144
+ ```bash
145
+ ecreshore scan --export migration-plan.yaml
146
+ ```
147
+
148
+ 2. **Preview**: Review the generated configuration and preview the batch operation
149
+ ```bash
150
+ ecreshore batch migration-plan.yaml --dry-run
151
+ ```
152
+
153
+ 3. **Execute**: Run the batch migration
154
+ ```bash
155
+ ecreshore batch migration-plan.yaml
156
+ ```
157
+
158
+ 4. **Cleanup**: Optionally purge old/unused images
159
+ ```bash
160
+ ecreshore purge old-repo --dry-run
161
+ ecreshore purge old-repo --keep-latest
162
+ ```
163
+
164
+ ## Global Options
165
+
166
+ - **`-v, --verbose`** - Increase verbosity (`-v` for INFO, `-vv` for DEBUG)
167
+ - **`--region`** - AWS region (respects `AWS_DEFAULT_REGION`, `AWS_REGION`, `~/.aws/config`)
168
+ - **`--registry-id`** - AWS account ID for ECR registry
169
+ - **`--simple/--rich`** - Force specific UI modes (auto-detected by default)
170
+
171
+ ## UI Modes
172
+
173
+ ECReshore automatically detects your terminal capabilities and chooses the best display mode:
174
+
175
+ - **Rich UI** - Full-featured progress bars, colors, and real-time updates
176
+ - **Simple UI** - Text-based progress suitable for basic terminals
177
+ - **Log output** - Structured JSON logs for automation and monitoring
178
+
179
+ Use `ecreshore terminal-info` to see your terminal's detected capabilities.
180
+
181
+ ## Authentication
182
+
183
+ ECReshore uses your existing AWS credentials. Ensure you have:
184
+ - AWS CLI configured (`aws configure`)
185
+ - Appropriate ECR permissions (`ecr:*` or specific ECR actions)
186
+ - Docker daemon running for image operations
187
+
188
+ Test authentication with:
189
+ ```bash
190
+ ecreshore auth-test
191
+ ```
192
+
193
+ ---
194
+
195
+ For additional commands and advanced options, run `ecreshore --help` or `ecreshore COMMAND --help`.
@@ -0,0 +1,176 @@
1
+ # ECReshore - Container Image Migration Tool
2
+
3
+ ECReshore is a CLI tool for copying container images to AWS ECR registries with intelligent multi-architecture support and batch processing capabilities.
4
+
5
+ ## Core Commands
6
+
7
+ ### `copy` - Copy Single Images
8
+
9
+ Copy container images to ECR with automatic multi-architecture detection.
10
+
11
+ **Basic Usage:**
12
+ ```bash
13
+ # Copy with automatic repository inference
14
+ ecreshore copy nginx:latest
15
+
16
+ # Copy with custom target repository
17
+ ecreshore copy nginx:latest my-nginx-repo
18
+
19
+ # Copy with specific platforms
20
+ ecreshore copy nginx:latest --platforms linux/amd64,linux/arm64
21
+
22
+ # Copy all architectures
23
+ ecreshore copy nginx:latest -A
24
+ ```
25
+
26
+ **Key Features:**
27
+ - **Smart repository inference** - Automatically determines target repository name
28
+ - **Multi-architecture support** - Preserves all platforms when Docker Buildx available
29
+ - **Skip-if-present** - Automatically skips if target image already exists with matching content
30
+ - **Force override** - Use `--force` to transfer even if target exists
31
+
32
+ ### `scan` - Kubernetes Cluster Scanning
33
+
34
+ Scan Kubernetes clusters to identify non-ECR container images.
35
+
36
+ **Basic Usage:**
37
+ ```bash
38
+ # Scan current cluster and generate batch config
39
+ ecreshore scan --export batch-config.yaml
40
+
41
+ # Scan specific namespace
42
+ ecreshore scan -n production
43
+
44
+ # Scan all namespaces
45
+ ecreshore scan -A
46
+
47
+ # Generate report format
48
+ ecreshore scan --output report
49
+ ```
50
+
51
+ **Key Features:**
52
+ - **Workload discovery** - Scans Deployments, DaemonSets, StatefulSets, Jobs, CronJobs, Pods
53
+ - **ECR filtering** - Only identifies non-ECR images that need migration
54
+ - **Batch config generation** - Creates ready-to-use configuration files
55
+ - **Namespace targeting** - Include/exclude specific namespaces
56
+
57
+ ### `batch` - Batch Processing
58
+
59
+ Execute multiple image transfers from YAML configuration files.
60
+
61
+ **Basic Usage:**
62
+ ```bash
63
+ # Execute batch transfers
64
+ ecreshore batch config.yaml
65
+
66
+ # Preview without executing
67
+ ecreshore batch config.yaml --dry-run
68
+
69
+ # Force rich UI display
70
+ ecreshore batch config.yaml --rich
71
+
72
+ # Output structured logs
73
+ ecreshore batch config.yaml --output log
74
+ ```
75
+
76
+ **Configuration Format:**
77
+ ```yaml
78
+ settings:
79
+ concurrent_transfers: 3 # Parallel transfers
80
+ retry_attempts: 3 # Retry attempts per transfer
81
+ verify_digests: true # Verify image integrity
82
+ region: us-east-2 # AWS region
83
+
84
+ transfers:
85
+ - source: nginx:latest
86
+ target: my-nginx
87
+ source_tag: latest
88
+ target_tag: latest
89
+ ```
90
+
91
+ **Key Features:**
92
+ - **Concurrent processing** - Configurable parallel transfers (default: 3)
93
+ - **Progress tracking** - Rich UI with real-time transfer status
94
+ - **Error handling** - Automatic retries with configurable attempts
95
+ - **Skip detection** - Automatically skips existing images with matching content
96
+
97
+ ### `purge` - Repository Cleanup
98
+
99
+ Remove images from ECR repositories with safety controls.
100
+
101
+ **Basic Usage:**
102
+ ```bash
103
+ # Preview deletion for specific repository
104
+ ecreshore purge my-repo --dry-run
105
+
106
+ # Purge repository, keeping latest image
107
+ ecreshore purge my-repo --keep-latest
108
+
109
+ # Preview deletion for all repositories
110
+ ecreshore purge -A --dry-run
111
+
112
+ # Purge with pattern matching
113
+ ecreshore purge -A --filter my-app-* --keep-latest
114
+ ```
115
+
116
+ **Key Features:**
117
+ - **Safety first** - Always use `--dry-run` to preview deletions
118
+ - **Selective deletion** - Target specific repositories or use patterns
119
+ - **Latest preservation** - `--keep-latest` protects most recent images
120
+ - **Bulk operations** - Process all repositories with filtering options
121
+
122
+ ## Common Workflow
123
+
124
+ 1. **Discovery**: Scan your cluster to identify images needing migration
125
+ ```bash
126
+ ecreshore scan --export migration-plan.yaml
127
+ ```
128
+
129
+ 2. **Preview**: Review the generated configuration and preview the batch operation
130
+ ```bash
131
+ ecreshore batch migration-plan.yaml --dry-run
132
+ ```
133
+
134
+ 3. **Execute**: Run the batch migration
135
+ ```bash
136
+ ecreshore batch migration-plan.yaml
137
+ ```
138
+
139
+ 4. **Cleanup**: Optionally purge old/unused images
140
+ ```bash
141
+ ecreshore purge old-repo --dry-run
142
+ ecreshore purge old-repo --keep-latest
143
+ ```
144
+
145
+ ## Global Options
146
+
147
+ - **`-v, --verbose`** - Increase verbosity (`-v` for INFO, `-vv` for DEBUG)
148
+ - **`--region`** - AWS region (respects `AWS_DEFAULT_REGION`, `AWS_REGION`, `~/.aws/config`)
149
+ - **`--registry-id`** - AWS account ID for ECR registry
150
+ - **`--simple/--rich`** - Force specific UI modes (auto-detected by default)
151
+
152
+ ## UI Modes
153
+
154
+ ECReshore automatically detects your terminal capabilities and chooses the best display mode:
155
+
156
+ - **Rich UI** - Full-featured progress bars, colors, and real-time updates
157
+ - **Simple UI** - Text-based progress suitable for basic terminals
158
+ - **Log output** - Structured JSON logs for automation and monitoring
159
+
160
+ Use `ecreshore terminal-info` to see your terminal's detected capabilities.
161
+
162
+ ## Authentication
163
+
164
+ ECReshore uses your existing AWS credentials. Ensure you have:
165
+ - AWS CLI configured (`aws configure`)
166
+ - Appropriate ECR permissions (`ecr:*` or specific ECR actions)
167
+ - Docker daemon running for image operations
168
+
169
+ Test authentication with:
170
+ ```bash
171
+ ecreshore auth-test
172
+ ```
173
+
174
+ ---
175
+
176
+ For additional commands and advanced options, run `ecreshore --help` or `ecreshore COMMAND --help`.
@@ -0,0 +1,88 @@
1
+ [project]
2
+ name = "ecreshore"
3
+ version = "1.0.1"
4
+ description = "cli utility for copying container images to private ECR"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ dependencies = [
8
+ "aiodocker==0.24.0",
9
+ "boto3==1.40.25",
10
+ "click==8.2.1",
11
+ "docker==7.1.0",
12
+ "kubernetes==33.1.0",
13
+ "pytest-asyncio>=1.1.0",
14
+ "pytest-cov>=7.0.0",
15
+ "radon>=6.0.1",
16
+ "rich==14.1.0",
17
+ "structlog==25.4.0",
18
+ "tenacity==9.1.2",
19
+ "yaml-for-humans==1.1.1",
20
+ ]
21
+
22
+ [project.scripts]
23
+ ecreshore = "ecreshore.cli:cli"
24
+
25
+ [dependency-groups]
26
+ dev = [
27
+ "pytest==8.4.2",
28
+ "mypy==1.17.1",
29
+ "vulture>=2.14",
30
+ "unimport>=1.2.1",
31
+ "types-pyyaml>=6.0.12.20250915",
32
+ "types-psutil>=7.0.0.20250822",
33
+ "boto3-stubs>=1.40.32",
34
+ "lxml>=6.0.2",
35
+ ]
36
+
37
+ [tool.uv]
38
+ package = true
39
+
40
+ [tool.mypy]
41
+ python_version = "3.10"
42
+ warn_return_any = false
43
+ warn_unused_configs = true
44
+ disallow_untyped_defs = false
45
+ disallow_incomplete_defs = false
46
+ check_untyped_defs = true
47
+ disallow_untyped_decorators = false
48
+ no_implicit_optional = true
49
+ warn_redundant_casts = true
50
+ warn_unused_ignores = true
51
+ warn_no_return = true
52
+ warn_unreachable = false
53
+ strict_equality = true
54
+ show_error_codes = true
55
+ implicit_reexport = true
56
+
57
+ # Allow untyped calls for third-party libraries without stubs
58
+ [[tool.mypy.overrides]]
59
+ module = [
60
+ "aiodocker.*",
61
+ "docker.*",
62
+ "kubernetes.*",
63
+ "tenacity.*",
64
+ "psutil.*",
65
+ "yaml.*",
66
+ "botocore.*",
67
+ ]
68
+ ignore_missing_imports = true
69
+ follow_imports = "skip"
70
+ disable_error_code = ["attr-defined", "no-any-return", "union-attr", "unreachable"]
71
+
72
+ # Targeted suppression for files with heavy third-party integration
73
+ [[tool.mypy.overrides]]
74
+ module = [
75
+ "ecreshore.async_docker_client",
76
+ "ecreshore.services.k8s_config",
77
+ "ecreshore.services.k8s_scanner",
78
+ "ecreshore.services.retry_service",
79
+ ]
80
+ disable_error_code = ["unreachable", "no-any-return", "attr-defined", "assignment", "return-value", "union-attr"]
81
+
82
+ [tool.pytest.ini_options]
83
+ markers = [
84
+ "slow: marks tests as slow (deselected by default)",
85
+ "ux: marks tests that involve Rich UI components (may have threading warnings)",
86
+ "integration: marks tests that involve remote APIs"
87
+ ]
88
+ addopts = "-m 'not slow and not ux'"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,5 @@
1
+ """ECReshore - ECR Image Copy Tool."""
2
+
3
+ from importlib.metadata import version
4
+
5
+ __version__ = version("ecreshore")