From 809445fb6702d2b3ba415e4490f649b8078ac27a Mon Sep 17 00:00:00 2001 From: chucoding Date: Thu, 9 Oct 2025 19:54:46 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore=20:=20firebase=20functions=20403=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95(OPTIONS=20=ED=86=B5?= =?UTF-8?q?=EA=B3=BC=EC=8B=9C=ED=82=A4=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- firebase.json | 6 +++++- functions/package.json | 11 +++++------ functions/src/github.ts | 30 +++++++++++++++++++++++++----- functions/src/hyperclovax.ts | 6 +++++- functions/tsup.config.ts | 4 +++- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/firebase.json b/firebase.json index 3172742..16f709b 100644 --- a/firebase.json +++ b/firebase.json @@ -7,7 +7,11 @@ "node_modules", ".git", "firebase-debug.log", - "firebase-debug.*.log" + "firebase-debug.*.log", + "src", + "*.ts", + "tsconfig.json", + "tsup.config.ts" ] } ], diff --git a/functions/package.json b/functions/package.json index 2d1c89b..5d18f91 100644 --- a/functions/package.json +++ b/functions/package.json @@ -8,18 +8,17 @@ "build": "tsup", "serve": "pnpm build && firebase emulators:start --only functions,firestore", "deploy": "pnpm build && firebase deploy --only functions", - "deploy:github": "pnpm build && firebase deploy --only functions:getCommits,functions:getFilename,functions:getMarkdown", + "deploy:github": "pnpm build && firebase deploy --only functions:getCommits,functions:getFilename,functions:getMarkdown,functions:getRepositories,functions:getBranches", "deploy:schedule": "pnpm build && firebase deploy --only functions:sendDaily8amPush", - "deploy:hypercloax": "pnpm build && firebase deploy --only functions:hypercloaxApi,functions:chatCompletions,functions:registerDeviceToken,functions:removeDeviceToken,functions:registerSchedule" + "deploy:hypercloax": "pnpm build && firebase deploy --only functions:chatCompletions" }, "dependencies": { - "@recall-buddy/shared": "workspace:*", "firebase-admin": "^12.0.0", "firebase-functions": "^4.8.0" }, "devDependencies": { - "typescript": "^5.0.0", + "@types/node": "^20.0.0", "tsup": "^8.0.0", - "@types/node": "^20.0.0" + "typescript": "^5.0.0" } -} \ No newline at end of file +} diff --git a/functions/src/github.ts b/functions/src/github.ts index 99b9687..39a2c1f 100644 --- a/functions/src/github.ts +++ b/functions/src/github.ts @@ -60,7 +60,11 @@ async function getUserData(req: any): Promise<{ // GitHub API 호출을 위한 HTTP Functions export const getCommits = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' // CORS preflight 통과용 + }, async (req, res) => { try { const { since, until } = req.query; @@ -105,7 +109,11 @@ export const getCommits = onRequest( ); export const getFilename = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' + }, async (req, res) => { try { const { commit_sha } = req.query; @@ -149,7 +157,11 @@ export const getFilename = onRequest( ); export const getMarkdown = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' + }, async (req, res) => { try { const { filename } = req.query; @@ -198,7 +210,11 @@ export const getMarkdown = onRequest( * Settings 페이지에서 리포지토리 선택을 위해 사용 */ export const getRepositories = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' + }, async (req, res) => { try { const authHeader = req.headers.authorization; @@ -266,7 +282,11 @@ export const getRepositories = onRequest( * Settings 페이지에서 브랜치 선택을 위해 사용 */ export const getBranches = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' + }, async (req, res) => { try { const { owner, repo } = req.query; diff --git a/functions/src/hyperclovax.ts b/functions/src/hyperclovax.ts index f40e4b3..c1b0189 100644 --- a/functions/src/hyperclovax.ts +++ b/functions/src/hyperclovax.ts @@ -2,7 +2,11 @@ import { onRequest } from 'firebase-functions/v2/https'; // HyperCLOVA X API (HCX-007) export const chatCompletions = onRequest( - { cors: true, region: 'asia-northeast3' }, + { + cors: true, + region: 'asia-northeast3', + invoker: 'public' + }, async (req, res) => { try { const { prompt, text } = req.body; diff --git a/functions/tsup.config.ts b/functions/tsup.config.ts index 4e7bf82..719a48d 100644 --- a/functions/tsup.config.ts +++ b/functions/tsup.config.ts @@ -10,5 +10,7 @@ export default defineConfig({ platform: 'node', shims: false, treeshake: true, - dts: false + dts: false, + // workspace 패키지를 번들에 포함 (Firebase 배포용) + noExternal: ['@recall-buddy/shared'] }); From 3b72f903052e28557429c2774f4da7886a35e887 Mon Sep 17 00:00:00 2001 From: chucoding Date: Thu, 9 Oct 2025 19:59:28 +0900 Subject: [PATCH 2/5] =?UTF-8?q?chore=20:=20pnpm=20lock=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5521fc..15fc58a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,9 +81,6 @@ importers: functions: dependencies: - '@recall-buddy/shared': - specifier: workspace:* - version: link:../packages/shared firebase-admin: specifier: ^12.0.0 version: 12.7.0 From 100ecda9b6f2a014ffdd077e09c5452dfaca2a8c Mon Sep 17 00:00:00 2001 From: chucoding Date: Thu, 9 Oct 2025 20:07:23 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix=20:=20firebase=20functions=EC=97=90?= =?UTF-8?q?=EC=84=9C=20shared=20=ED=83=80=EC=9E=85=20=EB=AA=BB=EC=B0=BE?= =?UTF-8?q?=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/functions/package.json b/functions/package.json index 5d18f91..86cda16 100644 --- a/functions/package.json +++ b/functions/package.json @@ -17,6 +17,7 @@ "firebase-functions": "^4.8.0" }, "devDependencies": { + "@recall-buddy/shared": "workspace:*", "@types/node": "^20.0.0", "tsup": "^8.0.0", "typescript": "^5.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15fc58a..7c57909 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,6 +88,9 @@ importers: specifier: ^4.8.0 version: 4.9.0(firebase-admin@12.7.0) devDependencies: + '@recall-buddy/shared': + specifier: workspace:* + version: link:../packages/shared '@types/node': specifier: ^20.0.0 version: 20.19.19 From f7386e2a4a4a0cdff8256d3b6e720a996a31a3b6 Mon Sep 17 00:00:00 2001 From: chucoding Date: Thu, 9 Oct 2025 21:20:17 +0900 Subject: [PATCH 4/5] =?UTF-8?q?chore=20:=20=EB=A6=B4=EB=A6=AC=EC=A6=88=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/pages/Settings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/pages/Settings.tsx b/app/src/pages/Settings.tsx index 15dc960..ce152fb 100644 --- a/app/src/pages/Settings.tsx +++ b/app/src/pages/Settings.tsx @@ -705,7 +705,7 @@ const Settings: React.FC = () => { 새로운 기능과 개선사항을 확인하세요

Date: Thu, 9 Oct 2025 23:05:24 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix=20:=20github=20action=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=EB=B3=80=EC=88=98=20=EC=84=A4=EC=A0=95=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/firebase-hosting-merge.yml | 27 +++++++++---------- .../firebase-hosting-pull-request.yml | 27 +++++++++---------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index fa68dd2..3db97ff 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -18,22 +18,19 @@ jobs: with: node-version: '20' cache: 'pnpm' - - name: Create .env file - run: | - cat << EOF > app/.env - VITE_API_KEY=${{ secrets.VITE_API_KEY }} - VITE_AUTH_DOMAIN=${{ secrets.VITE_AUTH_DOMAIN }} - VITE_PROJECT_ID=${{ secrets.VITE_PROJECT_ID }} - VITE_STORAGE_BUCKET=${{ secrets.VITE_STORAGE_BUCKET }} - VITE_MESSAGING_SENDER_ID=${{ secrets.VITE_MESSAGING_SENDER_ID }} - VITE_APP_ID=${{ secrets.VITE_APP_ID }} - VITE_MEASUREMENT_ID=${{ secrets.VITE_MEASUREMENT_ID }} - VITE_FIREBASE_PROJECT_ID=${{ secrets.VITE_FIREBASE_PROJECT_ID }} - VITE_FIREBASE_REGION=${{ secrets.VITE_FIREBASE_REGION }} - VITE_FUNCTIONS_URL_LOCAL=${{ secrets.VITE_FUNCTIONS_URL_LOCAL }} - VITE_FUNCTIONS_URL_PROD=${{ secrets.VITE_FUNCTIONS_URL_PROD }} - EOF - run: "pnpm install --frozen-lockfile && pnpm -r run build " + env: + VITE_API_KEY: ${{ secrets.VITE_API_KEY }} + VITE_AUTH_DOMAIN: ${{ secrets.VITE_AUTH_DOMAIN }} + VITE_PROJECT_ID: ${{ secrets.VITE_PROJECT_ID }} + VITE_STORAGE_BUCKET: ${{ secrets.VITE_STORAGE_BUCKET }} + VITE_MESSAGING_SENDER_ID: ${{ secrets.VITE_MESSAGING_SENDER_ID }} + VITE_APP_ID: ${{ secrets.VITE_APP_ID }} + VITE_MEASUREMENT_ID: ${{ secrets.VITE_MEASUREMENT_ID }} + VITE_FIREBASE_PROJECT_ID: ${{ secrets.VITE_FIREBASE_PROJECT_ID }} + VITE_FIREBASE_REGION: ${{ secrets.VITE_FIREBASE_REGION }} + VITE_FUNCTIONS_URL_LOCAL: ${{ secrets.VITE_FUNCTIONS_URL_LOCAL }} + VITE_FUNCTIONS_URL_PROD: ${{ secrets.VITE_FUNCTIONS_URL_PROD }} - uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml index 6336311..0074df4 100644 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -20,22 +20,19 @@ jobs: with: node-version: '20' cache: 'pnpm' - - name: Create .env file - run: | - cat << EOF > app/.env - VITE_API_KEY=${{ secrets.VITE_API_KEY }} - VITE_AUTH_DOMAIN=${{ secrets.VITE_AUTH_DOMAIN }} - VITE_PROJECT_ID=${{ secrets.VITE_PROJECT_ID }} - VITE_STORAGE_BUCKET=${{ secrets.VITE_STORAGE_BUCKET }} - VITE_MESSAGING_SENDER_ID=${{ secrets.VITE_MESSAGING_SENDER_ID }} - VITE_APP_ID=${{ secrets.VITE_APP_ID }} - VITE_MEASUREMENT_ID=${{ secrets.VITE_MEASUREMENT_ID }} - VITE_FIREBASE_PROJECT_ID=${{ secrets.VITE_FIREBASE_PROJECT_ID }} - VITE_FIREBASE_REGION=${{ secrets.VITE_FIREBASE_REGION }} - VITE_FUNCTIONS_URL_LOCAL=${{ secrets.VITE_FUNCTIONS_URL_LOCAL }} - VITE_FUNCTIONS_URL_PROD=${{ secrets.VITE_FUNCTIONS_URL_PROD }} - EOF - run: "pnpm install --frozen-lockfile && pnpm -r run build " + env: + VITE_API_KEY: ${{ secrets.VITE_API_KEY }} + VITE_AUTH_DOMAIN: ${{ secrets.VITE_AUTH_DOMAIN }} + VITE_PROJECT_ID: ${{ secrets.VITE_PROJECT_ID }} + VITE_STORAGE_BUCKET: ${{ secrets.VITE_STORAGE_BUCKET }} + VITE_MESSAGING_SENDER_ID: ${{ secrets.VITE_MESSAGING_SENDER_ID }} + VITE_APP_ID: ${{ secrets.VITE_APP_ID }} + VITE_MEASUREMENT_ID: ${{ secrets.VITE_MEASUREMENT_ID }} + VITE_FIREBASE_PROJECT_ID: ${{ secrets.VITE_FIREBASE_PROJECT_ID }} + VITE_FIREBASE_REGION: ${{ secrets.VITE_FIREBASE_REGION }} + VITE_FUNCTIONS_URL_LOCAL: ${{ secrets.VITE_FUNCTIONS_URL_LOCAL }} + VITE_FUNCTIONS_URL_PROD: ${{ secrets.VITE_FUNCTIONS_URL_PROD }} - uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: ${{ secrets.GITHUB_TOKEN }}