projectops 4.0.4 → 4.1.1
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 +2 -3
- package/package.json +1 -1
- package/src/cli/help.js +2 -1
- package/src/context.js +2 -1
- package/src/core/detect.js +2 -2
- package/src/core/paths-resolve.js +2 -2
- package/src/core/version-yml.js +5 -6
- package/src/ui/prompts.js +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
> 이슈 등록부터 커밋, 보고서, 배포까지. 개발자는 코드만 작성하세요.
|
|
8
8
|
|
|
9
9
|
<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
|
|
10
|
-
## 최신 버전 : v4.0.
|
|
10
|
+
## 최신 버전 : v4.0.4 (2026-07-08)
|
|
11
11
|
|
|
12
12
|
[전체 버전 기록 보기](CHANGELOG.md)
|
|
13
13
|
|
|
@@ -218,8 +218,7 @@ bash <(curl -fsSL "https://raw.githubusercontent.com/Cassiiopeia/projectops/main
|
|
|
218
218
|
|------|----------|-------|
|
|
219
219
|
| `spring` | build.gradle | SSH+Docker 배포, Nexus |
|
|
220
220
|
| `flutter` | pubspec.yaml | TestFlight, Play Store |
|
|
221
|
-
| `react` | package.json | Docker |
|
|
222
|
-
| `next` | package.json | Docker |
|
|
221
|
+
| `react` (Next.js 포함) | package.json | Docker |
|
|
223
222
|
| `node` | package.json | Docker |
|
|
224
223
|
| `python` | pyproject.toml | SSH+Docker 배포 |
|
|
225
224
|
| `react-native` | Info.plist + build.gradle | — |
|
package/package.json
CHANGED
package/src/cli/help.js
CHANGED
|
@@ -8,8 +8,9 @@ export const HELP_TEXT = `projectops — GitHub 프로젝트 자동화 템플릿
|
|
|
8
8
|
-m, --mode MODE 통합 모드 (full | version | workflows | issues | skills)
|
|
9
9
|
기본: interactive (대화형)
|
|
10
10
|
-t, --type CSV 프로젝트 타입 csv (예: spring,react,python)
|
|
11
|
-
지원: spring flutter
|
|
11
|
+
지원: spring flutter react react-native
|
|
12
12
|
react-native-expo node python basic
|
|
13
|
+
(next는 react로 흡수됨 — Next.js 프로젝트는 react 사용)
|
|
13
14
|
--project-version V 통합 대상의 초기 버전 (예: 1.0.0). 미지정 시 자동 감지
|
|
14
15
|
--paths "t=p,..." 타입별 프로젝트 경로 (모노레포). 예: flutter=app,react=client
|
|
15
16
|
--nexus / --no-nexus Nexus 라이브러리 publish 워크플로우 포함/제외
|
package/src/context.js
CHANGED
package/src/core/detect.js
CHANGED
|
@@ -6,8 +6,8 @@ export function classifyPackageText(raw) {
|
|
|
6
6
|
if (s.includes("@react-native") || s.includes("react-native")) {
|
|
7
7
|
return s.includes("expo") ? "react-native-expo" : "react-native";
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
if (s.includes('"react"')) return "react";
|
|
9
|
+
// next 타입은 v4.1.0에서 react로 흡수 — "next" 의존성이 있어도 react로 판정
|
|
10
|
+
if (s.includes('"react"') || s.includes('"next"')) return "react";
|
|
11
11
|
return "node";
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -18,7 +18,7 @@ const isCancel = (v) => typeof v === "symbol";
|
|
|
18
18
|
// 타입의 대표 마커 파일명 (.sh marker_for_type L1220~1229 등가).
|
|
19
19
|
// detect.js는 미지 타입에 package.json을 기본 반환하지만 .sh는 빈 문자열 — 등가를 위해 래핑.
|
|
20
20
|
const KNOWN_MARKER_TYPES = new Set([
|
|
21
|
-
"flutter", "react", "
|
|
21
|
+
"flutter", "react", "node", "react-native", "react-native-expo", "python", "spring",
|
|
22
22
|
]);
|
|
23
23
|
export function markerForType(type) {
|
|
24
24
|
return KNOWN_MARKER_TYPES.has(type) ? baseMarkerForType(type) : "";
|
|
@@ -78,7 +78,7 @@ export function findTypePathCandidates(root, type) {
|
|
|
78
78
|
|
|
79
79
|
const namesByType = {
|
|
80
80
|
flutter: ["pubspec.yaml"],
|
|
81
|
-
react: ["package.json"],
|
|
81
|
+
react: ["package.json"], node: ["package.json"],
|
|
82
82
|
"react-native": ["package.json"],
|
|
83
83
|
"react-native-expo": ["app.json"],
|
|
84
84
|
python: ["pyproject.toml", "setup.py", "requirements.txt"],
|
package/src/core/version-yml.js
CHANGED
|
@@ -12,7 +12,7 @@ const HEADER = `# ==============================================================
|
|
|
12
12
|
# 사용법:
|
|
13
13
|
# 1. version: "1.0.0" - 사용자에게 표시되는 버전
|
|
14
14
|
# 2. version_code: 1 - Play Store/App Store 빌드 번호 (1부터 자동 증가)
|
|
15
|
-
# 3.
|
|
15
|
+
# 3. project_types: 프로젝트 타입 배열 — 첫 항목이 primary
|
|
16
16
|
# 4. project_paths: 타입별 프로젝트 폴더 (레포 루트 기준 상대경로, 모노레포용)
|
|
17
17
|
#
|
|
18
18
|
# 자동 버전 업데이트:
|
|
@@ -35,7 +35,7 @@ const HEADER = `# ==============================================================
|
|
|
35
35
|
# - .github/workflows/PROJECT-AUTO-CHANGELOG-CONTROL.yaml
|
|
36
36
|
#
|
|
37
37
|
# 주의사항:
|
|
38
|
-
# -
|
|
38
|
+
# - project_types는 최초 설정 후 변경하지 마세요
|
|
39
39
|
# - 버전은 항상 높은 버전으로 자동 동기화됩니다
|
|
40
40
|
# ===================================================================
|
|
41
41
|
`;
|
|
@@ -125,20 +125,19 @@ export function parseExisting(content) {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
// version.yml 전체 생성 (.sh create_version_yml + save_template_options 신규 케이스 등가).
|
|
128
|
-
// opts: { version, types:[],
|
|
128
|
+
// opts: { version, types:[], paths:Map, pathMarkers?:Map, branch, versionCode, now, today, templateOptions? }
|
|
129
|
+
// primary 타입은 별도 키 없이 project_types[0]이다 (v4.1.0 SSOT — 단수 project_type 키 제거).
|
|
129
130
|
// now = "YYYY-MM-DD HH:MM:SS" (UTC) — 결정성 위해 주입
|
|
130
131
|
// today = "YYYY-MM-DD" (UTC)
|
|
131
132
|
// pathMarkers = Map<type, markerFilename> (project_paths 주석용)
|
|
132
133
|
// templateOptions = { templateVersion, includeNexus, includeSecretBackup, optionsDate } (template 블록)
|
|
133
|
-
export function buildVersionYml({ version, types = [],
|
|
134
|
+
export function buildVersionYml({ version, types = [], paths = new Map(), pathMarkers = new Map(), branch = "main", versionCode = 1, now, today, templateOptions = null, deployValues = new Map() }) {
|
|
134
135
|
const typesJson = types.length ? `[${types.map((t) => `"${t}"`).join(",")}]` : `["basic"]`;
|
|
135
|
-
const primary = primaryType || types[0] || "basic";
|
|
136
136
|
|
|
137
137
|
let out = HEADER + "\n";
|
|
138
138
|
out += `version: "${version}"\n`;
|
|
139
139
|
out += `version_code: ${versionCode} # app build number\n`;
|
|
140
140
|
out += `project_types: ${typesJson} # 멀티타입 배열 — 첫 항목이 primary, 직접 편집 가능\n`;
|
|
141
|
-
out += `project_type: "${primary}" # project_types[0] 자동 미러 — 직접 수정 금지 (spring, flutter, next, react, react-native, react-native-expo, node, python, basic)\n`;
|
|
142
141
|
|
|
143
142
|
// project_paths 블록. pathMarkers: Map<type, markerFilename> (있으면 " type: "path" # path/marker" 주석).
|
|
144
143
|
if (paths.size) {
|
package/src/ui/prompts.js
CHANGED
|
@@ -48,7 +48,7 @@ export async function editMenu({ showOptional = false } = {}) {
|
|
|
48
48
|
|
|
49
49
|
// 타입 멀티선택.
|
|
50
50
|
export async function selectTypes(current = []) {
|
|
51
|
-
const all = ["spring", "flutter", "
|
|
51
|
+
const all = ["spring", "flutter", "react", "react-native", "react-native-expo", "node", "python", "basic"];
|
|
52
52
|
return engine.multiselect({
|
|
53
53
|
message: "프로젝트 타입을 선택하세요 (Space 토글, Enter 확정)",
|
|
54
54
|
options: all.map((t) => ({ value: t, label: t })),
|