Skip to content

Commit 45ec51e

Browse files
committed
ci: deploy with github actions
1 parent 5b732a3 commit 45ec51e

4 files changed

Lines changed: 56 additions & 45 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Deploy ๐Ÿš€
2+
3+
on:
4+
push:
5+
branches: [main]
6+
workflow_dispatch:
7+
8+
concurrency:
9+
group: deploy-production
10+
cancel-in-progress: false
11+
12+
jobs:
13+
deploy:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
steps:
18+
- uses: actions/checkout@v7
19+
20+
- uses: oven-sh/setup-bun@v2
21+
22+
- run: bun install --frozen-lockfile
23+
24+
- run: bun run test
25+
26+
# PRIVATE_KEY ๋Š” ์—ฌ๋Ÿฌ ์ค„์งœ๋ฆฌ PEM ์ด๋ผ JSON ์œผ๋กœ ์“ด๋‹ค
27+
- name: Write secrets file
28+
env:
29+
PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
30+
AI_GATEWAY_TOKEN: ${{ secrets.AI_GATEWAY_TOKEN }}
31+
INTERNAL_SECRET: ${{ secrets.INTERNAL_SECRET }}
32+
run: |
33+
jq -n --arg private_key "$PRIVATE_KEY" --arg ai "$AI_GATEWAY_TOKEN" --arg internal "$INTERNAL_SECRET" \
34+
'{PRIVATE_KEY: $private_key, AI_GATEWAY_TOKEN: $ai, INTERNAL_SECRET: $internal}' > "$RUNNER_TEMP/secrets.json"
35+
36+
- name: Deploy
37+
uses: cloudflare/wrangler-action@v4
38+
with:
39+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
40+
packageManager: bun
41+
command: deploy --secrets-file ${{ runner.temp }}/secrets.json

โ€ŽAGENTS.mdโ€Ž

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,9 @@ curl -X POST http://localhost:8787/check-weeks \
9595
### ๋ฐฐํฌ
9696

9797
```bash
98-
# Worker ๋ฐฐํฌ
98+
# Worker ์ˆ˜๋™ ๋ฐฐํฌ (๋ณดํ†ต์€ main ๋จธ์ง€ ์‹œ GitHub Actions ๊ฐ€ ํ•œ๋‹ค)
9999
wrangler deploy
100100

101-
# Secrets ์„ค์ •
102-
wrangler secret put APP_ID # GitHub App ID (์ˆซ์ž)
103-
wrangler secret put PRIVATE_KEY # GitHub App Private Key (PEM ์ „์ฒด)
104-
105101
# Secrets ํ™•์ธ
106102
wrangler secret list
107103

@@ -316,12 +312,9 @@ GitHub webhook
316312

317313
**์ ˆ๋Œ€ ์ปค๋ฐ‹ ๊ธˆ์ง€**: `.env`, `.dev.vars`, `*.pem`, `*.key`
318314

319-
#### Cloudflare Workers Secrets (ํ”„๋กœ๋•์…˜)
315+
#### Secrets (ํ”„๋กœ๋•์…˜)
320316

321-
```bash
322-
wrangler secret put APP_ID # GitHub App ID
323-
wrangler secret put PRIVATE_KEY # GitHub App Private Key (PEM)
324-
```
317+
`main` ์— ๋จธ์ง€๋˜๋ฉด GitHub Actions(`.github/workflows/deploy.yml`)๊ฐ€ ํ…Œ์ŠคํŠธ ํ›„ `wrangler deploy --secrets-file` ๋กœ ๋ฐฐํฌํ•œ๋‹ค. Worker secret(`PRIVATE_KEY`, `AI_GATEWAY_TOKEN`, `INTERNAL_SECRET`)์€ GitHub secret(`APP_PRIVATE_KEY`, `AI_GATEWAY_TOKEN`, `INTERNAL_SECRET`)์—์„œ ๋ฐฐํฌ์™€ ํ•จ๊ป˜ ๋„ฃ์œผ๋ฏ€๋กœ `wrangler secret put` ์œผ๋กœ ๋”ฐ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค โ€” ๋‹ค์Œ ๋ฐฐํฌ ๋•Œ GitHub ๊ฐ’์œผ๋กœ ๋ฎ์ธ๋‹ค. `APP_ID` ๋Š” ๊ณต๊ฐœ ๊ฐ’์ด๋ผ `wrangler.jsonc` ์˜ `vars` ์— ์žˆ๋‹ค.
325318

326319
#### ๋กœ์ปฌ ๊ฐœ๋ฐœ (.dev.vars)
327320

@@ -334,16 +327,13 @@ PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
334327

335328
### Cloudflare Workers
336329

337-
```bash
338-
wrangler deploy
339-
```
330+
`main` ์— ๋จธ์ง€๋˜๋ฉด GitHub Actions ๊ฐ€ ๋ฐฐํฌํ•œ๋‹ค. ์‹œํฌ๋ฆฟ์€ ์œ„ "Secrets (ํ”„๋กœ๋•์…˜)" ์ฐธ๊ณ .
340331

341332
### ์ปค์Šคํ…€ ๋„๋ฉ”์ธ
342333

343334
- Production: https://github.dalestudy.com
344335
- Worker.dev: https://github.dalestudy.workers.dev
345336

346-
์ž์„ธํ•œ ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋Š” `DEPLOYMENT.md` ์ฐธ๊ณ .
347337

348338
## GitHub App Webhook ์„ค์ •
349339

@@ -377,19 +367,12 @@ https://github.com/settings/apps/dalestudy
377367

378368
### 4. Worker Secrets ์„ค์ •
379369

380-
```bash
381-
# AI Gateway ์ธ์ฆ ํ† ํฐ (AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ์šฉ, ํ•„์ˆ˜)
382-
wrangler secret put AI_GATEWAY_TOKEN
383-
384-
# Webhook Secret (์„ ํƒ์‚ฌํ•ญ)
385-
wrangler secret put WEBHOOK_SECRET
370+
GitHub secret ์— ๋„ฃ์œผ๋ฉด ๋ฐฐํฌํ•  ๋•Œ Worker ๋กœ ๋“ค์–ด๊ฐ„๋‹ค (`.github/workflows/deploy.yml`).
386371

