From f68b2eda65d705572bc8280038c7aa7912fa7815 Mon Sep 17 00:00:00 2001
From: Dale Seo <5466341+DaleSeo@users.noreply.github.com>
Date: Sun, 11 Oct 2026 15:52:49 -0400
Subject: [PATCH 1/2] ci: deploy and preview with github actions
---
.github/preview-comment.md | 7 +++
.github/workflows/deploy.yml | 36 ++++++++++++++
.github/workflows/preview.yml | 89 +++++++++++++++++++++++++++++++++++
AGENTS.md | 13 +++--
src/env.d.ts | 3 +-
wrangler.jsonc | 4 ++
6 files changed, 143 insertions(+), 9 deletions(-)
create mode 100644 .github/preview-comment.md
create mode 100644 .github/workflows/deploy.yml
create mode 100644 .github/workflows/preview.yml
diff --git a/.github/preview-comment.md b/.github/preview-comment.md
new file mode 100644
index 0000000..13783d9
--- /dev/null
+++ b/.github/preview-comment.md
@@ -0,0 +1,7 @@
+## Deploying with
Cloudflare Workers
+
+The latest updates on your project. Learn more about [integrating Git with Workers](https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/).
+
+| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
+| ------------------------------------- | ------ | ------------- | -------------- | ------------- |
+| ${STATUS}
[View logs](${RUN_URL}) | feedback | ${SHORT_SHA} | ${PREVIEW_URL} | ${NOW} |
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..f257ad4
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,36 @@
+name: Deploy ๐
+
+on:
+ push:
+ branches: [main]
+ workflow_dispatch:
+
+concurrency:
+ group: deploy-production
+ cancel-in-progress: false
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ steps:
+ - uses: actions/checkout@v7
+
+ - uses: oven-sh/setup-bun@v2
+
+ - run: bun install --frozen-lockfile
+
+ - run: bun run build
+
+ - name: Write secrets file
+ env:
+ GITHUB_CLIENT_SECRET: ${{ secrets.APP_CLIENT_SECRET }}
+ run: printf 'GITHUB_CLIENT_SECRET=%s\n' "$GITHUB_CLIENT_SECRET" > "$RUNNER_TEMP/secrets.env"
+
+ - name: Deploy
+ uses: cloudflare/wrangler-action@v4
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ packageManager: bun
+ command: deploy --secrets-file ${{ runner.temp }}/secrets.env
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
new file mode 100644
index 0000000..3f81c3a
--- /dev/null
+++ b/.github/workflows/preview.yml
@@ -0,0 +1,89 @@
+name: Preview ๐
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, closed]
+
+concurrency:
+ group: preview-${{ github.event.pull_request.number }}
+ cancel-in-progress: true
+
+jobs:
+ preview:
+ # ํฌํฌ PR์๋ secret์ด ์ ๋ฌ๋์ง ์์ผ๋ฏ๋ก ๊ฐ์ ์ ์ฅ์์ PR๋ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ง๋ ๋ค
+ if: >
+ github.event.action != 'closed' &&
+ github.event.pull_request.head.repo.full_name == github.repository &&
+ github.actor != 'dependabot[bot]'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - uses: actions/checkout@v7
+
+ - uses: oven-sh/setup-bun@v2
+
+ - run: bun install --frozen-lockfile
+
+ # ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ผ๋ฆฌ ํจ๊ป ์ฐ๋ D1(feedback-preview)์ ๋ง์ด๊ทธ๋ ์ด์
์ ๋จผ์ ์ ์ฉํ๋ค
+ - name: Migrate preview D1
+ env:
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ run: bun run db:migrate:preview
+
+ - run: bun run build
+
+ - name: Write secrets file
+ env:
+ GITHUB_CLIENT_SECRET: ${{ secrets.APP_CLIENT_SECRET }}
+ run: printf 'GITHUB_CLIENT_SECRET=%s\n' "$GITHUB_CLIENT_SECRET" > "$RUNNER_TEMP/secrets.env"
+
+ - name: Deploy preview
+ id: preview
+ uses: cloudflare/wrangler-action@v4
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ packageManager: bun
+ command: preview --name pr-${{ github.event.pull_request.number }} --secrets-file ${{ runner.temp }}/secrets.env
+
+ - name: Render comment
+ if: always()
+ env:
+ STATUS: ${{ steps.preview.outcome == 'success' && 'โ
Ready' || 'โ Failed' }}
+ RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ PREVIEW_URL: Preview URL
+ run: |
+ SHORT_SHA="${HEAD_SHA::8}"
+ NOW="$(date -u '+%b %d %Y, %I:%M %p')"
+ export SHORT_SHA NOW
+ envsubst < .github/preview-comment.md > comment.md
+
+ - name: Comment
+ if: always()
+ uses: marocchino/sticky-pull-request-comment@v3
+ with:
+ header: cloudflare-workers
+ path: comment.md
+
+ cleanup:
+ if: >
+ github.event.action == 'closed' &&
+ github.event.pull_request.head.repo.full_name == github.repository
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ steps:
+ - uses: actions/checkout@v7
+
+ - uses: oven-sh/setup-bun@v2
+
+ - run: bun install --frozen-lockfile
+
+ - name: Delete preview
+ uses: cloudflare/wrangler-action@v4
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ packageManager: bun
+ command: preview delete --name pr-${{ github.event.pull_request.number }} -y
diff --git a/AGENTS.md b/AGENTS.md
index cacf52c..0624b10 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -20,26 +20,25 @@ bun run db:seed:local # ์ค๋ฌธ JSON(ํธ์ง์ยท๋ฌธํญ)์ ๋ก์ปฌ D1 ์
bunx drizzle-kit generate --name # ์คํค๋ง ๋ณ๊ฒฝ ํ ๋ง์ด๊ทธ๋ ์ด์
์์ฑ
bun run db:migrate:remote # ํ๋ก๋์
D1 ๋ง์ด๊ทธ๋ ์ด์
(์๋ Gotchas ์ ์์๋ฅผ ์งํจ๋ค)
bun run db:migrate:preview # ๋ฏธ๋ฆฌ๋ณด๊ธฐ D1 ๋ง์ด๊ทธ๋ ์ด์
-bun run deploy:preview # ์ง๊ธ ๋ธ๋์น์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์๋ ๋ฐฐํฌ (๋ณดํต์ push ๋ Workers Builds ๊ฐ ํ๋ค)
+bun run deploy:preview # ์ง๊ธ ๋ธ๋์น์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์๋ ๋ฐฐํฌ (๋ณดํต์ PR ๋ GitHub Actions ๊ฐ ํ๋ค)
```
## Local setup
-- ๋ก์ปฌ ์ํฌ๋ฆฟ์ `.dev.vars` (git ์ ์ฌ๋ผ๊ฐ์ง ์์): `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` โ DaleStudy GitHub App ์ Client IDยทsecret. ์์ผ๋ฉด ๋ก๊ทธ์ธ ๋์ `users`ยท`sessions` ์ ํ์ ์ง์ ๋ฃ๊ณ `Cookie: __Host-session=` ๋ก ์์ฒญํ๋ค. ์ค์ GitHub ๋ก๊ทธ์ธ์ PR ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ๋๋ค.
+- ๋ก์ปฌ ์ํฌ๋ฆฟ์ `.dev.vars` (git ์ ์ฌ๋ผ๊ฐ์ง ์์): `GITHUB_CLIENT_SECRET` โ DaleStudy GitHub App ์ client secret (Client ID ๋ ๊ณต๊ฐ ๊ฐ์ด๋ผ `wrangler.jsonc` ์ `vars` ์ ์๋ค). ์์ผ๋ฉด ๋ก๊ทธ์ธ ๋์ `users`ยท`sessions` ์ ํ์ ์ง์ ๋ฃ๊ณ `Cookie: __Host-session=` ๋ก ์์ฒญํ๋ค. ์ค์ GitHub ๋ก๊ทธ์ธ์ PR ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ๋๋ค.
- `__Host-` ์ ๋์ฌ ์ฟ ํค๋ Secure ๊ฐ ํ์๋ผ, localhost ๋ฅผ secure context ๋ก ์ทจ๊ธํ๋ Chrome/Firefox ์์ ๊ฐ๋ฐํ๋ค.
- seed JSON(`seed/*.json`, ํ์์ `seed/example.json`)์ ๋ก์ปฌ D1 ์ฉ์ด๋ค. ํ๋ก๋์
์ค๋ฌธ์ ํ๋ฉด์์ ๋ง๋ค๊ฑฐ๋ ๋ณต์ ํ๋ค. `editors` ๊ฐ ํธ์ง์, `survey.id` ๋ฅผ ๋นผ๋ฉด nanoid ๋ก ๋ง๋ ๋ค. ๊ฐ์ id ๊ฐ ์์ผ๋ฉด ์คํจํ๋ค. ๋ฌธํญ์ `{ "common": "", "required"? }`(๊ณตํต ๋ฌธํญ, ๋ฌธ๊ตฌ๋ `vars` ๋ก ์ฑ์) ๋๋ `{ "type", "label", "required"?, "config"? }`(์ด ์ค๋ฌธ๋ง์ ๋ฌธํญ). ์ ํ๋ณ ์ ์ฅ๊ฐยท๊ฒ์ฆยท`config` ๋ `docs/questions.md`.
## Deployment
- ๋ณ๊ฒฝ์ ๋ธ๋์น โ PR โ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ํ์ธ โ squash merge. `main` ์ ์ง์ pushยทforce push ํ์ง ์๋๋ค โ ๋ค๋ฅธ ์ฌ๋๊ณผ ํจ๊ป ์ฐ๋ ์ ์ฅ์๊ฐ ๋๊ณ , ๋จธ์ง ๊ธฐ๋ก์ด ๊ณง ๋ฐฐํฌ ๊ธฐ๋ก์ด๋ค.
-- `main` ์ ๋จธ์ง๋๋ฉด Cloudflare Workers Builds ๊ฐ `bun run build` โ `npx wrangler deploy`. ๋น๋ ๊ฒฐ๊ณผ๋ ์ปค๋ฐ์ check run `Workers Builds: feedback` ์ผ๋ก ํ์ธํ๋ค. `bun run deploy` ๋ ์๋ fallback.
-- **๋ฏธ๋ฆฌ๋ณด๊ธฐ**: `main` ์ด ์๋ ๋ธ๋์น๋ฅผ push ํ๋ฉด Workers Builds ๊ฐ `bun run db:migrate:preview && bun run deploy:preview`(Workers Previews, `wrangler preview`)๋ก `https://<๋ธ๋์น>.feedback-preview.dalestudy.com` ์ ๋ง๋ ๋ค. ๋ชจ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ D1 `feedback-preview` ๋ฅผ ํจ๊ป ์ด๋ค โ ํ๋ก๋์
์๋ต์ ๊ฑด๋๋ฆฌ์ง ์๋ ๊ฒ ๋ชฉ์ ์ด๋ค.
+- `main` ์ ๋จธ์ง๋๋ฉด GitHub Actions(`.github/workflows/deploy.yml`)๊ฐ `bun run build` โ `wrangler deploy --secrets-file` ๋ก ๋ฐฐํฌํ๋ค. `GITHUB_CLIENT_SECRET` ์ org secret `APP_CLIENT_SECRET` ์์ ๋ฐฐํฌ์ ํจ๊ป ๋ฃ๋๋ค(๋ฐ๋ก `wrangler secret put` ํ์ง ์๋๋ค โ ๋ค์ ๋ฐฐํฌ ๋ GitHub ๊ฐ์ผ๋ก ๋ฎ์ธ๋ค). `bun run deploy` ๋ ์๋ fallback.
+- **๋ฏธ๋ฆฌ๋ณด๊ธฐ**: ๊ฐ์ ์ ์ฅ์์ PR ์ ์ด๊ฑฐ๋ push ํ๋ฉด GitHub Actions(`.github/workflows/preview.yml`)๊ฐ `bun run db:migrate:preview` โ `wrangler preview --name pr-<๋ฒํธ> --secrets-file` ๋ก `https://pr-<๋ฒํธ>.feedback-preview.dalestudy.com` ์ ๋ง๋ค๊ณ PR ๋๊ธ๋ก ์๋ฆฐ๋ค. PR ์ด ๋ซํ๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ง์ด๋ค. ๋ชจ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ D1 `feedback-preview` ๋ฅผ ํจ๊ป ์ด๋ค โ ํ๋ก๋์
์๋ต์ ๊ฑด๋๋ฆฌ์ง ์๋ ๊ฒ ๋ชฉ์ ์ด๋ค.
- `wrangler.jsonc` ์ `previews` ๋ธ๋ก์ D1 ์ ๋ค์ ์ ์ธํ๋ค(์์๋์ง ์๋๋ค). ๋ง์ด๊ทธ๋ ์ด์
์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ฉ ํ๊ฒฝ `env.migrate-preview` ๋ก ํ๋ค โ `previews` ๋ธ๋ก์ D1 ์ `d1 migrations apply` ๊ฐ ์ฐพ์ง ๋ชปํ๊ณ , `preview_database_id` ๋ฅผ ์ฐ๋ฉด ๋ก์ปฌ ๊ฐ๋ฐ๊น์ง ๊ทธ id ์ ๋น DB ๋ฅผ ์ฐ๊ฒ ๋๋ค.
- `versions upload` ์ ๋ฒ์ URL ์ ํ๋ก๋์
D1 ์ ์จ์ ์ฐ์ง ์๋๋ค(`preview_urls` ๋ ๋).
- - ๋ธ๋์น๋ณ ํธ๋ฆฌ๊ฑฐ์ ์ํฌ๋ฆฟ์ ๋ธ๋์น๊ฐ ์ฒ์ ๋น๋๋ ๋์ base config ๋ฅผ ๋ณต์ฌํ๋ค. ๋์๋ณด๋์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ช
๋ น์ด๋ `wrangler preview base-config secret put` ์ ๋ฐ๊พผ ๋ค์๋ ๊ธฐ์กด ๋ธ๋์น์ ๋ฐ๋ก ๋ฃ๋๋ค(`wrangler preview secret put --name <๋ธ๋์น>`). ์ฆ์์ GitHub ๋ก `client_id=undefined` ๊ฐ ๊ฐ๋ ๊ฒ.
-- ์ด๋ฏธ ์ค์ ๋ ๊ฒ: D1 `feedback`ยท`feedback-preview`(APAC, id ๋ `wrangler.jsonc`), ์ํฌ๋ฆฟ `GITHUB_CLIENT_ID`ยท`GITHUB_CLIENT_SECRET`, ์ปค์คํ
๋๋ฉ์ธ(`wrangler.jsonc` ์ `routes`), ๋น๋ ๋ณ์ `BUN_VERSION=1.4.0`(๋น๋ ์ด๋ฏธ์ง ๊ธฐ๋ณธ bun ์ lockfile v2 ๋ฅผ ๋ชป ์ฝ๋๋ค. ๋ก์ปฌ bun ์ ์ฌ๋ฆฌ๋ฉด ๊ฐ์ด ์ฌ๋ฆฐ๋ค).
+ - ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ํฌ๋ฆฟ๋ ๋ฐฐํฌํ ๋๋ง๋ค `--secrets-file` ๋ก ๋ฃ์ผ๋ฏ๋ก Previews base config ์๋ ์ํฌ๋ฆฟ์ ๋์ง ์๋๋ค.
+- ์ด๋ฏธ ์ค์ ๋ ๊ฒ: D1 `feedback`ยท`feedback-preview`(APAC, id ๋ `wrangler.jsonc`), org secret `CLOUDFLARE_API_TOKEN`ยท`APP_CLIENT_SECRET`, ์ปค์คํ
๋๋ฉ์ธ(`wrangler.jsonc` ์ `routes`).
- GitHub App ์ Callback URL ์ localhost, `https://feedback.dalestudy.com/auth/callback`, `https://feedback-preview.dalestudy.com/auth/callback`(์์ผ๋์นด๋) ์
. ์ฑ์ **๊ณต๊ฐ(public)** ์ฌ์ผ ํ๋ค โ ๋น๊ณต๊ฐ ์ฑ์ ์์ ์กฐ์ง ๋ฉค๋ฒ๋ง authorize ํ ์ ์์ด์ ์กฐ์ง ๋ฐ ์ฐธ๊ฐ์๊ฐ GitHub ์ authorize ํ์ด์ง์์ 404 ๋ฅผ ๋ณธ๋ค(์ฐ๋ฆฌ ๋ก๊ทธ์๋ ์ ๋จ๋๋ค).
-- ์ ์ฅ์๋ฅผ ์๋ก ๋ง๋ค๋ฉด Workers Builds ์ฐ๊ฒฐ์ด ๋๊ธด๋ค(๋์๋ณด๋์๋ ์ด๋ฆ์ด ๊ทธ๋๋ก ๋ณด์ฌ๋). ๋์๋ณด๋์์ Disconnect โ Connect ๋ก ๋ค์ ์๋๋ค.
## Architecture
diff --git a/src/env.d.ts b/src/env.d.ts
index 4689db8..d5c7a8c 100644
--- a/src/env.d.ts
+++ b/src/env.d.ts
@@ -1,7 +1,6 @@
-// wrangler secret put ์ผ๋ก ๋ฑ๋กํ๋ ๊ฐ๋ค. wrangler types ๋ ์ํฌ๋ฆฟ์ ๋ชจ๋ฅด๋ฏ๋ก ์ฌ๊ธฐ์ ๋ณด๊ฐํ๋ค.
+// ๋ฐฐํฌํ ๋ GitHub secret์์ ๋ฃ๋ ๊ฐ. wrangler types ๋ ์ํฌ๋ฆฟ์ ๋ชจ๋ฅด๋ฏ๋ก ์ฌ๊ธฐ์ ๋ณด๊ฐํ๋ค.
declare namespace Cloudflare {
interface Env {
- GITHUB_CLIENT_ID: string
GITHUB_CLIENT_SECRET: string
}
}
diff --git a/wrangler.jsonc b/wrangler.jsonc
index 0b1a270..e14ac3f 100644
--- a/wrangler.jsonc
+++ b/wrangler.jsonc
@@ -7,6 +7,8 @@
"main": "@tanstack/react-start/server-entry",
"observability": { "enabled": true },
"upload_source_maps": true,
+ // GitHub App(dalestudy)์ Client ID. ๋ก๊ทธ์ธ URL์ ๊ทธ๋๋ก ๋๋ฌ๋๋ ๊ณต๊ฐ ๊ฐ์ด๋ค.
+ "vars": { "GITHUB_CLIENT_ID": "Iv23liwu6Ob75w8NcAX9" },
"routes": [
{ "pattern": "feedback.dalestudy.com", "custom_domain": true },
// ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ์ฉ ๋๋ฉ์ธ: ํ๋ก๋์
ํธ๋ํฝ์ ๋ฐ์ง ์๋๋ค(enabled: false)
@@ -23,6 +25,7 @@
// PR ๋ฏธ๋ฆฌ๋ณด๊ธฐ(Workers Previews). ๋ธ๋์น๋ง๋ค <๋ธ๋์น>.feedback-preview.dalestudy.com ์ ๋ฌ๋ค.
// D1 ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ผ๋ฆฌ ํจ๊ป ์ฐ๋ feedback-preview ๋ก โ ํ๋ก๋์
์๋ต์ ๊ฑด๋๋ฆฌ์ง ์๊ฒ.
"previews": {
+ "vars": { "GITHUB_CLIENT_ID": "Iv23liwu6Ob75w8NcAX9" },
"d1_databases": [
{
"binding": "DB",
@@ -36,6 +39,7 @@
// `preview_database_id` ๋ก ํ๋ฉด ๋ก์ปฌ ๊ฐ๋ฐ๋ ๊ทธ id ์ ๋น DB ๋ฅผ ์ฐ๊ฒ ๋ผ์ ์ด๋ ๊ฒ ๋๋ค. ๋ฐฐํฌ์๋ ์ฐ์ง ์๋๋ค.
"env": {
"migrate-preview": {
+ "vars": { "GITHUB_CLIENT_ID": "Iv23liwu6Ob75w8NcAX9" },
"d1_databases": [
{
"binding": "DB",
From c0de415c7b91b8f637fac2e05cc81f3666131446 Mon Sep 17 00:00:00 2001
From: Dale Seo <5466341+DaleSeo@users.noreply.github.com>
Date: Sun, 11 Oct 2026 17:17:04 -0400
Subject: [PATCH 2/2] ci: simplify the preview comment
---
.github/preview-comment.md | 7 -------
.github/workflows/preview.yml | 16 ++--------------
2 files changed, 2 insertions(+), 21 deletions(-)
delete mode 100644 .github/preview-comment.md
diff --git a/.github/preview-comment.md b/.github/preview-comment.md
deleted file mode 100644
index 13783d9..0000000
--- a/.github/preview-comment.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Deploying with
Cloudflare Workers
-
-The latest updates on your project. Learn more about [integrating Git with Workers](https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/).
-
-| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
-| ------------------------------------- | ------ | ------------- | -------------- | ------------- |
-| ${STATUS}
[View logs](${RUN_URL}) | feedback | ${SHORT_SHA} | ${PREVIEW_URL} | ${NOW} |
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index 3f81c3a..9235b79 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -47,25 +47,13 @@ jobs:
packageManager: bun
command: preview --name pr-${{ github.event.pull_request.number }} --secrets-file ${{ runner.temp }}/secrets.env
- - name: Render comment
- if: always()
- env:
- STATUS: ${{ steps.preview.outcome == 'success' && 'โ
Ready' || 'โ Failed' }}
- RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- HEAD_SHA: ${{ github.event.pull_request.head.sha }}
- PREVIEW_URL: Preview URL
- run: |
- SHORT_SHA="${HEAD_SHA::8}"
- NOW="$(date -u '+%b %d %Y, %I:%M %p')"
- export SHORT_SHA NOW
- envsubst < .github/preview-comment.md > comment.md
-
- name: Comment
if: always()
uses: marocchino/sticky-pull-request-comment@v3
with:
header: cloudflare-workers
- path: comment.md
+ message: |
+ ${{ steps.preview.outcome == 'success' && 'โ
' || 'โ' }} ๋ฏธ๋ฆฌ๋ณด๊ธฐ: https://pr-${{ github.event.pull_request.number }}.feedback-preview.dalestudy.com ยท [์คํ ๋ก๊ทธ](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
cleanup:
if: >