project-auto-wizard 0.13.2 → 0.14.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 (112) hide show
  1. package/README.md +1 -1
  2. package/bin/project-auto-wizard.js +18 -4
  3. package/package.json +2 -2
  4. package/payload/config/breaking-changes.json +28 -14
  5. package/payload/config/wizard-prompts.yml +102 -46
  6. package/payload/flutter-app/android/fastlane/Fastfile.playstore +44 -32
  7. package/payload/flutter-app/ios/ExportOptions.plist +8 -8
  8. package/payload/flutter-app/ios/fastlane/Fastfile +57 -43
  9. package/payload/scripts/changelog_manager.py +296 -257
  10. package/payload/scripts/issue_helper.py +54 -50
  11. package/payload/scripts/messages.py +2279 -0
  12. package/payload/scripts/truncate_release_notes.py +7 -6
  13. package/payload/scripts/version_manager.py +64 -61
  14. package/payload/version.yml.template +2 -1
  15. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +17 -12
  16. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +59 -34
  17. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +17 -15
  18. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +17 -10
  19. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +54 -44
  20. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +24 -17
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +194 -184
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +226 -213
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +46 -42
  24. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +334 -241
  25. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +152 -128
  26. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +246 -188
  27. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +353 -238
  28. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +96 -85
  29. package/payload/workflows/go/PROJECT-GO-CI.yaml +47 -36
  30. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +945 -508
  31. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +155 -133
  32. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +76 -60
  33. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +97 -77
  34. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +62 -47
  35. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +942 -505
  36. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +148 -126
  37. package/payload/workflows/react/PROJECT-REACT-CI.yaml +86 -70
  38. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +112 -92
  39. package/payload/workflows/spring/PROJECT-SPRING-CI.yml +112 -82
  40. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +180 -150
  41. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +161 -131
  42. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +970 -549
  43. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +193 -162
  44. package/src/cli/args.js +98 -52
  45. package/src/cli/help.js +8 -41
  46. package/src/commands/doctor.js +85 -89
  47. package/src/commands/dry-run.js +63 -43
  48. package/src/commands/full.js +79 -77
  49. package/src/commands/install-settings.js +16 -15
  50. package/src/commands/interactive-flutter.js +20 -19
  51. package/src/commands/interactive.js +135 -132
  52. package/src/commands/purge.js +47 -42
  53. package/src/commands/status.js +36 -36
  54. package/src/commands/uninstall.js +43 -41
  55. package/src/context.js +12 -11
  56. package/src/core/assets.js +12 -11
  57. package/src/core/baseline.js +27 -27
  58. package/src/core/branches.js +29 -27
  59. package/src/core/branding.js +7 -6
  60. package/src/core/breaking-check.js +22 -21
  61. package/src/core/breaking.js +15 -8
  62. package/src/core/copy/app-files.js +5 -4
  63. package/src/core/copy/flutter-app.js +8 -8
  64. package/src/core/copy/gitignore.js +58 -50
  65. package/src/core/copy/readme.js +45 -35
  66. package/src/core/copy/simple.js +16 -15
  67. package/src/core/copy/workflows.js +131 -124
  68. package/src/core/deploy-style.js +51 -48
  69. package/src/core/detect-fs.js +57 -57
  70. package/src/core/detect.js +67 -65
  71. package/src/core/errors.js +2 -2
  72. package/src/core/flutter-doctor.js +17 -16
  73. package/src/core/flutter-hooks.js +33 -32
  74. package/src/core/flutter-options.js +34 -33
  75. package/src/core/fsutil.js +12 -12
  76. package/src/core/installed-stores.js +4 -4
  77. package/src/core/logger.js +42 -40
  78. package/src/core/paths-resolve.js +88 -86
  79. package/src/core/paths.js +10 -10
  80. package/src/core/release-options.js +8 -8
  81. package/src/core/removal-exec.js +14 -13
  82. package/src/core/removal-plan.js +37 -37
  83. package/src/core/types.js +47 -47
  84. package/src/core/verify.js +44 -38
  85. package/src/core/version-yml.js +76 -68
  86. package/src/core/wizard-env.js +46 -46
  87. package/src/core/wizard-labels.js +63 -41
  88. package/src/i18n/catalog/en/cli.js +50 -0
  89. package/src/i18n/catalog/en/commands.js +187 -0
  90. package/src/i18n/catalog/en/copy.js +19 -0
  91. package/src/i18n/catalog/en/core.js +74 -0
  92. package/src/i18n/catalog/en/core2.js +15 -0
  93. package/src/i18n/catalog/en/ui.js +221 -0
  94. package/src/i18n/catalog/en.js +12 -0
  95. package/src/i18n/catalog/index.js +5 -0
  96. package/src/i18n/catalog/ko/cli.js +50 -0
  97. package/src/i18n/catalog/ko/commands.js +187 -0
  98. package/src/i18n/catalog/ko/copy.js +19 -0
  99. package/src/i18n/catalog/ko/core.js +74 -0
  100. package/src/i18n/catalog/ko/core2.js +15 -0
  101. package/src/i18n/catalog/ko/ui.js +221 -0
  102. package/src/i18n/catalog/ko.js +10 -0
  103. package/src/i18n/index.js +44 -0
  104. package/src/i18n/languages.js +9 -0
  105. package/src/index.js +128 -94
  106. package/src/ui/ansi.js +7 -7
  107. package/src/ui/banner.js +7 -6
  108. package/src/ui/env-plan.js +82 -81
  109. package/src/ui/prompts.js +97 -122
  110. package/src/ui/readline-engine.js +59 -58
  111. package/src/ui/status-cards.js +37 -31
  112. package/src/ui/summary.js +89 -88
