Skip to content

Commit d64337c

Browse files
authored
Merge pull request #415 from 2ghrms/develop
[migration] AWS -> OCI 마이그레이션
2 parents 714c779 + d867bcf commit d64337c

30 files changed

Lines changed: 677 additions & 411 deletions

.github/workflows/ci.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,15 @@ jobs:
5757
env:
5858
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5959
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
60-
run: ./gradlew test sonar --info --stacktrace
60+
run: |
61+
# 포크에서 온 PR: PR 연동 시 원본 레포에 PR이 없어 실패하므로 브랜치 분석만 수행
62+
# 같은 레포 PR: PR 데코레이션 사용
63+
if [ "${{ github.event.pull_request.head.repo.full_name }}" = "${{ github.repository }}" ]; then
64+
./gradlew test sonar --info --stacktrace \
65+
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }} \
66+
-Dsonar.pullrequest.branch=${{ github.head_ref }} \
67+
-Dsonar.pullrequest.base=${{ github.base_ref }}
68+
else
69+
./gradlew test sonar --info --stacktrace \
70+
-Dsonar.branch.name=pr-${{ github.event.pull_request.number }}
71+
fi

.github/workflows/dev-cd.yml

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ jobs:
3333
- name: Grant gradlew permission
3434
run: chmod +x ./gradlew
3535

36+
- name: Set up QEMU
37+
uses: docker/setup-qemu-action@v3
38+
39+
- name: Set up Docker Buildx
40+
uses: docker/setup-buildx-action@v3
41+
with:
42+
install: true
43+
3644
- name: Log in to DockerHub
3745
uses: docker/login-action@v2
3846
with:
@@ -42,60 +50,70 @@ jobs:
4250
- name: Build & Push App Image
4351
run: |
4452
docker buildx build \
45-
--platform linux/amd64 \
53+
--platform linux/arm64 \
4654
--push \
4755
--file clokey-api/Dockerfile \
48-
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2025:dev-app \
56+
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2026:dev-app \
4957
.
5058
51-
- name: Copy dev-docker-compose.yml
59+
- name: Copy dev-compose
5260
uses: appleboy/scp-action@v0.1.3
5361
with:
5462
username: ubuntu
55-
host: ${{ secrets.DEV_EC2_HOST }}
56-
key: ${{ secrets.DEV_EC2_SSH_KEY }}
57-
source: ./clokey-api/dev-compose.yml
63+
host: ${{ secrets.OCI_HOST }}
64+
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
65+
source: "clokey-api/dev-compose.yml"
5866
target: /home/ubuntu/
5967

