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
0 commit comments