|
1 | | -run_env = ParameterKey=RunEnvironment,ParameterValue |
2 | | -set_application_prefix = ParameterKey=ApplicationPrefix,ParameterValue |
3 | | -set_application_name = ParameterKey=ApplicationFriendlyName,ParameterValue |
4 | | - |
5 | 1 | prod_aws_account = 298118738376 |
6 | 2 | dev_aws_account = 427040638965 |
7 | 3 | current_aws_account := $(shell aws sts get-caller-identity --query Account --output text) |
8 | 4 |
|
9 | 5 | src_directory_root = src/ |
10 | 6 | dist_ui_directory_root = dist_ui/ |
11 | 7 | integration_test_directory_root = tests/live_integration/ |
12 | | - |
13 | | -# CHANGE ME (as needed) |
14 | | -application_key=infra-core-api |
15 | | -application_name="InfraCoreApi" |
16 | | - |
17 | | -region="us-east-1" |
18 | | - |
19 | | -# DO NOT CHANGE |
20 | | -common_params = --no-confirm-changeset \ |
21 | | - --no-fail-on-empty-changeset \ |
22 | | - --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ |
23 | | - --region $(region) \ |
24 | | - --stack-name $(application_key) \ |
25 | | - --tags "project=$(application_key)" "techlead=$(techlead)" \ |
26 | | - --s3-prefix $(application_key) \ |
27 | | - --resolve-s3 |
28 | | - |
29 | | -s3_bucket_prefix = "$(current_aws_account)-$(region)-$(application_key)" |
30 | | -ui_s3_bucket = "$(s3_bucket_prefix)-ui" |
31 | | -docs_s3_bucket = "$(s3_bucket_prefix)-docs" |
32 | | - |
33 | | - |
| 8 | +npm_install_params = --omit=dev --target_arch=arm64 --target_platform=linux --target_libc=glibc --cpu arm64 --os linux --arch=arm64 |
34 | 9 | GIT_HASH := $(shell git rev-parse --short HEAD) |
35 | | -ORIGIN_SECRET := $(shell openssl rand -hex 32) |
36 | 10 |
|
37 | 11 | .PHONY: clean |
38 | 12 |
|
@@ -60,80 +34,49 @@ clean: |
60 | 34 | build_swagger: |
61 | 35 | cd src/api && npx tsx --experimental-loader=./mockLoader.mjs createSwagger.ts && cd ../.. |
62 | 36 |
|
63 | | -build: src/ cloudformation/ |
| 37 | +build: src/ |
64 | 38 | yarn -D |
65 | 39 | yarn build |
66 | 40 | make build_swagger |
67 | 41 | cp -r src/api/resources/ dist/api/resources |
68 | 42 | rm -rf dist/lambda/sqs |
69 | | - sam build --template-file cloudformation/main.yml --use-container --parallel |
70 | | - mkdir -p .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/ |
71 | | - cp -r node_modules/aws-crt/dist .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt |
72 | | -## IF WE EVER CHANGE THE LAMBDA ARCH, BE SURE TO CHANGE THESE ## |
73 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/darwin* |
74 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/linux-x64* |
75 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/linux-arm64-musl |
76 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/darwin* |
77 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/freebsd* |
78 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-arm |
79 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-x64* |
80 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/win32-x64* |
81 | | - rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node |
| 43 | + docker run --rm -v "$(shell pwd)/dist/lambda":/var/task public.ecr.aws/sam/build-nodejs22.x:latest \ |
| 44 | + sh -c "npm install $(npm_install_params) && \ |
| 45 | + rm -rf node_modules/aws-crt/dist/bin/{darwin*,linux-x64*,linux-arm64-musl} && \ |
| 46 | + rm -rf node_modules/argon2/prebuilds/{darwin*,freebsd*,linux-arm,linux-x64*,win32-x64*} && \ |
| 47 | + rm -rf node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node" |
| 48 | + |
| 49 | + docker run --rm -v "$(shell pwd)/dist/sqsConsumer":/var/task public.ecr.aws/sam/build-nodejs22.x:latest \ |
| 50 | + sh -c "npm install $(npm_install_params) && \ |
| 51 | + rm -rf node_modules/aws-crt/dist/bin/{darwin*,linux-x64*,linux-arm64-musl} && \ |
| 52 | + rm -rf node_modules/argon2/prebuilds/{darwin*,freebsd*,linux-arm,linux-x64*,win32-x64*} && \ |
| 53 | + rm -rf node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node" |
82 | 54 |
|
83 | 55 | local: |
84 | 56 | VITE_BUILD_HASH=$(GIT_HASH) yarn run dev |
85 | 57 |
|
86 | | - |
87 | | -postdeploy: |
88 | | - @echo "Syncing S3 UI bucket..." |
89 | | - aws s3 sync $(dist_ui_directory_root) s3://$(ui_s3_bucket)/ --delete |
90 | | - make invalidate_cloudfront |
91 | | - |
92 | 58 | deploy_prod: check_account_prod |
93 | | - @echo "Deploying CloudFormation stack..." |
94 | | - @sam deploy $(common_params) --parameter-overrides $(run_env)=prod $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)" CloudfrontOriginSecret="$(ORIGIN_SECRET)" |
95 | 59 | @echo "Deploying Terraform..." |
96 | | - $(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text)) |
97 | 60 | terraform -chdir=terraform/envs/prod init -lockfile=readonly |
98 | | - terraform -chdir=terraform/envs/prod apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)" |
99 | | - make postdeploy |
| 61 | + terraform -chdir=terraform/envs/prod apply -auto-approve |
100 | 62 |
|
101 | 63 | deploy_dev: check_account_dev |
102 | | - @echo "Deploying CloudFormation stack..." |
103 | | - @sam deploy $(common_params) --parameter-overrides $(run_env)=dev $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)" CloudfrontOriginSecret="$(ORIGIN_SECRET)" |
104 | 64 | @echo "Deploying Terraform..." |
105 | | - $(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text)) |
106 | 65 | terraform -chdir=terraform/envs/qa init -lockfile=readonly |
107 | | - terraform -chdir=terraform/envs/qa apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)" |
108 | | - make postdeploy |
109 | | - |
110 | | -invalidate_cloudfront: |
111 | | - @echo "Creating CloudFront invalidation..." |
112 | | - $(eval DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text)) |
113 | | - $(eval DISTRIBUTION_ID_2 := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontIcalDistributionId'].OutputValue" --output text)) |
114 | | - $(eval INVALIDATION_ID := $(shell aws cloudfront create-invalidation --distribution-id $(DISTRIBUTION_ID) --paths "/*" --query 'Invalidation.Id' --output text --no-cli-page)) |
115 | | - $(eval INVALIDATION_ID_2 := $(shell aws cloudfront create-invalidation --distribution-id $(DISTRIBUTION_ID_2) --paths "/*" --query 'Invalidation.Id' --output text --no-cli-page)) |
116 | | - @echo "Triggered invalidation jobs $(INVALIDATION_ID) and $(INVALIDATION_ID_2)..." |
117 | | - @echo "Waiting on job $(INVALIDATION_ID)..." |
118 | | - aws cloudfront wait invalidation-completed --distribution-id $(DISTRIBUTION_ID) --id $(INVALIDATION_ID) |
119 | | - @echo "Waiting on job $(INVALIDATION_ID_2)..." |
120 | | - aws cloudfront wait invalidation-completed --distribution-id $(DISTRIBUTION_ID_2) --id $(INVALIDATION_ID_2) |
121 | | - @echo "CloudFront invalidation completed!" |
| 66 | + terraform -chdir=terraform/envs/qa apply -auto-approve |
122 | 67 |
|
123 | 68 | init_terraform: |
124 | 69 | terraform -chdir=terraform/envs/qa init |
125 | 70 | terraform -chdir=terraform/envs/prod init |
126 | 71 |
|
127 | 72 | install: |
128 | 73 | yarn -D |
129 | | - pip install cfn-lint |
130 | 74 |
|
131 | 75 | test_live_integration: install |
132 | 76 | yarn test:live |
133 | 77 |
|
134 | 78 | test_unit: install |
135 | 79 | yarn lint |
136 | | - cfn-lint cloudformation/**/* |
137 | 80 | terraform -chdir=terraform/envs/qa init -reconfigure -backend=false -upgrade |
138 | 81 | terraform -chdir=terraform/envs/qa fmt -check |
139 | 82 | terraform -chdir=terraform/envs/qa validate |
|
0 commit comments