project-auto-wizard 0.13.3 → 0.15.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.
Files changed (115) hide show
  1. package/README.ja.md +2 -0
  2. package/README.ko.md +2 -0
  3. package/README.md +3 -1
  4. package/README.zh-CN.md +2 -0
  5. package/bin/project-auto-wizard.js +18 -4
  6. package/package.json +2 -2
  7. package/payload/config/breaking-changes.json +28 -14
  8. package/payload/config/wizard-prompts.yml +102 -46
  9. package/payload/flutter-app/android/fastlane/Fastfile.playstore +44 -32
  10. package/payload/flutter-app/ios/ExportOptions.plist +8 -8
  11. package/payload/flutter-app/ios/fastlane/Fastfile +57 -43
  12. package/payload/scripts/changelog_manager.py +304 -265
  13. package/payload/scripts/issue_helper.py +54 -50
  14. package/payload/scripts/messages.py +2585 -0
  15. package/payload/scripts/truncate_release_notes.py +7 -6
  16. package/payload/scripts/version_manager.py +110 -107
  17. package/payload/version.yml.template +2 -1
  18. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +23 -16
  19. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +106 -63
  20. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +17 -15
  21. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +55 -45
  22. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +90 -72
  23. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +59 -45
  24. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +194 -184
  25. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +226 -213
  26. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +46 -42
  27. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +334 -241
  28. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +152 -128
  29. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +246 -188
  30. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +353 -238
  31. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +96 -85
  32. package/payload/workflows/go/PROJECT-GO-CI.yaml +47 -36
  33. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +945 -508
  34. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +155 -133
  35. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +76 -60
  36. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +97 -77
  37. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +62 -47
  38. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +942 -505
  39. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +148 -126
  40. package/payload/workflows/react/PROJECT-REACT-CI.yaml +86 -70
  41. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +112 -92
  42. package/payload/workflows/spring/PROJECT-SPRING-CI.yml +112 -82
  43. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +180 -150
  44. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +161 -131
  45. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +970 -549
  46. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +193 -162
  47. package/src/cli/args.js +98 -52
  48. package/src/cli/help.js +8 -41
  49. package/src/commands/doctor.js +90 -89
  50. package/src/commands/dry-run.js +64 -43
  51. package/src/commands/full.js +79 -77
  52. package/src/commands/install-settings.js +16 -15
  53. package/src/commands/interactive-flutter.js +20 -19
  54. package/src/commands/interactive.js +135 -132
  55. package/src/commands/purge.js +47 -42
  56. package/src/commands/status.js +36 -36
  57. package/src/commands/uninstall.js +43 -41
  58. package/src/context.js +12 -11
  59. package/src/core/assets.js +12 -11
  60. package/src/core/baseline.js +27 -27
  61. package/src/core/branches.js +29 -27
  62. package/src/core/branding.js +7 -6
  63. package/src/core/breaking-check.js +22 -21
  64. package/src/core/breaking.js +15 -8
  65. package/src/core/copy/app-files.js +5 -4
  66. package/src/core/copy/flutter-app.js +8 -8
  67. package/src/core/copy/gitignore.js +58 -50
  68. package/src/core/copy/readme.js +102 -36
  69. package/src/core/copy/simple.js +16 -15
  70. package/src/core/copy/workflows.js +131 -124
  71. package/src/core/deploy-style.js +51 -48
  72. package/src/core/detect-fs.js +57 -57
  73. package/src/core/detect.js +67 -65
  74. package/src/core/errors.js +2 -2
  75. package/src/core/flutter-doctor.js +17 -16
  76. package/src/core/flutter-hooks.js +33 -32
  77. package/src/core/flutter-options.js +34 -33
  78. package/src/core/fsutil.js +12 -12
  79. package/src/core/installed-stores.js +4 -4
  80. package/src/core/logger.js +42 -40
  81. package/src/core/paths-resolve.js +88 -86
  82. package/src/core/paths.js +10 -10
  83. package/src/core/release-options.js +8 -8
  84. package/src/core/removal-exec.js +14 -13
  85. package/src/core/removal-plan.js +37 -37
  86. package/src/core/types.js +47 -47
  87. package/src/core/verify.js +44 -38
  88. package/src/core/version-yml.js +76 -68
  89. package/src/core/wizard-env.js +46 -46
  90. package/src/core/wizard-labels.js +63 -41
  91. package/src/i18n/catalog/en/cli.js +50 -0
  92. package/src/i18n/catalog/en/commands.js +188 -0
  93. package/src/i18n/catalog/en/copy.js +20 -0
  94. package/src/i18n/catalog/en/core.js +74 -0
  95. package/src/i18n/catalog/en/core2.js +15 -0
  96. package/src/i18n/catalog/en/ui.js +221 -0
  97. package/src/i18n/catalog/en.js +12 -0
  98. package/src/i18n/catalog/index.js +5 -0
  99. package/src/i18n/catalog/ko/cli.js +50 -0
  100. package/src/i18n/catalog/ko/commands.js +188 -0
  101. package/src/i18n/catalog/ko/copy.js +20 -0
  102. package/src/i18n/catalog/ko/core.js +74 -0
  103. package/src/i18n/catalog/ko/core2.js +15 -0
  104. package/src/i18n/catalog/ko/ui.js +221 -0
  105. package/src/i18n/catalog/ko.js +10 -0
  106. package/src/i18n/index.js +44 -0
  107. package/src/i18n/languages.js +9 -0
  108. package/src/index.js +132 -97
  109. package/src/ui/ansi.js +7 -7
  110. package/src/ui/banner.js +7 -6
  111. package/src/ui/env-plan.js +82 -81
  112. package/src/ui/prompts.js +97 -122
  113. package/src/ui/readline-engine.js +59 -58
  114. package/src/ui/status-cards.js +37 -31
  115. package/src/ui/summary.js +90 -89