68+
- name: Set OCI private key env (multiline)
69+
run: |
70+
echo "OCI_PRIVATE_KEY<<ENDOFKEY" >> $GITHUB_ENV
71+
echo "${{ secrets.OCI_PRIVATE_KEY }}" >> $GITHUB_ENV
72+
echo "ENDOFKEY" >> $GITHUB_ENV
73+
74+
- name: Prepare OCI key base64 for Deploy script
75+
run: echo "OCI_PRIVATE_KEY_B64=$(echo -n "$OCI_PRIVATE_KEY" | base64 -w 0)" >> $GITHUB_ENV
76+
6077
- name: Deploy App
6178
uses: appleboy/ssh-action@master
6279
with:
6380
username: ubuntu
64-
host: ${{ secrets.DEV_EC2_HOST }}
65-
key: ${{ secrets.DEV_EC2_SSH_KEY }}
81+
host: ${{ secrets.OCI_HOST }}
82+
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
83+
envs: DOCKERHUB_USERNAME,CODIVE_DEV_BASE_URL,CODIVE_PROD_BASE_URL,OCI_MYSQL_HEATWAVE_HOST,OCI_DEV_MYSQL_DB_NAME,OCI_MYSQL_USERNAME,OCI_MYSQL_PASSWORD,REDIS_PASSWORD,KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,APPLE_CLIENT_ID,APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,OCI_TENANCY_ID,OCI_USER_ID,OCI_FINGERPRINT,OCI_REGION,OCI_PASSPHRASE,OCI_OBJECTSTORAGE_NAMESPACE,OCI_DEV_OBJECTSTORAGE_BUCKET,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_SA_JSON_B64,AI_SERVER_IP,CLOTH_INFERENCE_PATH,STYLE_INFERENCE_PATH,HISTORY_CLOTH_DETECT_PATH,MEILISEARCH_ENDPOINT,MEILISEARCH_KEY
6684
script: |
67-
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
85+
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
6886
export DOCKER_TAG=dev-app
87+
88+
export CODIVE_DEV_BASE_URL=${{ secrets.CODIVE_DEV_BASE_URL }}
89+
export CODIVE_PROD_BASE_URL=${{ secrets.CODIVE_PROD_BASE_URL }}
6990
70-
export DEV_MYSQL_HOST=${{ secrets.DEV_MYSQL_HOST }}
71-
export MYSQL_PORT=${{ secrets.MYSQL_PORT }}
72-
export DB_NAME=${{ secrets.DB_NAME }}
73-
export DB_USERNAME=${{ secrets.DB_USERNAME }}
74-
export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
91+
export OCI_MYSQL_HEATWAVE_HOST=${{ secrets.OCI_MYSQL_HEATWAVE_HOST }}
92+
export OCI_DEV_MYSQL_DB_NAME=${{ secrets.OCI_DEV_MYSQL_DB_NAME }}
93+
export OCI_MYSQL_USERNAME=${{ secrets.OCI_MYSQL_USERNAME }}
94+
export OCI_MYSQL_PASSWORD=${{ secrets.OCI_MYSQL_PASSWORD }}
7595
76-
export REDIS_HOST=${{ secrets.REDIS_HOST }}
77-
export REDIS_PORT=${{ secrets.REDIS_PORT }}
7896
export REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
7997
8098
export KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
81-
export KAKAO_CLIENT_SECRET=${{ secrets.DEV_KAKAO_CLIENT_SECRET }}
82-
export KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}
99+
export KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
83100
84101
export APPLE_CLIENT_ID=${{ secrets.APPLE_CLIENT_ID }}
85102
export APPLE_CLIENT_SECRET=${{ secrets.APPLE_CLIENT_SECRET }}
86-
export APPLE_REDIRECT_URI=${{ secrets.APPLE_REDIRECT_URI }}
87103
88104
export JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
89105
export JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}
90106
export JWT_ACCESS_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_ACCESS_TOKEN_EXPIRATION_TIME }}
91107
export JWT_REFRESH_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_REFRESH_TOKEN_EXPIRATION_TIME }}
92108
export JWT_ISSUER=${{ secrets.JWT_ISSUER }}
93109
94-
export DEV_AWS_ACCESS_KEY_ID=${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
95-
export DEV_AWS_SECRET_ACCESS_KEY=${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
96-
export AWS_REGION=${{ secrets.AWS_REGION }}
97-
export DEV_S3_BUCKET=${{ secrets.DEV_S3_BUCKET }}
98-
export DEV_S3_ENDPOINT=${{ secrets.DEV_S3_ENDPOINT }}
110+
export OCI_TENANCY_ID=${{ secrets.OCI_TENANCY_ID }}
111+
export OCI_USER_ID=${{ secrets.OCI_USER_ID }}
112+
export OCI_FINGERPRINT=${{ secrets.OCI_FINGERPRINT }}
113+
export OCI_REGION=${{ secrets.OCI_REGION }}
114+
export OCI_PASSPHRASE=${{ secrets.OCI_PASSPHRASE }}
115+
export OCI_OBJECTSTORAGE_NAMESPACE=${{ secrets.OCI_OBJECTSTORAGE_NAMESPACE }}
116+
export OCI_DEV_OBJECTSTORAGE_BUCKET=${{ secrets.OCI_DEV_OBJECTSTORAGE_BUCKET }}
99117
100118
export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
101119
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
@@ -106,21 +124,24 @@ jobs:
106124
export AI_SERVER_IP=${{ secrets.AI_SERVER_IP }}
107125
export CLOTH_INFERENCE_PATH=${{ secrets.CLOTH_INFERENCE_PATH }}
108126
export STYLE_INFERENCE_PATH=${{ secrets.STYLE_INFERENCE_PATH }}
109-
export CLOTH_DETECT_PATH=${{ secrets.CLOTH_DETECT_PATH }}
127+
export HISTORY_CLOTH_DETECT_PATH=${{ secrets.HISTORY_CLOTH_DETECT_PATH }}
110128
export DEFAULT_PROFILE_IMAGE_URL=${{ secrets.DEFAULT_PROFILE_IMAGE_URL }}
111129
export TODAY_TEMPERATURE_IMAGE_URL=${{ secrets.TODAY_TEMPERATURE_IMAGE_URL }}
112130
113-
sudo mkdir -p /home/ubuntu/secrets
114-
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
115-
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
131+
mkdir -p /home/ubuntu/secrets
132+
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
133+
chmod 600 /home/ubuntu/secrets/firebase-sa.json
134+
135+
echo '${{ env.OCI_PRIVATE_KEY_B64 }}' | base64 -d | tee /home/ubuntu/secrets/oci_key.pem > /dev/null
136+
chmod 600 /home/ubuntu/secrets/oci_key.pem
137+
export OCI_PRIVATE_KEY="$(cat /home/ubuntu/secrets/oci_key.pem)"
116138
117139
export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json
118140
119141
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
120142
121143
cd /home/ubuntu
122144
docker compose -f clokey-api/dev-compose.yml up -d
123-
145+
124146
echo "Cleaning up dangling Docker images..."
125-
docker image prune -f
126-
147+
docker image prune -f

.github/workflows/prod-cd.yml

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
branches: [ main ]
66

77
jobs:
8-
dev-cd:
8+
prod-cd:
99
runs-on: ubuntu-latest
1010
permissions:
1111
contents: read
@@ -33,6 +33,9 @@ jobs:
3333
- name: Grant gradlew permission
3434
run: chmod +x ./gradlew
3535

36+
- name: Set up QEMU
37+
uses: docker/setup-qemu-action@v3
38+
3639
- name: Set up Docker Buildx
3740
uses: docker/setup-buildx-action@v3
3841
with:
@@ -52,60 +55,71 @@ jobs:
5255
- name: Build & Push App Image
5356
run: |
5457
docker buildx build \
55-
--platform linux/amd64 \
58+
--platform linux/arm64 \
5659
--push \
5760
--file clokey-api/Dockerfile \
58-
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2025:prod-app \
61+
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2026:prod-app \
5962
.
6063
61-
- name: Copy prod-docker-compose.yml
64+
- name: Copy prod-compose
6265
uses: appleboy/scp-action@v0.1.3
6366
with:
6467
username: ubuntu
65-
host: ${{ secrets.PROD_EC2_HOST }}
66-
key: ${{ secrets.PROD_EC2_SSH_KEY }}
67-
source: ./clokey-api/prod-compose.yml
68+
host: ${{ secrets.OCI_HOST }}
69+
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
70+
source: "clokey-api/prod-compose.yml"
6871
target: /home/ubuntu/
6972

73+
- name: Set OCI private key env (multiline)
74+
run: |
75+
echo "OCI_PRIVATE_KEY<<ENDOFKEY" >> $GITHUB_ENV
76+
echo "${{ secrets.OCI_PRIVATE_KEY }}" >> $GITHUB_ENV
77+
echo "ENDOFKEY" >> $GITHUB_ENV
78+
79+
- name: Prepare OCI key base64 for Deploy script
80+
run: echo "OCI_PRIVATE_KEY_B64=$(echo -n "$OCI_PRIVATE_KEY" | base64 -w 0)" >> $GITHUB_ENV
81+
7082
- name: Deploy App
7183
uses: appleboy/ssh-action@master
7284
with:
7385
username: ubuntu
74-
host: ${{ secrets.PROD_EC2_HOST }}
75-
key: ${{ secrets.PROD_EC2_SSH_KEY }}
86+
host: ${{ secrets.OCI_HOST }}
87+
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
88+
envs: DOCKERHUB_USERNAME,CODIVE_DEV_BASE_URL,CODIVE_PROD_BASE_URL,OCI_MYSQL_HEATWAVE_HOST,OCI_PROD_MYSQL_DB_NAME,OCI_MYSQL_USERNAME,OCI_MYSQL_PASSWORD,REDIS_PASSWORD,KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,APPLE_CLIENT_ID,APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,OCI_TENANCY_ID,OCI_USER_ID,OCI_FINGERPRINT,OCI_PRIVATE_KEY,OCI_REGION,OCI_PASSPHRASE,OCI_OBJECTSTORAGE_NAMESPACE,OCI_PROD_OBJECTSTORAGE_BUCKET,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_SA_JSON_B64,AI_SERVER_IP,CLOTH_INFERENCE_PATH,STYLE_INFERENCE_PATH,HISTORY_CLOTH_DETECT_PATH,MEILISEARCH_ENDPOINT,MEILISEARCH_KEY
7689
script: |
77-
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
90+
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
7891
export DOCKER_TAG=prod-app
7992
80-
export PROD_MYSQL_HOST=${{ secrets.PROD_MYSQL_HOST }}
81-
export MYSQL_PORT=${{ secrets.MYSQL_PORT }}
82-
export DB_NAME=${{ secrets.DB_NAME }}
83-
export DB_USERNAME=${{ secrets.DB_USERNAME }}
84-
export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
93+
export CODIVE_DEV_BASE_URL=${{ secrets.CODIVE_DEV_BASE_URL }}
94+
export CODIVE_PROD_BASE_URL=${{ secrets.CODIVE_PROD_BASE_URL }}
95+
96+
export OCI_MYSQL_HEATWAVE_HOST=${{ secrets.OCI_MYSQL_HEATWAVE_HOST }}
97+
export OCI_PROD_MYSQL_DB_NAME=${{ secrets.OCI_PROD_MYSQL_DB_NAME }}
98+
export OCI_MYSQL_USERNAME=${{ secrets.OCI_MYSQL_USERNAME }}
99+
export OCI_MYSQL_PASSWORD=${{ secrets.OCI_MYSQL_PASSWORD }}
85100
86-
export REDIS_HOST=${{ secrets.REDIS_HOST }}
87-
export REDIS_PORT=${{ secrets.REDIS_PORT }}
88101
export REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
89102
90103
export KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
91104
export KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
92-
export KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}
93105
94106
export APPLE_CLIENT_ID=${{ secrets.APPLE_CLIENT_ID }}
95107
export APPLE_CLIENT_SECRET=${{ secrets.APPLE_CLIENT_SECRET }}
96-
export APPLE_REDIRECT_URI=${{ secrets.APPLE_REDIRECT_URI }}
97-
108+
98109
export JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
99110
export JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}
100111
export JWT_ACCESS_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_ACCESS_TOKEN_EXPIRATION_TIME }}
101112
export JWT_REFRESH_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_REFRESH_TOKEN_EXPIRATION_TIME }}
102113
export JWT_ISSUER=${{ secrets.JWT_ISSUER }}
103114
104-
export PROD_AWS_ACCESS_KEY_ID=${{ secrets.PROD_AWS_ACCESS_KEY_ID }}
105-
export PROD_AWS_SECRET_ACCESS_KEY=${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}
106-
export AWS_REGION=${{ secrets.AWS_REGION }}
107-
export PROD_S3_BUCKET=${{ secrets.PROD_S3_BUCKET }}
108-
export PROD_S3_ENDPOINT=${{ secrets.PROD_S3_ENDPOINT }}
115+
export OCI_TENANCY_ID=${{ secrets.OCI_TENANCY_ID }}
116+
export OCI_USER_ID=${{ secrets.OCI_USER_ID }}
117+
export OCI_FINGERPRINT=${{ secrets.OCI_FINGERPRINT }}
118+
export OCI_PRIVATE_KEY=${{ secrets.OCI_PRIVATE_KEY }}
119+
export OCI_REGION=${{ secrets.OCI_REGION }}
120+
export OCI_PASSPHRASE=${{ secrets.OCI_PASSPHRASE }}
121+
export OCI_OBJECTSTORAGE_NAMESPACE=${{ secrets.OCI_OBJECTSTORAGE_NAMESPACE }}
122+
export OCI_PROD_OBJECTSTORAGE_BUCKET=${{ secrets.OCI_PROD_OBJECTSTORAGE_BUCKET }}
109123
110124
export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
111125
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
@@ -116,13 +130,17 @@ jobs:
116130
export AI_SERVER_IP=${{ secrets.AI_SERVER_IP }}
117131
export CLOTH_INFERENCE_PATH=${{ secrets.CLOTH_INFERENCE_PATH }}
118132
export STYLE_INFERENCE_PATH=${{ secrets.STYLE_INFERENCE_PATH }}
119-
export CLOTH_DETECT_PATH=${{ secrets.CLOTH_DETECT_PATH }}
133+
export HISTORY_CLOTH_DETECT_PATH=${{ secrets.HISTORY_CLOTH_DETECT_PATH }}
120134
export DEFAULT_PROFILE_IMAGE_URL=${{ secrets.DEFAULT_PROFILE_IMAGE_URL }}
121135
export TODAY_TEMPERATURE_IMAGE_URL=${{ secrets.TODAY_TEMPERATURE_IMAGE_URL }}
122136
123-
sudo mkdir -p /home/ubuntu/secrets
124-
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
125-
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
137+
mkdir -p /home/ubuntu/secrets
138+
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
139+
chmod 600 /home/ubuntu/secrets/firebase-sa.json
140+
141+
echo '${{ env.OCI_PRIVATE_KEY_B64 }}' | base64 -d | tee /home/ubuntu/secrets/oci_key.pem > /dev/null
142+
chmod 600 /home/ubuntu/secrets/oci_key.pem
143+
export OCI_PRIVATE_KEY="$(cat /home/ubuntu/secrets/oci_key.pem)"
126144
127145
export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json
128146
@@ -132,5 +150,4 @@ jobs:
132150
docker compose -f clokey-api/prod-compose.yml up -d
133151
134152
echo "Cleaning up dangling Docker images..."
135-
docker image prune -f
136-
153+
docker image prune -f

