project-auto-wizard 0.14.0 → 0.15.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.ja.md +3 -1
- package/README.ko.md +3 -1
- package/README.md +4 -2
- package/README.zh-CN.md +3 -1
- package/package.json +1 -1
- package/payload/config/breaking-changes.json +31 -5
- package/payload/config/wizard-prompts.yml +0 -4
- package/payload/scripts/changelog_manager.py +8 -8
- package/payload/scripts/messages.py +460 -24
- package/payload/scripts/version_manager.py +102 -73
- package/payload/version.yml.template +2 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +9 -4
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +62 -30
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +96 -44
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +79 -35
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +71 -35
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +24 -8
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +29 -10
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +57 -23
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +155 -72
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +49 -20
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +162 -62
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +184 -87
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +38 -15
- package/payload/workflows/go/PROJECT-GO-CI.yaml +14 -5
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +375 -120
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +9 -4
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +12 -4
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +375 -120
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +9 -4
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +38 -9
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +19 -5
- package/payload/workflows/spring/PROJECT-SPRING-CI.yml +71 -35
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +9 -6
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +7 -4
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +425 -144
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +7 -4
- package/src/cli/args.js +17 -7
- package/src/commands/doctor.js +16 -0
- package/src/commands/dry-run.js +10 -1
- package/src/commands/full.js +5 -2
- package/src/commands/interactive.js +4 -1
- package/src/commands/status.js +14 -1
- package/src/core/copy/readme.js +58 -2
- package/src/core/copy/simple.js +31 -0
- package/src/core/copy/workflows.js +2 -2
- package/src/core/deploy-style.js +1 -1
- package/src/core/detect.js +3 -2
- package/src/core/types.js +15 -8
- package/src/core/version-yml.js +52 -6
- package/src/i18n/catalog/en/cli.js +1 -0
- package/src/i18n/catalog/en/commands.js +9 -0
- package/src/i18n/catalog/en/copy.js +1 -0
- package/src/i18n/catalog/en/core2.js +3 -0
- package/src/i18n/catalog/ko/cli.js +1 -0
- package/src/i18n/catalog/ko/commands.js +9 -0
- package/src/i18n/catalog/ko/copy.js +1 -0
- package/src/i18n/catalog/ko/core2.js +3 -0
- package/src/index.js +8 -4
- package/src/ui/env-plan.js +1 -1
- package/src/ui/prompts.js +7 -3
- package/src/ui/summary.js +1 -1
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +0 -241
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +0 -330
package/README.ja.md
CHANGED
|
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
|
|
|
49
49
|
|
|
50
50
|
生成されたファイルをコミットして push してください。`npx project-auto-wizard --mode doctor` は、ワークフローが依存するリポジトリ設定を確認します。
|
|
51
51
|
|
|
52
|
+
メッセージの言語は英語または韓国語(`en` | `ko`)です。`--lang`、環境変数 `PROJECT_AUTO_WIZARD_LANG`、`version.yml` の `language` の順に優先されます。
|
|
53
|
+
|
|
52
54
|
## インストールされるもの
|
|
53
55
|
|
|
54
56
|
| インストール対象 | 用途 |
|
|
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
|
|
|
125
127
|
|---|---|---|
|
|
126
128
|
| `spring` | `build.gradle`、`build.gradle.kts`、`pom.xml` | CI、サーバーへのデプロイ(単一サーバー / Nginx または Traefik によるダウンタイムなし)、PR プレビュー |
|
|
127
129
|
| `flutter` | `pubspec.yaml` | CI、Android(Firebase、Play Store、セルフホスト、テスト用 APK)、iOS TestFlight |
|
|
128
|
-
| `react
|
|
130
|
+
| `react`(React / Next.js) | `package.json` の `react` または `next` dependency | CI、CI + CD |
|
|
129
131
|
| `python` | `pyproject.toml`、`setup.py`、`requirements.txt` | CI、PR プレビュー、サーバーへのデプロイ |
|
|
130
132
|
| `go` | `go.mod` | CI、PR プレビュー、サーバーへのデプロイ |
|
|
131
133
|
| `node`、`react-native`、`react-native-expo`、`basic` | `package.json` / フォールバック | リリース自動化のみ |
|
package/README.ko.md
CHANGED
|
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
|
|
|
49
49
|
|
|
50
50
|
생성된 파일을 커밋하고 push하세요. `npx project-auto-wizard --mode doctor`는 워크플로우가 의존하는 레포 설정을 점검합니다.
|
|
51
51
|
|
|
52
|
+
메시지 언어는 영어 또는 한국어(`en` | `ko`)입니다. `--lang`, 환경변수 `PROJECT_AUTO_WIZARD_LANG`, `version.yml`의 `language` 순서로 우선 적용됩니다.
|
|
53
|
+
|
|
52
54
|
## 설치되는 것
|
|
53
55
|
|
|
54
56
|
| 설치 항목 | 용도 |
|
|
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
|
|
|
125
127
|
|---|---|---|
|
|
126
128
|
| `spring` | `build.gradle`, `build.gradle.kts`, `pom.xml` | CI, 서버 배포 (단일 서버 / Nginx·Traefik 무중단), PR 프리뷰 |
|
|
127
129
|
| `flutter` | `pubspec.yaml` | CI, Android (Firebase, Play Store, self-hosted, 테스트 APK), iOS TestFlight |
|
|
128
|
-
| `react
|
|
130
|
+
| `react` (React / Next.js) | `package.json`의 `react` 또는 `next` dependency | CI, CI + CD |
|
|
129
131
|
| `python` | `pyproject.toml`, `setup.py`, `requirements.txt` | CI, PR 프리뷰, 서버 배포 |
|
|
130
132
|
| `go` | `go.mod` | CI, PR 프리뷰, 서버 배포 |
|
|
131
133
|
| `node`, `react-native`, `react-native-expo`, `basic` | `package.json` / fallback | 릴리스 자동화만 |
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Everything it installs is plain GitHub Actions in your own repository. No API ke
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
|
|
24
|
-
## Latest Version : v0.
|
|
24
|
+
## Latest Version : v0.15.1 (2026-10-01)
|
|
25
25
|
|
|
26
26
|
[Full release history](CHANGELOG.md)
|
|
27
27
|
|
|
@@ -50,6 +50,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
|
|
|
50
50
|
|
|
51
51
|
Commit the generated files and push. `npx project-auto-wizard --mode doctor` checks the repository settings the workflows depend on.
|
|
52
52
|
|
|
53
|
+
Messages are in English or Korean (`en` | `ko`). Pick one with `--lang`, the `PROJECT_AUTO_WIZARD_LANG` environment variable, or `language` in `version.yml`, in that order of precedence.
|
|
54
|
+
|
|
53
55
|
## What you get
|
|
54
56
|
|
|
55
57
|
| Installed | Purpose |
|
|
@@ -126,7 +128,7 @@ Skip it if:
|
|
|
126
128
|
|---|---|---|
|
|
127
129
|
| `spring` | `build.gradle`, `build.gradle.kts`, `pom.xml` | CI, server deploy (single server / zero-downtime Nginx or Traefik), PR preview |
|
|
128
130
|
| `flutter` | `pubspec.yaml` | CI, Android (Firebase, Play Store, self-hosted, test APK), iOS TestFlight |
|
|
129
|
-
| `react
|
|
131
|
+
| `react` (React / Next.js) | `package.json` with a `react` or `next` dependency | CI, CI + CD |
|
|
130
132
|
| `python` | `pyproject.toml`, `setup.py`, `requirements.txt` | CI, PR preview, server deploy |
|
|
131
133
|
| `go` | `go.mod` | CI, PR preview, server deploy |
|
|
132
134
|
| `node`, `react-native`, `react-native-expo`, `basic` | `package.json` / fallback | Release automation only |
|
package/README.zh-CN.md
CHANGED
|
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
|
|
|
49
49
|
|
|
50
50
|
提交生成的文件并 push。`npx project-auto-wizard --mode doctor` 会检查工作流所依赖的仓库设置。
|
|
51
51
|
|
|
52
|
+
消息语言为英语或韩语(`en` | `ko`)。可通过 `--lang`、环境变量 `PROJECT_AUTO_WIZARD_LANG` 或 `version.yml` 中的 `language` 指定,优先级依次降低。
|
|
53
|
+
|
|
52
54
|
## 安装内容
|
|
53
55
|
|
|
54
56
|
| 安装项 | 用途 |
|
|
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
|
|
|
125
127
|
|---|---|---|
|
|
126
128
|
| `spring` | `build.gradle`、`build.gradle.kts`、`pom.xml` | CI、服务器部署(单台服务器 / Nginx 或 Traefik 零停机)、PR 预览 |
|
|
127
129
|
| `flutter` | `pubspec.yaml` | CI、Android(Firebase、Play Store、自托管、测试 APK)、iOS TestFlight |
|
|
128
|
-
| `react
|
|
130
|
+
| `react`(React / Next.js) | `package.json` 中的 `react` 或 `next` dependency | CI、CI + CD |
|
|
129
131
|
| `python` | `pyproject.toml`、`setup.py`、`requirements.txt` | CI、PR 预览、服务器部署 |
|
|
130
132
|
| `go` | `go.mod` | CI、PR 预览、服务器部署 |
|
|
131
133
|
| `node`、`react-native`、`react-native-expo`、`basic` | `package.json` / 兜底 | 仅发布自动化 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "project-auto-wizard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "One command DevOps: npx wizard that installs GitHub-native Release Automation (optional GitHub Copilot AI summaries) into any project",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
"0.10.1": [
|
|
3
3
|
{
|
|
4
4
|
"severity": "warning",
|
|
5
|
-
"types": [
|
|
5
|
+
"types": [
|
|
6
|
+
"flutter"
|
|
7
|
+
],
|
|
6
8
|
"title": "Flutter SELFHOSTED and TEST-APK now run flutter build directly",
|
|
7
9
|
"message": "SELFHOSTED and TEST-APK run flutter build apk --release directly instead of fastlane build, and the Ruby/fastlane install steps are gone. fastlane is now used only by the three store deploy workflows (PLAYSTORE, IOS-TESTFLIGHT, IOS-TEST-TESTFLIGHT).",
|
|
8
10
|
"title_ko": "Flutter SELFHOSTED·TEST-APK가 flutter build를 직접 실행",
|
|
@@ -10,7 +12,9 @@
|
|
|
10
12
|
},
|
|
11
13
|
{
|
|
12
14
|
"severity": "warning",
|
|
13
|
-
"types": [
|
|
15
|
+
"types": [
|
|
16
|
+
"flutter"
|
|
17
|
+
],
|
|
14
18
|
"title": "Flutter env default switched to dart-define",
|
|
15
19
|
"message": "New installs default to dart-define (--dart-define-from-file). Existing installs keep dotenv (a generated .env) when version.yml has no saved value; to change it, use the wizard 'Modify > environment variable method' or --flutter-env-mode.",
|
|
16
20
|
"title_ko": "Flutter 환경변수 기본 방식이 dart-define으로 변경",
|
|
@@ -18,7 +22,9 @@
|
|
|
18
22
|
},
|
|
19
23
|
{
|
|
20
24
|
"severity": "warning",
|
|
21
|
-
"types": [
|
|
25
|
+
"types": [
|
|
26
|
+
"flutter"
|
|
27
|
+
],
|
|
22
28
|
"title": "Flutter workflows now run from FLUTTER_PROJECT_DIR",
|
|
23
29
|
"message": "FIREBASE, SELFHOSTED, CI, TEST-APK and IOS-TEST-TESTFLIGHT now run from the Flutter root (FLUTTER_PROJECT_DIR), like PLAYSTORE. For a monorepo where Flutter lives in a subfolder, set it with --paths flutter=<path>.",
|
|
24
30
|
"title_ko": "Flutter 워크플로우가 FLUTTER_PROJECT_DIR 기준으로 동작",
|
|
@@ -26,7 +32,13 @@
|
|
|
26
32
|
},
|
|
27
33
|
{
|
|
28
34
|
"severity": "warning",
|
|
29
|
-
"types": [
|
|
35
|
+
"types": [
|
|
36
|
+
"flutter",
|
|
37
|
+
"go",
|
|
38
|
+
"python",
|
|
39
|
+
"react",
|
|
40
|
+
"spring"
|
|
41
|
+
],
|
|
30
42
|
"title": "Register only ci-gate as the monorepo CI required check",
|
|
31
43
|
"message": "CI workflows (Flutter, Go, Next, Python, React, Spring CI) always run and skip their jobs when nothing changed. To use them as a required check, register only the CI Gate (ci-gate), not the individual jobs.",
|
|
32
44
|
"title_ko": "모노레포 CI required check는 ci-gate 하나만 등록",
|
|
@@ -45,7 +57,9 @@
|
|
|
45
57
|
"0.12.1": [
|
|
46
58
|
{
|
|
47
59
|
"severity": "warning",
|
|
48
|
-
"types": [
|
|
60
|
+
"types": [
|
|
61
|
+
"spring"
|
|
62
|
+
],
|
|
49
63
|
"title": "Spring nexus and GitHub Packages publish options removed",
|
|
50
64
|
"message": "PROJECT-SPRING-NEXUS-PUBLISH.yml and PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml are no longer installed, and PROJECT-SPRING-NEXUS-CI.yml became PROJECT-SPRING-CI.yml, which is always installed. On update, untouched old files are deleted and modified ones are moved to .bak. To keep deploying, move the .bak into a workflow you maintain yourself.",
|
|
51
65
|
"title_ko": "Spring nexus·GitHub Packages publish 옵션 제거",
|
|
@@ -58,5 +72,17 @@
|
|
|
58
72
|
"title_ko": "Secret 서버 백업 워크플로우(secret_backup 옵션) 제거",
|
|
59
73
|
"message_ko": "PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml을 더 이상 설치하지 않습니다. 설치해 두었다면 업데이트 때 손대지 않은 파일은 삭제되고 수정한 파일은 .bak으로 옮겨집니다. 계속 쓰려면 .bak을 직접 관리하는 워크플로우로 옮기세요."
|
|
60
74
|
}
|
|
75
|
+
],
|
|
76
|
+
"0.15.1": [
|
|
77
|
+
{
|
|
78
|
+
"severity": "warning",
|
|
79
|
+
"types": [
|
|
80
|
+
"react"
|
|
81
|
+
],
|
|
82
|
+
"title": "The next type is now react; Next.js deploy names changed",
|
|
83
|
+
"message": "Next.js projects are now the react type (next is still accepted as an alias). PROJECT-NEXT-CI and PROJECT-NEXT-CICD are replaced by PROJECT-REACT-CI and PROJECT-REACT-CICD on update (untouched old files are deleted, modified ones move to .bak). The deploy image prefix changes from nextjs-container to front-container and the container from <project>-nextjs-deploy to <project>-front-deploy, so the first deploy pulls a new image; the workflow removes the old nextjs container automatically before starting the new one. Clean up the old image on the server if you no longer need it.",
|
|
84
|
+
"title_ko": "next 타입이 react로 통합되고 Next.js 배포 이름이 바뀜",
|
|
85
|
+
"message_ko": "Next.js 프로젝트는 이제 react 타입입니다(next는 별칭으로 계속 받습니다). 업데이트하면 PROJECT-NEXT-CI·PROJECT-NEXT-CICD가 PROJECT-REACT-CI·PROJECT-REACT-CICD로 교체됩니다(손대지 않은 이전 파일은 삭제, 수정한 파일은 .bak으로 이동). 배포 이미지 접두어가 nextjs-container에서 front-container로, 컨테이너 이름이 <프로젝트>-nextjs-deploy에서 <프로젝트>-front-deploy로 바뀌므로 첫 배포에서 새 이미지를 받으며, 워크플로우가 새 컨테이너를 띄우기 전에 이전 nextjs 컨테이너를 자동으로 지웁니다. 이전 이미지가 필요 없다면 서버에서 직접 정리하세요."
|
|
86
|
+
}
|
|
61
87
|
]
|
|
62
88
|
}
|
|
@@ -150,8 +150,6 @@ _workflow_names:
|
|
|
150
150
|
SIMPLE-CICD: "Single-server deploy"
|
|
151
151
|
REACT-CICD: "Frontend deploy"
|
|
152
152
|
REACT-CI: "Frontend build"
|
|
153
|
-
NEXT-CICD: "Frontend deploy"
|
|
154
|
-
NEXT-CI: "Frontend build"
|
|
155
153
|
PYTHON-CI: "Build check"
|
|
156
154
|
FLUTTER-ANDROID-SELFHOSTED: "Android self-hosted deploy"
|
|
157
155
|
FLUTTER-ANDROID-PLAYSTORE: "Play Store deploy"
|
|
@@ -165,8 +163,6 @@ _workflow_names_ko:
|
|
|
165
163
|
SIMPLE-CICD: "단일 서버 배포"
|
|
166
164
|
REACT-CICD: "프론트 배포"
|
|
167
165
|
REACT-CI: "프론트 빌드"
|
|
168
|
-
NEXT-CICD: "프론트 배포"
|
|
169
|
-
NEXT-CI: "프론트 빌드"
|
|
170
166
|
PYTHON-CI: "빌드 검증"
|
|
171
167
|
FLUTTER-ANDROID-SELFHOSTED: "안드로이드 자체배포"
|
|
172
168
|
FLUTTER-ANDROID-PLAYSTORE: "플레이스토어 배포"
|
|
@@ -508,13 +508,13 @@ def _ai_assisted_minor_upgrade(unclassified_lines: list[str]) -> bool:
|
|
|
508
508
|
try:
|
|
509
509
|
return call_openai_compatible(base_url, api_key, model, prompt).strip() == 'MINOR'
|
|
510
510
|
except Exception as e:
|
|
511
|
-
_warn_engine_failure(
|
|
511
|
+
_warn_engine_failure("[warn] " + t("changelog.engine_bump_failed", error=e))
|
|
512
512
|
|
|
513
513
|
if _copilot_enabled():
|
|
514
514
|
try:
|
|
515
515
|
return call_copilot_cli(prompt).strip() == 'MINOR'
|
|
516
516
|
except Exception as e:
|
|
517
|
-
_warn_engine_failure(
|
|
517
|
+
_warn_engine_failure("[warn] " + t("changelog.engine_bump_copilot_failed", error=e))
|
|
518
518
|
return False
|
|
519
519
|
|
|
520
520
|
|
|
@@ -866,7 +866,7 @@ def call_copilot_cli(prompt: str) -> str:
|
|
|
866
866
|
capture_output=True, text=True, timeout=_COPILOT_TIMEOUT_SECONDS,
|
|
867
867
|
)
|
|
868
868
|
if result.returncode != 0:
|
|
869
|
-
raise RuntimeError(
|
|
869
|
+
raise RuntimeError(t("changelog.engine_copilot_exit", code=result.returncode, detail=result.stderr.strip()[:200]))
|
|
870
870
|
return result.stdout
|
|
871
871
|
|
|
872
872
|
|
|
@@ -961,9 +961,9 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
|
|
|
961
961
|
summary_text = candidate
|
|
962
962
|
engine = "user-api"
|
|
963
963
|
else:
|
|
964
|
-
failures.append(_warn_engine_failure("[warn]
|
|
964
|
+
failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_user_api_empty")))
|
|
965
965
|
except Exception as e:
|
|
966
|
-
failures.append(_warn_engine_failure(
|
|
966
|
+
failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_user_api_failed", error=e)))
|
|
967
967
|
|
|
968
968
|
if summary_text is None and _copilot_enabled():
|
|
969
969
|
try:
|
|
@@ -972,9 +972,9 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
|
|
|
972
972
|
summary_text = candidate
|
|
973
973
|
engine = "copilot"
|
|
974
974
|
else:
|
|
975
|
-
failures.append(_warn_engine_failure("[warn]
|
|
975
|
+
failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_copilot_invalid")))
|
|
976
976
|
except Exception as e:
|
|
977
|
-
failures.append(_warn_engine_failure(
|
|
977
|
+
failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_copilot_failed", error=e)))
|
|
978
978
|
|
|
979
979
|
if summary_text is None:
|
|
980
980
|
classified = classify_commits(commit_lines)
|
|
@@ -990,7 +990,7 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
|
|
|
990
990
|
# rescue-print the summary text to stderr. Keep exit code 0
|
|
991
991
|
# (contract so the workflow pipeline is not cut).
|
|
992
992
|
write_ok = False
|
|
993
|
-
print(
|
|
993
|
+
print("[warn] " + t("changelog.output_write_failed", error=e), file=sys.stderr)
|
|
994
994
|
print(summary_text, file=sys.stderr)
|
|
995
995
|
|
|
996
996
|
result = {"ok": write_ok, "engine": engine, "output": output_path}
|