@@ -1,15 +1,16 @@
1
1
  # project-auto-wizard:managed-workflow
2
2
  # PROJECT-COMMON-ISSUE-HELPER.yaml
3
- # 이슈 생성/제목 수정 시 브랜치명·커밋 메시지를 댓글로 안내
3
+ # Suggest a branch name and commit message as a comment when an issue is created or retitled
4
4
  #
5
- # 이슈가 열리거나(opened) 제목이 수정되면(edited + 제목 변경),
6
- # 정규화된 브랜치명과 커밋 메시지를 이슈 댓글로 생성/갱신한다.
7
- # ISSUE_HELPER_CREATE_BRANCH=true로 바꾸면 브랜치도 함께 생성한다
8
- # (기본값은 false — 이슈를 열 때마다 브랜치가 자동 생성되는 것을
9
- # 막기 위해 옵트인으로 전환됨).
5
+ # When an issue is opened, or its title is edited (edited + title changed),
6
+ # the normalized branch name and commit message are posted (or updated) as an
7
+ # issue comment.
8
+ # Set ISSUE_HELPER_CREATE_BRANCH=true to also create the branch
9
+ # (default is false - opt-in, so a branch is not created automatically
10
+ # every time an issue is opened).
10
11
  #
11
- # 로직 본체는 .github/scripts/issue_helper.py (Chuseok22/github-issue-helper의
12
- # Python 재작성, 동일 작성자).
12
+ # The logic lives in .github/scripts/issue_helper.py (a Python rewrite of
13
+ # Chuseok22/github-issue-helper, same author).
13
14
 
14
15
  name: PROJECT-ISSUE-HELPER
15
16
 
@@ -17,30 +18,31 @@ on:
17
18
  issues:
18
19
  types: [opened, edited]
19
20
 
20
- # contents는 항상 write로 고정한다. ISSUE_HELPER_CREATE_BRANCH="true"일 때
21
- # git/refs API로 브랜치를 생성하려면 write가 필요한데, 이 값은 @wizard ask로
22
- # 설치 후에도 사용자가 직접 켤 수 있어(마법사 재실행 없이) 그 시점에 맞춰
23
- # permissions를 조건부로 올릴 방법이 없다.
21
+ # contents is always fixed to write. Creating a branch through the git/refs API
22
+ # when ISSUE_HELPER_CREATE_BRANCH="true" needs write, and users can switch that
23
+ # value on themselves after install (via the wizard ask marker, without re-running the
24
+ # wizard), so there is no way to raise permissions conditionally at that point.
24
25
  permissions:
