Skip to content

Commit 30ec667

Browse files
authored
Disable caching linkry responses (#226)
1 parent 6946d3f commit 30ec667

File tree

3 files changed

+94
-149
lines changed

3 files changed

+94
-149
lines changed

Makefile

Lines changed: 86 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -1,161 +1,103 @@
1-
# =============================================================================
2-
# VARIABLES
3-
# =============================================================================
4-
5-
# AWS Account IDs
6-
PROD_AWS_ACCOUNT := 298118738376
7-
DEV_AWS_ACCOUNT := 427040638965
8-
9-
# Tools & Shell Commands (immediate expansion)
10-
SHELL := /bin/bash
11-
GIT_HASH := $(shell git rev-parse --short HEAD)
12-
CURRENT_AWS_ACCT := $(shell aws sts get-caller-identity --query Account --output text)
13-
CURL := curl -f
14-
15-
# Directories
16-
API_SRC_DIR := src/api
17-
TERRAFORM_PROD_DIR := terraform/envs/prod
18-
TERRAFORM_QA_DIR := terraform/envs/qa
19-
DIST_LAMBDA_DIR := dist/lambda
20-
DIST_SQS_CONSUMER_DIR := dist/sqsConsumer
21-
22-
# Build Parameters
23-
NODE_BUILDER_IMAGE := public.ecr.aws/sam/build-nodejs22.x:latest
24-
NPM_INSTALL_PARAMS := --omit=dev --target_arch=arm64 --target_platform=linux --target_libc=glibc
25-
26-
# Platforms for Terraform provider locking
27-
TF_LOCK_PLATFORMS := -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64
28-
29-
# =============================================================================
30-
# PHONY TARGETS & DEFAULT GOAL
31-
# =============================================================================
32-
33-
.PHONY: help all clean build build_swagger local deploy_prod deploy_dev init_terraform \
34-
install test_all test_unit test_live_integration test_e2e test_post_deploy \
35-
check_account_prod check_account_dev dev_health_check prod_health_check \
36-
lock_terraform validate_terraform
37-
38-
# Set the default goal to 'help'
39-
.DEFAULT_GOAL := help
40-
41-
# =============================================================================
42-
# HELPER DEFINITION
43-
# =============================================================================
44-
45-
# Define a reusable function for building Node.js packages in Docker.
46-
# Argument 1: The directory to process (e.g., dist/lambda)
47-
define build-lambda-package
48-
@echo "--- Building Node.js package in $(1) ---"
49-
docker run --rm -v "$(shell pwd)/$(1)":/var/task $(NODE_BUILDER_IMAGE) \
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"
54-
endef
55-
56-
# =============================================================================
57-
# CORE TARGETS
58-
# =============================================================================
59-
60-
help: ## ✨ Show this help message
61-
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_0-9-]+:.*?## / {printf "\033[36m%-25s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
62-
63-
all: install build test_all ## 🚀 Install, build, and run all tests
64-
65-
install: ## 📦 Install all project dependencies using Yarn
66-
yarn -D
1+
prod_aws_account = 298118738376
2+
dev_aws_account = 427040638965
3+
current_aws_account := $(shell aws sts get-caller-identity --query Account --output text)
4+
5+
src_directory_root = src/
6+
dist_ui_directory_root = dist_ui/
7+
integration_test_directory_root = tests/live_integration/
8+
npm_install_params = --omit=dev --target_arch=arm64 --target_platform=linux --target_libc=glibc --cpu arm64 --os linux --arch=arm64
9+
GIT_HASH := $(shell git rev-parse --short HEAD)
10+
11+
.PHONY: clean
12+
13+
check_account_prod:
14+
ifneq ($(current_aws_account),$(prod_aws_account))
15+
$(error Error: running in account $(current_aws_account), expected account ID $(prod_aws_account))
16+
endif
17+
18+
check_account_dev:
19+
ifneq ($(current_aws_account),$(dev_aws_account))
20+
$(error Error: running in account $(current_aws_account), expected account ID $(dev_aws_account))
21+
endif
22+
6723

68-
clean: ## 🧹 Remove all build artifacts and node_modules
69-
rm -rf .aws-sam node_modules/ src/api/node_modules/ src/ui/node_modules/ \
70-
dist/ dist_ui/ dist_devel/ coverage/
24+
clean:
25+
rm -rf .aws-sam
26+
rm -rf node_modules/
27+
rm -rf src/api/node_modules/
28+
rm -rf src/ui/node_modules/
29+
rm -rf dist/
30+
rm -rf dist_ui/
31+
rm -rf dist_devel/
32+
rm -rf coverage/
7133

