Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
d98d88a
feat: OCI로 마이그레이션
yongjun0511 Feb 1, 2026
052777a
chore: AWS -> OCI로 export 변경 및 Test를 위해 트리거 변경
yongjun0511 Feb 1, 2026
ffbe371
refactor: application-*.yml / *-cd.yml / *-compose.yml OCI 마이그레이션에 맞춰…
2ghrms Feb 13, 2026
ef4d007
refactor: OCI 오브젝트스토리지
2ghrms Feb 13, 2026
0810c7d
refactor: 윈도우 로컬 테스트를 위해 githooks skip
2ghrms Feb 13, 2026
793c374
refactor: private key 인코딩 로직 추가
2ghrms Feb 13, 2026
63b255d
fix: ObjectStorage 빈 생성시 환경변수를 검증하기에 테스트용 Config 추가
2ghrms Feb 13, 2026
0897ed2
fix: fork한 레포지토리에서도 CI 테스트 되도록 수정
2ghrms Feb 13, 2026
19d60f3
fix: fork한 레포지토리에서도 CI 테스트 되도록 수정
2ghrms Feb 13, 2026
492780d
fix: arm 프로세서로 수정
2ghrms Feb 25, 2026
21fdda0
fix: StorageUtil - deleteByUrl 메소드 수정
2ghrms Feb 25, 2026
152f3e1
fix: amd64 러너 위에서 linux/arm64 이미지 빌드 위해 QEMU 추가
2ghrms Feb 25, 2026
506d193
fix: cd 워크플로우의 sudo를 삭제하여서 환경변수가 넘어가지 않던 상황 방지
2ghrms Feb 25, 2026
3c5918c
merge: develop 브랜치 머지
2ghrms Mar 4, 2026
e9586e7
feat: 환경별 도메인 반영 및 배포 워크플로우 수정
2ghrms Mar 4, 2026
c1ed21f
Merge branch 'develop' into oci-migration
2ghrms Mar 4, 2026
6e339d6
Merge pull request #1 from 2ghrms/oci-migration
2ghrms Mar 4, 2026
ce89d46
fix: recreate 강제 및 redis 볼륨 설정
2ghrms Mar 5, 2026
bb71bba
Merge branch 'oci-migration' of https://github.com/2ghrms/clokey-api-…
2ghrms Mar 5, 2026
bbe6d6b
Merge pull request #2 from 2ghrms/oci-migration
2ghrms Mar 5, 2026
f504c55
fix: docker compose v2로 수정
2ghrms Jun 8, 2026
e22ef93
Merge pull request #3 from 2ghrms/oci-migration
2ghrms Jun 8, 2026
e342079
fix: strip_components 제거
2ghrms Jun 8, 2026
a64e5a6
Merge pull request #4 from 2ghrms/oci-migration
2ghrms Jun 8, 2026
6a89533
fix: 태그 수정
2ghrms Jun 8, 2026
d5aac82
Merge pull request #5 from 2ghrms/oci-migration
2ghrms Jun 8, 2026
f8ef996
fix: AI 관련 환경변수 중복 제거
2ghrms Jun 9, 2026
d8462a5
Merge pull request #6 from 2ghrms/oci-migration
2ghrms Jun 9, 2026
d867bcf
Merge branch 'develop' into develop
2ghrms Jun 9, 2026
d64337c
Merge pull request #415 from 2ghrms/develop
2ghrms Jun 9, 2026
92648cc
fix: compose 프로젝트명 분리
2ghrms Jun 12, 2026
57eeae9
fix: OCI presigned URL과 공개 객체 URL을 분리해 StorageUtil을 정리
2ghrms Jun 14, 2026
e583078
feat: presigned URL API에 uploadUrl과 objectUrl을 함께 반환
2ghrms Jun 14, 2026
8c3fab0
fix: 이미지 URL 저장 시 PAR URL을 공개 객체 URL로 정규화
2ghrms Jun 14, 2026
8a9ed36
fix: 기온 알림 아이콘 URL을 환경별 bucket에 맞게 생성
2ghrms Jun 14, 2026
9d5fdf0
test: OCI Storage mock 및 presigned URL 변경에 맞게 테스트를 수정한다
2ghrms Jun 14, 2026
4ff3dbf
Merge branch 'develop' into oci-migration
2ghrms Jun 14, 2026
7ce06d6
Merge pull request #416 from 2ghrms/oci-migration
2ghrms Jun 14, 2026
7fce725
fix : CodiveNotificationServiceImpl에서 StorageUtil 필드 제거
2ghrms Jun 14, 2026
94ac4aa
fix : spotless check
2ghrms Jun 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,15 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew test sonar --info --stacktrace
run: |
# 포크에서 온 PR: PR 연동 시 원본 레포에 PR이 없어 실패하므로 브랜치 분석만 수행
# 같은 레포 PR: PR 데코레이션 사용
if [ "${{ github.event.pull_request.head.repo.full_name }}" = "${{ github.repository }}" ]; then
./gradlew test sonar --info --stacktrace \
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }} \
-Dsonar.pullrequest.branch=${{ github.head_ref }} \
-Dsonar.pullrequest.base=${{ github.base_ref }}
else
./gradlew test sonar --info --stacktrace \
-Dsonar.branch.name=pr-${{ github.event.pull_request.number }}
fi
85 changes: 53 additions & 32 deletions .github/workflows/dev-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ jobs:
- name: Grant gradlew permission
run: chmod +x ./gradlew

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true

