Skip to content

Commit fd71ead

Browse files
authored
[DEPLOY] v.1.1.14
[DEPLOY] v.1.1.14
2 parents 246252a + 11d75b0 commit fd71ead

65 files changed

Lines changed: 1671 additions & 592 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/cd-dev.yml

Lines changed: 138 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,145 +1,167 @@
1-
name: Continuous Deployment for SOPT makers Authentication Development Server
1+
name: Deploy SOPT Makers Authentication Server to Lambda (DEV)
22

33
on:
4-
workflow_dispatch:
54
push:
6-
branches: [ dev ]
5+
branches:
6+
- dev
7+
workflow_dispatch:
78

8-
jobs:
9+
env:
10+
PROJECT_NAME: authentication
11+
SAM_PROFILE: dev
12+
AWS_REGION: ${{ secrets.AWS_REGION }}
13+
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
914

10-
build-and-push-image:
15+
jobs:
16+
deploy:
1117
runs-on: ubuntu-latest
18+
1219
steps:
13-
- name: Checkout
14-
uses: actions/checkout@v3
20+
- name: Checkout source
21+
uses: actions/checkout@v4
1522

16-
- name: Set up JDK 21
17-
uses: actions/setup-java@v3
23+
- name: Set up Java 21
24+
uses: actions/setup-java@v4
1825
with:
26+
distribution: temurin
1927
java-version: 21
20-
distribution: 'corretto'
21-
cache: gradle
2228

23-
- name: 🔒 Configure AWS credentials
29+
- name: Configure AWS credentials
2430
uses: aws-actions/configure-aws-credentials@v4
2531
with:
2632
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
2733
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
28-
aws-region: ${{ secrets.AWS_REGION }}
34+
aws-region: ${{ env.AWS_REGION }}
35+
36+
- name: Install AWS SAM CLI
37+
uses: aws-actions/setup-sam@v2
2938

