cdk-factory 0.9.6__tar.gz → 0.9.8__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.

Potentially problematic release.


This version of cdk-factory might be problematic. Click here for more details.

Files changed (148) hide show
  1. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/PKG-INFO +1 -1
  2. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/pyproject.toml +1 -1
  3. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/app.py +30 -21
  4. cdk_factory-0.9.8/src/cdk_factory/pipeline/path_utils.py +68 -0
  5. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/pipeline/pipeline_factory.py +8 -42
  6. cdk_factory-0.9.8/src/cdk_factory/version.py +1 -0
  7. cdk_factory-0.9.6/src/cdk_factory/version.py +0 -1
  8. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/.gitignore +0 -0
  9. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/.windsurfrules +0 -0
  10. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/LICENSE +0 -0
  11. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/README.md +0 -0
  12. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/archive/README.md +0 -0
  13. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/archive/migrate_to_enhanced_ssm.py +0 -0
  14. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/examples/json-imports/README.md +0 -0
  15. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/examples/separate-api-gateway/README.md +0 -0
  16. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/examples/separate-api-gateway/api-gateway-stack.json +0 -0
  17. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/examples/separate-api-gateway/config.json +0 -0
  18. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/examples/separate-api-gateway/lambda-stack.json +0 -0
  19. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/mypy.ini +0 -0
  20. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/publish_to_pypi.py +0 -0
  21. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/publish_to_pypi.sh +0 -0
  22. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/pysetup.py +0 -0
  23. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/pysetup.sh +0 -0
  24. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/requirements.dev.txt +0 -0
  25. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/requirements.tests.txt +0 -0
  26. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/requirements.txt +0 -0
  27. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/run-checks.sh +0 -0
  28. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/run-tests-clean-venv.sh +0 -0
  29. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/run-tests.sh +0 -0
  30. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/__init__.py +0 -0
  31. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/builds/README.md +0 -0
  32. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/cdk.json +0 -0
  33. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/cli.py +0 -0
  34. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/commands/command_loader.py +0 -0
  35. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/base_config.py +0 -0
  36. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/cdk_config.py +0 -0
  37. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/deployment.py +0 -0
  38. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/deployment_wave.py +0 -0
  39. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/devops.py +0 -0
  40. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/enhanced_base_config.py +0 -0
  41. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/enhanced_ssm_config.py +0 -0
  42. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/management.py +0 -0
  43. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/pipeline.py +0 -0
  44. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/pipeline_stage.py +0 -0
  45. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/_resources.py +0 -0
  46. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/api_gateway.py +0 -0
  47. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/apigateway_route_config.py +0 -0
  48. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/auto_scaling.py +0 -0
  49. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/cloudfront.py +0 -0
  50. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/cloudwatch_widget.py +0 -0
  51. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/code_artifact.py +0 -0
  52. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/code_artifact_login.py +0 -0
  53. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/code_repository.py +0 -0
  54. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/cognito.py +0 -0
  55. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/docker.py +0 -0
  56. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/dynamodb.py +0 -0
  57. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/ecr.py +0 -0
  58. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/ecs_service.py +0 -0
  59. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/exisiting.py +0 -0
  60. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/lambda_function.py +0 -0
  61. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/lambda_layers.py +0 -0
  62. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/lambda_triggers.py +0 -0
  63. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/load_balancer.py +0 -0
  64. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/rds.py +0 -0
  65. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/resource_mapping.py +0 -0
  66. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/resource_naming.py +0 -0
  67. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/resource_types.py +0 -0
  68. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/route53.py +0 -0
  69. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/route53_hosted_zone.py +0 -0
  70. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/rum.py +0 -0
  71. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/s3.py +0 -0
  72. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/security_group.py +0 -0
  73. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/security_group_full_stack.py +0 -0
  74. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/sqs.py +0 -0
  75. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/resources/vpc.py +0 -0
  76. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/stack.py +0 -0
  77. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/configurations/workload.py +0 -0
  78. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/cloudfront/cloudfront_distribution_construct.py +0 -0
  79. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/ecr/ecr_construct.py +0 -0
  80. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/lambdas/lambda_function_construct.py +0 -0
  81. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/lambdas/lambda_function_docker_construct.py +0 -0
  82. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/lambdas/lambda_function_role_construct.py +0 -0
  83. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/lambdas/policies/policy_docs.py +0 -0
  84. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/lambdas/policies/policy_statements.py +0 -0
  85. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/s3_buckets/s3_bucket_construct.py +0 -0
  86. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py +0 -0
  87. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py +0 -0
  88. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/constructs/sqs/policies/sqs_policies.py +0 -0
  89. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/interfaces/enhanced_ssm_parameter_mixin.py +0 -0
  90. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/interfaces/istack.py +0 -0
  91. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/interfaces/live_ssm_resolver.py +0 -0
  92. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/interfaces/ssm_parameter_mixin.py +0 -0
  93. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/lambdas/health_handler.py +0 -0
  94. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/pipeline/security/policies.py +0 -0
  95. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/pipeline/security/roles.py +0 -0
  96. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/pipeline/stage.py +0 -0
  97. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack/istack.py +0 -0
  98. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack/stack_factory.py +0 -0
  99. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack/stack_module_loader.py +0 -0
  100. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack/stack_module_registry.py +0 -0
  101. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack/stack_modules.py +0 -0
  102. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/__init__.py +0 -0
  103. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py +0 -0
  104. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/auto_scaling/__init__.py +0 -0
  105. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py +0 -0
  106. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/aws_lambdas/lambda_stack.py +0 -0
  107. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/buckets/README.md +0 -0
  108. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/buckets/bucket_stack.py +0 -0
  109. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/code_artifact/code_artifact_stack.py +0 -0
  110. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/cognito/cognito_stack.py +0 -0
  111. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/dynamodb/dynamodb_stack.py +0 -0
  112. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/ecr/README.md +0 -0
  113. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/ecr/ecr_stack.py +0 -0
  114. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/ecs/__init__.py +0 -0
  115. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/ecs/ecs_service_stack.py +0 -0
  116. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/load_balancer/__init__.py +0 -0
  117. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/load_balancer/load_balancer_stack.py +0 -0
  118. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/rds/__init__.py +0 -0
  119. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/rds/rds_stack.py +0 -0
  120. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/route53/__init__.py +0 -0
  121. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/route53/route53_stack.py +0 -0
  122. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/rum/__init__.py +0 -0
  123. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/rum/rum_stack.py +0 -0
  124. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/security_group/__init__.py +0 -0
  125. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/security_group/security_group_full_stack.py +0 -0
  126. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/security_group/security_group_stack.py +0 -0
  127. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/simple_queue_service/sqs_stack.py +0 -0
  128. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/stack_base.py +0 -0
  129. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/vpc/__init__.py +0 -0
  130. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/vpc/vpc_stack.py +0 -0
  131. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stack_library/websites/static_website_stack.py +0 -0
  132. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/stages/websites/static_website_stage.py +0 -0
  133. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/templates/README.md +0 -0
  134. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/templates/app.py.template +0 -0
  135. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/templates/cdk.json.template +0 -0
  136. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/api_gateway_integration_utility.py +0 -0
  137. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/commandline_args.py +0 -0
  138. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/configuration_loader.py +0 -0
  139. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/docker_utilities.py +0 -0
  140. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/environment_services.py +0 -0
  141. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/file_operations.py +0 -0
  142. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/git_utilities.py +0 -0
  143. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/json_loading_utility.py +0 -0
  144. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/lambda_function_utilities.py +0 -0
  145. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utilities/os_execute.py +0 -0
  146. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/utils/api_gateway_utilities.py +0 -0
  147. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/cdk_factory/workload/workload_factory.py +0 -0
  148. {cdk_factory-0.9.6 → cdk_factory-0.9.8}/src/handlers/test/handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.9.6
