project-auto-wizard 0.15.0 → 0.16.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.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +2 -2
- package/README.zh-CN.md +1 -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/messages.py +162 -26
- package/payload/scripts/version_manager.py +69 -40
- package/payload/version.yml.template +6 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +3 -0
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +64 -1
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +61 -12
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +46 -10
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +40 -11
- 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 +32 -22
- package/src/commands/doctor.js +20 -0
- package/src/commands/dry-run.js +9 -1
- package/src/commands/full.js +9 -4
- package/src/commands/interactive.js +29 -30
- package/src/commands/status.js +19 -5
- package/src/context.js +4 -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/options.js +88 -0
- package/src/core/release-options.js +6 -23
- package/src/core/types.js +15 -8
- package/src/core/version-yml.js +68 -26
- package/src/i18n/catalog/en/cli.js +3 -1
- package/src/i18n/catalog/en/commands.js +15 -0
- package/src/i18n/catalog/en/core2.js +3 -0
- package/src/i18n/catalog/en/ui.js +1 -0
- package/src/i18n/catalog/ko/cli.js +3 -1
- package/src/i18n/catalog/ko/commands.js +15 -0
- package/src/i18n/catalog/ko/core2.js +3 -0
- package/src/i18n/catalog/ko/ui.js +1 -0
- package/src/index.js +7 -3
- package/src/ui/env-plan.js +1 -1
- package/src/ui/prompts.js +9 -5
- package/src/ui/status-cards.js +2 -2
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +0 -241
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +0 -330
|
@@ -114,6 +114,7 @@ jobs:
|
|
|
114
114
|
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
|
|
115
115
|
APP_STORE_CONNECT_API_KEY_BASE64: ${{ secrets.APP_STORE_CONNECT_API_KEY_BASE64 }}
|
|
116
116
|
run: |
|
|
117
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
117
118
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
118
119
|
FAILED=0
|
|
119
120
|
MISSING=""
|
|
@@ -147,22 +148,26 @@ jobs:
|
|
|
147
148
|
env:
|
|
148
149
|
ENV_CONTENT: ${{ secrets.ENV_FILE || secrets.ENV }}
|
|
149
150
|
run: |
|
|
151
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
152
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
150
153
|
if [ "$ENV_MODE" = "dotenv" ]; then
|
|
151
154
|
printf '%s\n' "$ENV_CONTENT" > "$ENV_FILE_PATH"
|
|
152
|
-
|
|
155
|
+
m wf_flutter.env_file_created file="$ENV_FILE_PATH"
|
|
153
156
|
elif [ -n "$ENV_CONTENT" ]; then
|
|
154
157
|
DART_DEFINE_FILE="$RUNNER_TEMP/dart-define.env"
|
|
155
158
|
printf '%s\n' "$ENV_CONTENT" > "$DART_DEFINE_FILE"
|
|
156
159
|
echo "DART_DEFINE_FILE=$DART_DEFINE_FILE" >> "$GITHUB_ENV"
|
|
157
|
-
|
|
160
|
+
m wf_flutter.dart_define_prepared
|
|
158
161
|
fi
|
|
159
162
|
|
|
160
163
|
- name: Create Secrets.xcconfig file
|
|
161
164
|
run: |
|
|
165
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
166
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
162
167
|
mkdir -p ios/Flutter
|
|
163
168
|
if [ -n "${{ secrets.SECRETS_XCCONFIG }}" ]; then
|
|
164
169
|
echo "${{ secrets.SECRETS_XCCONFIG }}" > ios/Flutter/Secrets.xcconfig
|
|
165
|
-
|
|
170
|
+
m wf_flutter.secrets_xcconfig_created
|
|
166
171
|
else
|
|
167
172
|
echo "// No secrets provided" > ios/Flutter/Secrets.xcconfig
|
|
168
173
|
fi
|
|
@@ -196,6 +201,7 @@ jobs:
|
|
|
196
201
|
|
|
197
202
|
- name: Install CocoaPods
|
|
198
203
|
run: |
|
|
204
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
199
205
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
200
206
|
# A default project without plugins has no Podfile — flutter build creates one once a plugin is added
|
|
201
207
|
if [ -f ios/Podfile ]; then
|
|
@@ -209,6 +215,7 @@ jobs:
|
|
|
209
215
|
id: current_version
|
|
210
216
|
working-directory: ${{ github.workspace }} # version_manager.py must read version.yml at the repo root
|
|
211
217
|
run: |
|
|
218
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
212
219
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
213
220
|
VERSION=$(python3 .github/scripts/version_manager.py get | tail -n 1)
|
|
214
221
|
BUILD_NUMBER=$(python3 .github/scripts/version_manager.py get-code | tail -n 1)
|
|
@@ -223,6 +230,7 @@ jobs:
|
|
|
223
230
|
id: release_notes
|
|
224
231
|
working-directory: ${{ github.workspace }} # CHANGELOG.json, changelog_manager.py and final_release_notes.txt (paired with the upload step) are relative to the repo root
|
|
225
232
|
run: |
|
|
233
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
226
234
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
227
235
|
VERSION="${{ steps.current_version.outputs.version }}"
|
|
228
236
|
|
|
@@ -288,16 +296,22 @@ jobs:
|
|
|
288
296
|
# xcode-select alone does not propagate to subprocesses, so set it explicitly
|
|
289
297
|
DEVELOPER_DIR: /Applications/Xcode_${{ env.XCODE_VERSION }}.app/Contents/Developer
|
|
290
298
|
run: |
|
|
291
|
-
echo "
|
|
292
|
-
|
|
293
|
-
|
|
299
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
300
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
301
|
+
m wf_flutter.xcode_platform_check
|
|
302
|
+
if ls "$DEVELOPER_DIR/Platforms/iPhoneOS.platform/" 2>/dev/null; then
|
|
303
|
+
m wf_flutter.xcode_platform_exists
|
|
304
|
+
else
|
|
305
|
+
m wf_flutter.xcode_platform_missing
|
|
306
|
+
fi
|
|
307
|
+
m wf_flutter.xcode_install_pkgs
|
|
294
308
|
sudo installer -pkg /Applications/Xcode_${{ env.XCODE_VERSION }}.app/Contents/Resources/Packages/MobileDevice.pkg -target /
|
|
295
309
|
sudo installer -pkg /Applications/Xcode_${{ env.XCODE_VERSION }}.app/Contents/Resources/Packages/MobileDeviceDevelopment.pkg -target /
|
|
296
|
-
|
|
310
|
+
m wf_flutter.xcode_license
|
|
297
311
|
sudo xcodebuild -license accept
|
|
298
|
-
|
|
312
|
+
m wf_flutter.xcode_init
|
|
299
313
|
xcrun simctl list >/dev/null 2>&1 || true
|
|
300
|
-
|
|
314
|
+
m wf_flutter.xcode_download
|
|
301
315
|
xcodebuild -downloadPlatform iOS
|
|
302
316
|
|
|
303
317
|
- name: Download project files
|
|
@@ -310,14 +324,16 @@ jobs:
|
|
|
310
324
|
env:
|
|
311
325
|
ENV_CONTENT: ${{ secrets.ENV_FILE || secrets.ENV }}
|
|
312
326
|
run: |
|
|
327
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
328
|
+
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
313
329
|
if [ "$ENV_MODE" = "dotenv" ]; then
|
|
314
330
|
printf '%s\n' "$ENV_CONTENT" > "$ENV_FILE_PATH"
|
|
315
|
-
|
|
331
|
+
m wf_flutter.env_file_created file="$ENV_FILE_PATH"
|
|
316
332
|
elif [ -n "$ENV_CONTENT" ]; then
|
|
317
333
|
DART_DEFINE_FILE="$RUNNER_TEMP/dart-define.env"
|
|
318
334
|
printf '%s\n' "$ENV_CONTENT" > "$DART_DEFINE_FILE"
|
|
319
335
|
echo "DART_DEFINE_FILE=$DART_DEFINE_FILE" >> "$GITHUB_ENV"
|
|
320
|
-
|
|
336
|
+
m wf_flutter.dart_define_prepared
|
|
321
337
|
fi
|
|
322
338
|
|
|
323
339
|
- name: Set up Flutter
|
|
@@ -349,6 +365,7 @@ jobs:
|
|
|
349
365
|
|
|
350
366
|
- name: Install CocoaPods
|
|
351
367
|
run: |
|
|
368
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
352
369
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
353
370
|
# A default project without plugins has no Podfile — flutter build creates one once a plugin is added
|
|
354
371
|
if [ -f ios/Podfile ]; then
|
|
@@ -359,7 +376,7 @@ jobs:
|
|
|
359
376
|
fi
|
|
360
377
|
|
|
361
378
|
- name: Import Code-Signing Certificates
|
|
362
|
-
uses: Apple-Actions/import-codesign-certs@
|
|
379
|
+
uses: Apple-Actions/import-codesign-certs@v7
|
|
363
380
|
with:
|
|
364
381
|
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }}
|
|
365
382
|
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
@@ -374,6 +391,7 @@ jobs:
|
|
|
374
391
|
|
|
375
392
|
- name: Verify ExportOptions.plist
|
|
376
393
|
run: |
|
|
394
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
377
395
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
378
396
|
cd ios
|
|
379
397
|
if [ ! -f "ExportOptions.plist" ]; then
|
|
@@ -464,6 +482,7 @@ jobs:
|
|
|
464
482
|
|
|
465
483
|
- name: Verify Fastfile exists
|
|
466
484
|
run: |
|
|
485
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
467
486
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
468
487
|
if [ ! -f "ios/fastlane/Fastfile" ]; then
|
|
469
488
|
m ios_testflight.fastfile_missing
|
|
@@ -475,6 +494,7 @@ jobs:
|
|
|
475
494
|
- name: Install Fastlane
|
|
476
495
|
working-directory: ${{ env.FLUTTER_PROJECT_DIR }}/ios
|
|
477
496
|
run: |
|
|
497
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
478
498
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
479
499
|
# Use the repository's Gemfile as-is if it lists fastlane (committing Gemfile.lock is recommended). Otherwise generate one.
|
|
480
500
|
if [ -f Gemfile ] && grep -Eq "['\"]fastlane['\"]" Gemfile; then
|
|
@@ -484,7 +504,7 @@ jobs:
|
|
|
484
504
|
printf 'source "https://rubygems.org"\ngem "fastlane"\ngem "multi_json"\n' > Gemfile
|
|
485
505
|
fi
|
|
486
506
|
bundle install
|
|
487
|
-
|
|
507
|
+
m flutter_a.fastlane_installed_bundler
|
|
488
508
|
|
|
489
509
|
- name: Upload to TestFlight (+ App Store Submit if store_submit)
|
|
490
510
|
env:
|
|
@@ -492,10 +512,11 @@ jobs:
|
|
|
492
512
|
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
|
|
493
513
|
SKIP_WAITING_FOR_BUILD_PROCESSING: ${{ env.SKIP_WAITING_FOR_BUILD_PROCESSING }}
|
|
494
514
|
run: |
|
|
515
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
495
516
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
496
517
|
# Find the IPA by absolute path
|
|
497
518
|
IPA_PATH=$(find "$GITHUB_WORKSPACE/${FLUTTER_PROJECT_DIR}/ios/build/ipa" -name "*.ipa" | head -1)
|
|
498
|
-
|
|
519
|
+
m wf_flutter.ipa_found path="$IPA_PATH"
|
|
499
520
|
|
|
500
521
|
if [ ! -f "$IPA_PATH" ]; then
|
|
501
522
|
m ios_testflight.ipa_missing; ls -la ios/build/ipa/ || true; exit 1
|
|
@@ -506,7 +527,7 @@ jobs:
|
|
|
506
527
|
# Truncate to the App Store Connect "What to Test" limit (4000 bytes), with a margin (3800 bytes)
|
|
507
528
|
python3 "$GITHUB_WORKSPACE/.github/scripts/truncate_release_notes.py" "$GITHUB_WORKSPACE/final_release_notes.txt" 3800 byte
|
|
508
529
|
RELEASE_NOTES=$(cat "$GITHUB_WORKSPACE/final_release_notes.txt")
|
|
509
|
-
|
|
530
|
+
m wf_flutter.release_notes_heading
|
|
510
531
|
echo "$RELEASE_NOTES"
|
|
511
532
|
else
|
|
512
533
|
RELEASE_NOTES="$(m ios_testflight.default_notes version="${{ needs.prepare-build.outputs.version }}")"
|
|
@@ -530,6 +551,7 @@ jobs:
|
|
|
530
551
|
- name: Notify TestFlight Upload Success
|
|
531
552
|
if: success()
|
|
532
553
|
run: |
|
|
554
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
533
555
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
534
556
|
m ios_testflight.upload_ok
|
|
535
557
|
m ios_testflight.upload_version version="${{ needs.prepare-build.outputs.version }}"
|
|
@@ -539,6 +561,7 @@ jobs:
|
|
|
539
561
|
- name: Notify on Failure
|
|
540
562
|
if: failure()
|
|
541
563
|
run: |
|
|
564
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
542
565
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
543
566
|
m ios_testflight.upload_failed
|
|
544
567
|
m ios_testflight.check_logs
|
|
@@ -62,13 +62,18 @@ jobs:
|
|
|
62
62
|
- name: Checkout repository
|
|
63
63
|
uses: actions/checkout@v7
|
|
64
64
|
|
|
65
|
+
# A module without dependencies has no go.sum; caching against a missing file only makes setup-go warn
|
|
66
|
+
- name: Check for go.sum
|
|
67
|
+
id: gosum
|
|
68
|
+
run: echo "exists=$([ -f go.sum ] && echo true || echo false)" >> "$GITHUB_OUTPUT"
|
|
69
|
+
|
|
65
70
|
# Automatically use the go directive version from go.mod
|
|
66
71
|
- name: Set up Go
|
|
67
72
|
uses: actions/setup-go@v7
|
|
68
73
|
with:
|
|
69
74
|
go-version-file: ${{ env.PROJECT_PATH }}/go.mod
|
|
70
75
|
cache-dependency-path: ${{ env.PROJECT_PATH }}/go.sum
|
|
71
|
-
cache: true
|
|
76
|
+
cache: ${{ steps.gosum.outputs.exists == 'true' }}
|
|
72
77
|
|
|
73
78
|
- name: Verify go build
|
|
74
79
|
run: go build ./...
|
|
@@ -79,24 +84,27 @@ jobs:
|
|
|
79
84
|
- name: Run go test
|
|
80
85
|
run: go test ./...
|
|
81
86
|
|
|
82
|
-
# golangci-lint-action
|
|
87
|
+
# golangci-lint-action v7+ requires golangci-lint v2; if .golangci.yml is in the v1 format
|
|
83
88
|
# the project has to adjust it. version: latest picks up the newest v2 patch automatically
|
|
84
89
|
- name: golangci-lint
|
|
85
|
-
uses: golangci/golangci-lint-action@
|
|
90
|
+
uses: golangci/golangci-lint-action@v9
|
|
86
91
|
with:
|
|
87
92
|
version: latest
|
|
88
93
|
working-directory: ${{ env.PROJECT_PATH }}
|
|
89
94
|
|
|
90
95
|
- name: Build verification complete
|
|
96
|
+
env:
|
|
97
|
+
PAW_REF_NAME: ${{ github.ref_name }}
|
|
91
98
|
run: |
|
|
99
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
92
100
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
93
101
|
m cibuild.go_done
|
|
94
102
|
echo ""
|
|
95
103
|
m cibuild.info_title
|
|
96
104
|
m cibuild.info_project project="${{ env.PROJECT_NAME }}"
|
|
97
|
-
m cibuild.info_branch branch="$
|
|
105
|
+
m cibuild.info_branch branch="$PAW_REF_NAME"
|
|
98
106
|
m cibuild.info_commit sha="${{ github.sha }}"
|
|
99
|
-
m cibuild.info_time time="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
107
|
+
m cibuild.info_time time="$(date -u '+%Y-%m-%d %H:%M:%S UTC')"
|
|
100
108
|
|
|
101
109
|
# Job: CI Gate (the single job to register as a required check)
|
|
102
110
|
ci-gate:
|
|
@@ -118,6 +126,7 @@ jobs:
|
|
|
118
126
|
env:
|
|
119
127
|
RESULTS: ${{ toJSON(needs.*.result) }}
|
|
120
128
|
run: |
|
|
129
|
+
[ -f "$GITHUB_WORKSPACE/.github/scripts/messages.py" ] || { echo "::error::messages.py is missing; rerun \`npx project-auto-wizard --mode full --force\`"; exit 1; }
|
|
121
130
|
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
122
131
|
m cibuild.gate_results results="$RESULTS"
|
|
123
132
|
if echo "$RESULTS" | grep -Eq '"(failure|cancelled)"'; then
|