387-
# Internal Dispatch Secret (AI ํ•ธ๋“ค๋Ÿฌ Worker ๋ถ„๋ฆฌ์šฉ, ๊ถŒ์žฅ)
388-
# ์„ค์ •ํ•˜๋ฉด tagPatterns, learningStatus๊ฐ€ ๋ณ„๋„ Worker ํ˜ธ์ถœ๋กœ
389-
# ๋””์ŠคํŒจ์น˜๋˜์–ด ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ subrequest ์˜ˆ์‚ฐ์„ ๊ฐ€์ง.
390-
# WORKER_URL๊ณผ ํ•จ๊ป˜ ์„ค์ •๋˜์–ด์•ผ ํ™œ์„ฑํ™”๋œ๋‹ค.
391-
wrangler secret put INTERNAL_SECRET
392-
```
372+
- `APP_PRIVATE_KEY` (org secret): GitHub App Private Key โ†’ Worker `PRIVATE_KEY`
373+
- `AI_GATEWAY_TOKEN` (org secret): AI Gateway ์ธ์ฆ ํ† ํฐ (AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ์šฉ, ํ•„์ˆ˜)
374+
- `INTERNAL_SECRET` (์ €์žฅ์†Œ secret): AI ํ•ธ๋“ค๋Ÿฌ Worker ๋ถ„๋ฆฌ์šฉ. ์„ค์ •ํ•˜๋ฉด tagPatterns, learningStatus๊ฐ€ ๋ณ„๋„ Worker ํ˜ธ์ถœ๋กœ ๋””์ŠคํŒจ์น˜๋˜์–ด ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ subrequest ์˜ˆ์‚ฐ์„ ๊ฐ€์ง„๋‹ค. `WORKER_URL`๊ณผ ํ•จ๊ป˜ ์žˆ์–ด์•ผ ํ™œ์„ฑํ™”๋œ๋‹ค.
375+
- `WEBHOOK_SECRET` (์„ ํƒ): ์„ค์ •ํ•˜๋ฉด webhook ์„œ๋ช…์„ ๊ฒ€์ฆํ•œ๋‹ค. ์“ฐ๋ ค๋ฉด GitHub secret ์„ ๋งŒ๋“ค๊ณ  `deploy.yml` ์˜ secrets ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
393376

394377
`WORKER_URL`์€ `wrangler.jsonc`์˜ `vars`์— ์ •์˜๋˜์–ด ์žˆ์–ด ๊ธฐ๋ณธ ๋ฐฐํฌ์—๋Š” ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š” ์—†๋‹ค. ์Šคํ…Œ์ด์ง•/๋‹ค๋ฅธ ๊ณ„์ • ๋“ฑ์œผ๋กœ ๋ฐฐํฌํ•  ๋•Œ๋งŒ ๋ฎ์–ด์“ฐ๋ฉด ๋œ๋‹ค.
395378

โ€ŽREADME.mdโ€Ž

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,26 +38,11 @@ npm install -g wrangler
3838
wrangler login
3939
```
4040