25
26
  issues: write
26
27
  contents: write
27
28
 
28
29
  jobs:
29
30
  issue-helper:
30
- name: 브랜치명 & 커밋 메시지 안내
31
+ name: Branch name & commit message guide
31
32
  if: github.event.action == 'opened' || (github.event.action == 'edited' && github.event.changes.title)
32
33
  runs-on: ubuntu-latest
33
34
  env:
34
35
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
35
36
  ISSUE_HELPER_BRANCH_PREFIX: ""
36
37
  ISSUE_HELPER_MAX_BRANCH_LENGTH: "100"
37
- ISSUE_HELPER_COMMIT_TEMPLATE: "${issueTitle} : feat : {변경 사항에 대한 설명} ${issueUrl}"
38
+ # Optional override of the commit message template (the default follows the workflow language):
39
+ # ISSUE_HELPER_COMMIT_TEMPLATE: "${issueTitle} : feat : {description of the change} ${issueUrl}"
38
40
  ISSUE_HELPER_CREATE_BRANCH: "false" # @wizard ask:false
39
41
  ISSUE_HELPER_BASE_BRANCH: "{{MAIN_BRANCH}}"
40
42
  steps:
41
43
  - name: Checkout repository
42
44
  uses: actions/checkout@v7
43
45
 
44
- - name: 브랜치명 & 커밋 메시지 생성
46
+ - name: Generate branch name & commit message
45
47
  id: issue-helper
46
48
  run: python3 .github/scripts/issue_helper.py run
@@ -12,13 +12,12 @@
12
12
  # 4. Commits and pushes the change ([skip ci])
13
13
  #
14
14
  # Supported version line formats (case-insensitive, flexible spacing):
15
- # - ## 최신 버전 : v1.0.0 (2025-08-15)
16
- # - ## 최신버전 : v1.0.0 (2025-08-15)
15
+ # - ## <Korean "latest version", with or without a space> : v1.0.0 (2025-08-15)
17
16
  # - ## Current Version : v1.0.0 (2025-08-15)
18
17
  # - ## Recent Version : v1.0.0 (2025-08-15)
19
18
  # - ## Latest Version : v1.0.0
20
19
  # - ## Version : v1.0.0
21
- # - ## 버전 : v1.0.0
20
+ # - ## <Korean "version"> : v1.0.0
22
21
  #
23
22
  # The marker comment <!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
24
23
  # is added automatically above the version line.
@@ -51,7 +50,7 @@ name: README VERSION UPDATE
51
50
  env:
52
51
  # Whether to show the date next to the version (true/false)
53
52
  SHOW_DATE: true
54
- # 스크립트 import가 .github/scripts/__pycache__를 만들어 봇 커밋에 섞이지 않게 한다
53
+ # Keep script imports from creating .github/scripts/__pycache__ so it never ends up in bot commits
55
54
  PYTHONDONTWRITEBYTECODE: "1"
56
55
 
57
56
  concurrency:
@@ -87,22 +86,24 @@ jobs:
87
86
  - name: Check README.md exists
88
87
  id: precheck
89
88
  run: |
89
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
90
90
  if [ -f README.md ]; then
91
91
  echo "readme_exists=true" >> $GITHUB_OUTPUT
92
92
  else
93
93
  echo "readme_exists=false" >> $GITHUB_OUTPUT
94
- echo "README.md not found — nothing to update, skipping"
94
+ echo "$(m wf_readme.not_found)"
95
95
  fi
96
96
 
97
97
  - name: Read latest version via version_manager.py
98
98
  id: version_info
99
99
  if: steps.precheck.outputs.readme_exists == 'true'
100
100
  run: |