72-
build_swagger: ## 📝 Generate Swagger/OpenAPI specification
73-
@(cd $(API_SRC_DIR); npx tsx --experimental-loader=./mockLoader.mjs createSwagger.ts)
34+
build_swagger:
35+
cd src/api && npx tsx --experimental-loader=./mockLoader.mjs createSwagger.ts && cd ../..
7436

75-
build: install build_swagger ## 🛠️ Build the entire application
76-
@echo "--- Building project source ---"
37+
build: src/
38+
yarn -D
7739
yarn build
78-
cp -r $(API_SRC_DIR)/resources/ dist/api/resources
40+
make build_swagger
41+
cp -r src/api/resources/ dist/api/resources
7942
rm -rf dist/lambda/sqs
80-
$(call build-lambda-package,$(DIST_LAMBDA_DIR))
81-
$(call build-lambda-package,$(DIST_SQS_CONSUMER_DIR))
82-
83-
local: install ## 🏃 Run the development server locally
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"
54+
55+
local:
8456
VITE_BUILD_HASH=$(GIT_HASH) yarn run dev
8557

86-
# =============================================================================
87-
# DEPLOYMENT & TERRAFORM
88-
# =============================================================================
89-
90-
deploy_prod: check_account_prod ## 🚀 Deploy to PRODUCTION environment
91-
@echo "--- Deploying Terraform to Production ---"
92-
terraform -chdir=$(TERRAFORM_PROD_DIR) apply -auto-approve
93-
94-
deploy_dev: check_account_dev ## 🚀 Deploy to DEVELOPMENT (QA) environment
95-
@echo "--- Deploying Terraform to Development (QA) ---"
96-
terraform -chdir=$(TERRAFORM_QA_DIR) apply -auto-approve
97-
98-
init_terraform: ## Terraform: Initialize all environments
99-
@echo "--- Initializing Terraform for Production ---"
100-
terraform -chdir=$(TERRAFORM_PROD_DIR) init
101-
@echo "--- Initializing Terraform for Development (QA) ---"
102-
terraform -chdir=$(TERRAFORM_QA_DIR) init
103-
104-
validate_terraform: ## Terraform: Format and validate all environments
105-
@echo "--- Validating Production Terraform ---"
106-
terraform -chdir=$(TERRAFORM_PROD_DIR) fmt -check
107-
terraform -chdir=$(TERRAFORM_PROD_DIR) validate
108-
@echo "--- Validating Development (QA) Terraform ---"
109-
terraform -chdir=$(TERRAFORM_QA_DIR) fmt -check
110-
terraform -chdir=$(TERRAFORM_QA_DIR) validate
111-
112-
lock_terraform: ## Terraform: Update provider dependency locks for all platforms
113-
@echo "--- Locking Terraform providers for Production ---"
114-
terraform -chdir=$(TERRAFORM_PROD_DIR) providers lock $(TF_LOCK_PLATFORMS)
115-
@echo "--- Locking Terraform providers for Development (QA) ---"
116-
terraform -chdir=$(TERRAFORM_QA_DIR) providers lock $(TF_LOCK_PLATFORMS)
117-
118-
# =============================================================================
119-
# TESTING & QA
120-
# =============================================================================
121-
122-
test_all: test_unit test_e2e ## ✅ Run all unit and e2e tests
123-
124-
test_unit: install ## ✅ Run linters, formatters, and unit tests
58+
deploy_prod: check_account_prod
59+
@echo "Deploying Terraform..."
60+
terraform -chdir=terraform/envs/prod init -lockfile=readonly
61+
terraform -chdir=terraform/envs/prod apply -auto-approve
62+
63+
deploy_dev: check_account_dev
64+
@echo "Deploying Terraform..."
65+
terraform -chdir=terraform/envs/qa init -lockfile=readonly
66+
terraform -chdir=terraform/envs/qa apply -auto-approve
67+
68+
init_terraform:
69+
terraform -chdir=terraform/envs/qa init
70+
terraform -chdir=terraform/envs/prod init
71+
72+
install:
73+
yarn -D
74+
75+
test_live_integration: install
76+
yarn test:live
77+
78+
test_unit: install
12579
yarn lint
80+
terraform -chdir=terraform/envs/qa init -reconfigure -backend=false -upgrade
81+
terraform -chdir=terraform/envs/qa fmt -check
82+
terraform -chdir=terraform/envs/qa validate
83+
terraform -chdir=terraform/envs/prod init -reconfigure -backend=false
84+
terraform -chdir=terraform/envs/prod fmt -check
85+
terraform -chdir=terraform/envs/prod validate
12686
yarn prettier
127-
$(MAKE) validate_terraform
12887
yarn test:unit
12988

