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.
- {ic_code-1.1.8/src/ic_code.egg-info → ic_code-1.2.1}/PKG-INFO +9 -9
- ic_code-1.2.1/docs/ci-workflow-guide.md +221 -0
- ic_code-1.2.1/docs/release-guide.md +258 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/pyproject.toml +15 -15
- ic_code-1.2.1/scripts/ci-detect-platforms.py +151 -0
- ic_code-1.2.1/scripts/ci-generate-matrix.py +62 -0
- ic_code-1.2.1/scripts/test-ci-detection.sh +111 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/__init__.py +1 -1
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/profile/info.py +50 -1
- ic_code-1.2.1/src/ic/platforms/oci/compartment/info.py +272 -0
- {ic_code-1.1.8 → ic_code-1.2.1/src/ic_code.egg-info}/PKG-INFO +9 -9
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/SOURCES.txt +5 -2
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/requires.txt +8 -8
- ic_code-1.1.8/CHANGELOG.md +0 -181
- ic_code-1.1.8/docs/aws/AWS_IMPLEMENTATION_SUMMARY.md +0 -230
- ic_code-1.1.8/src/ic/platforms/oci/compartment/info.py +0 -232
- {ic_code-1.1.8 → ic_code-1.2.1}/LICENSE +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/MANIFEST.in +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/SECURITY.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/configuration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/troubleshooting.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/_templates/usage.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/aws_cli_prd.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/aws/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/azure/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/config_migration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/deployment.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/cleanup_summary.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/development_guide.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/import_patterns.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/development/migration_guide.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/GCP_CONFIGURATION_GUIDE.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/GCP_SECURITY_BEST_PRACTICES.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/gcp/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/general/configuration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/mcp_integration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/migration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/migration_guide.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/configuration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/troubleshooting.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncp/usage.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncpgov/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ncpgov/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/oci/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/oci/installation.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/security.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/ssh/configuration.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/troubleshooting.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/docs/user_guide.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/requirements.txt +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/analysis_summary.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/bump-version.sh +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/cli_usage_analysis.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/dependency_mapper.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/deploy.sh +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/final_validation_and_documentation.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/fix_consolidated_imports.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/migration_execution_and_validation.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/ncp_security_scanner.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/oracle-policy/user_policy.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/performance_optimization.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/setup_venv.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/unset_env.sh +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_config.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_dependencies.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/scripts/validate_ncp_security.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/setup.cfg +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/setup.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/azure_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gather_env.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_config_validator.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_monitoring.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/gcp_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/log.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncp_security_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncp_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/ncpgov_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/progress_decorator.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/slack.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/common/utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/cli.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/cli_backup.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/config.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/migration.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/commands/security.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/cli.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/compat/common.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/cleanup.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/docs_organizer.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/external.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/installer.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/manager.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/migration.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/migration_utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/path_manager.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/schema.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/secrets.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/config/security.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/dependency_validator.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/logging.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/mcp_manager.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/platform_discovery.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/session.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/core/silence_logging.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/manager.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/post_validation.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/rollback.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/migration/validation.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/cloudfront/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/build.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/service.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/ecs/task.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/addons.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/fargate.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/nodes.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/pods.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/eks/update_config.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/fargate/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/fargate/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/lb/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/broker.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/msk/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/nat/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/profile/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/rds/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/s3/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/sg/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/sg/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/list_tags.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpn/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/aws/vpn/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aci/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aci/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aks/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/aks/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/lb/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/lb/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/nsg/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/nsg/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/storage/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/storage/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vm/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/azure/vnet/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/firewall/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/functions/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/functions/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/lb/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/lb/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/run/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/run/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/sql/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/sql/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/storage/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/storage/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/client.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/ec2/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/ec2/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/rds/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/rds/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/s3/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/s3/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/sg/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/sg/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/vpc/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncp/vpc/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/client.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/ec2/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/ec2/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/rds/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/rds/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/s3/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/s3/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/sg/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/sg/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/vpc/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ncpgov/vpc/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/common/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/common/utils.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/compartment/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/credit.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/cost/usage.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/info/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/info/oci_info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/lb/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/lb/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/nsg/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/nsg/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/obj/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/obj/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/policy/search.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vcn/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vcn/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vm/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/vm/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/volume/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/oci/volume/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto/scan.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/auto_ssh.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server/info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/platforms/ssh/server_info.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/README.md +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/__init__.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/config.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/detector.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/guidance.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/hooks.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/patterns.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic/security/scanner.py +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/dependency_links.txt +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/entry_points.txt +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/ic_code.egg-info/top_level.txt +0 -0
- {ic_code-1.1.8 → ic_code-1.2.1}/src/mcp/__init__.py +0 -0
- {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
|
|
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<
|
|
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<
|
|
49
|
-
Requires-Dist: azure-mgmt-network<
|
|
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<
|
|
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<
|
|
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<
|
|
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<
|
|
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<
|
|
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
|
|
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.
|
|
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,<
|
|
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.
|
|
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.
|
|
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.
|
|
56
|
-
"azure-mgmt-network>=24.0.0,<
|
|
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,<
|
|
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,<
|
|
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.
|
|
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,<
|
|
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.
|
|
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.
|
|
88
|
-
"watchdog>=3.0.0,<
|
|
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,<
|
|
94
|
+
"setuptools>=61.0,<75.0", # Package building tools
|
|
95
95
|
]
|
|
96
96
|
|
|
97
97
|
[project.optional-dependencies]
|