ic-code 1.1.8__tar.gz → 1.1.10__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 (290) hide show
  1. {ic_code-1.1.8/src/ic_code.egg-info → ic_code-1.1.10}/PKG-INFO +1 -1
  2. ic_code-1.1.10/docs/ci-workflow-guide.md +221 -0
  3. ic_code-1.1.10/docs/release-guide.md +258 -0
  4. {ic_code-1.1.8 → ic_code-1.1.10}/pyproject.toml +1 -1
  5. ic_code-1.1.10/scripts/test-ci-detection.sh +111 -0
  6. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/__init__.py +1 -1
  7. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/profile/info.py +50 -1
  8. ic_code-1.1.10/src/ic/platforms/oci/compartment/info.py +272 -0
  9. {ic_code-1.1.8 → ic_code-1.1.10/src/ic_code.egg-info}/PKG-INFO +1 -1
  10. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic_code.egg-info/SOURCES.txt +3 -2
  11. ic_code-1.1.8/CHANGELOG.md +0 -181
  12. ic_code-1.1.8/docs/aws/AWS_IMPLEMENTATION_SUMMARY.md +0 -230
  13. ic_code-1.1.8/src/ic/platforms/oci/compartment/info.py +0 -232
  14. {ic_code-1.1.8 → ic_code-1.1.10}/LICENSE +0 -0
  15. {ic_code-1.1.8 → ic_code-1.1.10}/MANIFEST.in +0 -0
  16. {ic_code-1.1.8 → ic_code-1.1.10}/README.md +0 -0
  17. {ic_code-1.1.8 → ic_code-1.1.10}/SECURITY.md +0 -0
  18. {ic_code-1.1.8 → ic_code-1.1.10}/docs/README.md +0 -0
  19. {ic_code-1.1.8 → ic_code-1.1.10}/docs/_templates/configuration.md +0 -0
  20. {ic_code-1.1.8 → ic_code-1.1.10}/docs/_templates/installation.md +0 -0
  21. {ic_code-1.1.8 → ic_code-1.1.10}/docs/_templates/troubleshooting.md +0 -0
  22. {ic_code-1.1.8 → ic_code-1.1.10}/docs/_templates/usage.md +0 -0
  23. {ic_code-1.1.8 → ic_code-1.1.10}/docs/aws/README.md +0 -0
  24. {ic_code-1.1.8 → ic_code-1.1.10}/docs/aws/aws_cli_prd.md +0 -0
  25. {ic_code-1.1.8 → ic_code-1.1.10}/docs/aws/installation.md +0 -0
  26. {ic_code-1.1.8 → ic_code-1.1.10}/docs/azure/README.md +0 -0
  27. {ic_code-1.1.8 → ic_code-1.1.10}/docs/config_migration.md +0 -0
  28. {ic_code-1.1.8 → ic_code-1.1.10}/docs/deployment.md +0 -0
  29. {ic_code-1.1.8 → ic_code-1.1.10}/docs/development/README.md +0 -0
  30. {ic_code-1.1.8 → ic_code-1.1.10}/docs/development/cleanup_summary.md +0 -0
  31. {ic_code-1.1.8 → ic_code-1.1.10}/docs/development/development_guide.md +0 -0
  32. {ic_code-1.1.8 → ic_code-1.1.10}/docs/development/import_patterns.md +0 -0
  33. {ic_code-1.1.8 → ic_code-1.1.10}/docs/development/migration_guide.md +0 -0
  34. {ic_code-1.1.8 → ic_code-1.1.10}/docs/gcp/GCP_CONFIGURATION_GUIDE.md +0 -0
  35. {ic_code-1.1.8 → ic_code-1.1.10}/docs/gcp/GCP_SECURITY_BEST_PRACTICES.md +0 -0
  36. {ic_code-1.1.8 → ic_code-1.1.10}/docs/gcp/README.md +0 -0
  37. {ic_code-1.1.8 → ic_code-1.1.10}/docs/general/configuration.md +0 -0
  38. {ic_code-1.1.8 → ic_code-1.1.10}/docs/installation.md +0 -0
  39. {ic_code-1.1.8 → ic_code-1.1.10}/docs/mcp_integration.md +0 -0
  40. {ic_code-1.1.8 → ic_code-1.1.10}/docs/migration.md +0 -0
  41. {ic_code-1.1.8 → ic_code-1.1.10}/docs/migration_guide.md +0 -0
  42. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncp/README.md +0 -0
  43. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncp/configuration.md +0 -0
  44. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncp/installation.md +0 -0
  45. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncp/troubleshooting.md +0 -0
  46. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncp/usage.md +0 -0
  47. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncpgov/README.md +0 -0
  48. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ncpgov/installation.md +0 -0
  49. {ic_code-1.1.8 → ic_code-1.1.10}/docs/oci/README.md +0 -0
  50. {ic_code-1.1.8 → ic_code-1.1.10}/docs/oci/installation.md +0 -0
  51. {ic_code-1.1.8 → ic_code-1.1.10}/docs/security.md +0 -0
  52. {ic_code-1.1.8 → ic_code-1.1.10}/docs/ssh/configuration.md +0 -0
  53. {ic_code-1.1.8 → ic_code-1.1.10}/docs/troubleshooting.md +0 -0
  54. {ic_code-1.1.8 → ic_code-1.1.10}/docs/user_guide.md +0 -0
  55. {ic_code-1.1.8 → ic_code-1.1.10}/requirements.txt +0 -0
  56. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/analysis_summary.py +0 -0
  57. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/bump-version.sh +0 -0
  58. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
  59. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/cli_usage_analysis.py +0 -0
  60. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/dependency_mapper.py +0 -0
  61. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/deploy.sh +0 -0
  62. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/final_validation_and_documentation.py +0 -0
  63. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/fix_consolidated_imports.py +0 -0
  64. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/migration_execution_and_validation.py +0 -0
  65. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/ncp_security_scanner.py +0 -0
  66. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/oracle-policy/user_policy.py +0 -0
  67. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/performance_optimization.py +0 -0
  68. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/setup_venv.py +0 -0
  69. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/unset_env.sh +0 -0
  70. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/validate_config.py +0 -0
  71. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/validate_dependencies.py +0 -0
  72. {ic_code-1.1.8 → ic_code-1.1.10}/scripts/validate_ncp_security.py +0 -0
  73. {ic_code-1.1.8 → ic_code-1.1.10}/setup.cfg +0 -0
  74. {ic_code-1.1.8 → ic_code-1.1.10}/setup.py +0 -0
  75. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/__init__.py +0 -0
  76. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/azure_utils.py +0 -0
  77. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/gather_env.py +0 -0
  78. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/gcp_config_validator.py +0 -0
  79. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/gcp_monitoring.py +0 -0
  80. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/gcp_utils.py +0 -0
  81. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/log.py +0 -0
  82. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/ncp_security_utils.py +0 -0
  83. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/ncp_utils.py +0 -0
  84. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/ncpgov_utils.py +0 -0
  85. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/progress_decorator.py +0 -0
  86. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/slack.py +0 -0
  87. {ic_code-1.1.8 → ic_code-1.1.10}/src/common/utils.py +0 -0
  88. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/cli.py +0 -0
  89. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/cli_backup.py +0 -0
  90. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/commands/__init__.py +0 -0
  91. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/commands/config.py +0 -0
  92. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/commands/migration.py +0 -0
  93. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/commands/security.py +0 -0
  94. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/compat/__init__.py +0 -0
  95. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/compat/cli.py +0 -0
  96. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/compat/common.py +0 -0
  97. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/__init__.py +0 -0
  98. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/cleanup.py +0 -0
  99. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/docs_organizer.py +0 -0
  100. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/external.py +0 -0
  101. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/installer.py +0 -0
  102. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/manager.py +0 -0
  103. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/migration.py +0 -0
  104. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/migration_utils.py +0 -0
  105. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/path_manager.py +0 -0
  106. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/schema.py +0 -0
  107. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/secrets.py +0 -0
  108. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/config/security.py +0 -0
  109. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/__init__.py +0 -0
  110. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/dependency_validator.py +0 -0
  111. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/logging.py +0 -0
  112. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/mcp_manager.py +0 -0
  113. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/platform_discovery.py +0 -0
  114. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/session.py +0 -0
  115. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/core/silence_logging.py +0 -0
  116. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/migration/__init__.py +0 -0
  117. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/migration/manager.py +0 -0
  118. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/migration/post_validation.py +0 -0
  119. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/migration/rollback.py +0 -0
  120. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/migration/validation.py +0 -0
  121. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/__init__.py +0 -0
  122. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/__init__.py +0 -0
  123. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
  124. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/cloudfront/info.py +0 -0
  125. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
  126. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/codepipeline/build.py +0 -0
  127. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
  128. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ec2/__init__.py +0 -0
  129. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ec2/info.py +0 -0
  130. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ec2/list_tags.py +0 -0
  131. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
  132. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ecs/__init__.py +0 -0
  133. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ecs/info.py +0 -0
  134. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ecs/service.py +0 -0
  135. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/ecs/task.py +0 -0
  136. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/__init__.py +0 -0
  137. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/addons.py +0 -0
  138. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/fargate.py +0 -0
  139. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/info.py +0 -0
  140. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/nodes.py +0 -0
  141. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/pods.py +0 -0
  142. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/eks/update_config.py +0 -0
  143. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/fargate/__init__.py +0 -0
  144. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/fargate/info.py +0 -0
  145. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/lb/__init__.py +0 -0
  146. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/lb/info.py +0 -0
  147. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/lb/list_tags.py +0 -0
  148. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/lb/tag_check.py +0 -0
  149. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/msk/__init__.py +0 -0
  150. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/msk/broker.py +0 -0
  151. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/msk/info.py +0 -0
  152. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/nat/__init__.py +0 -0
  153. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/nat/list_tags.py +0 -0
  154. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/nat/tag_check.py +0 -0
  155. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/profile/__init__.py +0 -0
  156. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/rds/__init__.py +0 -0
  157. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/rds/info.py +0 -0
  158. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/rds/list_tags.py +0 -0
  159. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/rds/tag_check.py +0 -0
  160. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/s3/__init__.py +0 -0
  161. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/s3/info.py +0 -0
  162. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/s3/list_tags.py +0 -0
  163. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/s3/tag_check.py +0 -0
  164. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/sg/__init__.py +0 -0
  165. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/sg/info.py +0 -0
  166. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpc/__init__.py +0 -0
  167. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpc/info.py +0 -0
  168. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpc/list_tags.py +0 -0
  169. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
  170. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpn/__init__.py +0 -0
  171. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/aws/vpn/info.py +0 -0
  172. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/README.md +0 -0
  173. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/__init__.py +0 -0
  174. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/aci/__init__.py +0 -0
  175. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/aci/info.py +0 -0
  176. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/aks/__init__.py +0 -0
  177. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/aks/info.py +0 -0
  178. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/lb/__init__.py +0 -0
  179. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/lb/info.py +0 -0
  180. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/nsg/__init__.py +0 -0
  181. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/nsg/info.py +0 -0
  182. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/storage/__init__.py +0 -0
  183. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/storage/info.py +0 -0
  184. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vm/__init__.py +0 -0
  185. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vm/info.py +0 -0
  186. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vm/mock_data.json +0 -0
  187. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vnet/__init__.py +0 -0
  188. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vnet/info.py +0 -0
  189. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/azure/vnet/mock_data.json +0 -0
  190. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/cloudflare/README.md +0 -0
  191. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/cloudflare/__init__.py +0 -0
  192. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
  193. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
  194. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/README.md +0 -0
  195. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/__init__.py +0 -0
  196. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/billing/__init__.py +0 -0
  197. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/billing/info.py +0 -0
  198. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
  199. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/compute/__init__.py +0 -0
  200. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/compute/info.py +0 -0
  201. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
  202. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
  203. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/firewall/info.py +0 -0
  204. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/functions/__init__.py +0 -0
  205. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/functions/info.py +0 -0
  206. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/gke/__init__.py +0 -0
  207. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/gke/info.py +0 -0
  208. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
  209. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/lb/__init__.py +0 -0
  210. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/lb/info.py +0 -0
  211. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/run/__init__.py +0 -0
  212. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/run/info.py +0 -0
  213. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/sql/__init__.py +0 -0
  214. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/sql/info.py +0 -0
  215. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/storage/__init__.py +0 -0
  216. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/storage/info.py +0 -0
  217. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
  218. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/vpc/info.py +0 -0
  219. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
  220. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/__init__.py +0 -0
  221. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/client.py +0 -0
  222. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/ec2/__init__.py +0 -0
  223. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/ec2/info.py +0 -0
  224. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/rds/__init__.py +0 -0
  225. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/rds/info.py +0 -0
  226. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/s3/__init__.py +0 -0
  227. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/s3/info.py +0 -0
  228. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/sg/__init__.py +0 -0
  229. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/sg/info.py +0 -0
  230. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/vpc/__init__.py +0 -0
  231. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncp/vpc/info.py +0 -0
  232. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/__init__.py +0 -0
  233. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/client.py +0 -0
  234. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/ec2/__init__.py +0 -0
  235. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/ec2/info.py +0 -0
  236. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/rds/__init__.py +0 -0
  237. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/rds/info.py +0 -0
  238. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/s3/__init__.py +0 -0
  239. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/s3/info.py +0 -0
  240. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/sg/__init__.py +0 -0
  241. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/sg/info.py +0 -0
  242. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/vpc/__init__.py +0 -0
  243. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ncpgov/vpc/info.py +0 -0
  244. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/README.md +0 -0
  245. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/__init__.py +0 -0
  246. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/common/__init__.py +0 -0
  247. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/common/utils.py +0 -0
  248. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/compartment/__init__.py +0 -0
  249. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/cost/__init__.py +0 -0
  250. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/cost/credit.py +0 -0
  251. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/cost/usage.py +0 -0
  252. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/info/__init__.py +0 -0
  253. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/info/oci_info.py +0 -0
  254. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/lb/__init__.py +0 -0
  255. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/lb/info.py +0 -0
  256. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/nsg/__init__.py +0 -0
  257. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/nsg/info.py +0 -0
  258. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/obj/__init__.py +0 -0
  259. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/obj/info.py +0 -0
  260. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/policy/__init__.py +0 -0
  261. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/policy/info.py +0 -0
  262. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/policy/search.py +0 -0
  263. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/vcn/__init__.py +0 -0
  264. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/vcn/info.py +0 -0
  265. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/vm/__init__.py +0 -0
  266. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/vm/info.py +0 -0
  267. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/volume/__init__.py +0 -0
  268. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/oci/volume/info.py +0 -0
  269. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/README.md +0 -0
  270. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/__init__.py +0 -0
  271. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/auto/__init__.py +0 -0
  272. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/auto/scan.py +0 -0
  273. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/auto_ssh.py +0 -0
  274. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/server/__init__.py +0 -0
  275. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/server/info.py +0 -0
  276. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/platforms/ssh/server_info.py +0 -0
  277. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/README.md +0 -0
  278. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/__init__.py +0 -0
  279. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/config.py +0 -0
  280. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/detector.py +0 -0
  281. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/guidance.py +0 -0
  282. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/hooks.py +0 -0
  283. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/patterns.py +0 -0
  284. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic/security/scanner.py +0 -0
  285. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic_code.egg-info/dependency_links.txt +0 -0
  286. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic_code.egg-info/entry_points.txt +0 -0
  287. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic_code.egg-info/requires.txt +0 -0
  288. {ic_code-1.1.8 → ic_code-1.1.10}/src/ic_code.egg-info/top_level.txt +0 -0
  289. {ic_code-1.1.8 → ic_code-1.1.10}/src/mcp/__init__.py +0 -0
  290. {ic_code-1.1.8 → ic_code-1.1.10}/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.1.10
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
@@ -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.1.10"
8
8
  authors = [
9
9
  {name = "sykim", email = "cruiser594@gmail.com"},
10
10
  ]
