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
@@ -47,7 +47,7 @@ permissions:
47
47
  actions: write
48
48
 
49
49
  env:
50
- # 스크립트 import가 .github/scripts/__pycache__를 만들어 봇 커밋에 섞이지 않게 한다
50
+ # Keep script imports from creating .github/scripts/__pycache__ so it never ends up in bot commits
51
51
  PYTHONDONTWRITEBYTECODE: "1"
52
52
 
53
53
  jobs:
@@ -66,20 +66,21 @@ jobs:
66
66
  - name: Release merge / mode guard
67
67
  id: release_guard
68
68
  run: |
69
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
69
70
  SKIP="false"
70
71
 
71
72
  # trunk-based mode: RELEASE-PUBLISH owns versioning — skip safety net
72
73
  MODE=$(python3 -c 'import re; t=open("version.yml",encoding="utf-8").read(); m=re.search(r"^\s*mode:\s*\"?([A-Za-z-]+)", t, re.M); print(m.group(1) if m else "pr-flow")' 2>/dev/null || echo "pr-flow")
73
74
  if [ "$MODE" = "trunk-based" ]; then
74
75
  SKIP="true"
75
- echo "trunk-based mode detected — RELEASE-PUBLISH owns version bumping, skipping"
76
+ echo "$(m wf_version.trunk_skip)"
76
77
  fi
77
78
 
78
79
  # release-confirm pattern: the merge commit of a release PR
79
80
  HEAD_MSG=$(git log -1 --pretty=%B)
80
81
  if echo "$HEAD_MSG" | grep -q "chore(release):"; then
81
82
  SKIP="true"
82
- echo "release-confirm commit detected (chore(release):) — skipping safety-net bump"
83
+ echo "$(m wf_version.confirm_skip)"
83
84
  fi
84
85
 
85
86
  # release merge detection: the release push includes a version.yml change
@@ -91,73 +92,80 @@ jobs:
91
92
  fi
92
93
  if git diff --name-only $RANGE 2>/dev/null | grep -qx "version.yml"; then
93
94
  SKIP="true"
94
- echo "release merge detected (push contains a version.yml change) — skipping safety-net bump"
95
+ echo "$(m wf_version.release_merge_skip)"
95
96
  fi
96
97
 
97
98
  echo "skip=$SKIP" >> $GITHUB_OUTPUT
98
99
  if [ "$SKIP" = "false" ]; then
99
- echo "direct push to {{MAIN_BRANCH}} detected — running safety-net version bump"
100
+ echo "$(m wf_version.direct_push main_branch="{{MAIN_BRANCH}}")"
100
101
  fi
101
102
 
102
103
  - name: Read current version
103
104
  id: current_version
104
105
  if: steps.release_guard.outputs.skip != 'true'
105
106
  run: |
107
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
106
108
  CURRENT_VERSION=$(python3 .github/scripts/version_manager.py get | tail -n 1)
107
109
  if [ -z "$CURRENT_VERSION" ]; then
108
- echo "failed to read current version"
110
+ echo "$(m wf_version.read_current_failed)"
109
111
  exit 1
110
112
  fi
111
113
  echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
112
- echo "current version: $CURRENT_VERSION"
114
+ echo "$(m wf_version.current_version current_version="$CURRENT_VERSION")"
113
115
 
114
116
  - name: Bump patch version and sync
115
117
  id: version
116
118
  if: steps.release_guard.outputs.skip != 'true'
117
119
  run: |
120
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
118
121
  NEW_VERSION=$(python3 .github/scripts/version_manager.py increment | tail -n 1)
119
122
  if [ -z "$NEW_VERSION" ]; then
120
- echo "version bump failed"
123
+ echo "$(m wf_common.version_bump_failed)"
121
124
  exit 1
122
125
  fi
123
126
  python3 .github/scripts/version_manager.py sync
124
127
  echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
125
- echo "new version: $NEW_VERSION"
128
+ echo "$(m wf_version.new_version new_version="$NEW_VERSION")"
126
129
 
127
130
  - name: Read project types
128
131
  id: project_info
129
132
  if: steps.release_guard.outputs.skip != 'true'
130
133
  run: |
134
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
131
135
  if [ -f "version.yml" ]; then