130-
test_live_integration: install ## ✅ Run post-deployment integration tests
131-
yarn test:live
132-
133-
test_e2e: install ## ✅ Run Playwright end-to-end tests
89+
test_e2e: install
13490
yarn playwright install
13591
yarn test:e2e
13692

137-
test_post_deploy: test_live_integration test_e2e ## ✅ Run all post-deployment tests
138-
139-
# =============================================================================
140-
# HEALTH CHECKS & GUARDS
141-
# =============================================================================
93+
test_post_deploy: test_live_integration test_e2e
14294

143-
check_account_prod: ## 🔒 Verify execution in the PRODUCTION AWS account
144-
ifneq ($(CURRENT_AWS_ACCT),$(PROD_AWS_ACCOUNT))
145-
$(error ERROR: Not in PROD account. Expected $(PROD_AWS_ACCOUNT), but in $(CURRENT_AWS_ACCT))
146-
endif
147-
148-
check_account_dev: ## 🔒 Verify execution in the DEVELOPMENT AWS account
149-
ifneq ($(CURRENT_AWS_ACCT),$(DEV_AWS_ACCOUNT))
150-
$(error ERROR: Not in DEV account. Expected $(DEV_AWS_ACCOUNT), but in $(CURRENT_AWS_ACCT))
151-
endif
95+
dev_health_check:
96+
curl -f https://core.aws.qa.acmuiuc.org/api/v1/healthz && curl -f https://core.aws.qa.acmuiuc.org/
15297

153-
dev_health_check: ## ❤️ Check health of the DEVELOPMENT environment
154-
@echo "--- Pinging Development (QA) Environment ---"
155-
$(CURL) https://core.aws.qa.acmuiuc.org/api/v1/healthz
156-
$(CURL) https://core.aws.qa.acmuiuc.org/
98+
prod_health_check:
99+
curl -f https://core.acm.illinois.edu/api/v1/healthz && curl -f https://core.acm.illinois.edu
157100

158-
prod_health_check: ## ❤️ Check health of the PRODUCTION environment
159-
@echo "--- Pinging Production Environment ---"
160-
$(CURL) https://core.acm.illinois.edu/api/v1/healthz
161-
$(CURL) https://core.acm.illinois.edu
101+
lock_terraform:
102+
terraform -chdir=terraform/envs/qa providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64
103+
terraform -chdir=terraform/envs/prod providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64

terraform/modules/frontend/main.tf

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,20 +256,25 @@ async function handler(event) {
256256
}
257257
}
258258
}
259+
let statusCode = 307;
260+
let statusDescription = 'Not Found';
259261
let redirectUrl = "https://acm.illinois.edu/404";
260262
try {
261263
const value = await kvs.get(path);
262264
if (value) {
263265
redirectUrl = value;
266+
statusCode = 302;
267+
statusDescription = 'Found'
264268
}
265269
} catch (err) {
266270
console.log(`KVS key lookup failed for $!{path}: $!{err}`);
267271
}
268272
var response = {
269-
statusCode: 302,
270-
statusDescription: 'Found',
273+
statusCode: statusCode,
274+
statusDescription: statusDescription,
271275
headers: {
272-
'location': { value: redirectUrl }
276+
'location': { value: redirectUrl },
277+
'cache-control': { value: 'no-cache, no-store, must-revalidate' }
273278
}
274279
};
275280
return response;

terraform/modules/lambdas/main.tf

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,9 +352,7 @@ resource "aws_lambda_function" "sqs_lambda" {
352352
variables = {
353353
"RunEnvironment" = var.RunEnvironment
354354
"AWS_CRT_NODEJS_BINARY_RELATIVE_PATH" = "node_modules/aws-crt/dist/bin/linux-arm64-glibc/aws-crt-nodejs.node"
355-
ORIGIN_VERIFY_KEY = var.OriginVerifyKey
356355
EntraRoleArn = aws_iam_role.entra_role.arn
357-
LinkryKvArn = var.LinkryKvArn
358356
"NODE_OPTIONS" = "--enable-source-maps"
359357
}
360358
}

0 commit comments

Comments
 (0)