101
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
101
102
  LATEST_VERSION=$(python3 .github/scripts/version_manager.py get | tail -n 1)
102
103
  # Guard: an empty version must never reach the README rewrite —
103
104
  # it would commit a corrupted "v (date)" line.
104
105
  if [ -z "$LATEST_VERSION" ]; then
105
- echo "failed to read the current version"
106
+ echo "$(m wf_readme.read_version_failed)"
106
107
  exit 1
107
108
  fi
108
109
  RELEASE_DATE=$(date '+%Y-%m-%d')
@@ -113,10 +114,16 @@ jobs:
113
114
  - name: Update version line in README.md
114
115
  if: steps.precheck.outputs.readme_exists == 'true'
115
116
  run: |
117
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
116
118
  LATEST_VERSION="${{ steps.version_info.outputs.latest_version }}"
117
119
  RELEASE_DATE="${{ steps.version_info.outputs.release_date }}"
118
120
  SHOW_DATE="${{ env.SHOW_DATE }}"
119
121
 
122
+ # Hangul in the Korean heading patterns below is written as UTF-8 byte escapes so
123
+ # this file stays ASCII-only; they match the same README headings byte for byte.
124
+ KO_LATEST=$'\354\265\234\354\213\240' # Korean "latest"
125
+ KO_VERSION=$'\353\262\204\354\240\204' # Korean "version"
126
+
120
127
  # Error message helper
121
128
  print_error_message() {
122
129
  local error_type="$1"
@@ -125,38 +132,38 @@ jobs:
125
132
  local version_text="$4"
126
133
 
127
134
  echo ""
128
- echo "README.md version update failed"
129
- echo " error type: $error_type"
130
- echo " current version line: $version_line"
131
- echo " extracted header: $header_part"
132
- echo " new version text: $version_text"
135
+ echo "$(m wf_readme.update_failed)"
136
+ echo "$(m wf_readme.err_type error_type="$error_type")"
137
+ echo "$(m wf_readme.err_current_line version_line="$version_line")"
138
+ echo "$(m wf_readme.err_header header_part="$header_part")"
139
+ echo "$(m wf_readme.err_new_text version_text="$version_text")"
133
140
  echo ""
134
- echo "Make sure the README version line matches one of:"
135
- echo " ## 최신 버전 : v1.0.0 (2025-08-15)"
141
+ echo "$(m wf_readme.hint_formats)"
142
+ echo " $(m wf_readme.hint_first_example)"
136
143
  echo " ## Current Version : v1.0.0"
137
144
  echo " ## Version : v1.0.0"
138
- echo "Notes:"
139
- echo " - no markdown bold (**) characters"
140
- echo " - no regex special characters (*, [, ], ^, $)"
141
- echo " - the version must come right after the colon (:)"
145
+ echo "$(m wf_readme.hint_notes)"
146
+ echo "$(m wf_readme.hint_no_bold)"
147
+ echo "$(m wf_readme.hint_no_regex)"
148
+ echo "$(m wf_readme.hint_after_colon)"
142
149
  }
143
150
 
144
151
  if [ "$SHOW_DATE" = "true" ]; then
145
152
  VERSION_TEXT="v${LATEST_VERSION} (${RELEASE_DATE})"
146
- echo "version text with date: $VERSION_TEXT"
153
+ echo "$(m wf_readme.text_with_date version_text="$VERSION_TEXT")"
147
154
  else
148
155
  VERSION_TEXT="v${LATEST_VERSION}"
149
- echo "version text: $VERSION_TEXT"
156
+ echo "$(m wf_readme.text version_text="$VERSION_TEXT")"
150
157
  fi
151
158
 
152
159
  # Patterns for recognized version lines (case-insensitive, flexible spacing)