132
136
  PROJECT_TYPES=$(grep "^project_types:" version.yml 2>/dev/null | sed -E 's/.*\[([^]]*)\].*/\1/' | tr -d '" ')
133
137
  PROJECT_TYPES=${PROJECT_TYPES:-unknown}
134
138
  echo "project_types=$PROJECT_TYPES" >> $GITHUB_OUTPUT
135
- echo "project types: $PROJECT_TYPES"
139
+ echo "$(m wf_version.project_types project_types="$PROJECT_TYPES")"
136
140
  else
137
141
  echo "project_types=unknown" >> $GITHUB_OUTPUT
138
- echo "version.yml not found"
142
+ echo "$(m wf_version.yml_not_found)"
139
143
  fi
140
144
 
141
145
  - name: Update CHANGELOG for the safety-net release
142
- # 안전망 릴리스도 실제로 들어간 커밋으로 CHANGELOG 항목을 만든다. 항목이 없으면
143
- # RELEASE-PUBLISH가 고정 문구로 릴리스 노트를 채우고 변경 내역이 어디에도 남지 않는다.
144
- # 요약 엔진: 사용자 API(설정된 경우) -> 규칙 기반 (Copilot은 릴리스 PR·trunk 경로에서만 쓴다)
146
+ # Build the CHANGELOG entry from the commits that actually landed, even for a
147
+ # safety-net release. Without an entry RELEASE-PUBLISH fills the notes with fixed
148
+ # text and the change history is recorded nowhere.
149
+ # Summary engine: user API (if configured) -> rule-based (Copilot is used only on
150
+ # the release-PR and trunk paths)
145
151
  if: steps.release_guard.outputs.skip != 'true'
146
152
  env:
147
153
  AI_API_KEY: ${{ secrets.AI_API_KEY }}
148
154
  AI_API_BASE_URL: ${{ vars.AI_API_BASE_URL }}
149
155
  AI_MODEL: ${{ vars.AI_MODEL }}
150
156
  run: |
157
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
151
158
  NEW_VERSION="${{ steps.version.outputs.new_version }}"
152
159
 
153
- # 마지막 릴리스 태그 이후 {{MAIN_BRANCH}}에 직접 들어온 커밋 (태그가 없으면 전체 이력)
160
+ # Commits pushed straight to {{MAIN_BRANCH}} since the last release tag (full history if there is no tag)
154
161
  LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
155
162
  LOG_RANGE="${LAST_TAG:+${LAST_TAG}..}HEAD"
156
163
  git log --pretty=%s "$LOG_RANGE" > commits.txt
157
- # 본문 푸터 BREAKING CHANGE:는 제목 목록 뒤에 한 줄씩 덧붙인다 — 스크립트는 한 줄을
158
- # 한 항목으로 읽으므로 본문 전체(%B)를 넣으면 설명 줄까지 변경 항목으로 잡힌다.
164
+ # Body-footer BREAKING CHANGE: lines are appended after the subject list, one per
165
+ # line. The script reads each line as one entry, so passing the whole body (%B)
166
+ # would turn description lines into change entries.
159
167
  git log --pretty=%b "$LOG_RANGE" | grep -E '^BREAKING[ -]CHANGE[[:space:]]*:' >> commits.txt || true
160
- echo "commits since ${LAST_TAG:-the beginning}: $(wc -l < commits.txt)"
168
+ echo "$(m wf_version.commits_since last_tag="${LAST_TAG:-the beginning}" n="$(wc -l < commits.txt)")"
161
169
 
162
170
  python3 .github/scripts/changelog_manager.py ai-summary \
163
171
  --commits-file commits.txt \
@@ -180,17 +188,18 @@ jobs:
180
188
  id: commit_push
181
189
  if: steps.release_guard.outputs.skip != 'true'
182
190
  run: |
191
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
183
192
  git config --local user.email "action@github.com"
184
193
  git config --local user.name "GitHub Action"
185
194
 
186
- # -A는 러너가 만든 임시 파일·캐시까지 사용자 레포에 커밋한다.
187
- # 버전 파일은 이미 추적 중이라 -u로 충분하고, 새로 생기는 CHANGELOG만
188
- # 따로 올린다 (.gitignore에 있으면 건너뛴다).
195
+ # -A would also commit runner temp files and caches into the user's repo.
196
+ # Version files are already tracked, so -u is enough; only a newly created
197
+ # CHANGELOG is added separately (skipped if it is in .gitignore).
189
198
  git add -u
