Skip to content

feat: 베타 채널 별도 항목 Chrome Web Store 자동배포 골격#113

Open
6-keem wants to merge 1 commit into
mainfrom
feat/112-beta-store-publish
Open

feat: 베타 채널 별도 항목 Chrome Web Store 자동배포 골격#113
6-keem wants to merge 1 commit into
mainfrom
feat/112-beta-store-publish

Conversation

@6-keem

@6-keem 6-keem commented Jun 24, 2026

Copy link
Copy Markdown
Member

관련 이슈

Closes #112

변경 내용

베타-스테이블 병존을 위해 베타를 별도 스토어 항목으로 게시하는 전제에서, 게이트(ENABLE_STORE_PUBLISH) 뒤 스텁이 실제로 동작하도록 코드 골격을 채웠다.

  • manifest.config.ts
    • isBeta일 때 OAuth client_idBETA_CLIENT_ID로 분기. 베타는 별도 확장 ID라 스테이블용 PROD_CLIENT_ID로는 chrome.identity 토큰 검증이 실패하기 때문. (현재 placeholder '' — 베타 스토어 항목 생성 후 발급받아 채움, TODO(#112))
    • isBeta일 때 아이콘을 icon-beta-*로 분기.
    • Chrome manifest version은 숫자 점 표기만 허용 → 베타 빌드는 BETA_VERSION(4-파트 숫자)을 주입받아 store-valid 버전을 쓴다.
  • release-beta.yml: manifest 버전을 X.Y.Z.RUN_NUMBER로 계산해 빌드에 BETA_VERSION으로 주입. GitHub 태그는 기존 vX.Y.Z-beta.N SemVer 표기 유지. 스토어 게시 스텝의 stale 주석 정정.
  • assets: 베타 아이콘 icon-beta-{16,32,48,128}.png 추가 (제공받은 16/32/64/128 중 48은 128에서 다운스케일 생성, 미사용 64 제외).

⚠️ 이 PR은 코드 골격만 포함한다. 실제 베타 자동배포 활성화에는 메인테이너의 수동 작업이 남아 있다 (이슈 #112 참고): 베타 스토어 항목 생성 → BETA_EXTENSION_ID·BETA_CLIENT_ID 확보, 게시용 CHROME_* 시크릿 등록, vars.ENABLE_STORE_PUBLISH=true.

변경 유형

  • ✨ 기능 추가 (feat)
  • ⚙️ 빌드/CI (chore, ci)

체크리스트

  • 이 PR과 연결된 이슈가 존재합니다.
  • 로컬에서 npm run lintnpm run build 가 통과합니다.
  • 변경 사항을 직접 테스트했습니다. (스테이블/베타 빌드 manifest 출력 확인: 이름·버전·아이콘·oauth 분기 검증, vitest 298 통과)
  • CodeRabbit / 리뷰어 피드백을 반영할 준비가 되어 있습니다.

Summary by CodeRabbit

  • New Features

    • 베타 빌드에서 별도의 4자리 버전 형식을 사용하도록 지원해 스토어 등록 규칙에 맞게 배포할 수 있게 됐습니다.
    • 베타 채널 전용 설정(클라이언트 ID, 아이콘, 버전)이 매니페스트에 반영됩니다.
  • Bug Fixes

    • 베타 배포 시 버전 정보가 빌드와 매니페스트에 일관되게 적용되도록 개선했습니다.
    • 베타 아이콘 경로가 채널에 맞게 자동으로 바뀌도록 수정했습니다.

- manifest: isBeta 시 BETA_CLIENT_ID·icon-beta 아이콘으로 분기
- manifest: BETA_VERSION(4-파트 숫자)으로 store-valid 버전 주입
- release-beta.yml: manifest 버전을 X.Y.Z.RUN_NUMBER 로 계산해 빌드에 주입
- 베타 아이콘 자산 icon-beta-{16,32,48,128}.png 추가

Closes #112
@6-keem 6-keem added the chore 빌드/도구/설정 등 잡일 label Jun 24, 2026
@6-keem 6-keem self-assigned this Jun 24, 2026
@github-actions github-actions Bot added feat 새로운 기능 또는 요청 and removed chore 빌드/도구/설정 등 잡일 labels Jun 24, 2026
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

베타 릴리즈 워크플로에서 숫자 4-파트 형식의 manifest 버전 출력을 추가하고 빌드 스텝에 BETA_VERSION으로 주입한다. manifest.config.ts에서는 베타 전용 BETA_CLIENT_ID 상수, 아이콘 접두사 분기, BETA_VERSION 기반 버전 주입 로직을 추가한다.

Changes

베타 CWS 자동배포 활성화

Layer / File(s) Summary
워크플로 manifest 버전 계산 및 BETA_VERSION 주입
.github/workflows/release-beta.yml
버전 계산 스텝에 manifest 출력(숫자 4-파트 X.Y.Z.N)을 추가하고, 프로덕션 빌드 스텝 envBETA_VERSION: steps.ver.outputs.manifest를 연결한다. CWS 게시 주석도 숫자 버전 규칙 충족을 명시하도록 수정된다.
manifest.config.ts 베타 client_id·아이콘·버전 분기
manifest.config.ts
BETA_CLIENT_ID 상수를 추가하고, createManifest 내부에서 isBeta 플래그로 clientId를 mock/beta/prod 3분기 처리한다. 아이콘 경로는 iconPrefix(icon-beta 또는 icon) 기반 템플릿으로 변경되며, version은 베타 빌드에서 BETA_VERSION 환경변수가 존재할 경우 해당 값을 사용한다.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Linked Issues check ❓ Inconclusive 베타용 client_id와 4파트 manifest version 주입은 확인되지만, 베타 아이콘 파일은 PNG 필터로 제외되어 요구 충족을 완전히 검증할 수 없습니다. public/images/icon/icon-beta-.png은 !**/.png 필터로 제외되어 있어, 아이콘 자산 추가 여부를 확인하려면 해당 파일을 포함해 주세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 베타 채널용 Chrome Web Store 자동배포와 별도 항목 준비라는 주요 변경을 간결하게 요약합니다.
Out of Scope Changes check ✅ Passed 변경은 베타용 배포와 매니페스트 분기 범위에 머물러 있어, 무관한 코드 추가는 보이지 않습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/112-beta-store-publish

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@manifest.config.ts`:
- Around line 6-18: The beta manifest path in createManifest currently uses
BETA_CLIENT_ID even when it is an empty string, which leaves oauth2.client_id
invalid for beta builds. Update createManifest to guard the isBeta branch so
beta builds fail fast or fall back only when a real beta client ID is present,
and keep the mock/production selection intact via mode, isBeta, BETA_CLIENT_ID,
and PROD_CLIENT_ID. Make the check explicit near the clientId assignment so any
RELEASE_CHANNEL=beta build cannot proceed with an empty OAuth client ID.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ec322d05-c1c3-449c-bd96-71e09c8cfbb9

📥 Commits

Reviewing files that changed from the base of the PR and between 0a41965 and a75c797.

⛔ Files ignored due to path filters (4)
  • public/images/icon/icon-beta-128.png is excluded by !**/*.png
  • public/images/icon/icon-beta-16.png is excluded by !**/*.png
  • public/images/icon/icon-beta-32.png is excluded by !**/*.png
  • public/images/icon/icon-beta-48.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • .github/workflows/release-beta.yml
  • manifest.config.ts

Comment thread manifest.config.ts
Comment on lines +6 to +18
// 베타는 별도 스토어 항목 = 별도 확장 ID로 게시되므로, 그 확장 ID에 묶인
// 전용 OAuth client_id 가 필요하다. (스테이블용 PROD_CLIENT_ID 로는 베타에서
// chrome.identity 토큰 검증이 실패한다.)
// TODO(#112): 베타 스토어 항목 생성 후 발급받은 client_id 로 교체.
const BETA_CLIENT_ID = '';

export function createManifest(mode?: string): ManifestV3Export {
const clientId = mode === 'mock' ? DEV_CLIENT_ID : PROD_CLIENT_ID;

// 베타 채널 빌드 기반 (Chrome Web Store 2단계 게시 대비)
// 베타 채널 빌드 (Chrome Web Store 별도 항목 게시 대비)
// 릴리즈 워크플로의 베타 빌드에서 RELEASE_CHANNEL=beta 를 주입하면
// 별도 스토어 항목/아이콘과 구분되도록 이름에 (Beta) 가 붙는다.
// 이름에 (Beta) 가 붙고, 별도 아이콘/OAuth client_id 로 분기된다.
const isBeta = process.env.RELEASE_CHANNEL === 'beta';

const clientId = mode === 'mock' ? DEV_CLIENT_ID : isBeta ? BETA_CLIENT_ID : PROD_CLIENT_ID;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

BETA_CLIENT_ID 로 인해 모든 베타 빌드의 OAuth 가 동작하지 않습니다.

isBeta 인 빌드에서는 clientId 가 빈 문자열(BETA_CLIENT_ID = '')로 설정되어 oauth2.client_id 가 비게 됩니다(Line 18 → Line 56). 베타 빌드 스텝(RELEASE_CHANNEL=beta)은 ENABLE_STORE_PUBLISH 게이트와 무관하게 항상 실행되어 그 산출물이 프리릴리즈 zip 으로 첨부되므로, 베타 테스터가 받는 빌드는 chrome.identity 토큰 검증이 실패하거나 매니페스트 로드 자체가 거부될 수 있습니다.

#112 로 발급받은 실제 client_id 로 교체되기 전까지는 베타 산출물이 배포되지 않도록 하거나, 빈 값일 때 빌드를 명시적으로 실패시키는 가드를 두는 것을 권장합니다.

BETA_CLIENT_ID 가 비어 있을 때 베타 빌드를 조기에 실패시키는 가드를 추가하는 변경을 원하시면 도와드리거나, #112 추적을 위한 이슈 정리를 도와드릴까요?

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@manifest.config.ts` around lines 6 - 18, The beta manifest path in
createManifest currently uses BETA_CLIENT_ID even when it is an empty string,
which leaves oauth2.client_id invalid for beta builds. Update createManifest to
guard the isBeta branch so beta builds fail fast or fall back only when a real
beta client ID is present, and keep the mock/production selection intact via
mode, isBeta, BETA_CLIENT_ID, and PROD_CLIENT_ID. Make the check explicit near
the clientId assignment so any RELEASE_CHANNEL=beta build cannot proceed with an
empty OAuth client ID.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat 새로운 기능 또는 요청

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Task] 베타 채널 Chrome Web Store 자동배포 활성화 (별도 항목)

1 participant