.github/workflows/prod-openapi.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020

2121
env:
2222
CODIVEAPI_BRANCH: main
23+
PROD_OPENAPI_URL: "${{ secrets.CODIVE_PROD_BASE_URL }}/v3/api-docs"
2324
TARGET_PATH: Sources/CodiveAPI/openapi.yaml
2425
SWAGGER_USERNAME: ${{ secrets.SWAGGER_USERNAME }}
2526
SWAGGER_PASSWORD: ${{ secrets.SWAGGER_PASSWORD }}
@@ -31,8 +32,6 @@ jobs:
3132
fetch-depth: 1
3233

3334
- name: Wait for production server to be ready
34-
env:
35-
PROD_OPENAPI_URL: ${{ secrets.PROD_OPENAPI_URL }}
3635
run: |
3736
set -euo pipefail
3837
echo "Waiting for production OpenAPI to be ready..."
@@ -53,8 +52,6 @@ jobs:
5352
5453
5554
- name: Fetch OpenAPI JSON from production
56-
env:
57-
PROD_OPENAPI_URL: ${{ secrets.PROD_OPENAPI_URL }}
5855
run: |
5956
set -euo pipefail
6057
echo "Fetching OpenAPI from: $PROD_OPENAPI_URL"

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ tasks.register('updateGitHooks', Copy) {
128128
}
129129

130130
tasks.register('makeGitHooksExecutable', Exec) {
131+
onlyIf { !System.getProperty('os.name').toLowerCase(java.util.Locale.ROOT).contains('windows') }
131132
commandLine 'chmod', '+x', './.git/hooks/pre-commit'
132133
dependsOn updateGitHooks
133134
}

clokey-api/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ dependencies {
2121
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
2222

2323
implementation 'io.vanslog:spring-data-meilisearch:0.7.3'
24+
25+
testImplementation 'com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.47.0'
2426
}

0 commit comments

Comments
 (0)