- name: Log in to DockerHub
uses: docker/login-action@v2
with:
Expand All @@ -42,60 +50,70 @@ jobs:
- name: Build & Push App Image
run: |
docker buildx build \
--platform linux/amd64 \
--platform linux/arm64 \
--push \
--file clokey-api/Dockerfile \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2025:dev-app \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2026:dev-app \
.

- name: Copy dev-docker-compose.yml
- name: Copy dev-compose
uses: appleboy/scp-action@v0.1.3
with:
username: ubuntu
host: ${{ secrets.DEV_EC2_HOST }}
key: ${{ secrets.DEV_EC2_SSH_KEY }}
source: ./clokey-api/dev-compose.yml
host: ${{ secrets.OCI_HOST }}
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
source: "clokey-api/dev-compose.yml"
target: /home/ubuntu/

- name: Set OCI private key env (multiline)
run: |
echo "OCI_PRIVATE_KEY<<ENDOFKEY" >> $GITHUB_ENV
echo "${{ secrets.OCI_PRIVATE_KEY }}" >> $GITHUB_ENV
echo "ENDOFKEY" >> $GITHUB_ENV

- name: Prepare OCI key base64 for Deploy script
run: echo "OCI_PRIVATE_KEY_B64=$(echo -n "$OCI_PRIVATE_KEY" | base64 -w 0)" >> $GITHUB_ENV

- name: Deploy App
uses: appleboy/ssh-action@master
with:
username: ubuntu
host: ${{ secrets.DEV_EC2_HOST }}
key: ${{ secrets.DEV_EC2_SSH_KEY }}
host: ${{ secrets.OCI_HOST }}
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
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
script: |
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
export DOCKER_TAG=dev-app

export CODIVE_DEV_BASE_URL=${{ secrets.CODIVE_DEV_BASE_URL }}
export CODIVE_PROD_BASE_URL=${{ secrets.CODIVE_PROD_BASE_URL }}

export DEV_MYSQL_HOST=${{ secrets.DEV_MYSQL_HOST }}
export MYSQL_PORT=${{ secrets.MYSQL_PORT }}
export DB_NAME=${{ secrets.DB_NAME }}
export DB_USERNAME=${{ secrets.DB_USERNAME }}
export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
export OCI_MYSQL_HEATWAVE_HOST=${{ secrets.OCI_MYSQL_HEATWAVE_HOST }}
export OCI_DEV_MYSQL_DB_NAME=${{ secrets.OCI_DEV_MYSQL_DB_NAME }}
export OCI_MYSQL_USERNAME=${{ secrets.OCI_MYSQL_USERNAME }}
export OCI_MYSQL_PASSWORD=${{ secrets.OCI_MYSQL_PASSWORD }}