@@ -1,55 +1,69 @@
1
1
  # ===================================================================
2
- # 이 파일은 사용자 소유입니다. 모드별 동작을 여기서 수정하세요.
2
+ # This file is user-owned. Edit the per-mode behavior here.
3
3
  # ===================================================================
4
4
  #
5
- # iOS 배포용 Fastfile 템플릿입니다. Flutter 워크플로우가 IPA를 만든 뒤
6
- # `cd ios && bundle exec fastlane <lane>`으로 실행합니다.
7
- # project-auto-wizard는 이 파일이 이미 있으면 덮어쓰지 않으므로 자유롭게 수정해도 됩니다.
5
+ # Fastfile template for iOS deployment. After the Flutter workflow builds the IPA, it runs
6
+ # `cd ios && bundle exec fastlane <lane>`.
7
+ # project-auto-wizard does not overwrite this file if it already exists, so feel free to edit it.
8
8
  #
9
- # lane
10
- # deploy PROJECT-FLUTTER-IOS-TESTFLIGHT 워크플로우 (DEPLOY_MODE에 따라 분기)
11
- # upload_testflight PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT 워크플로우 (IPA를 TestFlight에 올리기만 함)
9
+ # Lanes
10
+ # deploy PROJECT-FLUTTER-IOS-TESTFLIGHT workflow (branches on DEPLOY_MODE)
11
+ # upload_testflight PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT workflow (only uploads the IPA to TestFlight)
12
12
  #
13
- # deploy lane의 배포 모드 (워크플로우가 DEPLOY_MODE 환경변수로 전달)
14
- # ┌───────────────┬──────────────────────────────────────────────────────────────┐
15
- # │ DEPLOY_MODE │ 동작 │
16
- # ├───────────────┼──────────────────────────────────────────────────────────────┤
17
- # │ store_only │ TestFlight 업로드까지 (upload_to_testflight) │
18
- # │ store_prepare │ TestFlight 업로드 후, App Store 버전과 메타데이터를 준비 │
19
- # │ │ (upload_to_app_store, submit_for_review: false). 빌드는 이 │
20
- # │ │ 단계에서 버전에 연결되지 않고, store_submit이 build_number │
21
- # │ │ 로 다시 호출될 때 한번에 연결·제출됩니다. │
22
- # │ store_submit │ store_prepare와 같은 호출이고 심사 제출까지 진행 │
23
- # │ │ (submit_for_review: true, 이때 빌드가 버전에 연결됩니다) │
24
- # └───────────────┴──────────────────────────────────────────────────────────────┘
25
- # 알 수 없는 값이나 빈 값은 store_only로 처리합니다.
13
+ # Deploy modes of the deploy lane (passed by the workflow via the DEPLOY_MODE environment variable)
14
+ # +---------------+--------------------------------------------------------------+
15
+ # | DEPLOY_MODE | Behavior |
16
+ # +---------------+--------------------------------------------------------------+
17
+ # | store_only | Up to the TestFlight upload (upload_to_testflight) |
18
+ # | store_prepare | After the TestFlight upload, prepare the App Store version |
19
+ # | | and metadata (upload_to_app_store, submit_for_review: false).|
20
+ # | | The build is not attached to the version at this stage; it |
21
+ # | | is attached and submitted in one go when store_submit calls |
22
+ # | | this again with build_number. |
23
+ # | store_submit | Same call as store_prepare, but also submits for review |
24
+ # | | (submit_for_review: true; the build is attached to the |
25
+ # | | version at this point) |
26
+ # +---------------+--------------------------------------------------------------+
27
+ # Unknown or empty values are treated as store_only.
26
28
  #