153
160
  VERSION_PATTERNS=(
154
- "^##[[:space:]]*최신[[:space:]]*버전[[:space:]]*:"
155
- "^##[[:space:]]*최신버전[[:space:]]*:"
161
+ "^##[[:space:]]*${KO_LATEST}[[:space:]]*${KO_VERSION}[[:space:]]*:"
162
+ "^##[[:space:]]*${KO_LATEST}${KO_VERSION}[[:space:]]*:"
156
163
  "^##[[:space:]]*[Cc]urrent[[:space:]]*[Vv]ersion[[:space:]]*:"
157
164
  "^##[[:space:]]*[Rr]ecent[[:space:]]*[Vv]ersion[[:space:]]*:"
158
165
  "^##[[:space:]]*[Vv]ersion[[:space:]]*:"
159
- "^##[[:space:]]*버전[[:space:]]*:"
166
+ "^##[[:space:]]*${KO_VERSION}[[:space:]]*:"
160
167
  "^##[[:space:]]*[Ll]atest[[:space:]]*[Vv]ersion[[:space:]]*:"
161
168
  )
162
169
 
@@ -167,32 +174,34 @@ jobs:
167
174
  if grep -qi "$pattern" README.md; then
168
175
  VERSION_LINE=$(grep -i "$pattern" README.md | head -n 1)
169
176
  PATTERN_FOUND="$pattern"
170
- echo "version line found: $VERSION_LINE"
177
+ echo "$(m wf_readme.line_found version_line="$VERSION_LINE")"
171
178
  break
172
179
  fi
173
180
  done
174
181
 
175
182
  # No version line yet — insert a default one
176
183
  if [ -z "$VERSION_LINE" ]; then
177
- echo "no version line found — inserting a new one"
184
+ echo "$(m wf_readme.line_inserting)"
185
+ # Heading wording follows the configured language; an existing line keeps its own wording
186
+ DEFAULT_HEADING=$(m wf_readme.default_heading)
178
187
 
179
188
  if grep -q "^# " README.md; then
180
189
  # right after the first title
181
- sed -i '/^# /a\\n<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## Latest Version : '"$VERSION_TEXT" README.md
190
+ sed -i '/^# /a\\n<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## '"$DEFAULT_HEADING"' : '"$VERSION_TEXT" README.md
182
191
  else
183
192
  # at the very top of the file
184
- sed -i '1i\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## Latest Version : '"$VERSION_TEXT"'\n' README.md
193
+ sed -i '1i\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## '"$DEFAULT_HEADING"' : '"$VERSION_TEXT"'\n' README.md
185
194
  fi
186
- echo "default version line inserted: $VERSION_TEXT"
195
+ echo "$(m wf_readme.line_inserted version_text="$VERSION_TEXT")"
187
196
  else
188
197
  # Update the existing version line
189
198
 
190
199
  # Validate the line format
191
200
  if [[ "$VERSION_LINE" =~ \*\* ]]; then
192
201
  echo ""
193
- echo "warning: the version line contains markdown bold (**) characters"
194
- echo " current line: $VERSION_LINE"
195
- echo " this may break the version update"
202
+ echo "$(m wf_readme.warn_bold)"
203
+ echo "$(m wf_readme.warn_current_line version_line="$VERSION_LINE")"
204
+ echo "$(m wf_readme.warn_may_break)"
196
205
  echo ""
197
206
  fi
198
207
 
@@ -204,12 +213,12 @@ jobs:
204
213
  PREV_LINE=$(sed -n "${PREV_LINE_NUMBER}p" README.md)
205
214
  if [[ "$PREV_LINE" != *"AUTO-VERSION-SECTION"* ]]; then
206
215
  sed -i "${PREV_LINE_NUMBER}a\\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->" README.md
207
- echo "auto-update marker comment added"
216
+ echo "$(m wf_readme.marker_added)"
208
217
  LINE_NUMBER=$((LINE_NUMBER + 1))
209
218
  fi
210
219
  else
211
220
  sed -i '1i\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->' README.md
212
- echo "auto-update marker comment added"
221
+ echo "$(m wf_readme.marker_added)"
213
222
  LINE_NUMBER=$((LINE_NUMBER + 1))
214
223
  fi
215
224
 
@@ -217,7 +226,7 @@ jobs:
217
226
  HEADER_PART=$(printf '%s\n' "$VERSION_LINE" | sed 's/\(.*:\).*/\1 /')
