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.
- package/README.md +1 -1
- package/bin/project-auto-wizard.js +18 -4
- package/package.json +2 -2
- package/payload/config/breaking-changes.json +28 -14
- package/payload/config/wizard-prompts.yml +102 -46
- package/payload/flutter-app/android/fastlane/Fastfile.playstore +44 -32
- package/payload/flutter-app/ios/ExportOptions.plist +8 -8
- package/payload/flutter-app/ios/fastlane/Fastfile +57 -43
- package/payload/scripts/changelog_manager.py +296 -257
- package/payload/scripts/issue_helper.py +54 -50
- package/payload/scripts/messages.py +2279 -0
- package/payload/scripts/truncate_release_notes.py +7 -6
- package/payload/scripts/version_manager.py +64 -61
- package/payload/version.yml.template +2 -1
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +17 -12
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +59 -34
- package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +17 -15
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +17 -10
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +54 -44
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +24 -17
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +194 -184
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +226 -213
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +46 -42
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +334 -241
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +152 -128
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +246 -188
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +353 -238
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +96 -85
- package/payload/workflows/go/PROJECT-GO-CI.yaml +47 -36
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +945 -508
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +155 -133
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +76 -60
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +97 -77
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +62 -47
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +942 -505
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +148 -126
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +86 -70
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +112 -92
- package/payload/workflows/spring/PROJECT-SPRING-CI.yml +112 -82
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +180 -150
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +161 -131
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +970 -549
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +193 -162
- package/src/cli/args.js +98 -52
- package/src/cli/help.js +8 -41
- package/src/commands/doctor.js +85 -89
- package/src/commands/dry-run.js +63 -43
- package/src/commands/full.js +79 -77
- package/src/commands/install-settings.js +16 -15
- package/src/commands/interactive-flutter.js +20 -19
- package/src/commands/interactive.js +135 -132
- package/src/commands/purge.js +47 -42
- package/src/commands/status.js +36 -36
- package/src/commands/uninstall.js +43 -41
- package/src/context.js +12 -11
- package/src/core/assets.js +12 -11
- package/src/core/baseline.js +27 -27
- package/src/core/branches.js +29 -27
- package/src/core/branding.js +7 -6
- package/src/core/breaking-check.js +22 -21
- package/src/core/breaking.js +15 -8
- package/src/core/copy/app-files.js +5 -4
- package/src/core/copy/flutter-app.js +8 -8
- package/src/core/copy/gitignore.js +58 -50
- package/src/core/copy/readme.js +45 -35
- package/src/core/copy/simple.js +16 -15
- package/src/core/copy/workflows.js +131 -124
- package/src/core/deploy-style.js +51 -48
- package/src/core/detect-fs.js +57 -57
- package/src/core/detect.js +67 -65
- package/src/core/errors.js +2 -2
- package/src/core/flutter-doctor.js +17 -16
- package/src/core/flutter-hooks.js +33 -32
- package/src/core/flutter-options.js +34 -33
- package/src/core/fsutil.js +12 -12
- package/src/core/installed-stores.js +4 -4
- package/src/core/logger.js +42 -40
- package/src/core/paths-resolve.js +88 -86
- package/src/core/paths.js +10 -10
- package/src/core/release-options.js +8 -8
- package/src/core/removal-exec.js +14 -13
- package/src/core/removal-plan.js +37 -37
- package/src/core/types.js +47 -47
- package/src/core/verify.js +44 -38
- package/src/core/version-yml.js +76 -68
- package/src/core/wizard-env.js +46 -46
- package/src/core/wizard-labels.js +63 -41
- package/src/i18n/catalog/en/cli.js +50 -0
- package/src/i18n/catalog/en/commands.js +187 -0
- package/src/i18n/catalog/en/copy.js +19 -0
- package/src/i18n/catalog/en/core.js +74 -0
- package/src/i18n/catalog/en/core2.js +15 -0
- package/src/i18n/catalog/en/ui.js +221 -0
- package/src/i18n/catalog/en.js +12 -0
- package/src/i18n/catalog/index.js +5 -0
- package/src/i18n/catalog/ko/cli.js +50 -0
- package/src/i18n/catalog/ko/commands.js +187 -0
- package/src/i18n/catalog/ko/copy.js +19 -0
- package/src/i18n/catalog/ko/core.js +74 -0
- package/src/i18n/catalog/ko/core2.js +15 -0
- package/src/i18n/catalog/ko/ui.js +221 -0
- package/src/i18n/catalog/ko.js +10 -0
- package/src/i18n/index.js +44 -0
- package/src/i18n/languages.js +9 -0
- package/src/index.js +128 -94
- package/src/ui/ansi.js +7 -7
- package/src/ui/banner.js +7 -6
- package/src/ui/env-plan.js +82 -81
- package/src/ui/prompts.js +97 -122
- package/src/ui/readline-engine.js +59 -58
- package/src/ui/status-cards.js +37 -31
- package/src/ui/summary.js +89 -88
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# Flutter Android
|
|
2
|
+
# Flutter Android self-hosted server (SMB) deploy workflow
|
|
3
3
|
#
|
|
4
|
-
# {{MAIN_BRANCH}}
|
|
5
|
-
#
|
|
4
|
+
# On a push to the {{MAIN_BRANCH}} branch, builds the Android APK and
|
|
5
|
+
# deploys it to an SMB share on your own server (e.g. Synology NAS, Linux).
|
|
6
6
|
#
|
|
7
|
-
#
|
|
8
|
-
# ENV_FILE
|
|
9
|
-
# DEBUG_KEYSTORE (
|
|
10
|
-
# GOOGLE_SERVICES_JSON (
|
|
11
|
-
# SERVER_HOST:
|
|
12
|
-
# SERVER_USER: SMB
|
|
13
|
-
# SERVER_PASSWORD: SMB
|
|
7
|
+
# Required GitHub Secrets
|
|
8
|
+
# ENV_FILE or ENV: contents of the .env file (either one; ENV_FILE takes precedence)
|
|
9
|
+
# DEBUG_KEYSTORE (optional): signing keystore (base64, password android, alias androiddebugkey) - if missing, each build is signed with a fresh debug key
|
|
10
|
+
# GOOGLE_SERVICES_JSON (optional): Firebase google-services.json
|
|
11
|
+
# SERVER_HOST: server host (SMB address)
|
|
12
|
+
# SERVER_USER: SMB user name
|
|
13
|
+
# SERVER_PASSWORD: SMB password
|
|
14
14
|
|
|
15
15
|
name: PROJECT-Android-SelfHosted-CICD
|
|
16
16
|
|
|
17
17
|
on:
|
|
18
18
|
push:
|
|
19
19
|
branches: ["{{MAIN_BRANCH}}"]
|
|
20
|
-
# @wizard paths-anchor (
|
|
21
|
-
workflow_dispatch: #
|
|
20
|
+
# @wizard paths-anchor (in a monorepo the installer injects a paths filter here)
|
|
21
|
+
workflow_dispatch: # add a manual run option
|
|
22
22
|
|
|
23
|
-
#
|
|
23
|
+
# Project settings (edit the values below)
|
|
24
24
|
env:
|
|
25
|
-
#
|
|
25
|
+
# Project name (used in the APK file name, artifact name, and history file name)
|
|
26
26
|
APP_ARTIFACT_NAME: "__APP_ARTIFACT_NAME__" # @wizard ask:@repo
|
|
27
|
-
# Flutter SDK
|
|
28
|
-
#
|
|
27
|
+
# Flutter SDK version - leave empty to use the latest stable channel (matches the SDK constraint of a fresh flutter create project).
|
|
28
|
+
# To pin a version, write it like "3.38.9". It must satisfy the environment.sdk range in pubspec.yaml.
|
|
29
29
|
FLUTTER_VERSION: ""
|
|
30
30
|
JAVA_VERSION: "__JAVA_VERSION__" # @wizard ask:17
|
|
31
|
-
# Flutter
|
|
31
|
+
# Flutter root path (relative to the repo root): "." for a single repo, "app" etc. for a monorepo - set automatically at install
|
|
32
32
|
FLUTTER_PROJECT_DIR: "." # @wizard auto:flutter-root
|
|
33
|
-
#
|
|
33
|
+
# How env vars are passed (dart-define | dotenv) - set automatically from the install-time choice
|
|
34
34
|
ENV_MODE: "dart-define" # @wizard auto:flutter-env-mode
|
|
35
|
-
# SMB
|
|
36
|
-
SMB_PORT: "44445" #
|
|
35
|
+
# SMB server settings (your own server - Synology NAS, Linux, etc.)
|
|
36
|
+
SMB_PORT: "44445" # default 445
|
|
37
37
|
SMB_SHARE: "web"
|
|
38
|
-
SMB_PATH_IOS: "/your-project/ios/download" # SMB
|
|
38
|
+
SMB_PATH_IOS: "/your-project/ios/download" # SMB path: used in the form /{APP_ARTIFACT_NAME}/ios/download
|
|
39
39
|
jobs:
|
|
40
40
|
build-android:
|
|
41
41
|
name: Build Android APK
|
|
42
42
|
runs-on: ubuntu-latest
|
|
43
|
-
#
|
|
43
|
+
# Run only when the CHANGELOG workflow succeeded
|
|
44
44
|
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name != 'workflow_run' }}
|
|
45
45
|
defaults:
|
|
46
46
|
run:
|
|
@@ -52,52 +52,54 @@ jobs:
|
|
|
52
52
|
with:
|
|
53
53
|
fetch-depth: 0
|
|
54
54
|
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
# DEBUG_KEYSTORE
|
|
58
|
-
- name:
|
|
55
|
+
# Without the upload Secrets the run would only fail at the SMB upload after the whole build, so report the missing names first and stop
|
|
56
|
+
# Same condition as the deploy job - a manual run on a non-deploy branch only builds
|
|
57
|
+
# DEBUG_KEYSTORE and GOOGLE_SERVICES_JSON are optional, so they are not checked
|
|
58
|
+
- name: Pre-deploy check (Secrets)
|
|
59
59
|
if: github.ref == 'refs/heads/{{MAIN_BRANCH}}'
|
|
60
60
|
env:
|
|
61
61
|
SERVER_HOST: ${{ secrets.SERVER_HOST }}
|
|
62
62
|
SERVER_USER: ${{ secrets.SERVER_USER }}
|
|
63
63
|
SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
|
|
64
64
|
run: |
|
|
65
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
65
66
|
MISSING=""
|
|
66
67
|
for NAME in SERVER_HOST SERVER_USER SERVER_PASSWORD; do
|
|
67
68
|
[ -n "${!NAME}" ] || MISSING="$MISSING $NAME"
|
|
68
69
|
done
|
|
69
70
|
if [ -n "$MISSING" ]; then
|
|
70
|
-
echo "::error title
|
|
71
|
+
echo "::error title=$(m flutter_a.precheck_missing_title)::$(m flutter_a.precheck_missing_body missing="$MISSING")"
|
|
71
72
|
exit 1
|
|
72
73
|
fi
|
|
73
|
-
|
|
74
|
+
m flutter_a.precheck_passed
|
|
74
75
|
|
|
75
76
|
- name: List repository contents
|
|
76
77
|
run: |
|
|
77
78
|
echo "Repository checked out"
|
|
78
79
|
ls -la
|
|
79
80
|
|
|
80
|
-
# Debug
|
|
81
|
+
# Debug keystore setup - this workflow signs with DEBUG_KEYSTORE (password android, alias androiddebugkey)
|
|
81
82
|
- name: Setup Debug Keystore
|
|
82
83
|
id: signing
|
|
83
84
|
env:
|
|
84
85
|
DEBUG_KEYSTORE: ${{ secrets.DEBUG_KEYSTORE }}
|
|
85
86
|
run: |
|
|
86
|
-
|
|
87
|
-
#
|
|
87
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
88
|
+
# This is for internal distribution, so the build proceeds even without the Secret - the runner signs with a freshly created debug key,
|
|
89
|
+
# so the signature differs per build and cannot update an existing install; leave that as a warning.
|
|
88
90
|
if [ -z "$DEBUG_KEYSTORE" ]; then
|
|
89
|
-
echo "::warning
|
|
91
|
+
echo "::warning::$(m flutter_a.debug_keystore_empty)"
|
|
90
92
|
echo "mode=default" >> "$GITHUB_OUTPUT"
|
|
91
93
|
exit 0
|
|
92
94
|
fi
|
|
93
|
-
#
|
|
95
|
+
# A keystore that is set but broken is not skipped silently; fail here
|
|
94
96
|
mkdir -p ~/.android
|
|
95
97
|
printf '%s' "$DEBUG_KEYSTORE" | base64 -d > ~/.android/debug.keystore
|
|
96
98
|
keytool -list -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
|
|
97
99
|
echo "mode=keystore" >> "$GITHUB_OUTPUT"
|
|
98
|
-
|
|
100
|
+
m flutter_a.debug_keystore_created
|
|
99
101
|
|
|
100
|
-
#
|
|
102
|
+
# Prepare env vars - a .env file when ENV_MODE=dotenv, a temp file outside the project (--dart-define-from-file) for dart-define
|
|
101
103
|
- name: Prepare env file
|
|
102
104
|
env:
|
|
103
105
|
ENV_CONTENT: ${{ secrets.ENV_FILE || secrets.ENV }}
|
|
@@ -116,7 +118,7 @@ jobs:
|
|
|
116
118
|
if: steps.signing.outputs.mode == 'keystore'
|
|
117
119
|
run: |
|
|
118
120
|
mkdir -p android/app/keystore
|
|
119
|
-
#
|
|
121
|
+
# Reuse the keystore validated in the previous step
|
|
120
122
|
cp ~/.android/debug.keystore android/app/keystore/key.jks
|
|
121
123
|
echo "Keystore created from DEBUG_KEYSTORE"
|
|
122
124
|
ls -la android/app/keystore
|
|
@@ -127,7 +129,7 @@ jobs:
|
|
|
127
129
|
echo "key.properties created"
|
|
128
130
|
ls -la android/
|
|
129
131
|
|
|
130
|
-
# google-services.json
|
|
132
|
+
# Create google-services.json (optional) - no empty file is written when the Secret is empty
|
|
131
133
|
- name: Create google-services.json
|
|
132
134
|
env:
|
|
133
135
|
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
|
|
@@ -181,12 +183,13 @@ jobs:
|
|
|
181
183
|
- name: Setup Gradle
|
|
182
184
|
working-directory: ${{ env.FLUTTER_PROJECT_DIR }}/android
|
|
183
185
|
run: |
|
|
184
|
-
|
|
186
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
187
|
+
# The default flutter create .gitignore does not commit gradlew - flutter build creates it when missing
|
|
185
188
|
if [ -f gradlew ]; then
|
|
186
189
|
chmod +x gradlew
|
|
187
190
|
echo "Gradle wrapper permissions set"
|
|
188
191
|
else
|
|
189
|
-
|
|
192
|
+
m flutter_a.gradlew_missing
|
|
190
193
|
fi
|
|
191
194
|
|
|
192
195
|
- name: Set up Java
|
|
@@ -203,6 +206,7 @@ jobs:
|
|
|
203
206
|
- name: Get version info and calculate short commit hash
|
|
204
207
|
id: version_info
|
|
205
208
|
run: |
|
|
209
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
206
210
|
CURRENT_VERSION=$(grep 'version:' pubspec.yaml | sed 's/version: //' | tr -d ' ')
|
|
207
211
|
VERSION=$(echo $CURRENT_VERSION | cut -d'+' -f1)
|
|
208
212
|
BUILD_NUMBER=$(echo $CURRENT_VERSION | cut -d'+' -f2)
|
|
@@ -213,10 +217,10 @@ jobs:
|
|
|
213
217
|
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
|
|
214
218
|
echo "SHORT_COMMIT_HASH=$SHORT_COMMIT_HASH" >> $GITHUB_ENV
|
|
215
219
|
|
|
216
|
-
|
|
217
|
-
|
|
220
|
+
m flutter_a.current_version current_version="$CURRENT_VERSION"
|
|
221
|
+
m flutter_a.short_commit_hash short_commit_hash="$SHORT_COMMIT_HASH"
|
|
218
222
|
|
|
219
|
-
# APK
|
|
223
|
+
# APK build (keeps the release build - built directly with flutter)
|
|
220
224
|
- name: Build APK
|
|
221
225
|
run: |
|
|
222
226
|
flutter build apk --release ${DART_DEFINE_FILE:+--dart-define-from-file="$DART_DEFINE_FILE"}
|