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 }}