export REDIS_HOST=${{ secrets.REDIS_HOST }}
export REDIS_PORT=${{ secrets.REDIS_PORT }}
export REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}

export KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
export KAKAO_CLIENT_SECRET=${{ secrets.DEV_KAKAO_CLIENT_SECRET }}
export KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}
export KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}

export APPLE_CLIENT_ID=${{ secrets.APPLE_CLIENT_ID }}
export APPLE_CLIENT_SECRET=${{ secrets.APPLE_CLIENT_SECRET }}
export APPLE_REDIRECT_URI=${{ secrets.APPLE_REDIRECT_URI }}

export JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
export JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}
export JWT_ACCESS_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_ACCESS_TOKEN_EXPIRATION_TIME }}
export JWT_REFRESH_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_REFRESH_TOKEN_EXPIRATION_TIME }}
export JWT_ISSUER=${{ secrets.JWT_ISSUER }}

export DEV_AWS_ACCESS_KEY_ID=${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
export DEV_AWS_SECRET_ACCESS_KEY=${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
export AWS_REGION=${{ secrets.AWS_REGION }}
export DEV_S3_BUCKET=${{ secrets.DEV_S3_BUCKET }}
export DEV_S3_ENDPOINT=${{ secrets.DEV_S3_ENDPOINT }}
export OCI_TENANCY_ID=${{ secrets.OCI_TENANCY_ID }}
export OCI_USER_ID=${{ secrets.OCI_USER_ID }}
export OCI_FINGERPRINT=${{ secrets.OCI_FINGERPRINT }}
export OCI_REGION=${{ secrets.OCI_REGION }}
export OCI_PASSPHRASE=${{ secrets.OCI_PASSPHRASE }}
export OCI_OBJECTSTORAGE_NAMESPACE=${{ secrets.OCI_OBJECTSTORAGE_NAMESPACE }}
export OCI_DEV_OBJECTSTORAGE_BUCKET=${{ secrets.OCI_DEV_OBJECTSTORAGE_BUCKET }}

export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
Expand All @@ -106,21 +124,24 @@ jobs:
export AI_SERVER_IP=${{ secrets.AI_SERVER_IP }}
export CLOTH_INFERENCE_PATH=${{ secrets.CLOTH_INFERENCE_PATH }}
export STYLE_INFERENCE_PATH=${{ secrets.STYLE_INFERENCE_PATH }}
export CLOTH_DETECT_PATH=${{ secrets.CLOTH_DETECT_PATH }}
export HISTORY_CLOTH_DETECT_PATH=${{ secrets.HISTORY_CLOTH_DETECT_PATH }}
export DEFAULT_PROFILE_IMAGE_URL=${{ secrets.DEFAULT_PROFILE_IMAGE_URL }}
export TODAY_TEMPERATURE_IMAGE_URL=${{ secrets.TODAY_TEMPERATURE_IMAGE_URL }}

sudo mkdir -p /home/ubuntu/secrets
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
mkdir -p /home/ubuntu/secrets
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
chmod 600 /home/ubuntu/secrets/firebase-sa.json

echo '${{ env.OCI_PRIVATE_KEY_B64 }}' | base64 -d | tee /home/ubuntu/secrets/oci_key.pem > /dev/null
chmod 600 /home/ubuntu/secrets/oci_key.pem
export OCI_PRIVATE_KEY="$(cat /home/ubuntu/secrets/oci_key.pem)"

export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json

echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin

cd /home/ubuntu
docker compose -f clokey-api/dev-compose.yml up -d
docker compose -p clokey-dev -f clokey-api/dev-compose.yml up -d

echo "Cleaning up dangling Docker images..."
docker image prune -f

docker image prune -f
81 changes: 49 additions & 32 deletions .github/workflows/prod-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
branches: [ main ]

jobs:
dev-cd:
prod-cd:
runs-on: ubuntu-latest
permissions:
contents: read
Expand Down Expand Up @@ -33,6 +33,9 @@ jobs:
- name: Grant gradlew permission
run: chmod +x ./gradlew

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
Expand All @@ -52,60 +55,71 @@ jobs:
- name: Build & Push App Image
run: |
docker buildx build \
--platform linux/amd64 \
--platform linux/arm64 \
--push \
--file clokey-api/Dockerfile \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2025:prod-app \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/clokey-docker-2026:prod-app \
.

- name: Copy prod-docker-compose.yml
- name: Copy prod-compose
uses: appleboy/scp-action@v0.1.3
with:
username: ubuntu
host: ${{ secrets.PROD_EC2_HOST }}
key: ${{ secrets.PROD_EC2_SSH_KEY }}
source: ./clokey-api/prod-compose.yml
host: ${{ secrets.OCI_HOST }}
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
source: "clokey-api/prod-compose.yml"
target: /home/ubuntu/

- name: Set OCI private key env (multiline)
run: |
echo "OCI_PRIVATE_KEY<<ENDOFKEY" >> $GITHUB_ENV
echo "${{ secrets.OCI_PRIVATE_KEY }}" >> $GITHUB_ENV
echo "ENDOFKEY" >> $GITHUB_ENV

- name: Prepare OCI key base64 for Deploy script
run: echo "OCI_PRIVATE_KEY_B64=$(echo -n "$OCI_PRIVATE_KEY" | base64 -w 0)" >> $GITHUB_ENV

- name: Deploy App
uses: appleboy/ssh-action@master
with:
username: ubuntu
host: ${{ secrets.PROD_EC2_HOST }}
key: ${{ secrets.PROD_EC2_SSH_KEY }}
host: ${{ secrets.OCI_HOST }}
key: ${{ secrets.OCI_INSTANCE_SSH_KEY }}
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
script: |
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
export DOCKER_TAG=prod-app

export PROD_MYSQL_HOST=${{ secrets.PROD_MYSQL_HOST }}
export MYSQL_PORT=${{ secrets.MYSQL_PORT }}
export DB_NAME=${{ secrets.DB_NAME }}
export DB_USERNAME=${{ secrets.DB_USERNAME }}
export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
export CODIVE_DEV_BASE_URL=${{ secrets.CODIVE_DEV_BASE_URL }}
export CODIVE_PROD_BASE_URL=${{ secrets.CODIVE_PROD_BASE_URL }}

export OCI_MYSQL_HEATWAVE_HOST=${{ secrets.OCI_MYSQL_HEATWAVE_HOST }}
export OCI_PROD_MYSQL_DB_NAME=${{ secrets.OCI_PROD_MYSQL_DB_NAME }}
export OCI_MYSQL_USERNAME=${{ secrets.OCI_MYSQL_USERNAME }}
export OCI_MYSQL_PASSWORD=${{ secrets.OCI_MYSQL_PASSWORD }}

export REDIS_HOST=${{ secrets.REDIS_HOST }}
export REDIS_PORT=${{ secrets.REDIS_PORT }}
export REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}

export KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
export KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
export KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}