30-
- name: ⚙️ Create Property File
39+
- name: Create .env file
40+
run: |
41+
set -e
42+
cat <<EOF > .env
43+
${{ secrets.ENV_FILE_DEV }}
44+
EOF
45+
46+
- name: Create Property File
3147
run: |
3248
touch ./gradle.properties
3349
echo "${{ secrets.PROPERTY_GRADLE }}" >> ./gradle.properties
3450
35-
- name: 📂 Download Keys and Env from S3
36-
env:
37-
REGION: ${{ secrets.AWS_REGION }}
38-
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
39-
JWT_PUBLIC_KEY_PATH: ${{ secrets.JWT_PUBLIC_KEY_PATH }}
40-
JWT_PRIVATE_KEY_PATH: ${{ secrets.JWT_PRIVATE_KEY_PATH }}
41-
TEST_ENV_PATH: ${{ secrets.ENV_FILE_PATH_TEST }}
42-
run: |
43-
mkdir -p ./src/main/resources
44-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PUBLIC_KEY_PATH ./src/main/resources/jwt_public_key.pem --region $REGION
45-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PRIVATE_KEY_PATH ./src/main/resources/jwt_private_key.pem --region $REGION
46-
mkdir -p ./src/main/resources/env
47-
aws s3 cp s3://$S3_BUCKET/dev/$TEST_ENV_PATH ./src/main/resources/env/test.env --region $REGION
48-
49-
- name: 🧱 Build and Test with Gradle
50-
run: ./gradlew build --no-daemon
51-
shell: bash
52-
53-
- name: 🧱 Build Image and Push to ECR Public
54-
env:
55-
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
56-
AWS_ECR_REPO: ${{ secrets.AWS_ECR_REPO_DEV }}
57-
GITHUB_SHA: ${{ github.sha }}
51+
- name: Validate env variables
5852
run: |
59-
IMAGE_SHA_TAG=$(echo $GITHUB_SHA | cut -c1-8)
53+
set -e
54+
source .env
6055
61-
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
62-
63-
docker build --build-arg PROFILE=dev \
64-
-t public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:latest \
65-
-t public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:$IMAGE_SHA_TAG .
56+
REQUIRED_VARS=(
57+
SPRING_PROFILES_ACTIVE
6658
67-
docker push public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:latest
68-
docker push public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:$IMAGE_SHA_TAG
59+
DB_URL DB_USERNAME DB_PASSWORD DB_DRIVER_CLASS
60+
JPA_DATABASE_PLATFORM JPA_DATABASE
6961
70-
- name: 🗑️ Prune old ECR Public images (keep 2 latest)
71-
env:
72-
ECR_APP_NAME: ${{ secrets.AWS_ECR_REPO_DEV }}
73-
run: |
74-
echo "Pruning old images, keeping only 2 most recent..."
75-
IMAGES=$(aws ecr-public describe-images \
76-
--region us-east-1 \
77-
--repository-name $ECR_APP_NAME \
78-
--query 'sort_by(imageDetails,& imagePushedAt)[*].imageDigest' \
79-
--output json)
80-
81-
COUNT=$(echo $IMAGES | jq length)
82-
83-
if [ "$COUNT" -gt 2 ]; then
84-
TO_DELETE=$(echo $IMAGES | jq -c ".[:$((COUNT-2))] | [{imageDigest: .[]}]")
85-
if [ "$TO_DELETE" != "[]" ]; then
86-
aws ecr-public batch-delete-image \
87-
--region us-east-1 \
88-
--repository-name $ECR_APP_NAME \
89-
--image-ids "$TO_DELETE"
90-
else
91-
echo "No images to delete."
62+
REDIS_HOST REDIS_PORT REDIS_PASSWORD
63+
64+
KEY_ID ISSUER
65+
ACCESS_TOKEN_EXPIRATION_TIME REFRESH_TOKEN_EXPIRATION_TIME
66+
67+
GABIA_SMS_ID GABIA_SMS_KEY GABIA_SMS_URL GABIA_SMS_PHONE
68+
69+
APPLE_AUD_APP APPLE_AUD_WEB GOOGLE_CLIENT_ID
70+
71+
PLAYGROUND_X_API_KEY CREW_X_API_KEY APP_X_API_KEY
72+
ADMIN_X_API_KEY PLATFORM_X_API_KEY MONITORING_X_API_KEY
73+
74+
JWT_KEY_S3_BUCKET JWT_PUBLIC_KEY_S3_PATH JWT_PRIVATE_KEY_S3_PATH
75+
76+
ACTUATOR_PATH USER_PATH GET_PUBLIC_KEY
77+
78+
MAGIC_LOGIN_PHONE MAGIC_LOGIN_CODE MAGIC_LOGIN_NAME
79+
)
80+
81+
for VAR in "${REQUIRED_VARS[@]}"; do
82+
if [ -z "${!VAR}" ]; then
83+
echo "❌ Missing env: $VAR"
84+
exit 1
9285
fi
93-
else
94-
echo "Less than or equal to 2 images, skipping prune."
95-
fi
86+
done
9687
97-
deploy:
98-
needs: build-and-push-image
99-
runs-on: ubuntu-latest
100-
steps:
101-
- name: 📥 Checkout Source
102-
uses: actions/checkout@v3
88+
echo "✅ All required env variables are present"
10389
104-
- name: 🔒 Configure AWS Credentials
105-
uses: aws-actions/configure-aws-credentials@v4
106-
with:
107-
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
108-
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
109-
aws-region: ${{ secrets.AWS_REGION }}
110-
111-
- name: 📂 Download Keys and Env from S3
112-
env:
113-
REGION: ${{ secrets.AWS_REGION }}
114-
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
115-
JWT_PUBLIC_KEY_PATH: ${{ secrets.JWT_PUBLIC_KEY_PATH }}
116-
JWT_PRIVATE_KEY_PATH: ${{ secrets.JWT_PRIVATE_KEY_PATH }}
117-
DEV_ENV_FILE_PATH: ${{ secrets.ENV_FILE_PATH_DEV }}
90+
- name: Build Lambda JAR
11891
run: |
119-
mkdir -p ./key
120-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PUBLIC_KEY_PATH ./key/jwt_public_key.pem --region $REGION
121-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PRIVATE_KEY_PATH ./key/jwt_private_key.pem --region $REGION
122-
aws s3 cp s3://$S3_BUCKET/dev/$DEV_ENV_FILE_PATH .env --region $REGION
92+
set -e
93+
chmod +x gradlew
94+
source .env
95+
./gradlew clean lambdaJar -x test -Pprofile=dev
12396
124-
- name: 🔄 Transfer Deployment Files to EC2
125-
uses: appleboy/scp-action@master
126-
with:
127-
host: ${{ secrets.HOST_DEV }}
128-
username: ec2-user
129-
key: ${{ secrets.PEM_KEY_DEV }}
130-
port: 22
131-
source: ".env,docker-compose.yml,scripts,key"
132-
target: /home/ec2-user/authentication
133-
overwrite: true
134-
135-
- name: 🚀 Remote SSH Deployment
136-
uses: appleboy/ssh-action@master
137-
with:
138-
host: ${{ secrets.HOST_DEV }}
139-
username: ec2-user
140-
key: ${{ secrets.PEM_KEY_DEV }}
141-
port: 22
142-
script: |
143-
sudo chmod +x /home/ec2-user/authentication/scripts/*.sh
144-
cd /home/ec2-user/authentication/scripts
145-
./deploy.sh
97+
- name: Upload Lambda artifact to S3
98+
run: |
99+
set -e
100+
ZIP_FILE=$(find build/distributions -name "*-lambda.zip" | head -1)
101+
102+
if [ -z "$ZIP_FILE" ]; then
103+
echo "❌ Lambda ZIP file not found"
104+
exit 1
105+
fi
106+
107+
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
108+
S3_KEY="${SAM_PROFILE}/lambda/${PROJECT_NAME}-${TIMESTAMP}.zip"
109+
aws s3 cp "$ZIP_FILE" "s3://${S3_BUCKET}/${S3_KEY}"
110+
echo "S3_KEY=$S3_KEY" >> $GITHUB_ENV
111+
112+
- name: Deploy with SAM
113+
run: |
114+
set -e
115+
source .env
116+
cd lambda
117+
118+
sam deploy \
119+
--config-env ${SAM_PROFILE} \
120+
--no-fail-on-empty-changeset \
121+
--parameter-overrides \
122+
S3Bucket="${S3_BUCKET}" \
123+
S3Key="${S3_KEY}" \
124+
Profile="${SAM_PROFILE}" \
125+
DbUrl="${DB_URL}" \
126+
DbUsername="${DB_USERNAME}" \
127+
DbPassword="${DB_PASSWORD}" \
128+
DbDriverClass="${DB_DRIVER_CLASS}" \
129+
JpaDatabasePlatform="${JPA_DATABASE_PLATFORM}" \
130+
JpaDatabase="${JPA_DATABASE}" \
131+
RedisHost="${REDIS_HOST}" \
132+
RedisPort="${REDIS_PORT}" \
133+
RedisPassword="${REDIS_PASSWORD}" \
134+
KeyId="${KEY_ID}" \
135+
AccessTokenExpirationTime="${ACCESS_TOKEN_EXPIRATION_TIME}" \
136+
RefreshTokenExpirationTime="${REFRESH_TOKEN_EXPIRATION_TIME}" \
137+
Issuer="${ISSUER}" \
138+
GabiaSmsId="${GABIA_SMS_ID}" \
139+
GabiaSmsKey="${GABIA_SMS_KEY}" \
140+
GabiaSmsUrl="${GABIA_SMS_URL}" \
141+
GabiaSmsPhone="${GABIA_SMS_PHONE}" \
142+
AppleAudApp="${APPLE_AUD_APP}" \
143+
AppleAudWeb="${APPLE_AUD_WEB}" \
144+
GoogleClientId="${GOOGLE_CLIENT_ID}" \
145+
PlaygroundXApiKey="${PLAYGROUND_X_API_KEY}" \
146+
CrewXApiKey="${CREW_X_API_KEY}" \
147+
AppXApiKey="${APP_X_API_KEY}" \
148+
AdminXApiKey="${ADMIN_X_API_KEY}" \
149+
PlatformXApiKey="${PLATFORM_X_API_KEY}" \
150+
MonitoringXApiKey="${MONITORING_X_API_KEY}" \
151+
JwtKeyS3Bucket="${JWT_KEY_S3_BUCKET}" \
152+
JwtPublicKeyS3Path="${JWT_PUBLIC_KEY_S3_PATH}" \
153+
JwtPrivateKeyS3Path="${JWT_PRIVATE_KEY_S3_PATH}" \
154+
ActuatorPath="${ACTUATOR_PATH}" \
155+
UserPath="${USER_PATH}" \
156+
GetPublicKey="${GET_PUBLIC_KEY}" \
157+
MagicLoginPhone="${MAGIC_LOGIN_PHONE}" \
158+
MagicLoginCode="${MAGIC_LOGIN_CODE}" \
159+
MagicLoginName="${MAGIC_LOGIN_NAME}"
160+
161+
162+
- name: Output API Endpoint
163+
run: |
164+
aws cloudformation describe-stacks \
165+
--stack-name "${PROJECT_NAME}-${SAM_PROFILE}" \
166+
--query "Stacks[0].Outputs[?OutputKey=='ApiEndpoint'].OutputValue" \
167+
--output text

.github/workflows/cd-prod.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
aws s3 cp s3://$S3_BUCKET/prod/$TEST_ENV_PATH ./src/main/resources/env/test.env --region $REGION
4747
4848
- name: 🧱 Build and Test with Gradle
49-
run: ./gradlew build --no-daemon
49+
run: ./gradlew build --no-daemon -Pprofile=prod
5050
shell: bash
5151

5252
- name: 🧱 Build Image and Push to ECR Public

.github/workflows/ci.yml

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Continuous Integration for SOPT makers Authentication Project
1+
name: Continuous Integration for SOPT Makers Authentication Project
22

33
on:
44
pull_request:
@@ -10,49 +10,32 @@ jobs:
1010

1111
steps:
1212
- name: Checkout
13-
uses: actions/checkout@v3
13+
uses: actions/checkout@v4
1414

1515
- name: ⚙️ Set up JDK 21
16-
uses: actions/setup-java@v3
16+
uses: actions/setup-java@v4
1717
with:
1818
java-version: 21
19-
distribution: 'corretto'
19+
distribution: temurin
2020
cache: gradle
2121

2222
- name: ⚙️ Grant execute permission for gradlew
2323
run: chmod +x ./gradlew
24-
shell: bash
2524

26-
- name: 🔑 Create Application Property File
25+
- name: 🔑 Create gradle.properties
2726
run: |
28-
touch ./gradle.properties
29-
echo "${{ secrets.PROPERTY_GRADLE }}" >> ./gradle.properties
27+
cat <<EOF > gradle.properties
28+
${{ secrets.PROPERTY_GRADLE }}
29+
EOF
3030
31-
- name: 🔒 Configure AWS credentials
32-
uses: aws-actions/configure-aws-credentials@v1
33-
with:
34-
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
35-
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
36-
aws-region: ${{ secrets.AWS_REGION }}
37-
38-
- name: 📂 Download Keys and Env from S3
39-
env:
40-
REGION: ${{ secrets.AWS_REGION }}
41-
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
42-
JWT_PUBLIC_KEY_PATH: ${{ secrets.JWT_PUBLIC_KEY_PATH }}
43-
JWT_PRIVATE_KEY_PATH: ${{ secrets.JWT_PRIVATE_KEY_PATH }}
44-
TEST_ENV_PATH: ${{ secrets.ENV_FILE_PATH_TEST }}
31+
- name: 🔑 Create test.env in classpath
32+
run: |
33+
mkdir -p src/test/resources/env
34+
cat <<'EOF' > src/test/resources/env/test.env
35+
${{ secrets.ENV_FILE_TEST }}
36+
EOF
37+
38+
- name: 🧱 Build (context load only)
4539
run: |
46-
mkdir -p ./src/main/resources
47-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PUBLIC_KEY_PATH ./src/main/resources/jwt_public_key.pem --region $REGION
48-
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PRIVATE_KEY_PATH ./src/main/resources/jwt_private_key.pem --region $REGION
49-
mkdir -p ./src/main/resources/env
50-
aws s3 cp s3://$S3_BUCKET/dev/$TEST_ENV_PATH ./src/main/resources/env/test.env --region $REGION
51-
52-
- name: 🧱 Build and Test with Gradle
53-
run: ./gradlew build --no-daemon
54-
shell: bash
55-
56-
- name: 🐳 Build with Gradle
57-
run: docker build -t app-ci .
58-
shell: bash
40+
set -e
41+
./gradlew clean build --no-daemon --no-build-cache -Pprofile=test

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ out/
4040
!gradle.properties
4141
**/src/main/resources/*.properties
4242
**/src/main/resources/**/*.env
43+
*.env
4344
*.properties
4445
!gradle/wrapper/*.properties
4546

0 commit comments

Comments
 (0)