41-
### 3. Secrets ์„ค์ •
41+
### 3. ๋ฐฐํฌ
4242

43-
GitHub App์˜ credentials๋ฅผ Worker secrets์— ์ €์žฅ:
43+
`main` ์— ๋จธ์ง€๋˜๋ฉด GitHub Actions(`.github/workflows/deploy.yml`)๊ฐ€ ํ…Œ์ŠคํŠธ ํ›„ `wrangler deploy --secrets-file` ๋กœ ๋ฐฐํฌํ•œ๋‹ค. Worker secret(`PRIVATE_KEY`, `AI_GATEWAY_TOKEN`, `INTERNAL_SECRET`)์€ GitHub secret(`APP_PRIVATE_KEY`, `AI_GATEWAY_TOKEN`, `INTERNAL_SECRET`)์—์„œ ๋ฐฐํฌ์™€ ํ•จ๊ป˜ ๋„ฃ์œผ๋ฏ€๋กœ `wrangler secret put` ์œผ๋กœ ๋”ฐ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค โ€” ๋‹ค์Œ ๋ฐฐํฌ ๋•Œ GitHub ๊ฐ’์œผ๋กœ ๋ฎ์ธ๋‹ค. `APP_ID` ๋Š” ๊ณต๊ฐœ ๊ฐ’์ด๋ผ `wrangler.jsonc` ์˜ `vars` ์— ์žˆ๋‹ค.
4444

45-
```bash
46-
# APP_ID ์„ค์ •
47-
wrangler secret put APP_ID
48-
# ํ”„๋กฌํ”„ํŠธ์—์„œ GitHub App ID ์ž…๋ ฅ
49-
50-
# PRIVATE_KEY ์„ค์ •
51-
wrangler secret put PRIVATE_KEY
52-
# ํ”„๋กฌํ”„ํŠธ์—์„œ GitHub App Private Key ์ „์ฒด ๋‚ด์šฉ ์ž…๋ ฅ
53-
# (-----BEGIN RSA PRIVATE KEY----- ๋ถ€ํ„ฐ -----END RSA PRIVATE KEY----- ๊นŒ์ง€)
54-
```
55-
56-
### 4. Worker ๋ฐฐํฌ
57-
58-
```bash
59-
wrangler deploy
60-
```
45+
์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌํ•ด์•ผ ํ•  ๋•Œ๋งŒ `wrangler deploy` ๋ฅผ ์“ด๋‹ค.
6146

6247
๋ฐฐํฌ ์™„๋ฃŒ ํ›„ Custom Domain์„ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:
6348

@@ -256,7 +241,7 @@ GitHub App credentials ํ™•์ธ:
256241
wrangler secret list
257242
```
258243

259-
APP_ID์™€ PRIVATE_KEY๊ฐ€ ๋ชจ๋‘ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
244+
`APP_ID`(`wrangler.jsonc`)์™€ `PRIVATE_KEY`(GitHub secret `APP_PRIVATE_KEY`)๊ฐ€ ๋ชจ๋‘ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
260245

261246
### Worker๊ฐ€ 403 ์—๋Ÿฌ ๋ฐ˜ํ™˜
262247

โ€Žwrangler.jsoncโ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
"compatibility_flags": ["global_fetch_strictly_public"],
66
"account_id": "94480614a6df7731f1e4491bdac5c440",
77
"vars": {
8+
// GitHub App(dalestudy)์˜ ID. ๊ณต๊ฐœ ๊ฐ’์ด๋‹ค.
9+
"APP_ID": "1067270",
810
"WORKER_URL": "https://github.dalestudy.workers.dev",
911
},
1012
"observability": {

0 commit comments

Comments
ย (0)