27
- # 워크플로우가 넘기는 환경변수
29
+ # Environment variables passed by the workflow
28
30
  # APP_STORE_CONNECT_API_KEY_ID App Store Connect API Key ID
29
31
  # APP_STORE_CONNECT_ISSUER_ID App Store Connect Issuer ID
30
- # API_KEY_PATH AuthKey_XXXX.p8 파일 경로
31
- # IPA_PATH 업로드할 .ipa 절대경로
32
- # RELEASE_NOTES TestFlight "What to Test" 문구 (changelog)
33
- # APP_IDENTIFIER 번들 ID (upload_testflight lane은 없으면 fastlane이 추론하지만,
34
- # deploy lane의 store_prepare/store_submit은 필수입니다)
35
- # DEPLOY_MODE 위 표의 배포 모드 (deploy lane만)
36
- # APP_VERSION, BUILD_NUMBER 앱 버전, 빌드 번호 (deploy lane만)
37
- # SKIP_WAITING_FOR_BUILD_PROCESSING "true"면 빌드 처리 완료를 기다리지 않음 (store_only만 적용)
32
+ # API_KEY_PATH Path to the AuthKey_XXXX.p8 file
33
+ # IPA_PATH Absolute path of the .ipa to upload
34
+ # RELEASE_NOTES TestFlight "What to Test" text (changelog)
35
+ # APP_IDENTIFIER Bundle ID (the upload_testflight lane lets fastlane infer it if missing,
36
+ # but store_prepare/store_submit in the deploy lane require it)
37
+ # DEPLOY_MODE Deploy mode from the table above (deploy lane only)
38
+ # APP_VERSION, BUILD_NUMBER App version and build number (deploy lane only)
39
+ # SKIP_WAITING_FOR_BUILD_PROCESSING If "true", do not wait for build processing (store_only only)
38
40
  #
39
- # 참고
40
- # - store_prepare/store_submit은 App Store 버전에 빌드를 연결해야 하므로 빌드 처리가 끝날 때까지
41
- # 기다립니다 (SKIP_WAITING_FOR_BUILD_PROCESSING을 무시).
42
- # - 스크린샷은 올리지 않습니다. 메타데이터는 ios/fastlane/metadata/ 아래에 파일이 있을 때만 올립니다.
43
- # 심사 제출 시 "What's New" 등 필수 항목은 이 폴더나 App Store Connect에서 미리 채워 두세요.
44
- # - store_submit에서 수출 규정 오류가 나면 Info.plist에 ITSAppUsesNonExemptEncryption을 지정하거나
45
- # upload_to_app_store에 submission_information을 추가하세요.
46
- # - store_submit은 심사 승인 후 자동 출시하지 않습니다 (automatic_release: false).
41
+ # Notes
42
+ # - store_prepare/store_submit must attach the build to the App Store version, so they wait until
43
+ # build processing finishes (SKIP_WAITING_FOR_BUILD_PROCESSING is ignored).
44
+ # - Screenshots are not uploaded. Metadata is uploaded only when files exist under ios/fastlane/metadata/.
45
+ # Fill in required items such as "What's New" in that folder or in App Store Connect before submitting for review.
46
+ # - If store_submit fails on export compliance, set ITSAppUsesNonExemptEncryption in Info.plist or
47
+ # add submission_information to upload_to_app_store.
48
+ # - store_submit does not auto-release after review approval (automatic_release: false).
47
49
 
