diff --git a/src/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap b/src/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap index a5ba8136..617aec2b 100644 --- a/src/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +++ b/src/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap @@ -44,8 +44,12 @@ function toEnvironment(target: AwsDeploymentTarget): Environment { }; } +function sanitize(name: string): string { + return name.replace(/_/g, '-'); +} + function toStackName(projectName: string, targetName: string): string { - return \`AgentCore-\${projectName}-\${targetName}\`; + return \`AgentCore-\${sanitize(projectName)}-\${sanitize(targetName)}\`; } async function main() { diff --git a/src/assets/cdk/bin/cdk.ts b/src/assets/cdk/bin/cdk.ts index 92caa1f1..da7f9de3 100644 --- a/src/assets/cdk/bin/cdk.ts +++ b/src/assets/cdk/bin/cdk.ts @@ -11,8 +11,12 @@ function toEnvironment(target: AwsDeploymentTarget): Environment { }; } +function sanitize(name: string): string { + return name.replace(/_/g, '-'); +} + function toStackName(projectName: string, targetName: string): string { - return `AgentCore-${projectName}-${targetName}`; + return `AgentCore-${sanitize(projectName)}-${sanitize(targetName)}`; } async function main() { diff --git a/src/schema/schemas/__tests__/aws-targets.test.ts b/src/schema/schemas/__tests__/aws-targets.test.ts index ed5160f5..3fc9cbfe 100644 --- a/src/schema/schemas/__tests__/aws-targets.test.ts +++ b/src/schema/schemas/__tests__/aws-targets.test.ts @@ -73,7 +73,10 @@ describe('DeploymentTargetNameSchema', () => { expect(DeploymentTargetNameSchema.safeParse('default').success).toBe(true); expect(DeploymentTargetNameSchema.safeParse('prod').success).toBe(true); expect(DeploymentTargetNameSchema.safeParse('dev-us-east').success).toBe(true); - expect(DeploymentTargetNameSchema.safeParse('staging_env').success).toBe(true); + }); + + it('rejects name with underscores', () => { + expect(DeploymentTargetNameSchema.safeParse('staging_env').success).toBe(false); }); it('rejects name starting with digit', () => { diff --git a/src/schema/schemas/aws-targets.ts b/src/schema/schemas/aws-targets.ts index bfe303be..8b2c91b8 100644 --- a/src/schema/schemas/aws-targets.ts +++ b/src/schema/schemas/aws-targets.ts @@ -27,8 +27,8 @@ export const DeploymentTargetNameSchema = z .min(1) .max(64) .regex( - /^[a-zA-Z][a-zA-Z0-9_-]*$/, - 'Name must start with a letter and contain only alphanumeric characters, hyphens, and underscores' + /^[a-zA-Z][a-zA-Z0-9-]*$/, + 'Name must start with a letter and contain only alphanumeric characters and hyphens' ) .describe('Unique identifier for the deployment target');