project-auto-wizard 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-auto-wizard",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "One command DevOps: npx wizard that installs GitHub-native AI Release Automation into any project",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -277,7 +277,7 @@ def classify_commits(lines: list[str]) -> dict:
277
277
  """
278
278
  커밋 제목 목록을 3단계 규칙으로 분류.
279
279
 
280
- 1단계: projectops 컨벤션 — "제목 : type : 내용 [URL]"
280
+ 1단계: 제목 컨벤션 — "제목 : type : 내용 [URL]"
281
281
  2단계: Conventional Commits — "type(scope)!: 내용"
282
282
  (perf/style/build/ci → chore 버킷으로 매핑)
283
283
  3단계: 위 두 형식에 매칭되지 않으면 "changes" 버킷 (자유 형식)
@@ -298,7 +298,7 @@ def classify_commits(lines: list[str]) -> dict:
298
298
  # 1단계가 2단계보다 먼저다 — 트레이드오프: "제목 : feat : 내용" 형식은
299
299
  # "feat: ..." Conventional Commits와 겹칠 수 없지만(타입 앞에 제목 필수),
300
300
  # 제목이 있는 줄에 " : type : "가 우연히 들어가면 tier-2 해석 기회 없이
301
- # tier-1로 확정된다. projectops 컨벤션 레포에서는 이것이 의도된 우선순위다.
301
+ # tier-1로 확정된다. 이 컨벤션을 쓰는 레포에서는 이것이 의도된 우선순위다.
302
302
  tier1 = _TIER1_RE.match(line)
303
303
  if tier1:
304
304
  title = tier1.group(1).strip()
@@ -5,8 +5,8 @@ version_manager.py — general-purpose version management script (stdlib only).
5
5
  This script is copied into user repos (.github/scripts/) by project-auto-wizard
6
6
  and runs standalone on GitHub Actions ubuntu runners (python3, no third-party deps).
7
7
 
8
- It is a Python rewrite of the battle-tested bash version_manager.sh from
9
- SUH-DEVOPS-TEMPLATE. Behavioral equivalence with that script is the design goal:
8
+ It is a Python rewrite of the battle-tested bash reference implementation
9
+ (version_manager.sh). Behavioral equivalence with that script is the design goal:
10
10
  - version.yml is the single source of truth for `version` and `version_code`.
11
11
  - version.yml is edited via line-based regex replacements that preserve all
12
12
  comments and formatting (never rewritten wholesale, never parsed with a YAML lib).
@@ -135,17 +135,17 @@ jobs:
135
135
  # ============================================
136
136
 
137
137
  # --- ENV_FILE → .env ---
138
- cat << '__SUH_SECRET_CHECK_EOF__' > /tmp/_secret_check
138
+ cat << '__WIZARD_SECRET_CHECK_EOF__' > /tmp/_secret_check
139
139
  ${{ secrets.ENV_FILE }}
140
- __SUH_SECRET_CHECK_EOF__
140
+ __WIZARD_SECRET_CHECK_EOF__
141
141
  if [ -s /tmp/_secret_check ] && [ -n "$(tr -d '[:space:]' < /tmp/_secret_check)" ]; then
142
142
  echo "ENV_FILE → .env 업로드 중..."
143
- cat << '__SUH_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/.env" > /dev/null
143
+ cat << '__WIZARD_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/.env" > /dev/null
144
144
  ${{ secrets.ENV_FILE }}
145
- __SUH_FILE_CONTENT_EOF__
146
- cat << '__SUH_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/${TIMESTAMP}/.env" > /dev/null
145
+ __WIZARD_FILE_CONTENT_EOF__
146
+ cat << '__WIZARD_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/${TIMESTAMP}/.env" > /dev/null
147
147
  ${{ secrets.ENV_FILE }}
148
- __SUH_FILE_CONTENT_EOF__
148
+ __WIZARD_FILE_CONTENT_EOF__
149
149
  echo ".env 업로드 완료"
150
150
  else
151
151
  echo "ENV_FILE 스킵 (Secret 미설정)"
@@ -153,17 +153,17 @@ jobs:
153
153
  rm -f /tmp/_secret_check
154
154
 
155
155
  # --- APPLICATION_PROD_YML → application-prod.yml ---
156
- cat << '__SUH_SECRET_CHECK_EOF__' > /tmp/_secret_check
156
+ cat << '__WIZARD_SECRET_CHECK_EOF__' > /tmp/_secret_check
157
157
  ${{ secrets.APPLICATION_PROD_YML }}
158
- __SUH_SECRET_CHECK_EOF__
158
+ __WIZARD_SECRET_CHECK_EOF__
159
159
  if [ -s /tmp/_secret_check ] && [ -n "$(tr -d '[:space:]' < /tmp/_secret_check)" ]; then
160
160
  echo "APPLICATION_PROD_YML → application-prod.yml 업로드 중..."
161
- cat << '__SUH_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/application-prod.yml" > /dev/null
161
+ cat << '__WIZARD_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/application-prod.yml" > /dev/null
162
162
  ${{ secrets.APPLICATION_PROD_YML }}
163
- __SUH_FILE_CONTENT_EOF__
164
- cat << '__SUH_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/${TIMESTAMP}/application-prod.yml" > /dev/null
163
+ __WIZARD_FILE_CONTENT_EOF__
164
+ cat << '__WIZARD_FILE_CONTENT_EOF__' | sudo tee "${BASE_DIR}/${TIMESTAMP}/application-prod.yml" > /dev/null
165
165
  ${{ secrets.APPLICATION_PROD_YML }}
166
- __SUH_FILE_CONTENT_EOF__
166
+ __WIZARD_FILE_CONTENT_EOF__
167
167
  echo "application-prod.yml 업로드 완료"
168
168
  else
169
169
  echo "APPLICATION_PROD_YML 스킵 (Secret 미설정)"
@@ -120,7 +120,7 @@ jobs:
120
120
  '',
121
121
  '### 💡 확인 사항',
122
122
  '1. 브랜치가 원격 저장소에 push되었는지 확인하세요',
123
- '2. "Guide by SUH-LAB" 댓글의 브랜치명이 올바른지 확인하세요',
123
+ '2. "Issue Helper" 댓글의 브랜치명이 올바른지 확인하세요',
124
124
  '3. 브랜치명에 오타가 없는지 확인하세요',
125
125
  '',
126
126
  `🔗 [워크플로우 로그](${runUrl})`
@@ -1,27 +1,27 @@
1
1
  # project-auto-wizard:managed-workflow
2
2
  # ===================================================================
3
- # Flutter 테스트 앱 빌드 트리거 워크플로우 (SUH-LAB)
3
+ # Flutter 테스트 앱 빌드 트리거 워크플로우
4
4
  # ===================================================================
5
5
  #
6
6
  # 이 워크플로우는 PR 또는 이슈에 댓글로 빌드 명령어를 작성하면
7
7
  # Android와 iOS 테스트 앱 빌드를 자동으로 트리거합니다.
8
8
  #
9
9
  # 주요 특징:
10
- # - PR/이슈 댓글 감지: "@suh-lab app build / apk build / ios build" 키워드 감지 (어순 무관: build app 도 동작)
10
+ # - PR/이슈 댓글 감지: "/wizard app build / apk build / ios build" 키워드 감지 (어순 무관: build app 도 동작)
11
11
  # - repository_dispatch 이벤트로 빌드 워크플로우 트리거
12
12
  # - PR/이슈 번호 + 빌드 횟수로 고유한 빌드 번호 생성 (예: 38700, 38701...)
13
13
  # - 브랜치명에서 이슈 번호 자동 추출 (YYYYMMDD_#이슈번호_내용 형식)
14
14
  # - 테스트 버전은 version.yml에서 동적으로 읽어 사용 (빌드 번호로 운영/테스트 구분)
15
15
  #
16
16
  # 사용 방법:
17
- # - PR에 댓글 작성: "@suh-lab app build" (Android + iOS 모두 빌드)
18
- # - PR에 댓글 작성: "@suh-lab apk build" (Android만 빌드)
19
- # - PR에 댓글 작성: "@suh-lab ios build" (iOS만 빌드)
20
- # - 이슈에 댓글 작성: 위 명령어 동일 (Guide by SUH-LAB 댓글 필요)
17
+ # - PR에 댓글 작성: "/wizard app build" (Android + iOS 모두 빌드)
18
+ # - PR에 댓글 작성: "/wizard apk build" (Android만 빌드)
19
+ # - PR에 댓글 작성: "/wizard ios build" (iOS만 빌드)
20
+ # - 이슈에 댓글 작성: 위 명령어 동일 (Issue Helper 댓글 필요)
21
21
  # - 어순은 무관: "build app" / "build apk" / "build ios"로 적어도 동일하게 동작
22
- # - 특정 브랜치 지정: "@suh-lab app build <브랜치명>" (명령어 뒤에 브랜치명을 적으면 해당 브랜치를 빌드)
23
- # 예: "@suh-lab apk build 20260609_#349_feature" → 해당 브랜치로 Android 빌드
24
- # 브랜치명을 생략하면 PR head 또는 이슈의 Guide by SUH-LAB 댓글 브랜치를 사용
22
+ # - 특정 브랜치 지정: "/wizard app build <브랜치명>" (명령어 뒤에 브랜치명을 적으면 해당 브랜치를 빌드)
23
+ # 예: "/wizard apk build 20260609_#349_feature" → 해당 브랜치로 Android 빌드
24
+ # 브랜치명을 생략하면 PR head 또는 이슈의 Issue Helper 댓글 브랜치를 사용
25
25
  #
26
26
  # 트리거되는 워크플로우:
27
27
  # - PROJECT-FLUTTER-ANDROID-TEST-APK.yaml (event_type: build-android-app)
@@ -29,7 +29,7 @@
29
29
  #
30
30
  # ===================================================================
31
31
 
32
- name: PROJECT-Flutter-SUH-LAB-App-Build-Trigger
32
+ name: PROJECT-Flutter-App-Build-Trigger
33
33
 
34
34
  on:
35
35
  issue_comment:
@@ -43,9 +43,9 @@ permissions:
43
43
  jobs:
44
44
  trigger-builds:
45
45
  name: 빌드 워크플로우 트리거
46
- # @suh-lab app build / @suh-lab apk build / @suh-lab ios build 키워드 감지 (어순 무관)
46
+ # /wizard app build / /wizard apk build / /wizard ios build 키워드 감지 (어순 무관)
47
47
  if: |
48
- contains(github.event.comment.body, '@suh-lab') &&
48
+ contains(github.event.comment.body, '/wizard') &&
49
49
  (
50
50
  (contains(github.event.comment.body, 'build') && contains(github.event.comment.body, 'app')) ||
51
51
  (contains(github.event.comment.body, 'apk') && contains(github.event.comment.body, 'build')) ||
@@ -93,27 +93,27 @@ jobs:
93
93
  // 어순은 양방향 지원: "{타입} build"(app/apk/ios build)와 "build {타입}"(build app 등) 모두 허용.
94
94
  // apk가 app으로 오인되지 않도록 app 토큰은 \b 단어경계로 정확히 끊는다(apk·application 제외).
95
95
  // apk/ios를 app보다 먼저 검사해, "apk build"가 app 분기로 새지 않게 한다.
96
- if (comment.match(/@suh-lab[^\S\r\n]+apk[^\S\r\n]+build/) || comment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+apk/)) {
97
- // @suh-lab apk build [브랜치] (또는 build apk) → Android만
96
+ if (comment.match(/\/wizard[^\S\r\n]+apk[^\S\r\n]+build/) || comment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+apk/)) {
97
+ // /wizard apk build [브랜치] (또는 build apk) → Android만
98
98
  buildAndroid = true;
99
99
  buildType = 'apk';
100
- m = rawComment.match(/@suh-lab[^\S\r\n]+apk[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
101
- || rawComment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+apk(?:[^\S\r\n]+(\S+))?/i);
100
+ m = rawComment.match(/\/wizard[^\S\r\n]+apk[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
101
+ || rawComment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+apk(?:[^\S\r\n]+(\S+))?/i);
102
102
  customBranch = (m && m[1]) || '';
103
- } else if (comment.match(/@suh-lab[^\S\r\n]+ios[^\S\r\n]+build/) || comment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+ios/)) {
104
- // @suh-lab ios build [브랜치] (또는 build ios) → iOS만
103
+ } else if (comment.match(/\/wizard[^\S\r\n]+ios[^\S\r\n]+build/) || comment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+ios/)) {
104
+ // /wizard ios build [브랜치] (또는 build ios) → iOS만
105
105
  buildIos = true;
106
106
  buildType = 'ios';
107
- m = rawComment.match(/@suh-lab[^\S\r\n]+ios[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
108
- || rawComment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+ios(?:[^\S\r\n]+(\S+))?/i);
107
+ m = rawComment.match(/\/wizard[^\S\r\n]+ios[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
108
+ || rawComment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+ios(?:[^\S\r\n]+(\S+))?/i);
109
109
  customBranch = (m && m[1]) || '';
110
- } else if (comment.match(/@suh-lab[^\S\r\n]+app\b[^\S\r\n]+build/) || comment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+app\b/)) {
111
- // @suh-lab app build [브랜치] (또는 build app) → Android + iOS 모두
110
+ } else if (comment.match(/\/wizard[^\S\r\n]+app\b[^\S\r\n]+build/) || comment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+app\b/)) {
111
+ // /wizard app build [브랜치] (또는 build app) → Android + iOS 모두
112
112
  buildAndroid = true;
113
113
  buildIos = true;
114
114
  buildType = 'app';
115
- m = rawComment.match(/@suh-lab[^\S\r\n]+app\b[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
116
- || rawComment.match(/@suh-lab[^\S\r\n]+build[^\S\r\n]+app\b(?:[^\S\r\n]+(\S+))?/i);
115
+ m = rawComment.match(/\/wizard[^\S\r\n]+app\b[^\S\r\n]+build(?:[^\S\r\n]+(\S+))?/i)
116
+ || rawComment.match(/\/wizard[^\S\r\n]+build[^\S\r\n]+app\b(?:[^\S\r\n]+(\S+))?/i);
117
117
  customBranch = (m && m[1]) || '';
118
118
  }
119
119
 
@@ -175,7 +175,7 @@ jobs:
175
175
  } catch (error) {
176
176
  console.log('ℹ️ PR이 아닙니다. 이슈에서 브랜치 정보를 찾습니다...');
177
177
 
178
- // 2. PR이 아니면 이슈에서 "Guide by SUH-LAB" 댓글 찾기
178
+ // 2. PR이 아니면 이슈에서 "Issue Helper" 댓글 찾기
179
179
  sourceType = 'ISSUE';
180
180
  sourceNumber = issueNumber.toString();
181
181
  relatedIssueNumber = issueNumber.toString();
@@ -203,27 +203,27 @@ jobs:
203
203
  per_page: 100
204
204
  });
205
205
 
206
- // "Guide by SUH-LAB" 댓글 찾기
206
+ // "Issue Helper" 댓글 찾기
207
207
  const guideComment = comments.data.find(c =>
208
- c.body.includes('Guide by SUH-LAB')
208
+ c.body.includes('<!-- project-auto-wizard issue helper -->')
209
209
  );
210
210
 
211
211
  if (!guideComment) {
212
- console.log('❌ "Guide by SUH-LAB" 댓글을 찾을 수 없습니다.');
212
+ console.log('❌ "Issue Helper" 댓글을 찾을 수 없습니다.');
213
213
  core.setOutput('found', 'false');
214
- core.setOutput('errorMessage', '이슈에서 "Guide by SUH-LAB" 댓글을 찾을 수 없습니다. 브랜치 정보가 포함된 댓글이 필요합니다.');
214
+ core.setOutput('errorMessage', '이슈에서 "Issue Helper" 댓글을 찾을 수 없습니다. 브랜치 정보가 포함된 댓글이 필요합니다.');
215
215
  return;
216
216
  }
217
217
 
218
- console.log('✅ "Guide by SUH-LAB" 댓글 발견');
218
+ console.log('✅ "Issue Helper" 댓글 발견');
219
219
 
220
220
  // 브랜치명 추출 (### 브랜치 다음 ``` 블록 내용)
221
- const branchMatch = guideComment.body.match(/### 브랜치\s*```\s*([\s\S]*?)\s*```/);
221
+ const branchMatch = guideComment.body.match(/### 브랜치(?:명)?\s*```\s*([\s\S]*?)\s*```/);
222
222
 
223
223
  if (!branchMatch) {
224
224
  console.log('❌ 브랜치 정보를 파싱할 수 없습니다.');
225
225
  core.setOutput('found', 'false');
226
- core.setOutput('errorMessage', '"Guide by SUH-LAB" 댓글에서 브랜치 정보를 파싱할 수 없습니다. 댓글 형식을 확인해주세요.');
226
+ core.setOutput('errorMessage', '"Issue Helper" 댓글에서 브랜치 정보를 파싱할 수 없습니다. 댓글 형식을 확인해주세요.');
227
227
  return;
228
228
  }
229
229
 
@@ -262,9 +262,9 @@ jobs:
262
262
 
263
263
  **해결 방법:**
264
264
  - PR에서 빌드하는 경우: PR 페이지에서 댓글을 작성해주세요.
265
- - 이슈에서 빌드하는 경우: "Guide by SUH-LAB" 댓글이 있어야 합니다.
265
+ - 이슈에서 빌드하는 경우: "Issue Helper" 댓글이 있어야 합니다.
266
266
  - 댓글에 \`### 브랜치\` 섹션과 브랜치명이 포함되어 있어야 합니다.
267
- - 또는 댓글에 브랜치명을 직접 지정할 수 있습니다: \`@suh-lab app build <브랜치명>\``;
267
+ - 또는 댓글에 브랜치명을 직접 지정할 수 있습니다: \`/wizard app build <브랜치명>\``;
268
268
 
269
269
  await github.rest.issues.createComment({
270
270
  owner: context.repo.owner,
@@ -329,7 +329,7 @@ jobs:
329
329
  '',
330
330
  '### 💡 확인 사항',
331
331
  '1. 브랜치가 원격 저장소에 push되었는지 확인하세요',
332
- '2. "Guide by SUH-LAB" 댓글의 브랜치명이 올바른지 확인하세요',
332
+ '2. "Issue Helper" 댓글의 브랜치명이 올바른지 확인하세요',
333
333
  '3. 브랜치명에 오타가 없는지 확인하세요',
334
334
  '',
335
335
  `🔗 [워크플로우 로그](${runUrl})`
@@ -377,7 +377,7 @@ jobs:
377
377
  // iOS 빌드: ios 빌드 + app 공용 빌드 둘 다 카운트 (어순 무관)
378
378
  buildCount = comments.data.filter(c => {
379
379
  const body = c.body.toLowerCase();
380
- return body.includes('@suh-lab') && body.includes('build') && (
380
+ return body.includes('/wizard') && body.includes('build') && (
381
381
  body.includes('ios') || body.includes('app')
382
382
  );
383
383
  }).length;
@@ -387,7 +387,7 @@ jobs:
387
387
  // Android 빌드: apk 빌드 + app 공용 빌드 둘 다 카운트 (어순 무관)
388
388
  buildCount = comments.data.filter(c => {
389
389
  const body = c.body.toLowerCase();
390
- return body.includes('@suh-lab') && body.includes('build') && (
390
+ return body.includes('/wizard') && body.includes('build') && (
391
391
  body.includes('apk') || body.includes('app')
392
392
  );
393
393
  }).length;
@@ -397,7 +397,7 @@ jobs:
397
397
  // 전체 앱 빌드: 모든 빌드 명령어 카운트 (어순 무관)
398
398
  buildCount = comments.data.filter(c => {
399
399
  const body = c.body.toLowerCase();
400
- return body.includes('@suh-lab') && body.includes('build') && (
400
+ return body.includes('/wizard') && body.includes('build') && (
401
401
  body.includes('ios') ||
402
402
  body.includes('apk') ||
403
403
  body.includes('app')
@@ -115,7 +115,7 @@ jobs:
115
115
  '',
116
116
  '### 💡 확인 사항',
117
117
  '1. 브랜치가 원격 저장소에 push되었는지 확인하세요',
118
- '2. "Guide by SUH-LAB" 댓글의 브랜치명이 올바른지 확인하세요',
118
+ '2. "Issue Helper" 댓글의 브랜치명이 올바른지 확인하세요',
119
119
  '3. 브랜치명에 오타가 없는지 확인하세요',
120
120
  '',
121
121
  `🔗 [워크플로우 로그](${runUrl})`
@@ -19,9 +19,9 @@
19
19
  # ===================================================================
20
20
  #
21
21
  # 🚀 사용법:
22
- # @suh-lab server build - Preview 빌드 및 배포
23
- # @suh-lab server destroy - Preview 환경 삭제
24
- # @suh-lab server status - 현재 상태 확인
22
+ # /wizard server build - Preview 빌드 및 배포
23
+ # /wizard server destroy - Preview 환경 삭제
24
+ # /wizard server status - 현재 상태 확인
25
25
  #
26
26
  # 📊 리소스 네이밍:
27
27
  # - 컨테이너: {PROJECT_NAME}-pr-{번호}
@@ -64,7 +64,7 @@ env:
64
64
 
65
65
  # Issue Helper 댓글 마커 (프로젝트별 수정 필요)
66
66
  # Issue 댓글에서 브랜치명을 추출할 때 사용
67
- ISSUE_HELPER_MARKER: 'Guide by SUH-LAB'
67
+ ISSUE_HELPER_MARKER: '<!-- project-auto-wizard issue helper -->'
68
68
 
69
69
  # Health Check 설정 (프로젝트별 수정 필요)
70
70
  # - HEALTH_CHECK_PATH: HTTP Health Check 경로 (빈값이면 HTTP 체크 건너뜀)
@@ -115,7 +115,7 @@ jobs:
115
115
  is_custom_branch: ${{ steps.parse.outputs.is_custom_branch }}
116
116
  steps:
117
117
  - name: 댓글에 👀 리액션 추가
118
- if: contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server')
118
+ if: contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server')
119
119
  uses: actions/github-script@v9
120
120
  with:
121
121
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -143,8 +143,8 @@ jobs:
143
143
  fi
144
144
 
145
145
  # 명령어 파싱 (브랜치 파라미터 지원)
146
- # 형식: @suh-lab server <command> [브랜치명]
147
- if [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
146
+ # 형식: /wizard server <command> [브랜치명]
147
+ if [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
148
148
  echo "command=build" >> $GITHUB_OUTPUT
149
149
  echo "is_valid=true" >> $GITHUB_OUTPUT
150
150
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -155,7 +155,7 @@ jobs:
155
155
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
156
156
  echo "✅ 명령어 감지: build"
157
157
  fi
158
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
158
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
159
159
  echo "command=destroy" >> $GITHUB_OUTPUT
160
160
  echo "is_valid=true" >> $GITHUB_OUTPUT
161
161
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -166,7 +166,7 @@ jobs:
166
166
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
167
167
  echo "✅ 명령어 감지: destroy"
168
168
  fi
169
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
169
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
170
170
  echo "command=status" >> $GITHUB_OUTPUT
171
171
  echo "is_valid=true" >> $GITHUB_OUTPUT
172
172
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -179,7 +179,7 @@ jobs:
179
179
  fi
180
180
  else
181
181
  echo "is_valid=false" >> $GITHUB_OUTPUT
182
- echo "ℹ️ @suh-lab server 명령어가 아님"
182
+ echo "ℹ️ /wizard server 명령어가 아님"
183
183
  fi
184
184
 
185
185
  # -----------------------------------------------------------------
@@ -519,17 +519,17 @@ jobs:
519
519
  '### 📋 명령어',
520
520
  '| 명령어 | 설명 |',
521
521
  '|--------|------|',
522
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
523
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
524
- '| `@suh-lab server status` | 현재 상태 확인 |',
522
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
523
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
524
+ '| `/wizard server status` | 현재 상태 확인 |',
525
525
  '',
526
526
  '<details>',
527
527
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
528
528
  '',
529
529
  '```',
530
- `@suh-lab server build ${branchName}`,
531
- `@suh-lab server destroy ${branchName}`,
532
- `@suh-lab server status ${branchName}`,
530
+ `/wizard server build ${branchName}`,
531
+ `/wizard server destroy ${branchName}`,
532
+ `/wizard server status ${branchName}`,
533
533
  '```',
534
534
  '</details>',
535
535
  '',
@@ -594,7 +594,7 @@ jobs:
594
594
  '',
595
595
  '### 💡 다음 단계',
596
596
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
597
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
597
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
598
598
  '',
599
599
  '---',
600
600
  '*🤖 이 댓글은 PR Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1115,17 +1115,17 @@ jobs:
1115
1115
  '### 📋 명령어',
1116
1116
  '| 명령어 | 설명 |',
1117
1117
  '|--------|------|',
1118
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1119
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1120
- '| `@suh-lab server status` | 현재 상태 확인 |',
1118
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1119
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1120
+ '| `/wizard server status` | 현재 상태 확인 |',
1121
1121
  '',
1122
1122
  '<details>',
1123
1123
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
1124
1124
  '',
1125
1125
  '```',
1126
- `@suh-lab server build ${branchName}`,
1127
- `@suh-lab server destroy ${branchName}`,
1128
- `@suh-lab server status ${branchName}`,
1126
+ `/wizard server build ${branchName}`,
1127
+ `/wizard server destroy ${branchName}`,
1128
+ `/wizard server status ${branchName}`,
1129
1129
  '```',
1130
1130
  '</details>',
1131
1131
  '',
@@ -1188,7 +1188,7 @@ jobs:
1188
1188
  '',
1189
1189
  '### 💡 다음 단계',
1190
1190
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
1191
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
1191
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
1192
1192
  '',
1193
1193
  '---',
1194
1194
  '*🤖 이 댓글은 Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1219,7 +1219,7 @@ jobs:
1219
1219
  if: |
1220
1220
  (github.event_name == 'pull_request' && github.event.action == 'closed') ||
1221
1221
  (github.event_name == 'issues' && github.event.action == 'closed') ||
1222
- (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server destroy'))
1222
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server destroy'))
1223
1223
  runs-on: ubuntu-latest
1224
1224
  steps:
1225
1225
  - name: PR/Issue 번호 가져오기
@@ -1302,7 +1302,7 @@ jobs:
1302
1302
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1303
1303
  '| **상태** | 삭제됨 |',
1304
1304
  '',
1305
- '다시 배포하려면: `@suh-lab server build`',
1305
+ '다시 배포하려면: `/wizard server build`',
1306
1306
  '',
1307
1307
  '---',
1308
1308
  '*🤖 이 댓글은 PR/Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1401,8 +1401,8 @@ jobs:
1401
1401
  '### 📋 명령어',
1402
1402
  '| 명령어 | 설명 |',
1403
1403
  '|--------|------|',
1404
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1405
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1404
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1405
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1406
1406
  '',
1407
1407
  '---',
1408
1408
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1416,7 +1416,7 @@ jobs:
1416
1416
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1417
1417
  '| **상태** | 🔴 Not Found |',
1418
1418
  '',
1419
- '배포하려면: `@suh-lab server build`',
1419
+ '배포하려면: `/wizard server build`',
1420
1420
  '',
1421
1421
  '---',
1422
1422
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1850,17 +1850,17 @@ jobs:
1850
1850
  '### 📋 명령어',
1851
1851
  '| 명령어 | 설명 |',
1852
1852
  '|--------|------|',
1853
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1854
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1855
- '| `@suh-lab server status` | 현재 상태 확인 |',
1853
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1854
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1855
+ '| `/wizard server status` | 현재 상태 확인 |',
1856
1856
  '',
1857
1857
  '<details>',
1858
1858
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
1859
1859
  '',
1860
1860
  '```',
1861
- `@suh-lab server build ${branchName}`,
1862
- `@suh-lab server destroy ${branchName}`,
1863
- `@suh-lab server status ${branchName}`,
1861
+ `/wizard server build ${branchName}`,
1862
+ `/wizard server destroy ${branchName}`,
1863
+ `/wizard server status ${branchName}`,
1864
1864
  '```',
1865
1865
  '</details>',
1866
1866
  '',
@@ -1921,7 +1921,7 @@ jobs:
1921
1921
  '',
1922
1922
  '### 💡 다음 단계',
1923
1923
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
1924
- `2. 문제를 수정한 후 다시 시도하세요: \`@suh-lab server build ${branchName}\``,
1924
+ `2. 문제를 수정한 후 다시 시도하세요: \`/wizard server build ${branchName}\``,
1925
1925
  '',
1926
1926
  '---',
1927
1927
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2051,7 +2051,7 @@ jobs:
2051
2051
  `| **컨테이너** | \`${containerName}\` |`,
2052
2052
  '| **상태** | 삭제됨 |',
2053
2053
  '',
2054
- `다시 배포하려면: \`@suh-lab server build ${branchName}\``,
2054
+ `다시 배포하려면: \`/wizard server build ${branchName}\``,
2055
2055
  '',
2056
2056
  '---',
2057
2057
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2162,8 +2162,8 @@ jobs:
2162
2162
  '### 📋 명령어',
2163
2163
  '| 명령어 | 설명 |',
2164
2164
  '|--------|------|',
2165
- `| \`@suh-lab server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2166
- `| \`@suh-lab server destroy ${branchName}\` | Preview 환경 삭제 |`,
2165
+ `| \`/wizard server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2166
+ `| \`/wizard server destroy ${branchName}\` | Preview 환경 삭제 |`,
2167
2167
  '',
2168
2168
  '---',
2169
2169
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2178,7 +2178,7 @@ jobs:
2178
2178
  `| **컨테이너** | \`${containerName}\` |`,
2179
2179
  '| **상태** | 🔴 Not Found |',
2180
2180
  '',
2181
- `배포하려면: \`@suh-lab server build ${branchName}\``,
2181
+ `배포하려면: \`/wizard server build ${branchName}\``,
2182
2182
  '',
2183
2183
  '---',
2184
2184
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -19,9 +19,9 @@
19
19
  # ===================================================================
20
20
  #
21
21
  # 🚀 사용법:
22
- # @suh-lab server build - Preview 빌드 및 배포
23
- # @suh-lab server destroy - Preview 환경 삭제
24
- # @suh-lab server status - 현재 상태 확인
22
+ # /wizard server build - Preview 빌드 및 배포
23
+ # /wizard server destroy - Preview 환경 삭제
24
+ # /wizard server status - 현재 상태 확인
25
25
  #
26
26
  # 📊 리소스 네이밍:
27
27
  # - 컨테이너: {PROJECT_NAME}-pr-{번호}
@@ -64,7 +64,7 @@ env:
64
64
 
65
65
  # Issue Helper 댓글 마커 (프로젝트별 수정 필요)
66
66
  # Issue 댓글에서 브랜치명을 추출할 때 사용
67
- ISSUE_HELPER_MARKER: 'Guide by SUH-LAB'
67
+ ISSUE_HELPER_MARKER: '<!-- project-auto-wizard issue helper -->'
68
68
 
69
69
  # Health Check 설정 (프로젝트별 수정 필요)
70
70
  # - HEALTH_CHECK_PATH: HTTP Health Check 경로 (빈값이면 HTTP 체크 건너뜀)
@@ -114,7 +114,7 @@ jobs:
114
114
  is_custom_branch: ${{ steps.parse.outputs.is_custom_branch }}
115
115
  steps:
116
116
  - name: 댓글에 👀 리액션 추가
117
- if: contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server')
117
+ if: contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server')
118
118
  uses: actions/github-script@v9
119
119
  with:
120
120
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -142,8 +142,8 @@ jobs:
142
142
  fi
143
143
 
144
144
  # 명령어 파싱 (브랜치 파라미터 지원)
145
- # 형식: @suh-lab server <command> [브랜치명]
146
- if [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
145
+ # 형식: /wizard server <command> [브랜치명]
146
+ if [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
147
147
  echo "command=build" >> $GITHUB_OUTPUT
148
148
  echo "is_valid=true" >> $GITHUB_OUTPUT
149
149
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -154,7 +154,7 @@ jobs:
154
154
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
155
155
  echo "✅ 명령어 감지: build"
156
156
  fi
157
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
157
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
158
158
  echo "command=destroy" >> $GITHUB_OUTPUT
159
159
  echo "is_valid=true" >> $GITHUB_OUTPUT
160
160
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -165,7 +165,7 @@ jobs:
165
165
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
166
166
  echo "✅ 명령어 감지: destroy"
167
167
  fi
168
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
168
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
169
169
  echo "command=status" >> $GITHUB_OUTPUT
170
170
  echo "is_valid=true" >> $GITHUB_OUTPUT
171
171
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -178,7 +178,7 @@ jobs:
178
178
  fi
179
179
  else
180
180
  echo "is_valid=false" >> $GITHUB_OUTPUT
181
- echo "ℹ️ @suh-lab server 명령어가 아님"
181
+ echo "ℹ️ /wizard server 명령어가 아님"
182
182
  fi
183
183
 
184
184
  # -----------------------------------------------------------------
@@ -518,17 +518,17 @@ jobs:
518
518
  '### 📋 명령어',
519
519
  '| 명령어 | 설명 |',
520
520
  '|--------|------|',
521
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
522
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
523
- '| `@suh-lab server status` | 현재 상태 확인 |',
521
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
522
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
523
+ '| `/wizard server status` | 현재 상태 확인 |',
524
524
  '',
525
525
  '<details>',
526
526
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
527
527
  '',
528
528
  '```',
529
- `@suh-lab server build ${branchName}`,
530
- `@suh-lab server destroy ${branchName}`,
531
- `@suh-lab server status ${branchName}`,
529
+ `/wizard server build ${branchName}`,
530
+ `/wizard server destroy ${branchName}`,
531
+ `/wizard server status ${branchName}`,
532
532
  '```',
533
533
  '</details>',
534
534
  '',
@@ -593,7 +593,7 @@ jobs:
593
593
  '',
594
594
  '### 💡 다음 단계',
595
595
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
596
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
596
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
597
597
  '',
598
598
  '---',
599
599
  '*🤖 이 댓글은 PR Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1114,17 +1114,17 @@ jobs:
1114
1114
  '### 📋 명령어',
1115
1115
  '| 명령어 | 설명 |',
1116
1116
  '|--------|------|',
1117
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1118
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1119
- '| `@suh-lab server status` | 현재 상태 확인 |',
1117
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1118
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1119
+ '| `/wizard server status` | 현재 상태 확인 |',
1120
1120
  '',
1121
1121
  '<details>',
1122
1122
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
1123
1123
  '',
1124
1124
  '```',
1125
- `@suh-lab server build ${branchName}`,
1126
- `@suh-lab server destroy ${branchName}`,
1127
- `@suh-lab server status ${branchName}`,
1125
+ `/wizard server build ${branchName}`,
1126
+ `/wizard server destroy ${branchName}`,
1127
+ `/wizard server status ${branchName}`,
1128
1128
  '```',
1129
1129
  '</details>',
1130
1130
  '',
@@ -1187,7 +1187,7 @@ jobs:
1187
1187
  '',
1188
1188
  '### 💡 다음 단계',
1189
1189
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
1190
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
1190
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
1191
1191
  '',
1192
1192
  '---',
1193
1193
  '*🤖 이 댓글은 Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1218,7 +1218,7 @@ jobs:
1218
1218
  if: |
1219
1219
  (github.event_name == 'pull_request' && github.event.action == 'closed') ||
1220
1220
  (github.event_name == 'issues' && github.event.action == 'closed') ||
1221
- (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server destroy'))
1221
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server destroy'))
1222
1222
  runs-on: ubuntu-latest
1223
1223
  steps:
1224
1224
  - name: PR/Issue 번호 가져오기
@@ -1301,7 +1301,7 @@ jobs:
1301
1301
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1302
1302
  '| **상태** | 삭제됨 |',
1303
1303
  '',
1304
- '다시 배포하려면: `@suh-lab server build`',
1304
+ '다시 배포하려면: `/wizard server build`',
1305
1305
  '',
1306
1306
  '---',
1307
1307
  '*🤖 이 댓글은 PR/Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1400,8 +1400,8 @@ jobs:
1400
1400
  '### 📋 명령어',
1401
1401
  '| 명령어 | 설명 |',
1402
1402
  '|--------|------|',
1403
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1404
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1403
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1404
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1405
1405
  '',
1406
1406
  '---',
1407
1407
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1415,7 +1415,7 @@ jobs:
1415
1415
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1416
1416
  '| **상태** | 🔴 Not Found |',
1417
1417
  '',
1418
- '배포하려면: `@suh-lab server build`',
1418
+ '배포하려면: `/wizard server build`',
1419
1419
  '',
1420
1420
  '---',
1421
1421
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1849,17 +1849,17 @@ jobs:
1849
1849
  '### 📋 명령어',
1850
1850
  '| 명령어 | 설명 |',
1851
1851
  '|--------|------|',
1852
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1853
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1854
- '| `@suh-lab server status` | 현재 상태 확인 |',
1852
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1853
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1854
+ '| `/wizard server status` | 현재 상태 확인 |',
1855
1855
  '',
1856
1856
  '<details>',
1857
1857
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
1858
1858
  '',
1859
1859
  '```',
1860
- `@suh-lab server build ${branchName}`,
1861
- `@suh-lab server destroy ${branchName}`,
1862
- `@suh-lab server status ${branchName}`,
1860
+ `/wizard server build ${branchName}`,
1861
+ `/wizard server destroy ${branchName}`,
1862
+ `/wizard server status ${branchName}`,
1863
1863
  '```',
1864
1864
  '</details>',
1865
1865
  '',
@@ -1920,7 +1920,7 @@ jobs:
1920
1920
  '',
1921
1921
  '### 💡 다음 단계',
1922
1922
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
1923
- `2. 문제를 수정한 후 다시 시도하세요: \`@suh-lab server build ${branchName}\``,
1923
+ `2. 문제를 수정한 후 다시 시도하세요: \`/wizard server build ${branchName}\``,
1924
1924
  '',
1925
1925
  '---',
1926
1926
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2050,7 +2050,7 @@ jobs:
2050
2050
  `| **컨테이너** | \`${containerName}\` |`,
2051
2051
  '| **상태** | 삭제됨 |',
2052
2052
  '',
2053
- `다시 배포하려면: \`@suh-lab server build ${branchName}\``,
2053
+ `다시 배포하려면: \`/wizard server build ${branchName}\``,
2054
2054
  '',
2055
2055
  '---',
2056
2056
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2161,8 +2161,8 @@ jobs:
2161
2161
  '### 📋 명령어',
2162
2162
  '| 명령어 | 설명 |',
2163
2163
  '|--------|------|',
2164
- `| \`@suh-lab server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2165
- `| \`@suh-lab server destroy ${branchName}\` | Preview 환경 삭제 |`,
2164
+ `| \`/wizard server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2165
+ `| \`/wizard server destroy ${branchName}\` | Preview 환경 삭제 |`,
2166
2166
  '',
2167
2167
  '---',
2168
2168
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2177,7 +2177,7 @@ jobs:
2177
2177
  `| **컨테이너** | \`${containerName}\` |`,
2178
2178
  '| **상태** | 🔴 Not Found |',
2179
2179
  '',
2180
- `배포하려면: \`@suh-lab server build ${branchName}\``,
2180
+ `배포하려면: \`/wizard server build ${branchName}\``,
2181
2181
  '',
2182
2182
  '---',
2183
2183
  '*🤖 이 댓글은 Custom Branch Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -15,9 +15,9 @@
15
15
  # ===================================================================
16
16
  #
17
17
  # 🚀 사용법:
18
- # @suh-lab server build - PR/Issue 빌드 및 배포
19
- # @suh-lab server destroy - Preview 환경 삭제
20
- # @suh-lab server status - 현재 상태 확인
18
+ # /wizard server build - PR/Issue 빌드 및 배포
19
+ # /wizard server destroy - Preview 환경 삭제
20
+ # /wizard server status - 현재 상태 확인
21
21
  #
22
22
  # 📊 리소스 네이밍 규칙:
23
23
  # - 컨테이너: {PROJECT_NAME}-pr-{PR번호}
@@ -65,7 +65,7 @@ env:
65
65
 
66
66
  # Issue Helper 댓글 마커 (프로젝트별 수정 필요)
67
67
  # Issue 댓글에서 브랜치명을 추출할 때 사용
68
- ISSUE_HELPER_MARKER: 'Guide by SUH-LAB'
68
+ ISSUE_HELPER_MARKER: '<!-- project-auto-wizard issue helper -->'
69
69
 
70
70
  # Health Check 설정 (프로젝트별 수정 필요)
71
71
  # - HEALTH_CHECK_PATH: HTTP Health Check 경로 (빈값이면 HTTP 체크 건너뜀)
@@ -115,7 +115,7 @@ jobs:
115
115
  is_custom_branch: ${{ steps.parse.outputs.is_custom_branch }}
116
116
  steps:
117
117
  - name: 댓글에 👀 리액션 추가
118
- if: contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server')
118
+ if: contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server')
119
119
  uses: actions/github-script@v9
120
120
  with:
121
121
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -143,8 +143,8 @@ jobs:
143
143
  fi
144
144
 
145
145
  # 명령어 파싱 (브랜치 파라미터 지원)
146
- # 형식: @suh-lab server <command> [브랜치명]
147
- if [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
146
+ # 형식: /wizard server <command> [브랜치명]
147
+ if [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
148
148
  echo "command=build" >> $GITHUB_OUTPUT
149
149
  echo "is_valid=true" >> $GITHUB_OUTPUT
150
150
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -155,7 +155,7 @@ jobs:
155
155
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
156
156
  echo "✅ 명령어 감지: build"
157
157
  fi
158
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
158
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+destroy([[:space:]]+([^[:space:]]+))? ]]; then
159
159
  echo "command=destroy" >> $GITHUB_OUTPUT
160
160
  echo "is_valid=true" >> $GITHUB_OUTPUT
161
161
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -166,7 +166,7 @@ jobs:
166
166
  echo "is_custom_branch=false" >> $GITHUB_OUTPUT
167
167
  echo "✅ 명령어 감지: destroy"
168
168
  fi
169
- elif [[ "$COMMENT" =~ @suh-lab[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
169
+ elif [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+status([[:space:]]+([^[:space:]]+))? ]]; then
170
170
  echo "command=status" >> $GITHUB_OUTPUT
171
171
  echo "is_valid=true" >> $GITHUB_OUTPUT
172
172
  if [[ -n "${BASH_REMATCH[2]}" ]]; then
@@ -179,7 +179,7 @@ jobs:
179
179
  fi
180
180
  else
181
181
  echo "is_valid=false" >> $GITHUB_OUTPUT
182
- echo "ℹ️ @suh-lab server 명령어가 아님"
182
+ echo "ℹ️ /wizard server 명령어가 아님"
183
183
  fi
184
184
 
185
185
  # -----------------------------------------------------------------
@@ -292,13 +292,13 @@ jobs:
292
292
  # env:
293
293
  # VERTEX_SA_KEY: ${{ secrets.VERTEX_SA_KEY }}
294
294
  # run: |
295
- # echo "$VERTEX_SA_KEY" | sed 's/\\n/\n/g' > ./Suh-Web/src/main/resources/vertex-ai-key.json
295
+ # echo "$VERTEX_SA_KEY" | sed 's/\\n/\n/g' > ./<모듈명>/src/main/resources/vertex-ai-key.json
296
296
 
297
297
  # - name: "[선택] Firebase Admin SDK 생성"
298
298
  # env:
299
299
  # FIREBASE_KEY_JSON: ${{ secrets.FIREBASE_KEY_JSON }}
300
300
  # run: |
301
- # echo "$FIREBASE_KEY_JSON" | sed 's/\\n/\n/g' > ./Suh-Web/src/main/resources/firebase-admin-sdk.json
301
+ # echo "$FIREBASE_KEY_JSON" | sed 's/\\n/\n/g' > ./<모듈명>/src/main/resources/firebase-admin-sdk.json
302
302
 
303
303
  # =================================================================
304
304
  # ⚠️ [영역 2 끝] 프로젝트별 Secret 파일 생성 끝
@@ -606,17 +606,17 @@ jobs:
606
606
  '### 📋 명령어',
607
607
  '| 명령어 | 설명 |',
608
608
  '|--------|------|',
609
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
610
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
611
- '| `@suh-lab server status` | 현재 상태 확인 |',
609
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
610
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
611
+ '| `/wizard server status` | 현재 상태 확인 |',
612
612
  '',
613
613
  '<details>',
614
614
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
615
615
  '',
616
616
  '```',
617
- `@suh-lab server build ${branchName}`,
618
- `@suh-lab server destroy ${branchName}`,
619
- `@suh-lab server status ${branchName}`,
617
+ `/wizard server build ${branchName}`,
618
+ `/wizard server destroy ${branchName}`,
619
+ `/wizard server status ${branchName}`,
620
620
  '```',
621
621
  '</details>',
622
622
  '',
@@ -693,7 +693,7 @@ jobs:
693
693
  '',
694
694
  '### 💡 다음 단계',
695
695
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
696
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
696
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
697
697
  '',
698
698
  '---',
699
699
  '*🤖 이 댓글은 PR Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1278,17 +1278,17 @@ jobs:
1278
1278
  '### 📋 명령어',
1279
1279
  '| 명령어 | 설명 |',
1280
1280
  '|--------|------|',
1281
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1282
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1283
- '| `@suh-lab server status` | 현재 상태 확인 |',
1281
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1282
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1283
+ '| `/wizard server status` | 현재 상태 확인 |',
1284
1284
  '',
1285
1285
  '<details>',
1286
1286
  '<summary>🔧 고급 명령어 (다른 Issue/PR에서 제어)</summary>',
1287
1287
  '',
1288
1288
  '```',
1289
- `@suh-lab server build ${branchName}`,
1290
- `@suh-lab server destroy ${branchName}`,
1291
- `@suh-lab server status ${branchName}`,
1289
+ `/wizard server build ${branchName}`,
1290
+ `/wizard server destroy ${branchName}`,
1291
+ `/wizard server status ${branchName}`,
1292
1292
  '```',
1293
1293
  '</details>',
1294
1294
  '',
@@ -1362,7 +1362,7 @@ jobs:
1362
1362
  '',
1363
1363
  '### 💡 다음 단계',
1364
1364
  '1. 위 링크에서 빌드/배포 로그를 확인하세요',
1365
- '2. 문제를 수정한 후 다시 시도하세요: `@suh-lab server build`',
1365
+ '2. 문제를 수정한 후 다시 시도하세요: `/wizard server build`',
1366
1366
  '',
1367
1367
  '---',
1368
1368
  '*🤖 이 댓글은 Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1393,7 +1393,7 @@ jobs:
1393
1393
  if: |
1394
1394
  (github.event_name == 'pull_request' && github.event.action == 'closed') ||
1395
1395
  (github.event_name == 'issues' && github.event.action == 'closed') ||
1396
- (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@suh-lab') && contains(github.event.comment.body, 'server destroy'))
1396
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '/wizard') && contains(github.event.comment.body, 'server destroy'))
1397
1397
  runs-on: ubuntu-latest
1398
1398
  steps:
1399
1399
  - name: PR/Issue 번호 가져오기
@@ -1474,7 +1474,7 @@ jobs:
1474
1474
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1475
1475
  '| **상태** | 삭제됨 |',
1476
1476
  '',
1477
- '다시 배포하려면: `@suh-lab server build`',
1477
+ '다시 배포하려면: `/wizard server build`',
1478
1478
  '',
1479
1479
  '---',
1480
1480
  '*🤖 이 댓글은 PR/Issue Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -1573,8 +1573,8 @@ jobs:
1573
1573
  '### 📋 명령어',
1574
1574
  '| 명령어 | 설명 |',
1575
1575
  '|--------|------|',
1576
- '| `@suh-lab server build` | 최신 커밋으로 재배포 |',
1577
- '| `@suh-lab server destroy` | Preview 환경 삭제 |',
1576
+ '| `/wizard server build` | 최신 커밋으로 재배포 |',
1577
+ '| `/wizard server destroy` | Preview 환경 삭제 |',
1578
1578
  '',
1579
1579
  '---',
1580
1580
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1588,7 +1588,7 @@ jobs:
1588
1588
  `| **컨테이너** | \`${projectName}-pr-${number}\` |`,
1589
1589
  '| **상태** | 🔴 Not Found |',
1590
1590
  '',
1591
- '배포하려면: `@suh-lab server build`',
1591
+ '배포하려면: `/wizard server build`',
1592
1592
  '',
1593
1593
  '---',
1594
1594
  `*🤖 이 댓글은 ${contextType} Preview 시스템에 의해 자동 생성되었습니다.*`
@@ -1605,7 +1605,7 @@ jobs:
1605
1605
  # ============================================================
1606
1606
  # Custom Branch Preview Jobs
1607
1607
  # 특정 브랜치를 지정하여 빌드/삭제/상태 확인하는 기능
1608
- # 명령어: @suh-lab server build <브랜치명>
1608
+ # 명령어: /wizard server build <브랜치명>
1609
1609
  # ============================================================
1610
1610
 
1611
1611
  build-preview-custom-branch:
@@ -1984,9 +1984,9 @@ jobs:
1984
1984
  '### 📋 명령어',
1985
1985
  '| 명령어 | 설명 |',
1986
1986
  '|--------|------|',
1987
- `| \`@suh-lab server build ${branchName}\` | 최신 커밋으로 재배포 |`,
1988
- `| \`@suh-lab server destroy ${branchName}\` | Preview 환경 삭제 |`,
1989
- `| \`@suh-lab server status ${branchName}\` | 현재 상태 확인 |`,
1987
+ `| \`/wizard server build ${branchName}\` | 최신 커밋으로 재배포 |`,
1988
+ `| \`/wizard server destroy ${branchName}\` | Preview 환경 삭제 |`,
1989
+ `| \`/wizard server status ${branchName}\` | 현재 상태 확인 |`,
1990
1990
  '',
1991
1991
  '---',
1992
1992
  '*🤖 이 댓글은 Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2154,7 +2154,7 @@ jobs:
2154
2154
  `| **브랜치** | \`${branchName}\` |`,
2155
2155
  `| **컨테이너** | \`${containerName}\` |`,
2156
2156
  '',
2157
- `다시 배포하려면: \`@suh-lab server build ${branchName}\``,
2157
+ `다시 배포하려면: \`/wizard server build ${branchName}\``,
2158
2158
  '',
2159
2159
  '---',
2160
2160
  '*🤖 이 댓글은 Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2247,8 +2247,8 @@ jobs:
2247
2247
  '### 📋 명령어',
2248
2248
  '| 명령어 | 설명 |',
2249
2249
  '|--------|------|',
2250
- `| \`@suh-lab server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2251
- `| \`@suh-lab server destroy ${branchName}\` | Preview 환경 삭제 |`,
2250
+ `| \`/wizard server build ${branchName}\` | 최신 커밋으로 재배포 |`,
2251
+ `| \`/wizard server destroy ${branchName}\` | Preview 환경 삭제 |`,
2252
2252
  '',
2253
2253
  '---',
2254
2254
  '*🤖 이 댓글은 Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -2263,7 +2263,7 @@ jobs:
2263
2263
  `| **컨테이너** | \`${containerName}\` |`,
2264
2264
  '| **상태** | 🔴 Not Found |',
2265
2265
  '',
2266
- `배포하려면: \`@suh-lab server build ${branchName}\``,
2266
+ `배포하려면: \`/wizard server build ${branchName}\``,
2267
2267
  '',
2268
2268
  '---',
2269
2269
  '*🤖 이 댓글은 Preview 시스템에 의해 자동 생성되었습니다.*'
@@ -6,8 +6,8 @@ import { join } from "node:path";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
 
8
8
  // 치환 대상이 아닌 토큰 — 워크플로우 스크립트 안의 heredoc 구분자다. 값이 아니라 문법이므로
9
- // 미치환 검사에서 제외한다. (예: cat <<'__SUH_FILE_CONTENT_EOF__')
10
- const SENTINEL_RE = /^__SUH_[A-Z0-9_]*__$/;
9
+ // 미치환 검사에서 제외한다. (예: cat <<'__WIZARD_FILE_CONTENT_EOF__')
10
+ const SENTINEL_RE = /^__WIZARD_[A-Z0-9_]*__$/;
11
11
  const PLACEHOLDER_RE = /__[A-Z][A-Z0-9_]*__/g;
12
12
 
13
13
  // 주석으로 죽어 있는 줄 — 실행되지 않으므로 검사 대상이 아니다.