export APPLE_CLIENT_ID=${{ secrets.APPLE_CLIENT_ID }}
export APPLE_CLIENT_SECRET=${{ secrets.APPLE_CLIENT_SECRET }}
export APPLE_REDIRECT_URI=${{ secrets.APPLE_REDIRECT_URI }}


export JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
export JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}
export JWT_ACCESS_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_ACCESS_TOKEN_EXPIRATION_TIME }}
export JWT_REFRESH_TOKEN_EXPIRATION_TIME=${{ secrets.JWT_REFRESH_TOKEN_EXPIRATION_TIME }}
export JWT_ISSUER=${{ secrets.JWT_ISSUER }}

export PROD_AWS_ACCESS_KEY_ID=${{ secrets.PROD_AWS_ACCESS_KEY_ID }}
export PROD_AWS_SECRET_ACCESS_KEY=${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}
export AWS_REGION=${{ secrets.AWS_REGION }}
export PROD_S3_BUCKET=${{ secrets.PROD_S3_BUCKET }}
export PROD_S3_ENDPOINT=${{ secrets.PROD_S3_ENDPOINT }}
export OCI_TENANCY_ID=${{ secrets.OCI_TENANCY_ID }}
export OCI_USER_ID=${{ secrets.OCI_USER_ID }}
export OCI_FINGERPRINT=${{ secrets.OCI_FINGERPRINT }}
export OCI_PRIVATE_KEY=${{ secrets.OCI_PRIVATE_KEY }}
export OCI_REGION=${{ secrets.OCI_REGION }}
export OCI_PASSPHRASE=${{ secrets.OCI_PASSPHRASE }}
export OCI_OBJECTSTORAGE_NAMESPACE=${{ secrets.OCI_OBJECTSTORAGE_NAMESPACE }}
export OCI_PROD_OBJECTSTORAGE_BUCKET=${{ secrets.OCI_PROD_OBJECTSTORAGE_BUCKET }}