@@ -0,0 +1,111 @@
1
+ #!/bin/bash
2
+ # Test CI platform detection logic locally
3
+
4
+ set -e
5
+
6
+ echo "🔍 Testing CI Platform Detection Logic"
7
+ echo "========================================"
8
+ echo ""
9
+
10
+ # All available platforms
11
+ ALL_PLATFORMS=("ncp" "ncpgov" "oci" "azure" "aws" "gcp" "ssh" "cf")
12
+
13
+ # Test function
14
+ test_detection() {
15
+ local commit_msg="$1"
16
+ local expected="$2"
17
+
18
+ echo "Test: $commit_msg"
19
+ echo "Expected: $expected"
20
+
21
+ DETECTED_PLATFORMS=()
22
+
23
+ # Check for platform tags in commit message
24
+ for platform in "${ALL_PLATFORMS[@]}"; do
25
+ if echo "$commit_msg" | grep -iE "\[${platform}\]|\(${platform}\)|${platform}:" > /dev/null; then
26
+ DETECTED_PLATFORMS+=("$platform")
27
+ fi
28
+ done
29
+
30
+ # Check for [all] tag
31
+ if echo "$commit_msg" | grep -iE "\[all\]|\[test-all\]" > /dev/null; then
32
+ DETECTED_PLATFORMS=("${ALL_PLATFORMS[@]}")
33
+ fi
34
+
35
+ # If no platforms detected, use defaults
36
+ if [ ${#DETECTED_PLATFORMS[@]} -eq 0 ]; then
37
+ DETECTED_PLATFORMS=("ncp" "ncpgov")
38
+ fi
39
+
40
+ # Remove duplicates
41
+ UNIQUE_PLATFORMS=($(echo "${DETECTED_PLATFORMS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
42
+
43
+ echo "Detected: ${UNIQUE_PLATFORMS[*]}"
44
+
45
+ if [ "${UNIQUE_PLATFORMS[*]}" = "$expected" ]; then
46
+ echo "✅ PASS"
47
+ else
48
+ echo "❌ FAIL"
49
+ fi
50
+ echo ""
51
+ }
52
+
53
+ # Run tests
54
+ echo "Test 1: Single platform tag"
55
+ test_detection "[ncp] Fix EC2 listing" "ncp"
56
+
57
+ echo "Test 2: Multiple platform tags"
58
+ test_detection "[ncp][oci] Update auth" "ncp oci"
59
+
60
+ echo "Test 3: All platforms tag"
61
+ test_detection "[all] Major refactor" "aws azure cf gcp ncp ncpgov oci ssh"
62
+
63
+ echo "Test 4: Platform in parentheses"
64
+ test_detection "(oci) Add compartment support" "oci"
65
+
66
+ echo "Test 5: Platform with colon"
67
+ test_detection "aws: Add S3 support" "aws"
68
+
69
+ echo "Test 6: No platform tag (should use defaults)"
70
+ test_detection "Fix typo in README" "ncp ncpgov"
71
+
72
+ echo "Test 7: Case insensitive"
73
+ test_detection "[NCP] Fix bug" "ncp"
74
+
75
+ echo "Test 8: Multiple platforms mixed format"
76
+ test_detection "[ncp] (oci) aws: Update all" "aws ncp oci"
77
+
78
+ echo ""
79
+ echo "🔍 Checking test directory structure"
80
+ echo "====================================="
81
+ echo ""
82
+
83
+ for platform in "${ALL_PLATFORMS[@]}"; do
84
+ if [ -d "tests/platforms/$platform" ]; then
85
+ test_count=$(find "tests/platforms/$platform" -name "test_*.py" -type f 2>/dev/null | wc -l)
86
+ if [ "$test_count" -gt 0 ]; then
87
+ echo "✅ $platform: $test_count test files"
88
+ else
89
+ echo "⚠️ $platform: directory exists but no test files"
90
+ fi
91
+ else
92
+ echo "❌ $platform: no test directory"
93
+ fi
94
+ done
95
+
96
+ echo ""
97
+ echo "🔍 Checking platform source directories"
98
+ echo "========================================"
99
+ echo ""
100
+
101
+ for platform in "${ALL_PLATFORMS[@]}"; do
102
+ if [ -d "src/ic/platforms/$platform" ]; then
103
+ service_count=$(find "src/ic/platforms/$platform" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
104
+ echo "✅ $platform: $service_count services"
105
+ else
106
+ echo "❌ $platform: no source directory"
107
+ fi
108
+ done
109
+
110
+ echo ""
111
+ echo "✅ Detection logic test complete!"
@@ -4,7 +4,7 @@ IC (Infra Resource Management CLI) - A comprehensive tool for managing cloud inf
4
4
  This package provides CLI tools and libraries for managing AWS, Azure, GCP, OCI, and CloudFlare resources.
5
5
  """
6
6
 
7
- __version__ = "1.1.5"
7
+ __version__ = "1.1.10"
8
8
  __author__ = "SangYun"
9
9
  __email__ = "cruiser594@gmail.com"
10
10
 
@@ -14,6 +14,21 @@ from rich.console import Console
14
14
  from rich.table import Table
15
15
 
16
16
 
17
+ ###############################################################################
18
+ # CLI 인자 정의
19
+ ###############################################################################
20
+ def add_arguments(parser):
21
+ """AWS Profile Info에 필요한 인자 추가"""
22
+ parser.add_argument(
23
+ "--config",
24
+ help="AWS config 파일 경로 (기본: ~/.aws/config)"
25
+ )
26
+ parser.add_argument(
27
+ "--credentials",
28
+ help="AWS credentials 파일 경로 (기본: ~/.aws/credentials)"
29
+ )
30
+
31
+
17
32
  class AWSProfileParser:
18
33
  """Parses AWS configuration and credentials files."""
19
34
 
@@ -308,4 +323,38 @@ class ProfileTableRenderer:
308
323
  missing_accounts = [p['profile_name'] for p in profiles if not p['account_id']]
309
324
  if missing_accounts:
310
325
  self.console.print(f"\n⚠️ Profiles without account ID: {', '.join(missing_accounts)}")
311
- self.console.print("💡 Consider adding role_arn or account_id to these profiles")
326
+ self.console.print("💡 Consider adding role_arn or account_id to these profiles")
327
+
328
+
329
+ ###############################################################################
330
+ # main
331
+ ###############################################################################
332
+ def main(args, config=None):
333
+ """
334
+ AWS Profile 정보를 조회하고 출력합니다.
335
+
336
+ Args:
337
+ args: CLI 인자
338
+ config: 설정 정보 (선택사항)
339
+ """
340
+ console = Console()
341
+
342
+ try:
343
+ # Profile 정보 수집
344
+ collector = ProfileInfoCollector()
345
+
346
+ # 사용자 지정 경로가 있으면 사용
347
+ if hasattr(args, 'config') and args.config:
348
+ collector.parser.aws_config_path = Path(args.config)
349
+ if hasattr(args, 'credentials') and args.credentials:
350
+ collector.parser.aws_credentials_path = Path(args.credentials)
351
+
352
+ profiles = collector.collect_profile_info()
353
+
354
+ # 테이블 렌더링
355
+ renderer = ProfileTableRenderer()
356
+ console.print() # 빈 줄 추가
357
+ renderer.render_profiles(profiles)
358
+
359
+ except Exception as e:
360
+ console.print(f"❌ AWS Profile 조회 중 오류 발생: {e}")