190
199
  git ls-files -z --others --exclude-standard -- CHANGELOG.json CHANGELOG.md | xargs -0 -r git add --
191
200
 
192
201
  if git diff --staged --quiet; then
193
- echo "no changes to commit (already in sync)"
202
+ echo "$(m wf_version.no_changes_synced)"
194
203
  echo "pushed=false" >> "$GITHUB_OUTPUT"
195
204
  else
196
205
  NEW_VERSION="${{ steps.version.outputs.new_version }}"
@@ -204,18 +213,18 @@ jobs:
204
213
 
205
214
  while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
206
215
  RETRY_COUNT=$((RETRY_COUNT + 1))
207
- echo "push attempt $RETRY_COUNT/$MAX_RETRIES..."
216
+ echo "$(m wf_common.push_attempt retry_count="$RETRY_COUNT" max_retries="$MAX_RETRIES")"
208
217
 
209
218
  if git push origin HEAD:{{MAIN_BRANCH}}; then
210
219
  PUSH_SUCCESS=true
211
- echo "version bump commit pushed"
220
+ echo "$(m wf_version.bump_pushed)"
212
221
  break
213
222
  else
214
- echo "push failed, syncing with remote..."
223
+ echo "$(m wf_common.push_failed_syncing)"
215
224
  if git pull --rebase origin {{MAIN_BRANCH}}; then
216
- echo "rebase ok, retrying push..."
225
+ echo "$(m wf_common.rebase_ok)"
217
226
  else
218
- echo "rebase failed, manual conflict resolution required"
227
+ echo "$(m wf_common.rebase_failed)"
219
228
  git rebase --abort 2>/dev/null || true
220
229
  exit 1
221
230
  fi
@@ -223,37 +232,41 @@ jobs:
223
232
  done
224
233
 
225
234
  if [ "$PUSH_SUCCESS" = false ]; then
226
- echo "push failed after $MAX_RETRIES attempts"
235
+ echo "$(m wf_common.push_gave_up max_retries="$MAX_RETRIES")"
227
236
  exit 1
228
237
  fi
229
238
  echo "pushed=true" >> "$GITHUB_OUTPUT"
230
239
  else
231
- echo "commit failed"
240
+ echo "$(m wf_version.commit_failed)"
232
241
  exit 1
233
242
  fi
234
243
  fi
235
244
 
236
- - name: Trigger RELEASE-PUBLISH (safety-net bump 발행)
245
+ - name: Trigger RELEASE-PUBLISH (publish the safety-net bump)
237
246
  if: steps.release_guard.outputs.skip != 'true' && steps.commit_push.outputs.pushed == 'true'
238
247
  continue-on-error: true
239
248
  env:
240
249
  GH_TOKEN: ${{ github.token }}
241
250
  run: |
251
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
242
252
  gh workflow run PROJECT-COMMON-RELEASE-PUBLISH.yaml --ref {{MAIN_BRANCH}}
243
- echo "RELEASE-PUBLISH workflow_dispatch 트리거 요청 완료 (WORKFLOW_PAT 없이도 동작, 이슈 #61 드리프트 자동 복구)"
253
+ echo "$(m wf_version.release_publish_triggered)"
244
254
 
245
255
  - name: Back-merge the safety-net bump into {{DEVELOP_BRANCH}}
246
- # 안전망 bump는 {{MAIN_BRANCH}}에만 올라간다. {{DEVELOP_BRANCH}}가 이를 모르면 다음 릴리스 PR에서
247
- # 양쪽이 같은 버전 줄을 고쳐 충돌하므로 곧바로 {{DEVELOP_BRANCH}}에도 병합해 둔다.
248
- # 실패(충돌·브랜치 보호)해도 안전망 릴리스는 이미 끝났으므로 경고만 남긴다.
256
+ # The safety-net bump lands only on {{MAIN_BRANCH}}. If {{DEVELOP_BRANCH}} does not know
257
+ # about it, both sides edit the same version line and conflict in the next release
258
+ # PR, so merge it into {{DEVELOP_BRANCH}} right away.
259
+ # On failure (conflict, branch protection) the safety-net release is already done,
260
+ # so only a warning is left.
249
261
  if: steps.release_guard.outputs.skip != 'true' && steps.commit_push.outputs.pushed == 'true'