218
227
 
219
228
  if [ -z "$HEADER_PART" ] || [[ "$HEADER_PART" == "$VERSION_LINE" ]]; then
220
- print_error_message "header extraction failed - no colon (:) found" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
229
+ print_error_message "$(m wf_readme.err_no_colon)" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
221
230
  exit 1
222
231
  fi
223
232
 
@@ -230,29 +239,30 @@ jobs:
230
239
  ESCAPED_LINE=$(printf '%s' "$NEW_LINE" | sed 's/[&\\|]/\\&/g')
231
240
 
232
241
  if ! sed -i "${LINE_NUMBER}s|.*|${ESCAPED_LINE}|" README.md 2>/tmp/sed_error.log; then
233
- SED_ERROR=$(cat /tmp/sed_error.log 2>/dev/null || echo "unknown sed error")
234
- print_error_message "sed command failed - $SED_ERROR" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
242
+ SED_ERROR=$(cat /tmp/sed_error.log 2>/dev/null || m wf_readme.err_sed_unknown)
243
+ print_error_message "$(m wf_readme.err_sed error="$SED_ERROR")" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
235
244
  exit 1
236
245
  fi
237
246
 
238
247
  # Verify the replacement
239
248
  UPDATED_LINE=$(sed -n "${LINE_NUMBER}p" README.md)
240
249
  if [[ "$UPDATED_LINE" != *"$VERSION_TEXT"* ]]; then
241
- print_error_message "version replacement verification failed" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
242
- echo " updated line: $UPDATED_LINE"
250
+ print_error_message "$(m wf_readme.err_verify)" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
251
+ echo "$(m wf_readme.updated_line_detail updated_line="$UPDATED_LINE")"
243
252
  exit 1
244
253
  fi
245
254
 
246
- echo "version line updated: $VERSION_TEXT"
255
+ echo "$(m wf_readme.line_updated version_text="$VERSION_TEXT")"
247
256
  fi
248
257
 
249
258
  - name: Commit and push changes
250
259
  if: steps.precheck.outputs.readme_exists == 'true'
251
260
  run: |
261
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
252
262
  git add README.md
253
263
 
254
264
  if git diff --staged --quiet; then
255
- echo "no changes in README.md"
265
+ echo "$(m wf_readme.no_changes)"
256
266
  else
257
267
  VERSION="${{ steps.version_info.outputs.latest_version }}"
258
268
 
@@ -265,19 +275,19 @@ jobs:
265
275
 
266
276
  while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
267
277
  RETRY_COUNT=$((RETRY_COUNT + 1))
268
- echo "push attempt $RETRY_COUNT/$MAX_RETRIES..."
278
+ echo "$(m wf_common.push_attempt retry_count="$RETRY_COUNT" max_retries="$MAX_RETRIES")"
269
279
 
270
280
  if git push origin HEAD:{{MAIN_BRANCH}}; then
271
281
  PUSH_SUCCESS=true
272
- echo "README.md version update pushed"
282
+ echo "$(m wf_readme.pushed)"
273
283
  break
274
284
  else
275
- echo "push failed, syncing with remote..."
285
+ echo "$(m wf_common.push_failed_syncing)"
276
286
 
277
287
  if git pull --rebase origin {{MAIN_BRANCH}}; then
278
- echo "rebase ok, retrying push..."
288
+ echo "$(m wf_common.rebase_ok)"
279
289
  else
280
- echo "rebase failed, manual conflict resolution required"
290
+ echo "$(m wf_common.rebase_failed)"
281
291
  git rebase --abort 2>/dev/null || true
282
292
  exit 1
283
293
  fi
@@ -285,7 +295,7 @@ jobs:
285
295
  done
286
296
 
287
297
  if [ "$PUSH_SUCCESS" = false ]; then
288
- echo "push failed after $MAX_RETRIES attempts"
298
+ echo "$(m wf_common.push_gave_up max_retries="$MAX_RETRIES")"
289
299
  exit 1
290
300
  fi
291
301
  fi