export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
Expand All @@ -116,21 +130,24 @@ jobs:
export AI_SERVER_IP=${{ secrets.AI_SERVER_IP }}
export CLOTH_INFERENCE_PATH=${{ secrets.CLOTH_INFERENCE_PATH }}
export STYLE_INFERENCE_PATH=${{ secrets.STYLE_INFERENCE_PATH }}
export CLOTH_DETECT_PATH=${{ secrets.CLOTH_DETECT_PATH }}
export HISTORY_CLOTH_DETECT_PATH=${{ secrets.HISTORY_CLOTH_DETECT_PATH }}
export DEFAULT_PROFILE_IMAGE_URL=${{ secrets.DEFAULT_PROFILE_IMAGE_URL }}
export TODAY_TEMPERATURE_IMAGE_URL=${{ secrets.TODAY_TEMPERATURE_IMAGE_URL }}

sudo mkdir -p /home/ubuntu/secrets
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
mkdir -p /home/ubuntu/secrets
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
chmod 600 /home/ubuntu/secrets/firebase-sa.json

echo '${{ env.OCI_PRIVATE_KEY_B64 }}' | base64 -d | tee /home/ubuntu/secrets/oci_key.pem > /dev/null
chmod 600 /home/ubuntu/secrets/oci_key.pem
export OCI_PRIVATE_KEY="$(cat /home/ubuntu/secrets/oci_key.pem)"

export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json

echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin

cd /home/ubuntu
docker compose -f clokey-api/prod-compose.yml up -d
docker compose -p clokey-prod -f clokey-api/prod-compose.yml up -d

echo "Cleaning up dangling Docker images..."
docker image prune -f

docker image prune -f
5 changes: 1 addition & 4 deletions .github/workflows/prod-openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:

env:
CODIVEAPI_BRANCH: main
PROD_OPENAPI_URL: "${{ secrets.CODIVE_PROD_BASE_URL }}/v3/api-docs"
TARGET_PATH: Sources/CodiveAPI/openapi.yaml
SWAGGER_USERNAME: ${{ secrets.SWAGGER_USERNAME }}
SWAGGER_PASSWORD: ${{ secrets.SWAGGER_PASSWORD }}
Expand All @@ -31,8 +32,6 @@ jobs:
fetch-depth: 1

- name: Wait for production server to be ready
env:
PROD_OPENAPI_URL: ${{ secrets.PROD_OPENAPI_URL }}
run: |
set -euo pipefail
echo "Waiting for production OpenAPI to be ready..."
Expand All @@ -53,8 +52,6 @@ jobs:


- name: Fetch OpenAPI JSON from production
env:
PROD_OPENAPI_URL: ${{ secrets.PROD_OPENAPI_URL }}
run: |
set -euo pipefail
echo "Fetching OpenAPI from: $PROD_OPENAPI_URL"
Expand Down
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ tasks.register('updateGitHooks', Copy) {
}

tasks.register('makeGitHooksExecutable', Exec) {
onlyIf { !System.getProperty('os.name').toLowerCase(java.util.Locale.ROOT).contains('windows') }
commandLine 'chmod', '+x', './.git/hooks/pre-commit'
dependsOn updateGitHooks
}
Expand Down
2 changes: 2 additions & 0 deletions clokey-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

implementation 'io.vanslog:spring-data-meilisearch:0.7.3'

testImplementation 'com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.47.0'
}
Loading
Loading