250
262
  run: |
263
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
251
264
  DEVELOP_BRANCH="{{DEVELOP_BRANCH}}"
252
265
  NEW_VERSION="${{ steps.version.outputs.new_version }}"
253
266
  MANUAL="git checkout $DEVELOP_BRANCH && git pull && git merge origin/{{MAIN_BRANCH}} && git push"
254
267
 
255
268
  if ! git ls-remote --exit-code --heads origin "$DEVELOP_BRANCH" >/dev/null 2>&1; then
256
- echo "branch $DEVELOP_BRANCH not found — nothing to back-merge"
269
+ echo "$(m wf_version.no_develop develop_branch="$DEVELOP_BRANCH")"
257
270
  exit 0
258
271
  fi
259
272
 
@@ -261,28 +274,29 @@ jobs:
261
274
  git fetch -q origin "$DEVELOP_BRANCH" {{MAIN_BRANCH}}
262
275
  git checkout -q -B safety-net-back-merge "origin/$DEVELOP_BRANCH"
263
276
  if git merge-base --is-ancestor "origin/{{MAIN_BRANCH}}" HEAD; then
264
- echo "$DEVELOP_BRANCH already contains {{MAIN_BRANCH}}"
277
+ echo "$(m wf_version.already_contains develop_branch="$DEVELOP_BRANCH" main_branch="{{MAIN_BRANCH}}")"
265
278
  exit 0
266
279
  fi
267
280
  if ! git merge --no-edit -m "chore(version): merge v${NEW_VERSION} safety-net bump into ${DEVELOP_BRANCH} [skip ci]" "origin/{{MAIN_BRANCH}}"; then
268
281
  git merge --abort 2>/dev/null || true
269
- echo "::warning::{{MAIN_BRANCH}}을 ${DEVELOP_BRANCH}에 자동 병합하지 못했습니다 (충돌). 다음 릴리스 PR 전에 직접 병합하세요: $MANUAL"
282
+ echo "::warning::$(m wf_version.backmerge_conflict prod="{{MAIN_BRANCH}}" dev="$DEVELOP_BRANCH" manual="$MANUAL")"
270
283
  exit 0
271
284
  fi
272
285
  if git push origin "HEAD:$DEVELOP_BRANCH"; then
273
- echo "safety-net bump v$NEW_VERSION merged into $DEVELOP_BRANCH"
286
+ echo "$(m wf_version.backmerged new_version="$NEW_VERSION" develop_branch="$DEVELOP_BRANCH")"
274
287
  exit 0
275
288
  fi
276
- echo "push attempt $ATTEMPT failed — retrying"
289
+ echo "$(m wf_version.push_retry attempt="$ATTEMPT")"
277
290
  sleep 5
278
291
  done
279
- echo "::warning::${DEVELOP_BRANCH}에 push하지 못했습니다 (브랜치 보호 등). 다음 릴리스 PR 전에 직접 병합하세요: $MANUAL"
292
+ echo "::warning::$(m wf_version.backmerge_push_failed dev="$DEVELOP_BRANCH" manual="$MANUAL")"
280
293
 
281
294
  - name: Summary
282
295
  if: always()
283
296
  run: |
284
- echo "version-control workflow finished"
285
- echo " skipped (release merge / trunk-based): ${{ steps.release_guard.outputs.skip }}"
286
- echo " previous version: ${{ steps.current_version.outputs.current_version }}"
287
- echo " new version: ${{ steps.version.outputs.new_version }}"
288
- echo " branch: ${{ github.ref_name }}"
297
+ m() { python3 "$GITHUB_WORKSPACE/.github/scripts/messages.py" get "$@"; }
298
+ echo "$(m wf_version.finished)"
299
+ echo "$(m wf_version.sum_skipped skip="${{ steps.release_guard.outputs.skip }}")"
300
+ echo "$(m wf_version.sum_previous current_version="${{ steps.current_version.outputs.current_version }}")"
301
+ echo "$(m wf_version.sum_new new_version="${{ steps.version.outputs.new_version }}")"
302
+ echo "$(m wf_version.sum_branch ref_name="${{ github.ref_name }}")"