projectops 4.2.20 → 4.2.21
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/README.md +1 -1
- package/package.json +1 -1
- package/src/core/copy/util.js +2 -0
- package/src/core/migrations/index.js +1 -0
- package/src/core/migrations/registry.js +43 -1
- package/src/ui/summary.js +3 -2
package/README.md
CHANGED
package/package.json
CHANGED
package/src/core/copy/util.js
CHANGED
|
@@ -5,6 +5,8 @@ import { readdirSync } from "node:fs";
|
|
|
5
5
|
import { exists, copyDirSync } from "../fsutil.js";
|
|
6
6
|
|
|
7
7
|
// 반환: {copied:bool, moduleCount:number}. force가 아니면(비TTY) 스킵.
|
|
8
|
+
// ⚠️ overlay 복사다 — 템플릿에서 삭제/리네임된 구 파일은 여기서 지우지 않는다.
|
|
9
|
+
// 구 util 파일 정리는 migrations registry(util-file 카테고리)가 담당한다 (#500).
|
|
8
10
|
export function copyUtilModules(tempDir, type, { force = false } = {}, targetRoot = ".") {
|
|
9
11
|
const src = join(tempDir, ".github", "util", type);
|
|
10
12
|
if (!exists(src)) return { copied: false, moduleCount: 0 };
|
|
@@ -10,6 +10,7 @@ const RULES = {
|
|
|
10
10
|
workflow: workflowRule,
|
|
11
11
|
"root-file": rootFileRule,
|
|
12
12
|
"legacy-dir": legacyDirRule,
|
|
13
|
+
"util-file": rootFileRule, // #500 — util 모듈 내 폐기 파일: 정확 경로 삭제 (root-file rule 재사용)
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
// 대상 레포에서 레거시 잔재 감지. 반환: { safe: [entry], confirm: [entry], ask: [entry] }
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
//
|
|
6
6
|
// 항목 스키마:
|
|
7
7
|
// id - 고유 식별자 (kebab-case)
|
|
8
|
-
// category - "workflow" | "root-file" | "legacy-dir" (rules/ 폴더의 구현이 detect/apply 담당)
|
|
8
|
+
// category - "workflow" | "root-file" | "legacy-dir" | "util-file" (rules/ 폴더의 구현이 detect/apply 담당)
|
|
9
|
+
// util-file: .github/util/ 모듈 안의 폐기 파일 — root-file rule 재사용(정확 경로 삭제).
|
|
10
|
+
// util 복사(copy/util.js)는 overlay라 구 파일을 지우지 않는다 — 정리는 여기가 유일 경로.
|
|
9
11
|
// tier - "safe" : 신형이 같은 기능을 대체(순수 리네임). 공존 시 이중 트리거 실해
|
|
10
12
|
// → 확인 1회 후 자동 무해화(.bak) / 삭제
|
|
11
13
|
// "confirm" : 배포 파이프라인일 수 있음(그 레포의 유일한 현역 배포 가능성)
|
|
@@ -161,4 +163,44 @@ export const MIGRATIONS = [
|
|
|
161
163
|
{ id: "dir-docs-suh-template", category: "legacy-dir", tier: "ask",
|
|
162
164
|
file: "docs/suh-template", replacedBy: "docs/projectops",
|
|
163
165
|
since: "4.2.9", reason: "리브랜딩 — 스킬 산출물(이슈·보고서) 폴더 구명칭. 신 스킬은 docs/projectops/에 저장" },
|
|
166
|
+
|
|
167
|
+
// ── util-file / safe — Flutter 마법사 스크립트 Python 단일화 (#500) ──────────
|
|
168
|
+
// 로컬 실행 도구라 CI 중복 실행 위험은 없지만, 신형 py와 공존 시 사용자가 구 스크립트를
|
|
169
|
+
// 실행해 갈라진 동작을 볼 수 있다. 마법사 폴더에 사용자 상태가 없어 삭제가 기대 동작.
|
|
170
|
+
{ id: "util-playstore-setup-sh", category: "util-file", tier: "safe",
|
|
171
|
+
file: ".github/util/flutter/playstore-wizard/playstore-wizard-setup.sh", replacedBy: "playstore-wizard.py",
|
|
172
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — setup 서브커맨드로 대체" },
|
|
173
|
+
{ id: "util-playstore-setup-ps1", category: "util-file", tier: "safe",
|
|
174
|
+
file: ".github/util/flutter/playstore-wizard/playstore-wizard-setup.ps1", replacedBy: "playstore-wizard.py",
|
|
175
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — setup 서브커맨드로 대체" },
|
|
176
|
+
{ id: "util-playstore-apply-sh", category: "util-file", tier: "safe",
|
|
177
|
+
file: ".github/util/flutter/playstore-wizard/playstore-wizard-apply.sh", replacedBy: "playstore-wizard.py",
|
|
178
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — apply 서브커맨드로 대체" },
|
|
179
|
+
{ id: "util-playstore-apply-ps1", category: "util-file", tier: "safe",
|
|
180
|
+
file: ".github/util/flutter/playstore-wizard/playstore-wizard-apply.ps1", replacedBy: "playstore-wizard.py",
|
|
181
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — apply 서브커맨드로 대체" },
|
|
182
|
+
{ id: "util-playstore-detect-sh", category: "util-file", tier: "safe",
|
|
183
|
+
file: ".github/util/flutter/playstore-wizard/detect-application-id.sh", replacedBy: "playstore-wizard.py",
|
|
184
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — detect-app-id 서브커맨드로 대체" },
|
|
185
|
+
{ id: "util-playstore-detect-ps1", category: "util-file", tier: "safe",
|
|
186
|
+
file: ".github/util/flutter/playstore-wizard/detect-application-id.ps1", replacedBy: "playstore-wizard.py",
|
|
187
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — detect-app-id 서브커맨드로 대체" },
|
|
188
|
+
{ id: "util-playstore-patch-py", category: "util-file", tier: "safe",
|
|
189
|
+
file: ".github/util/flutter/playstore-wizard/patch-build-gradle.py", replacedBy: "playstore-wizard.py",
|
|
190
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — 내부 함수로 흡수" },
|
|
191
|
+
{ id: "util-firebase-setup-sh", category: "util-file", tier: "safe",
|
|
192
|
+
file: ".github/util/flutter/firebase-wizard/firebase-wizard-setup.sh", replacedBy: "firebase-wizard.py",
|
|
193
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — setup 서브커맨드로 대체" },
|
|
194
|
+
{ id: "util-firebase-setup-ps1", category: "util-file", tier: "safe",
|
|
195
|
+
file: ".github/util/flutter/firebase-wizard/firebase-wizard-setup.ps1", replacedBy: "firebase-wizard.py",
|
|
196
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — setup 서브커맨드로 대체" },
|
|
197
|
+
{ id: "util-firebase-test-sh", category: "util-file", tier: "safe",
|
|
198
|
+
file: ".github/util/flutter/firebase-wizard/test/setup-script-test.sh", replacedBy: "test/setup-script-test.py",
|
|
199
|
+
since: "4.3.0", reason: "마법사 테스트 Python 단일화" },
|
|
200
|
+
{ id: "util-firebase-test-ps1", category: "util-file", tier: "safe",
|
|
201
|
+
file: ".github/util/flutter/firebase-wizard/test/setup-script-test.ps1", replacedBy: "test/setup-script-test.py",
|
|
202
|
+
since: "4.3.0", reason: "마법사 테스트 Python 단일화" },
|
|
203
|
+
{ id: "util-testflight-setup-sh", category: "util-file", tier: "safe",
|
|
204
|
+
file: ".github/util/flutter/testflight-wizard/testflight-wizard-setup.sh", replacedBy: "testflight-wizard.py",
|
|
205
|
+
since: "4.3.0", reason: "마법사 스크립트 Python 단일화 — setup 서브커맨드로 대체" },
|
|
164
206
|
];
|
package/src/ui/summary.js
CHANGED
|
@@ -120,8 +120,9 @@ export function printSummary(ctx, targetRoot = ".") {
|
|
|
120
120
|
}
|
|
121
121
|
if (types.includes("flutter") && utilModulesCopied > 0) {
|
|
122
122
|
err(" 💡 Flutter 배포 마법사 사용법:");
|
|
123
|
-
err(" • iOS TestFlight: .github/util/flutter/
|
|
124
|
-
err(" • Android Play Store: .github/util/flutter/
|
|
123
|
+
err(" • iOS TestFlight: .github/util/flutter/testflight-wizard/testflight-wizard.html");
|
|
124
|
+
err(" • Android Play Store: .github/util/flutter/playstore-wizard/playstore-wizard.html");
|
|
125
|
+
err(" • Firebase App Distribution: .github/util/flutter/firebase-wizard/firebase-wizard.html");
|
|
125
126
|
err(" • 브라우저에서 열어 필요한 정보 입력 후 파일 생성");
|
|
126
127
|
err("");
|
|
127
128
|
}
|