diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index 2a4c6ce..fa68dd2 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -18,6 +18,21 @@ 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 " - uses: FirebaseExtended/action-hosting-deploy@v0 with: diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml index 4d9f11e..6336311 100644 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -20,6 +20,21 @@ 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 " - uses: FirebaseExtended/action-hosting-deploy@v0 with: diff --git a/README.md b/README.md index 652b7b1..448889a 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,26 @@ pnpm env:setup ## ๐Ÿš€ ๋ฐฐํฌ +### โš ๏ธ ๋ฐฐํฌ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ + +**Firebase Hosting์€ ์ •์  ํŒŒ์ผ ํ˜ธ์ŠคํŒ…์ด๋ฏ€๋กœ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๋นŒ๋“œ ์‹œ์ ์— ์ฝ”๋“œ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.** + +1. **`app/.env` ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ** + ```bash + # app/.env ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ + cat app/.env # Linux/Mac + type app\.env # Windows + ``` + +2. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ์‹œ ๋ฐ˜๋“œ์‹œ ์žฌ๋นŒ๋“œ** + ```bash + pnpm build + ``` + +3. **๋ฏผ๊ฐ ์ •๋ณด ์ฃผ์˜**: `.env` ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ๋นŒ๋“œ๋œ JavaScript์— ํฌํ•จ๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + - API ํ‚ค, ํ”„๋กœ์ ํŠธ ID ๋“ฑ์€ ๊ดœ์ฐฎ์Œ (Firebase ์ž์ฒด์ ์œผ๋กœ ๋ณด์•ˆ ๊ทœ์น™์œผ๋กœ ๋ณดํ˜ธ) + - ์ ˆ๋Œ€ ๋น„๋ฐ€ํ‚ค(Secret Key)๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์— ๋„ฃ์ง€ ๋งˆ์„ธ์š”! + ### Functions ๊ฐœ๋ณ„ ๋ฐฐํฌ ```bash cd functions @@ -171,12 +191,56 @@ pnpm deploy:hypercloax pnpm deploy ``` -### ์•ฑ ๋ฐฐํฌ +### ์•ฑ ๋ฐฐํฌ (Hosting) ```bash -# ๋ฃจํŠธ์—์„œ ์ „์ฒด ๋ฐฐํฌ -pnpm deploy +# 1. ๋นŒ๋“œ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํฌํ•จ) +pnpm build + +# 2. ๋ฐฐํฌ +firebase deploy --only hosting + +# ๋˜๋Š” ํ•œ ๋ฒˆ์— (๋ฃจํŠธ์—์„œ ์ „์ฒด ๋นŒ๋“œ + ๋ฐฐํฌ) +pnpm push ``` +### CI/CD ์ž๋™ ๋ฐฐํฌ (GitHub Actions) + +GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: +- **PR ์ƒ์„ฑ ์‹œ**: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐฐํฌ (`.github/workflows/firebase-hosting-pull-request.yml`) +- **main ๋ธŒ๋žœ์น˜ ๋จธ์ง€ ์‹œ**: ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ (`.github/workflows/firebase-hosting-merge.yml`) + +#### ๐Ÿ”ง GitHub Secrets ์„ค์ • (ํ•„์ˆ˜) + +GitHub Actions๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋ ค๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +**1. GitHub Repository ์„ค์ •์œผ๋กœ ์ด๋™** + - Repository ํŽ˜์ด์ง€ > Settings > Secrets and variables > Actions + +**2. New repository secret ํด๋ฆญ ํ›„ ๋‹ค์Œ ๊ฐ’๋“ค์„ ์ถ”๊ฐ€** + +๋กœ์ปฌ `app/.env` ํŒŒ์ผ์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€: + +| Secret Name | ์„ค๋ช… | +|-------------|------| +| `VITE_API_KEY` | Firebase API ํ‚ค | +| `VITE_AUTH_DOMAIN` | Firebase Auth ๋„๋ฉ”์ธ | +| `VITE_PROJECT_ID` | Firebase ํ”„๋กœ์ ํŠธ ID | +| `VITE_STORAGE_BUCKET` | Firebase Storage ๋ฒ„ํ‚ท | +| `VITE_MESSAGING_SENDER_ID` | FCM ๋ฐœ์‹ ์ž ID | +| `VITE_APP_ID` | Firebase ์•ฑ ID | +| `VITE_MEASUREMENT_ID` | Google Analytics ์ธก์ • ID | +| `VITE_FIREBASE_PROJECT_ID` | Firebase ํ”„๋กœ์ ํŠธ ID (Functions์šฉ) | +| `VITE_FIREBASE_REGION` | Firebase Functions ๋ฆฌ์ „ | +| `VITE_FUNCTIONS_URL_LOCAL` | Functions ๋กœ์ปฌ URL | +| `VITE_FUNCTIONS_URL_PROD` | Functions ํ”„๋กœ๋•์…˜ URL | + +**3. Firebase Service Account (์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์Œ)** + - `FIREBASE_SERVICE_ACCOUNT_TIL_ALARM`์€ ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. + +**4. ํ™•์ธ** + - main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ PR์„ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. + - Actions ํƒญ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + ## ๐Ÿ”„ API ๊ตฌ์กฐ ### GitHub API