3
+ Version: 0.9.8
4
4
  Summary: CDK Factory. A QuickStarter and best practices setup for CDK projects
5
5
  Author-email: Eric Wilson <eric.wilson@geekcafe.com>
6
6
  License: MIT License
@@ -33,7 +33,7 @@ markers = [
33
33
  [project]
34
34
 
35
35
  name = "cdk_factory"
36
- version = "0.9.6"
36
+ version = "0.9.8"
37
37
  authors = [
38
38
  { name="Eric Wilson", email="eric.wilson@geekcafe.com" }
39
39
  ]
@@ -4,10 +4,16 @@ Geek Cafe, LLC
4
4
  Maintainers: Eric Wilson
5
5
  MIT License. See Project Root for the license information.
6
6
  """
7
+ import json
7
8
  import os
9
+ import shutil
10
+ import sys
11
+ import warnings
8
12
  from pathlib import Path
13
+ from typing import Optional
9
14
  import aws_cdk
10
15
  from aws_cdk.cx_api import CloudAssembly
16
+ from aws_lambda_powertools import Logger
11
17
 
12
18
  from cdk_factory.utilities.commandline_args import CommandlineArgs
13
19
  from cdk_factory.workload.workload_factory import WorkloadFactory
@@ -35,19 +41,28 @@ class CdkAppFactory:
35
41
  self.add_env_context = add_env_context
36
42
  self._is_pipeline = is_pipeline
37
43
 
38
- # Auto-detect outdir for CodeBuild compatibility
39
- if outdir is None and self.args.outdir is None and auto_detect_project_root:
40
- # For both local dev and CodeBuild: use CDK default (./cdk.out in current directory)
41
- # This ensures CDK CLI can always find the files where it expects them
42
- # CodeBuild buildspec handles artifact collection from the correct location
43
- self.outdir = None
44
-
45
- # Log for transparency
46
- if os.getenv('CODEBUILD_SRC_DIR'):
47
- print(f"📦 CodeBuild detected: using CDK default (./cdk.out)")
48
- print(f" └─ BuildSpec will collect artifacts from correct location")
44
+ # ALWAYS use /tmp/cdk-factory for consistent, predictable output location
45
+ # This works in both local dev and CodeBuild environments
46
+ CDK_FACTORY_BASE_DIR = "/tmp/cdk-factory"
47
+
48
+ # Use outdir as a namespace directory (not full path)
49
+ # This allows multiple projects/deployments to coexist without conflicts
50
+ supplied_outdir = outdir or (self.args.outdir if hasattr(self.args, 'outdir') else None)
51
+
52
+ if supplied_outdir:
53
+ # Extract just the directory name (not full path)
54
+ namespace = os.path.basename(supplied_outdir.rstrip('/'))
55
+ if not namespace or namespace in ('.', '..'):
56
+ namespace = "default"
57
+ self.outdir = f"{CDK_FACTORY_BASE_DIR}/{namespace}/cdk.out"
49
58
  else:
50
- self.outdir = outdir or self.args.outdir
59
+ # Default namespace
60
+ self.outdir = f"{CDK_FACTORY_BASE_DIR}/cdk.out"
61
+
62
+ # Clean and recreate directory for fresh synthesis
63
+ if os.path.exists(self.outdir):
64
+ shutil.rmtree(self.outdir)
65
+ os.makedirs(self.outdir, exist_ok=True)
51
66
 
52
67
  self.app: aws_cdk.App = aws_cdk.App(outdir=self.outdir)
53
68
 
@@ -65,15 +80,9 @@ class CdkAppFactory:
65
80
 
66
81
  print(f"👋 Synthesizing CDK App from the cdk-factory version: {__version__}")
67
82
 
68
- # Log outdir configuration
69
- if self.outdir:
70
- resolved_outdir = str(Path(self.outdir).resolve()) if not os.path.isabs(self.outdir) else self.outdir
71
- print(f"📂 CDK output directory configured: {self.outdir}")
72
- if not os.path.isabs(self.outdir):
73
- print(f" └─ Resolves to: {resolved_outdir}")
74
- else:
75
- print(f"📂 CDK output directory: using CDK default (./cdk.out in current directory)")
76
- print(f" └─ Current directory: {os.getcwd()}")
83
+ # Log consistent output directory
84
+ print(f"📂 CDK output directory: {self.outdir}")
85
+ print(f" └─ Consistent location works in both local and CodeBuild environments")
77
86
 
78
87
  if not paths:
79
88
  paths = []
@@ -0,0 +1,68 @@
1
+ """
2
+ Pipeline path utility functions.
3
+
4
+ This module contains path conversion utilities used by the pipeline factory.
5
+ Separated from pipeline_factory.py to avoid circular import issues.
6
+ """
7
+ import os
8
+ from pathlib import Path
9
+
10
+
11
+ def convert_app_file_to_relative_directory(cdk_app_file: str) -> str:
12
+ """
13
+ Convert a CDK app.py file path to a relative directory path.
14
+
15
+ CRITICAL: This ensures paths are ALWAYS relative before being baked into the buildspec.
16
+ This prevents:
17
+ 1. Local absolute paths from being baked into CloudFormation templates
18
+ 2. Self-mutate loops due to changing CODEBUILD_SRC_DIR paths
19
+
20
+ Args:
21
+ cdk_app_file: Path to app.py (can be absolute or relative)
22
+
23
+ Returns:
24
+ Relative directory path (e.g., "devops/cdk-iac") or empty string for root
25
+
26
+ Examples:
27
+ >>> convert_app_file_to_relative_directory("/project/devops/cdk-iac/app.py")
28
+ "devops/cdk-iac"
29
+
30
+ >>> convert_app_file_to_relative_directory("devops/cdk-iac/app.py")
31
+ "devops/cdk-iac"
32
+
33
+ >>> convert_app_file_to_relative_directory("/project/app.py")
34
+ ""
35
+ """
36
+ cdk_app_file_path = Path(cdk_app_file)
37
+
38
+ # If absolute path, try to make it relative
39
+ if cdk_app_file_path.is_absolute():
40
+ # Check if we have a project root hint (CODEBUILD_SRC_DIR or current working directory)
41
+ codebuild_src = os.getenv('CODEBUILD_SRC_DIR')
42
+ base_dir = codebuild_src if codebuild_src else os.getcwd()
43
+
44
+ try:
45
+ # Resolve symlinks (important for macOS where /var -> /private/var)
46
+ resolved_file = str(Path(cdk_app_file_path).resolve())
47
+ resolved_base = str(Path(base_dir).resolve())
48
+
49
+ # Make it relative to base directory
50
+ rel_path = os.path.relpath(resolved_file, resolved_base)
51
+ # If we ended up going outside (../), that's probably wrong
52
+ if not rel_path.startswith('..'):
53
+ cdk_app_file_path = Path(rel_path)
54
+ except ValueError:
55
+ # Different drives on Windows - can't make relative
56
+ pass
57
+
58
+ # Remove /app.py to get directory
59
+ cdk_directory = str(cdk_app_file_path.parent if cdk_app_file_path.name == 'app.py' else cdk_app_file_path.parent)
60
+
61
+ # Normalize to use forward slashes (works on Windows and Linux)
62
+ cdk_directory = cdk_directory.replace('\\', '/')
63
+
64
+ # If it's just '.' (current directory), use empty string
65
+ if cdk_directory in ('.', './'):
66
+ cdk_directory = ""
67
+
68
+ return cdk_directory
@@ -26,11 +26,12 @@ from cdk_factory.workload.workload_factory import WorkloadConfig
26
26
  from cdk_factory.configurations.cdk_config import CdkConfig
27
27
  from cdk_factory.configurations.pipeline_stage import PipelineStageConfig
28
28
  from cdk_factory.interfaces.istack import IStack
29
+ from cdk_factory.pipeline.path_utils import convert_app_file_to_relative_directory
29
30
 
30
31
  logger = Logger()
31
32
 
32
33
 
33
- class PipelineFactoryStack(cdk.Stack):
34
+ class PipelineFactoryStack(IStack):
34
35
  """
35
36
  Pipeline Stacks wrap up your application for a CI/CD pipeline Stack
36
37
  """
@@ -355,51 +356,16 @@ class PipelineFactoryStack(cdk.Stack):
355
356
  def _get_synth_shell_step(self) -> pipelines.ShellStep:
356
357
  if not self.workload.cdk_app_file:
357
358
  raise ValueError("CDK app file is not defined")
358
- cdk_directory = self.workload.cdk_app_file.removesuffix("/app.py")
359
359
 
360
360
  build_commands = self._get_build_commands()
361
361
 
362
- # Calculate where cdk.out will be created relative to project root
363
- # The build commands cd into cdk_directory and create ./cdk.out there
364
- # We need to tell the pipeline where to find those artifacts
365
- import os
366
- from pathlib import Path
367
-
368
- # Get the directory portion of cdk_app_file
369
- cdk_dir_path = Path(cdk_directory)
370
-
371
- # If we have CODEBUILD_SRC_DIR, use it as the base to calculate relative path
372
- codebuild_src = os.getenv('CODEBUILD_SRC_DIR')
373
-
374
- if codebuild_src and cdk_dir_path.is_absolute():
375
- # Calculate relative path from CodeBuild source directory
376
- # Example: /codebuild/.../src/devops/cdk-iac relative to /codebuild/.../src = devops/cdk-iac
377
- try:
378
- cdk_relative_dir = os.path.relpath(str(cdk_dir_path), codebuild_src)
379
- # If relpath resulted in going up directories (starts with ..), use empty
380
- # If relpath is '.' (same directory), use empty (app.py at root)
381
- if cdk_relative_dir.startswith('..') or cdk_relative_dir == '.':
382
- cdk_relative_dir = ""
383
- except ValueError:
384
- # Paths on different drives (Windows) - fallback to empty
385
- cdk_relative_dir = ""
386
- elif cdk_dir_path.is_absolute():
387
- # No CODEBUILD_SRC_DIR but path is absolute - can't determine relative path reliably
388
- # Fallback to empty (will use "cdk.out" at root)
389
- cdk_relative_dir = ""
390
- else:
391
- # Path is already relative - use as-is
392
- cdk_relative_dir = str(cdk_dir_path)
393
-
394
- # Construct the path to cdk.out relative to project root
395
- if cdk_relative_dir:
396
- cdk_out_directory = f"{cdk_relative_dir}/cdk.out"
397
- else:
398
- cdk_out_directory = "cdk.out"
362
+ # Use consistent /tmp/cdk-factory/cdk.out location
363
+ # This matches the output directory configured in CdkAppFactory
364
+ cdk_out_directory = "/tmp/cdk-factory/cdk.out"
399
365
 
400
- build_commands.append(f"echo 👉 cdk_directory: {cdk_directory}")
401
- build_commands.append(f"echo 👉 cdk_out_directory: {cdk_out_directory}")
402
- build_commands.append("echo 👉 PWD from synth shell step: ${PWD}")
366
+ # Debug logging - will be baked into buildspec
367
+ build_commands.append(f"echo '👉 CDK output directory: {cdk_out_directory}'")
368
+ build_commands.append("echo '👉 Consistent location in all environments'")
403
369
 
404
370
  shell = pipelines.ShellStep(
405
371
  "CDK Synth",
@@ -0,0 +1 @@
1
+ __version__ = "0.9.8"
@@ -1 +0,0 @@
1
- __version__ = "0.9.6"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes