ic-code 1.1.8__tar.gz → 1.2.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 (292) hide show
  1. {ic_code-1.1.8/src/ic_code.egg-info → ic_code-1.2.1}/PKG-INFO +9 -9
  2. ic_code-1.2.1/docs/ci-workflow-guide.md +221 -0
  3. ic_code-1.2.1/docs/release-guide.md +258 -0
  4. {ic_code-1.1.8 → ic_code-1.2.1}/pyproject.toml +15 -15
  5. ic_code-1.2.1/scripts/ci-detect-platforms.py +151 -0
  6. ic_code-1.2.1/scripts/ci-generate-matrix.py +62 -0
  7. ic_code-1.2.1/scripts/test-ci-detection.sh +111 -0
  8. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/__init__.py +1 -1
  9. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/profile/info.py +50 -1
  10. ic_code-1.2.1/src/ic/platforms/oci/compartment/info.py +272 -0
  11. {ic_code-1.1.8 → ic_code-1.2.1/src/ic_code.egg-info}/PKG-INFO +9 -9
  12. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/SOURCES.txt +5 -2
  13. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/requires.txt +8 -8
  14. ic_code-1.1.8/CHANGELOG.md +0 -181
  15. ic_code-1.1.8/docs/aws/AWS_IMPLEMENTATION_SUMMARY.md +0 -230
  16. ic_code-1.1.8/src/ic/platforms/oci/compartment/info.py +0 -232
  17. {ic_code-1.1.8 → ic_code-1.2.1}/LICENSE +0 -0
  18. {ic_code-1.1.8 → ic_code-1.2.1}/MANIFEST.in +0 -0
  19. {ic_code-1.1.8 → ic_code-1.2.1}/README.md +0 -0
  20. {ic_code-1.1.8 → ic_code-1.2.1}/SECURITY.md +0 -0
  21. {ic_code-1.1.8 → ic_code-1.2.1}/docs/README.md +0 -0
  22. {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/configuration.md +0 -0
  23. {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/installation.md +0 -0
  24. {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/troubleshooting.md +0 -0
  25. {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/usage.md +0 -0
  26. {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/README.md +0 -0
  27. {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/aws_cli_prd.md +0 -0
  28. {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/installation.md +0 -0
  29. {ic_code-1.1.8 → ic_code-1.2.1}/docs/azure/README.md +0 -0
  30. {ic_code-1.1.8 → ic_code-1.2.1}/docs/config_migration.md +0 -0
  31. {ic_code-1.1.8 → ic_code-1.2.1}/docs/deployment.md +0 -0
  32. {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/README.md +0 -0
  33. {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/cleanup_summary.md +0 -0
  34. {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/development_guide.md +0 -0
  35. {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/import_patterns.md +0 -0
  36. {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/migration_guide.md +0 -0
  37. {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/GCP_CONFIGURATION_GUIDE.md +0 -0
  38. {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/GCP_SECURITY_BEST_PRACTICES.md +0 -0
  39. {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/README.md +0 -0
  40. {ic_code-1.1.8 → ic_code-1.2.1}/docs/general/configuration.md +0 -0
  41. {ic_code-1.1.8 → ic_code-1.2.1}/docs/installation.md +0 -0
  42. {ic_code-1.1.8 → ic_code-1.2.1}/docs/mcp_integration.md +0 -0
  43. {ic_code-1.1.8 → ic_code-1.2.1}/docs/migration.md +0 -0
  44. {ic_code-1.1.8 → ic_code-1.2.1}/docs/migration_guide.md +0 -0
  45. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/README.md +0 -0
  46. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/configuration.md +0 -0
  47. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/installation.md +0 -0
  48. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/troubleshooting.md +0 -0
  49. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/usage.md +0 -0
  50. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncpgov/README.md +0 -0
  51. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncpgov/installation.md +0 -0
  52. {ic_code-1.1.8 → ic_code-1.2.1}/docs/oci/README.md +0 -0
  53. {ic_code-1.1.8 → ic_code-1.2.1}/docs/oci/installation.md +0 -0
  54. {ic_code-1.1.8 → ic_code-1.2.1}/docs/security.md +0 -0
  55. {ic_code-1.1.8 → ic_code-1.2.1}/docs/ssh/configuration.md +0 -0
  56. {ic_code-1.1.8 → ic_code-1.2.1}/docs/troubleshooting.md +0 -0
  57. {ic_code-1.1.8 → ic_code-1.2.1}/docs/user_guide.md +0 -0
  58. {ic_code-1.1.8 → ic_code-1.2.1}/requirements.txt +0 -0
  59. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/analysis_summary.py +0 -0
  60. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/bump-version.sh +0 -0
  61. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
  62. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/cli_usage_analysis.py +0 -0
  63. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/dependency_mapper.py +0 -0
  64. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/deploy.sh +0 -0
  65. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/final_validation_and_documentation.py +0 -0
  66. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/fix_consolidated_imports.py +0 -0
  67. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/migration_execution_and_validation.py +0 -0
  68. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/ncp_security_scanner.py +0 -0
  69. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/oracle-policy/user_policy.py +0 -0
  70. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/performance_optimization.py +0 -0
  71. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/setup_venv.py +0 -0
  72. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/unset_env.sh +0 -0
  73. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_config.py +0 -0
  74. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_dependencies.py +0 -0
  75. {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_ncp_security.py +0 -0
  76. {ic_code-1.1.8 → ic_code-1.2.1}/setup.cfg +0 -0
  77. {ic_code-1.1.8 → ic_code-1.2.1}/setup.py +0 -0
  78. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/__init__.py +0 -0
  79. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/azure_utils.py +0 -0
  80. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gather_env.py +0 -0
  81. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_config_validator.py +0 -0
  82. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_monitoring.py +0 -0
  83. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_utils.py +0 -0
  84. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/log.py +0 -0
  85. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncp_security_utils.py +0 -0
  86. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncp_utils.py +0 -0
  87. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncpgov_utils.py +0 -0
  88. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/progress_decorator.py +0 -0
  89. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/slack.py +0 -0
  90. {ic_code-1.1.8 → ic_code-1.2.1}/src/common/utils.py +0 -0
  91. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/cli.py +0 -0
  92. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/cli_backup.py +0 -0
  93. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/__init__.py +0 -0
  94. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/config.py +0 -0
  95. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/migration.py +0 -0
  96. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/security.py +0 -0
  97. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/__init__.py +0 -0
  98. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/cli.py +0 -0
  99. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/common.py +0 -0
  100. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/__init__.py +0 -0
  101. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/cleanup.py +0 -0
  102. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/docs_organizer.py +0 -0
  103. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/external.py +0 -0
  104. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/installer.py +0 -0
  105. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/manager.py +0 -0
  106. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/migration.py +0 -0
  107. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/migration_utils.py +0 -0
  108. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/path_manager.py +0 -0
  109. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/schema.py +0 -0
  110. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/secrets.py +0 -0
  111. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/security.py +0 -0
  112. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/__init__.py +0 -0
  113. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/dependency_validator.py +0 -0
  114. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/logging.py +0 -0
  115. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/mcp_manager.py +0 -0
  116. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/platform_discovery.py +0 -0
  117. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/session.py +0 -0
  118. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/silence_logging.py +0 -0
  119. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/__init__.py +0 -0
  120. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/manager.py +0 -0
  121. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/post_validation.py +0 -0
  122. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/rollback.py +0 -0
  123. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/validation.py +0 -0
  124. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/__init__.py +0 -0
  125. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/__init__.py +0 -0
  126. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
  127. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/cloudfront/info.py +0 -0
  128. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
  129. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/build.py +0 -0
  130. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
  131. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/__init__.py +0 -0
  132. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/info.py +0 -0
  133. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/list_tags.py +0 -0
  134. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
  135. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/__init__.py +0 -0
  136. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/info.py +0 -0
  137. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/service.py +0 -0
  138. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/task.py +0 -0
  139. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/__init__.py +0 -0
  140. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/addons.py +0 -0
  141. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/fargate.py +0 -0
  142. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/info.py +0 -0
  143. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/nodes.py +0 -0
  144. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/pods.py +0 -0
  145. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/update_config.py +0 -0
  146. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/fargate/__init__.py +0 -0
  147. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/fargate/info.py +0 -0
  148. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/__init__.py +0 -0
  149. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/info.py +0 -0
  150. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/list_tags.py +0 -0
  151. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/tag_check.py +0 -0
  152. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/__init__.py +0 -0
  153. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/broker.py +0 -0
  154. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/info.py +0 -0
  155. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/__init__.py +0 -0
  156. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/list_tags.py +0 -0
  157. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/tag_check.py +0 -0
  158. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/profile/__init__.py +0 -0
  159. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/__init__.py +0 -0
  160. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/info.py +0 -0
  161. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/list_tags.py +0 -0
  162. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/tag_check.py +0 -0
  163. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/__init__.py +0 -0
  164. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/info.py +0 -0
  165. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/list_tags.py +0 -0
  166. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/tag_check.py +0 -0
  167. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/sg/__init__.py +0 -0
  168. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/sg/info.py +0 -0
  169. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/__init__.py +0 -0
  170. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/info.py +0 -0
  171. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/list_tags.py +0 -0
  172. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
  173. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpn/__init__.py +0 -0
  174. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpn/info.py +0 -0
  175. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/README.md +0 -0
  176. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/__init__.py +0 -0
  177. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aci/__init__.py +0 -0
  178. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aci/info.py +0 -0
  179. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aks/__init__.py +0 -0
  180. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aks/info.py +0 -0
  181. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/lb/__init__.py +0 -0
  182. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/lb/info.py +0 -0
  183. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/nsg/__init__.py +0 -0
  184. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/nsg/info.py +0 -0
  185. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/storage/__init__.py +0 -0
  186. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/storage/info.py +0 -0
  187. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/__init__.py +0 -0
  188. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/info.py +0 -0
  189. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/mock_data.json +0 -0
  190. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/__init__.py +0 -0
  191. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/info.py +0 -0
  192. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/mock_data.json +0 -0
  193. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/README.md +0 -0
  194. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/__init__.py +0 -0
  195. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
  196. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
  197. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/README.md +0 -0
  198. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/__init__.py +0 -0
  199. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/__init__.py +0 -0
  200. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/info.py +0 -0
  201. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
  202. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/__init__.py +0 -0
  203. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/info.py +0 -0
  204. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
  205. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
  206. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/firewall/info.py +0 -0
  207. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/functions/__init__.py +0 -0
  208. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/functions/info.py +0 -0
  209. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/__init__.py +0 -0
  210. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/info.py +0 -0
  211. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
  212. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/lb/__init__.py +0 -0
  213. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/lb/info.py +0 -0
  214. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/run/__init__.py +0 -0
  215. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/run/info.py +0 -0
  216. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/sql/__init__.py +0 -0
  217. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/sql/info.py +0 -0
  218. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/storage/__init__.py +0 -0
  219. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/storage/info.py +0 -0
  220. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
  221. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/info.py +0 -0
  222. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
  223. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/__init__.py +0 -0
  224. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/client.py +0 -0
  225. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/ec2/__init__.py +0 -0
  226. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/ec2/info.py +0 -0
  227. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/rds/__init__.py +0 -0
  228. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/rds/info.py +0 -0
  229. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/s3/__init__.py +0 -0
  230. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/s3/info.py +0 -0
  231. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/sg/__init__.py +0 -0
  232. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/sg/info.py +0 -0
  233. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/vpc/__init__.py +0 -0
  234. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/vpc/info.py +0 -0
  235. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/__init__.py +0 -0
  236. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/client.py +0 -0
  237. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/ec2/__init__.py +0 -0
  238. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/ec2/info.py +0 -0
  239. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/rds/__init__.py +0 -0
  240. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/rds/info.py +0 -0
  241. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/s3/__init__.py +0 -0
  242. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/s3/info.py +0 -0
  243. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/sg/__init__.py +0 -0
  244. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/sg/info.py +0 -0
  245. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/vpc/__init__.py +0 -0
  246. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/vpc/info.py +0 -0
  247. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/README.md +0 -0
  248. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/__init__.py +0 -0
  249. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/common/__init__.py +0 -0
  250. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/common/utils.py +0 -0
  251. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/compartment/__init__.py +0 -0
  252. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/__init__.py +0 -0
  253. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/credit.py +0 -0
  254. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/usage.py +0 -0
  255. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/info/__init__.py +0 -0
  256. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/info/oci_info.py +0 -0
  257. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/lb/__init__.py +0 -0
  258. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/lb/info.py +0 -0
  259. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/nsg/__init__.py +0 -0
  260. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/nsg/info.py +0 -0
  261. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/obj/__init__.py +0 -0
  262. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/obj/info.py +0 -0
  263. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/__init__.py +0 -0
  264. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/info.py +0 -0
  265. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/search.py +0 -0
  266. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vcn/__init__.py +0 -0
  267. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vcn/info.py +0 -0
  268. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vm/__init__.py +0 -0
  269. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vm/info.py +0 -0
  270. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/volume/__init__.py +0 -0
  271. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/volume/info.py +0 -0
  272. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/README.md +0 -0
  273. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/__init__.py +0 -0
  274. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto/__init__.py +0 -0
  275. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto/scan.py +0 -0
  276. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto_ssh.py +0 -0
  277. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server/__init__.py +0 -0
  278. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server/info.py +0 -0
  279. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server_info.py +0 -0
  280. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/README.md +0 -0
  281. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/__init__.py +0 -0
  282. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/config.py +0 -0
  283. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/detector.py +0 -0
  284. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/guidance.py +0 -0
  285. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/hooks.py +0 -0
  286. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/patterns.py +0 -0
  287. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/scanner.py +0 -0
  288. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/dependency_links.txt +0 -0
  289. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/entry_points.txt +0 -0
  290. {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/top_level.txt +0 -0
  291. {ic_code-1.1.8 → ic_code-1.2.1}/src/mcp/__init__.py +0 -0
  292. {ic_code-1.1.8 → ic_code-1.2.1}/src/mcp/gcp_connector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ic-code
3
- Version: 1.1.8
3
+ Version: 1.2.1
4
4
  Summary: Infrastructure CLI tool for managing AWS, Azure, GCP, OCI, NCP, CloudFlare, SSH, and more
5
5
  Home-page: https://github.com/dgr009/ic
6
6
  Author: SangYun Kim
@@ -32,7 +32,7 @@ Requires-Dist: boto3<2.0.0,>=1.26.0
32
32
  Requires-Dist: botocore<2.0.0,>=1.29.0
33
33
  Requires-Dist: oci<3.0.0,>=2.149.0
34
34
  Requires-Dist: requests<3.0.0,>=2.28.0
35
- Requires-Dist: kubernetes<31.0.0,>=29.0.0
35
+ Requires-Dist: kubernetes<32.0.0,>=29.0.0
36
36
  Requires-Dist: awscli<2.0.0,>=1.42.0
37
37
  Requires-Dist: google-cloud-compute<2.0.0,>=1.36.0
38
38
  Requires-Dist: google-cloud-container<3.0.0,>=2.44.0
@@ -45,15 +45,15 @@ Requires-Dist: google-auth<3.0.0,>=2.29.0
45
45
  Requires-Dist: google-auth-oauthlib<2.0.0,>=1.2.0
46
46
  Requires-Dist: google-auth-httplib2<1.0.0,>=0.2.0
47
47
  Requires-Dist: azure-identity<2.0.0,>=1.15.0
48
- Requires-Dist: azure-mgmt-compute<31.0.0,>=29.1.0
49
- Requires-Dist: azure-mgmt-network<26.0.0,>=24.0.0
48
+ Requires-Dist: azure-mgmt-compute<32.0.0,>=29.0.0
49
+ Requires-Dist: azure-mgmt-network<27.0.0,>=24.0.0
50
50
  Requires-Dist: azure-mgmt-containerinstance<11.0.0,>=10.1.0
51
- Requires-Dist: azure-mgmt-containerservice<30.0.0,>=28.0.0
51
+ Requires-Dist: azure-mgmt-containerservice<31.0.0,>=28.0.0
52
52
  Requires-Dist: azure-mgmt-storage<22.0.0,>=21.1.0
53
53
  Requires-Dist: azure-mgmt-sql<4.0.0,>=3.0.1
54
54
  Requires-Dist: azure-mgmt-rdbms<11.0.0,>=10.1.0
55
55
  Requires-Dist: azure-mgmt-eventhub<11.0.0,>=10.1.0
56
- Requires-Dist: azure-mgmt-resource<24.0.0,>=22.0.0
56
+ Requires-Dist: azure-mgmt-resource<25.0.0,>=22.0.0
57
57
  Requires-Dist: azure-mgmt-subscription<4.0.0,>=3.1.1
58
58
  Requires-Dist: paramiko<5.0.0,>=2.11.0
59
59
  Requires-Dist: netifaces<1.0.0,>=0.11.0
@@ -62,17 +62,17 @@ Requires-Dist: InquirerPy<1.0.0,>=0.3.4
62
62
  Requires-Dist: tqdm<5.0.0,>=4.67.0
63
63
  Requires-Dist: python-dotenv<2.0.0,>=0.19.0
64
64
  Requires-Dist: python-dateutil<3.0.0,>=2.8.0
65
- Requires-Dist: PyYAML<7.0.0,>=6.0
65
+ Requires-Dist: PyYAML<8.0.0,>=6.0
66
66
  Requires-Dist: click<9.0.0,>=8.0.0
67
67
  Requires-Dist: docutils<1.0.0,>=0.19
68
68
  Requires-Dist: invoke<3.0.0,>=2.2.0
69
69
  Requires-Dist: jsonschema<5.0.0,>=4.23.0
70
70
  Requires-Dist: cryptography<50.0.0,>=3.4.8
71
- Requires-Dist: watchdog<4.0.0,>=3.0.0
71
+ Requires-Dist: watchdog<6.0.0,>=3.0.0
72
72
  Requires-Dist: cerberus<2.0.0,>=1.3.4
73
73
  Requires-Dist: pydantic<3.0.0,>=2.0.0
74
74
  Requires-Dist: packaging<25.0,>=21.0
75
- Requires-Dist: setuptools<71.0,>=61.0
75
+ Requires-Dist: setuptools<75.0,>=61.0
76
76
  Provides-Extra: dev
77
77
  Requires-Dist: pytest<9.0.0,>=7.0.0; extra == "dev"
78
78
  Requires-Dist: pytest-cov<6.0.0,>=4.0.0; extra == "dev"
@@ -0,0 +1,221 @@
1
+ # IC CLI - Smart CI Workflow Guide
2
+
3
+ ## 개요
4
+
5
+ IC CLI의 CI workflow는 커밋 메시지와 변경된 파일을 기반으로 자동으로 테스트할 플랫폼을 감지합니다.
6
+
7
+ ## 사용 방법
8
+
9
+ ### 1. 커밋 메시지 태그 사용 (권장)
10
+
11
+ 특정 플랫폼만 테스트하려면 커밋 메시지에 플랫폼 태그를 추가하세요:
12
+
13
+ ```bash
14
+ # NCP만 테스트
15
+ git commit -m "[ncp] EC2 인스턴스 목록 조회 수정"
16
+
17
+ # OCI만 테스트
18
+ git commit -m "[oci] Compartment 처리 업데이트"
19
+
20
+ # 여러 플랫폼 테스트
21
+ git commit -m "[ncp][oci] 인증 플로우 개선"
22
+
23
+ # 모든 플랫폼 테스트
24
+ git commit -m "[all] 핵심 설정 시스템 리팩토링"
25
+ ```
26
+
27
+ ### 2. 자동 감지
28
+
29
+ 커밋 메시지에 태그가 없으면 변경된 파일을 기반으로 자동 감지:
30
+
31
+ ```bash
32
+ # src/ic/platforms/ncp/ 파일 변경 → NCP 테스트
33
+ # tests/platforms/oci/ 파일 변경 → OCI 테스트
34
+ ```
35
+
36
+ ### 3. 기본 동작
37
+
38
+ 플랫폼이 감지되지 않으면 기본 플랫폼 테스트:
39
+ - NCP (Naver Cloud Platform)
40
+ - NCPGov (Naver Cloud Platform Government)
41
+
42
+ ## 지원 플랫폼 태그
43
+
44
+ | 태그 | 플랫폼 | 테스트 상태 |
45
+ |------|--------|------------|
46
+ | `[ncp]` | Naver Cloud Platform | ✅ 완전 지원 |
47
+ | `[ncpgov]` | NCP Government | ✅ 완전 지원 |
48
+ | `[oci]` | Oracle Cloud Infrastructure | ⚠️ 테스트 개발 중 |
49
+ | `[azure]` | Microsoft Azure | ⚠️ 테스트 개발 중 |
50
+ | `[aws]` | Amazon Web Services | ⚠️ 테스트 개발 중 |
51
+ | `[gcp]` | Google Cloud Platform | ⚠️ 테스트 개발 중 |
52
+ | `[ssh]` | SSH Server Management | ⚠️ 테스트 개발 중 |
53
+ | `[cf]` | CloudFlare | ⚠️ 테스트 개발 중 |
54
+
55
+ ## 태그 형식
56
+
57
+ 다음 형식 모두 지원:
58
+
59
+ ```bash
60
+ [platform] # 대괄호
61
+ (platform) # 소괄호
62
+ platform: # 콜론
63
+ ```
64
+
65
+ 대소문자 구분 없음:
66
+ ```bash
67
+ [ncp] = [NCP] = [Ncp]
68
+ ```
69
+
70
+ ## 실전 예제
71
+
72
+ ### 예제 1: NCP EC2 기능 개발
73
+
74
+ ```bash
75
+ # 1. NCP EC2 코드 수정
76
+ vim src/ic/platforms/ncp/ec2/info.py
77
+
78
+ # 2. 커밋 (NCP 태그 포함)
79
+ git commit -m "[ncp] GPU 인스턴스 지원 추가"
80
+
81
+ # 3. Push
82
+ git push
83
+
84
+ # 결과: NCP 테스트만 실행 (unit, integration, performance)
85
+ ```
86
+
87
+ ### 예제 2: 다중 플랫폼 업데이트
88
+
89
+ ```bash
90
+ # 1. 인증 코드 수정
91
+ vim src/ic/core/auth.py
92
+
93
+ # 2. 커밋 (여러 플랫폼 태그)
94
+ git commit -m "[ncp][oci][aws] 인증 에러 처리 표준화"
95
+
96
+ # 3. Push
97
+ git push
98
+
99
+ # 결과: NCP, OCI, AWS 테스트 실행
100
+ ```
101
+
102
+ ### 예제 3: 전체 시스템 변경
103
+
104
+ ```bash
105
+ # 1. 설정 시스템 수정
106
+ vim src/ic/config/manager.py
107
+
108
+ # 2. 커밋 (all 태그)
109
+ git commit -m "[all] 설정 로딩 시스템 리팩토링"
110
+
111
+ # 3. Push
112
+ git push
113
+
114
+ # 결과: 모든 플랫폼 테스트 실행
115
+ ```
116
+
117
+ ### 예제 4: 자동 감지
118
+
119
+ ```bash
120
+ # 1. OCI 코드 수정 (태그 없이)
121
+ vim src/ic/platforms/oci/vm/info.py
122
+
123
+ # 2. 커밋 (플랫폼 태그 없음)
124
+ git commit -m "VM 인스턴스 필터링 수정"
125
+
126
+ # 3. Push
127
+ git push
128
+
129
+ # 결과: OCI 테스트 자동 실행 (변경된 파일에서 감지)
130
+ ```
131
+
132
+ ## 테스트 타입
133
+
134
+ 각 플랫폼에 대해 3가지 테스트 실행:
135
+
136
+ 1. **Unit Tests**: 빠른 단위 테스트 (모킹된 의존성)
137
+ 2. **Integration Tests**: 통합 테스트 (CI에서는 모킹)
138
+ 3. **Performance Tests**: 성능 벤치마크
139
+
140
+ ## Python 버전
141
+
142
+ 각 플랫폼은 다음 Python 버전에서 테스트:
143
+ - Python 3.11
144
+ - Python 3.12
145
+
146
+ ## CI 최적화
147
+
148
+ - ✅ 영향받은 플랫폼만 테스트
149
+ - ✅ 병렬 실행 (Python 버전별)
150
+ - ✅ 테스트 파일이 없는 플랫폼 자동 스킵
151
+ - ✅ 의존성 캐싱
152
+
153
+ ## 수동 실행
154
+
155
+ GitHub Actions에서 수동으로 실행:
156
+
157
+ 1. Actions → "IC CLI CI Tests" 선택
158
+ 2. "Run workflow" 클릭
159
+ 3. 플랫폼과 테스트 타입 선택
160
+ 4. "Run workflow" 클릭
161
+
162
+ ## CI 스킵
163
+
164
+ CI를 완전히 스킵하려면:
165
+
166
+ ```bash
167
+ git commit -m "[skip ci] 문서 업데이트"
168
+ # 또는
169
+ git commit -m "[ci skip] README 수정"
170
+ ```
171
+
172
+ ## 로컬 테스트
173
+
174
+ CI 감지 로직을 로컬에서 테스트:
175
+
176
+ ```bash
177
+ ./scripts/test-ci-detection.sh
178
+ ```
179
+
180
+ ## 새 플랫폼 테스트 추가
181
+
182
+ 새 플랫폼에 대한 테스트를 추가하려면:
183
+
184
+ ```bash
185
+ # 1. 테스트 디렉토리 생성
186
+ mkdir -p tests/platforms/{platform}/{service}/{unit,integration,performance}
187
+
188
+ # 2. 테스트 파일 추가
189
+ # tests/platforms/{platform}/{service}/unit/test_{feature}.py
190
+
191
+ # 3. 자동으로 CI에서 실행됨
192
+ ```
193
+
194
+ ## 문제 해결
195
+
196
+ ### 내 플랫폼 테스트가 실행되지 않음
197
+
198
+ 확인 사항:
199
+ 1. `tests/platforms/{platform}/` 디렉토리가 있나요?
200
+ 2. `test_*.py` 파일이 있나요?
201
+ 3. 커밋 메시지에 플랫폼 태그를 포함했나요?
202
+ 4. 변경된 파일이 `src/ic/platforms/{platform}/`에 있나요?
203
+
204
+ ### 하나만 변경했는데 모든 플랫폼이 테스트됨
205
+
206
+ 확인 사항:
207
+ 1. `[all]` 또는 `[test-all]` 태그를 사용했나요?
208
+ 2. 모든 플랫폼에 영향을 주는 핵심 파일을 변경했나요?
209
+
210
+ ### 현재 테스트 상태 확인
211
+
212
+ ```bash
213
+ # 플랫폼별 테스트 파일 수 확인
214
+ ./scripts/test-ci-detection.sh
215
+ ```
216
+
217
+ ## 참고
218
+
219
+ - 전체 workflow 설정: `.github/workflows/ci-tests.yml`
220
+ - 상세 가이드: `.github/workflows/README.md`
221
+ - 테스트 감지 스크립트: `scripts/test-ci-detection.sh`
@@ -0,0 +1,258 @@
1
+ # IC CLI Release Guide
2
+
3
+ ## 릴리스 프로세스
4
+
5
+ ### 1. 버전 업데이트
6
+
7
+ 두 파일의 버전을 동기화해야 합니다:
8
+
9
+ ```bash
10
+ # src/ic/__init__.py
11
+ __version__ = "1.1.10"
12
+
13
+ # pyproject.toml
14
+ version = "1.1.10"
15
+ ```
16
+
17
+ ### 2. CHANGELOG 업데이트
18
+
19
+ `.local-docs/CHANGELOG.md`에 변경사항 추가:
20
+
21
+ ```markdown
22
+ ## [1.1.10] - 2025-11-17
23
+
24
+ ### Added
25
+ - 새로운 기능들...
26
+
27
+ ### Changed
28
+ - 변경된 사항들...
29
+
30
+ ### Fixed
31
+ - 수정된 버그들...
32
+ ```
33
+
34
+ ### 3. 로컬 빌드 테스트
35
+
36
+ ```bash
37
+ # 빌드 아티팩트 정리
38
+ rm -rf dist/ build/ src/ic_code.egg-info/
39
+
40
+ # 패키지 빌드
41
+ python -m build
42
+
43
+ # 빌드 결과 확인
44
+ ls -lh dist/
45
+
46
+ # 패키지 검증
47
+ twine check dist/*
48
+ ```
49
+
50
+ ### 4. 변경사항 커밋 및 푸시
51
+
52
+ ```bash
53
+ # 변경사항 확인
54
+ git status
55
+
56
+ # 커밋
57
+ git add src/ic/__init__.py pyproject.toml .local-docs/CHANGELOG.md
58
+ git commit -m "Release v1.1.10: Smart CI platform detection and improvements"
59
+
60
+ # 푸시
61
+ git push origin main
62
+ ```
63
+
64
+ ### 5. GitHub Release 생성
65
+
66
+ #### 방법 1: GitHub 웹 인터페이스
67
+
68
+ 1. https://github.com/dgr009/ic/releases/new 접속
69
+ 2. "Choose a tag" → `v1.1.10` 입력 (새 태그 생성)
70
+ 3. Release title: `v1.1.10`
71
+ 4. Description: CHANGELOG 내용 복사
72
+ 5. "Publish release" 클릭
73
+
74
+ #### 방법 2: Git 태그 + GitHub CLI
75
+
76
+ ```bash
77
+ # 태그 생성
78
+ git tag -a v1.1.10 -m "Release v1.1.10: Smart CI platform detection"
79
+
80
+ # 태그 푸시
81
+ git push origin v1.1.10
82
+
83
+ # GitHub CLI로 release 생성 (선택사항)
84
+ gh release create v1.1.10 \
85
+ --title "v1.1.10" \
86
+ --notes-file .local-docs/CHANGELOG.md
87
+ ```
88
+
89
+ ### 6. 자동 배포 확인
90
+
91
+ GitHub Release가 생성되면 자동으로:
92
+
93
+ 1. `.github/workflows/publish-to-pypi.yml` workflow 실행
94
+ 2. 패키지 빌드
95
+ 3. PyPI에 자동 업로드 (Trusted Publishing 사용)
96
+
97
+ 진행 상황 확인:
98
+ - https://github.com/dgr009/ic/actions
99
+
100
+ ### 7. PyPI 배포 확인
101
+
102
+ ```bash
103
+ # PyPI에서 새 버전 확인
104
+ pip index versions ic-code
105
+
106
+ # 또는 웹에서 확인
107
+ # https://pypi.org/project/ic-code/
108
+ ```
109
+
110
+ ### 8. 설치 테스트
111
+
112
+ ```bash
113
+ # 새 가상환경에서 테스트
114
+ python -m venv test-env
115
+ source test-env/bin/activate
116
+
117
+ # 최신 버전 설치
118
+ pip install --upgrade ic-code
119
+
120
+ # 버전 확인
121
+ ic --version
122
+ # 또는
123
+ python -c "import ic; print(ic.__version__)"
124
+
125
+ # 정리
126
+ deactivate
127
+ rm -rf test-env
128
+ ```
129
+
130
+ ## 버전 관리 규칙
131
+
132
+ ### Semantic Versioning
133
+
134
+ `MAJOR.MINOR.PATCH` (예: 1.1.10)
135
+
136
+ - **MAJOR**: 호환되지 않는 API 변경
137
+ - **MINOR**: 하위 호환되는 기능 추가
138
+ - **PATCH**: 하위 호환되는 버그 수정
139
+
140
+ ### 버전 증가 가이드
141
+
142
+ ```bash
143
+ # 버그 수정만
144
+ 1.1.9 → 1.1.10
145
+
146
+ # 새 기능 추가 (하위 호환)
147
+ 1.1.10 → 1.2.0
148
+
149
+ # Breaking changes
150
+ 1.2.0 → 2.0.0
151
+ ```
152
+
153
+ ## 문제 해결
154
+
155
+ ### PyPI 업로드 실패: "File already exists"
156
+
157
+ **원인**: 같은 버전을 다시 업로드하려고 시도
158
+
159
+ **해결**:
160
+ ```bash
161
+ # 버전 증가
162
+ # src/ic/__init__.py와 pyproject.toml 모두 업데이트
163
+ __version__ = "1.1.11"
164
+ version = "1.1.11"
165
+
166
+ # 커밋 및 새 release 생성
167
+ ```
168
+
169
+ ### 버전 불일치
170
+
171
+ **확인**:
172
+ ```bash
173
+ # pyproject.toml 버전
174
+ grep "^version" pyproject.toml
175
+
176
+ # __init__.py 버전
177
+ grep "__version__" src/ic/__init__.py
178
+ ```
179
+
180
+ **두 파일의 버전이 반드시 일치해야 합니다!**
181
+
182
+ ### GitHub Actions 실패
183
+
184
+ **확인 사항**:
185
+ 1. Workflow 로그 확인: https://github.com/dgr009/ic/actions
186
+ 2. PyPI Trusted Publishing 설정 확인
187
+ 3. 빌드 에러 확인 (의존성, 문법 등)
188
+
189
+ ### 로컬 빌드 실패
190
+
191
+ ```bash
192
+ # 빌드 도구 업데이트
193
+ pip install --upgrade build twine setuptools wheel
194
+
195
+ # 캐시 정리
196
+ rm -rf dist/ build/ *.egg-info src/*.egg-info
197
+
198
+ # 다시 빌드
199
+ python -m build
200
+ ```
201
+
202
+ ## 체크리스트
203
+
204
+ 릴리스 전 확인사항:
205
+
206
+ - [ ] `src/ic/__init__.py` 버전 업데이트
207
+ - [ ] `pyproject.toml` 버전 업데이트
208
+ - [ ] 두 파일의 버전이 일치하는지 확인
209
+ - [ ] `.local-docs/CHANGELOG.md` 업데이트
210
+ - [ ] 로컬 빌드 테스트 성공
211
+ - [ ] `twine check` 통과
212
+ - [ ] 변경사항 커밋 및 푸시
213
+ - [ ] GitHub Release 생성
214
+ - [ ] GitHub Actions 성공 확인
215
+ - [ ] PyPI에 새 버전 확인
216
+ - [ ] 설치 테스트 성공
217
+
218
+ ## 빠른 릴리스 스크립트
219
+
220
+ ```bash
221
+ #!/bin/bash
222
+ # scripts/quick-release.sh
223
+
224
+ VERSION=$1
225
+
226
+ if [ -z "$VERSION" ]; then
227
+ echo "Usage: ./scripts/quick-release.sh 1.1.10"
228
+ exit 1
229
+ fi
230
+
231
+ echo "🚀 Releasing version $VERSION"
232
+
233
+ # 버전 업데이트
234
+ sed -i '' "s/__version__ = \".*\"/__version__ = \"$VERSION\"/" src/ic/__init__.py
235
+ sed -i '' "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml
236
+
237
+ # 빌드 테스트
238
+ rm -rf dist/ build/ *.egg-info
239
+ python -m build
240
+ twine check dist/*
241
+
242
+ echo "✅ Build successful!"
243
+ echo ""
244
+ echo "Next steps:"
245
+ echo "1. Update .local-docs/CHANGELOG.md"
246
+ echo "2. git add src/ic/__init__.py pyproject.toml .local-docs/CHANGELOG.md"
247
+ echo "3. git commit -m 'Release v$VERSION'"
248
+ echo "4. git push origin main"
249
+ echo "5. git tag -a v$VERSION -m 'Release v$VERSION'"
250
+ echo "6. git push origin v$VERSION"
251
+ echo "7. Create GitHub Release at https://github.com/dgr009/ic/releases/new"
252
+ ```
253
+
254
+ ## 참고
255
+
256
+ - PyPI 프로젝트: https://pypi.org/project/ic-code/
257
+ - GitHub 저장소: https://github.com/dgr009/ic
258
+ - Trusted Publishing 가이드: https://docs.pypi.org/trusted-publishers/
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ic-code"
7
- version = "1.1.8"
7
+ version = "1.2.1"
8
8
  authors = [
9
9
  {name = "sykim", email = "cruiser594@gmail.com"},
10
10
  ]
@@ -30,15 +30,15 @@ classifiers = [
30
30
  ]
31
31
  keywords = ["cli", "infrastructure", "aws", "oci", "gcp", "azure", "ncp", "naver-cloud", "cloudflare", "ssh", "devops", "multi-cloud"]
32
32
  dependencies = [
33
- # Core Cloud SDKs - Compatible with Python 3.9-3.12
33
+ # Core Cloud SDKs - Compatible with Python 3.9-3.13
34
34
  "boto3>=1.26.0,<2.0.0", # AWS SDK for Python
35
35
  "botocore>=1.29.0,<2.0.0", # AWS SDK core library
36
36
  "oci>=2.149.0,<3.0.0", # Oracle Cloud Infrastructure SDK
37
37
  "requests>=2.28.0,<3.0.0", # HTTP library for API calls (required for NCP REST API)
38
- "kubernetes>=29.0.0,<31.0.0", # Kubernetes Python client
38
+ "kubernetes>=29.0.0,<32.0.0", # Kubernetes Python client
39
39
  "awscli>=1.42.0,<2.0.0", # AWS CLI for additional functionality
40
40
 
41
- # Google Cloud SDKs - Compatible with Python 3.9-3.12
41
+ # Google Cloud SDKs - Compatible with Python 3.9-3.13
42
42
  "google-cloud-compute>=1.36.0,<2.0.0", # Google Compute Engine API
43
43
  "google-cloud-container>=2.44.0,<3.0.0", # Google Kubernetes Engine API
44
44
  "google-cloud-storage>=2.18.0,<3.0.0", # Google Cloud Storage API
@@ -50,17 +50,17 @@ dependencies = [
50
50
  "google-auth-oauthlib>=1.2.0,<2.0.0", # Google OAuth2 authentication
51
51
  "google-auth-httplib2>=0.2.0,<1.0.0", # Google HTTP transport for authentication
52
52
 
53
- # Azure SDKs - Compatible with Python 3.9-3.12
53
+ # Azure SDKs - Compatible with Python 3.9-3.13
54
54
  "azure-identity>=1.15.0,<2.0.0", # Azure identity and authentication
55
- "azure-mgmt-compute>=29.1.0,<31.0.0", # Azure Virtual Machines management
56
- "azure-mgmt-network>=24.0.0,<26.0.0", # Azure networking management
55
+ "azure-mgmt-compute>=29.0.0,<32.0.0", # Azure Virtual Machines management
56
+ "azure-mgmt-network>=24.0.0,<27.0.0", # Azure networking management
57
57
  "azure-mgmt-containerinstance>=10.1.0,<11.0.0", # Azure Container Instances
58
- "azure-mgmt-containerservice>=28.0.0,<30.0.0", # Azure Kubernetes Service
58
+ "azure-mgmt-containerservice>=28.0.0,<31.0.0", # Azure Kubernetes Service
59
59
  "azure-mgmt-storage>=21.1.0,<22.0.0", # Azure Storage management
60
60
  "azure-mgmt-sql>=3.0.1,<4.0.0", # Azure SQL management
61
61
  "azure-mgmt-rdbms>=10.1.0,<11.0.0", # Azure Database services
62
62
  "azure-mgmt-eventhub>=10.1.0,<11.0.0", # Azure Event Hubs
63
- "azure-mgmt-resource>=22.0.0,<24.0.0", # Azure Resource Manager
63
+ "azure-mgmt-resource>=22.0.0,<25.0.0", # Azure Resource Manager
64
64
  "azure-mgmt-subscription>=3.1.1,<4.0.0", # Azure Subscription management
65
65
 
66
66
  # SSH and Network - Compatible with Python 3.9-3.12
@@ -72,26 +72,26 @@ dependencies = [
72
72
  "InquirerPy>=0.3.4,<1.0.0", # Interactive command line prompts
73
73
  "tqdm>=4.67.0,<5.0.0", # Progress bars
74
74
 
75
- # Configuration and Utilities - Compatible with Python 3.9-3.12
75
+ # Configuration and Utilities - Compatible with Python 3.9-3.13
76
76
  "python-dotenv>=0.19.0,<2.0.0", # Environment variable loading
77
77
  "python-dateutil>=2.8.0,<3.0.0", # Date/time utilities
78
- "PyYAML>=6.0,<7.0.0", # YAML parser (required for NCP config files)
78
+ "PyYAML>=6.0,<8.0.0", # YAML parser (required for NCP config files)
79
79
  "click>=8.0.0,<9.0.0", # Command line interface framework
80
80
  "docutils>=0.19,<1.0.0", # Documentation utilities
81
81
  "invoke>=2.2.0,<3.0.0", # Task execution library
82
82
 
83
- # Security and Validation - Compatible with Python 3.9-3.12
83
+ # Security and Validation - Compatible with Python 3.9-3.13
84
84
  "jsonschema>=4.23.0,<5.0.0", # JSON schema validation
85
85
  "cryptography>=3.4.8,<50.0.0", # Cryptographic recipes and primitives (required for NCP HMAC-SHA256 signatures)
86
86
 
87
- # Additional dependencies for new config system (v2.0) - Compatible with Python 3.9-3.12
88
- "watchdog>=3.0.0,<4.0.0", # File change monitoring
87
+ # Additional dependencies for new config system (v2.0) - Compatible with Python 3.9-3.13
88
+ "watchdog>=3.0.0,<6.0.0", # File change monitoring
89
89
  "cerberus>=1.3.4,<2.0.0", # Schema validation
90
90
  "pydantic>=2.0.0,<3.0.0", # Data validation and settings management
91
91
 
92
92
  # Package management and compatibility
93
93
  "packaging>=21.0,<25.0", # Version parsing and comparison
94
- "setuptools>=61.0,<71.0", # Package building tools
94
+ "setuptools>=61.0,<75.0", # Package building tools
95
95
  ]
96
96
 
97
97
  [project.optional-dependencies]