48
50
  default_platform(:ios)
49
51
 
52
+ # Look up a user-facing message in the installed catalog so it follows `language` in version.yml.
53
+ # Finds the repo root by walking up to .github/scripts/messages.py (it reads ./version.yml from there);
54
+ # falls back to the key when the catalog is unavailable (for example when fastlane runs on a laptop).
55
+ def paw_msg(key, **params)
56
+ root = Dir.pwd
57
+ root = File.dirname(root) until File.exist?(File.join(root, ".github", "scripts", "messages.py")) || root == File.dirname(root)
58
+ out = IO.popen(["python3", File.join(root, ".github", "scripts", "messages.py"), "get", key, *params.map { |k, v| "#{k}=#{v}" }], chdir: root, err: File::NULL, &:read)
59
+ $?.success? && !out.to_s.strip.empty? ? out.chomp : key
60
+ rescue StandardError
61
+ key
62
+ end
63
+
50
64
  def require_env(name)
51
65
  value = ENV[name].to_s.strip
52
- UI.user_error!("#{name} 환경변수가 비어 있습니다. 워크플로우에서 값을 전달하는지 확인하세요.") if value.empty?
66
+ UI.user_error!(paw_msg("fastlane.env_empty", name: name)) if value.empty?
53
67
  value
54
68
  end
55
69
 
@@ -61,7 +75,7 @@ def load_api_key
61
75
  )
62
76
  end
63
77
 
64
- # APP_IDENTIFIER가 있을 때만 옵션에 포함해, 없으면 fastlane 기본 추론에 맡깁니다.
78
+ # Include APP_IDENTIFIER in the options only when set; otherwise leave it to fastlane's default inference.
65
79
  def app_identifier_option
66
80
  app_identifier = ENV["APP_IDENTIFIER"].to_s.strip
67
81
  app_identifier.empty? ? {} : { app_identifier: app_identifier }
@@ -79,19 +93,19 @@ def upload_ipa_to_testflight(api_key, skip_waiting_for_build_processing)
79
93
  end
80
94
 
81
95
  platform :ios do
82
- desc "IPA를 TestFlight에 업로드합니다 (테스트 빌드용)"
96
+ desc "Uploads the IPA to TestFlight (for test builds)"
83
97
  lane :upload_testflight do
84
98
  upload_ipa_to_testflight(load_api_key, false)
85
99
  end
86
100
 
87
- desc "IPA를 업로드하고 DEPLOY_MODE에 따라 TestFlight / 심사 준비 / 심사 제출까지 진행합니다"
101
+ desc "Uploads the IPA and, depending on DEPLOY_MODE, proceeds to TestFlight / review preparation / review submission"
88
102
  lane :deploy do
89
103
  api_key = load_api_key
90
104
  deploy_mode = ENV["DEPLOY_MODE"].to_s.strip
91
105
 
92
106
  case deploy_mode
93
107
  when "store_prepare", "store_submit"
94
- UI.message("DEPLOY_MODE=#{deploy_mode}: 빌드 처리 완료까지 기다린 뒤 App Store 버전을 준비합니다.")
108
+ UI.message(paw_msg("fastlane.ios_prepare_wait", deploy_mode: deploy_mode))
95
109
  upload_ipa_to_testflight(api_key, false)
96
110
 
97
111
  upload_to_app_store(
@@ -110,7 +124,7 @@ platform :ios do
110
124
  when "store_only"
111
125
  upload_ipa_to_testflight(api_key, ENV["SKIP_WAITING_FOR_BUILD_PROCESSING"].to_s.strip.downcase == "true")
112
126
  else
113
- UI.important("알 수 없는 DEPLOY_MODE '#{deploy_mode}' 입니다. store_only로 처리합니다.") unless deploy_mode.empty?
127
+ UI.important(paw_msg("fastlane.deploy_mode_unknown", deploy_mode: deploy_mode)) unless deploy_mode.empty?
114
128
  upload_ipa_to_testflight(api_key, ENV["SKIP_WAITING_FOR_BUILD_PROCESSING"].to_s.strip.downcase == "true")
115
129
  end
116
130
  end