project-auto-wizard 0.12.0 → 0.12.1

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 (78) hide show
  1. package/README.md +3 -7
  2. package/package.json +1 -1
  3. package/payload/config/breaking-changes.json +1 -1
  4. package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
  5. package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
  6. package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
  7. package/payload/scripts/changelog_manager.py +1 -1
  8. package/payload/scripts/version_manager.py +2 -2
  9. package/payload/version.yml.template +0 -2
  10. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +0 -3
  11. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +1 -4
  12. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
  13. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
  14. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +2 -5
  15. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
  16. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
  17. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
  24. package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
  25. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
  26. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
  27. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
  28. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
  29. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
  30. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
  31. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
  32. package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
  33. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
  34. package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
  35. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
  38. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
  39. package/src/cli/args.js +1 -15
  40. package/src/cli/help.js +0 -2
  41. package/src/commands/doctor.js +5 -5
  42. package/src/commands/dry-run.js +1 -1
  43. package/src/commands/full.js +9 -10
  44. package/src/commands/interactive-flutter.js +1 -1
  45. package/src/commands/interactive.js +25 -46
  46. package/src/commands/purge.js +2 -2
  47. package/src/commands/status.js +4 -6
  48. package/src/commands/uninstall.js +3 -4
  49. package/src/context.js +4 -6
  50. package/src/core/assets.js +2 -2
  51. package/src/core/baseline.js +1 -1
  52. package/src/core/branches.js +3 -3
  53. package/src/core/breaking-check.js +1 -1
  54. package/src/core/breaking.js +1 -1
  55. package/src/core/copy/flutter-app.js +2 -2
  56. package/src/core/copy/gitignore.js +8 -8
  57. package/src/core/copy/workflows.js +24 -69
  58. package/src/core/deploy-style.js +2 -2
  59. package/src/core/detect-fs.js +11 -11
  60. package/src/core/detect.js +7 -7
  61. package/src/core/flutter-options.js +1 -1
  62. package/src/core/installed-stores.js +1 -1
  63. package/src/core/logger.js +1 -1
  64. package/src/core/paths-resolve.js +1 -1
  65. package/src/core/removal-plan.js +4 -4
  66. package/src/core/verify.js +3 -3
  67. package/src/core/version-yml.js +17 -33
  68. package/src/core/wizard-env.js +4 -4
  69. package/src/index.js +12 -14
  70. package/src/ui/banner.js +2 -2
  71. package/src/ui/env-plan.js +10 -16
  72. package/src/ui/prompts.js +9 -14
  73. package/src/ui/status-cards.js +10 -12
  74. package/src/ui/summary.js +9 -9
  75. package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
  76. package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
  77. package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
  78. package/src/core/options-ask.js +0 -102
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter iOS 테스트용 TestFlight 배포 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # 이 워크플로우는 기능 브랜치에서 수동으로 실행하여
7
5
  # 테스트용 iOS 빌드를 TestFlight에 배포합니다.
@@ -22,26 +20,22 @@
22
20
  # 3. xcodebuild -exportArchive (IPA 생성, ExportOptions.plist 사용)
23
21
  # 4. fastlane upload_testflight (ios/fastlane/Fastfile 사용)
24
22
  #
25
- # ===================================================================
26
- # 🔑 필수 GitHub Secrets
27
- # ===================================================================
23
+ # 필수 GitHub Secrets
28
24
  #
29
- # 🔐 Apple 인증서 & 프로비저닝 프로파일:
25
+ # Apple 인증서 & 프로비저닝 프로파일:
30
26
  # APPLE_CERTIFICATE_BASE64: .p12 인증서 (base64 인코딩)
31
27
  # APPLE_CERTIFICATE_PASSWORD: .p12 인증서 비밀번호
32
28
  # APPLE_PROVISIONING_PROFILE_BASE64: .mobileprovision 파일 (base64 인코딩)
33
29
  # IOS_PROVISIONING_PROFILE_NAME: 프로비저닝 프로파일 이름
34
30
  #
35
- # 🔐 App Store Connect API:
31
+ # App Store Connect API:
36
32
  # APP_STORE_CONNECT_API_KEY_ID: API Key ID (10자리)
37
33
  # APP_STORE_CONNECT_ISSUER_ID: Issuer ID (UUID 형식)
38
34
  # APP_STORE_CONNECT_API_KEY_BASE64: AuthKey_XXXXXX.p8 파일 (base64 인코딩)
39
35
  #
40
- # 📝 환경 설정 (선택):
36
+ # 환경 설정 (선택):
41
37
  # ENV_FILE (선택): .env 파일 내용
42
38
  # SECRETS_XCCONFIG (선택): ios/Flutter/Secrets.xcconfig 내용
43
- #
44
- # ===================================================================
45
39
 
46
40
  name: PROJECT-Flutter-iOS-Test-TestFlight
47
41
 
@@ -54,9 +48,7 @@ on:
54
48
  repository_dispatch:
55
49
  types: [build-ios-app]
56
50
 
57
- # ===================================================================
58
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
59
- # ===================================================================
51
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
60
52
  env:
61
53
  FLUTTER_VERSION: "3.35.5"
62
54
  XCODE_VERSION: "26.0"
@@ -69,9 +61,7 @@ env:
69
61
  ENV_FILE_PATH: ".env"
70
62
 
71
63
  jobs:
72
- # ===================================================================
73
64
  # 즉시 댓글 생성 (ubuntu-latest로 빠르게 실행)
74
- # ===================================================================
75
65
  notify-start:
76
66
  name: 진행 상황 알림
77
67
  runs-on: ubuntu-latest
@@ -183,9 +173,7 @@ jobs:
183
173
  core.setOutput('comment_id', comment.id);
184
174
  core.setOutput('start_time', startTime);
185
175
 
186
- # ===================================================================
187
176
  # 테스트 빌드 준비 (macOS 환경 설정)
188
- # ===================================================================
189
177
  prepare-test-build:
190
178
  name: 테스트 빌드 준비
191
179
  runs-on: macos-26
@@ -233,7 +221,6 @@ jobs:
233
221
  echo "ℹ️ Empty Secrets.xcconfig created (no secrets provided)"
234
222
  fi
235
223
 
236
- # 테스트 빌드 버전 설정 (version.yml에서 동적 읽기)
237
224
  - name: 테스트 빌드 버전 설정
238
225
  id: test_version
239
226
  working-directory: ${{ github.workspace }} # version_manager.py가 레포 루트 version.yml을 읽어야 함
@@ -260,7 +247,6 @@ jobs:
260
247
  echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
261
248
  echo "📋 테스트 빌드: 버전=$VERSION, 빌드번호=$BUILD_NUMBER"
262
249
 
263
- # 브랜치명에서 이슈 번호 추출 및 GitHub API로 이슈 정보 가져오기
264
250
  - name: 브랜치명에서 이슈 정보 추출
265
251
  id: issue_info
266
252
  run: |
@@ -306,7 +292,6 @@ jobs:
306
292
  fi
307
293
  fi
308
294
 
309
- # 릴리즈 노트 생성
310
295
  - name: 릴리즈 노트 생성
311
296
  id: release_notes
312
297
  working-directory: ${{ github.workspace }} # final_release_notes.txt(upload 짝)는 레포 루트 기준
@@ -365,7 +350,6 @@ jobs:
365
350
  ${{ env.FLUTTER_PROJECT_DIR }}/assets/
366
351
  retention-days: 1
367
352
 
368
- # 진행 상황 업데이트 - 준비 실패
369
353
  - name: 진행 상황 업데이트 - 준비 실패
370
354
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
371
355
  uses: actions/github-script@v9
@@ -413,9 +397,7 @@ jobs:
413
397
 
414
398
  console.log(`❌ 진행 상황 업데이트 완료: 준비 실패`);
415
399
 
416
- # ===================================================================
417
400
  # iOS 빌드 (xcodebuild 직접 사용)
418
- # ===================================================================
419
401
  build-ios-test:
420
402
  name: iOS 테스트 빌드
421
403
  runs-on: macos-26
@@ -648,7 +630,6 @@ jobs:
648
630
  ${{ env.FLUTTER_PROJECT_DIR }}/build-metadata.json
649
631
  retention-days: 1
650
632
 
651
- # 진행 상황 업데이트 - IPA 빌드 완료
652
633
  - name: 진행 상황 업데이트 - IPA 빌드 완료
653
634
  id: progress_step2
654
635
  if: success() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
@@ -704,7 +685,6 @@ jobs:
704
685
  core.setOutput('elapsed', elapsedStr);
705
686
  core.setOutput('end_time', now.toString());
706
687
 
707
- # 빌드 실패 시 progress 댓글 업데이트
708
688
  - name: 빌드 실패 시 progress 댓글 업데이트
709
689
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
710
690
  uses: actions/github-script@v9
@@ -762,9 +742,7 @@ jobs:
762
742
 
763
743
  console.log(`❌ 진행 상황 업데이트 완료: IPA 빌드 실패`);
764
744
 
765
- # ===================================================================
766
745
  # TestFlight 배포 (ios/fastlane/Fastfile 사용)
767
- # ===================================================================
768
746
  deploy-testflight-test:
769
747
  name: TestFlight 테스트 배포
770
748
  runs-on: macos-26
@@ -884,7 +862,6 @@ jobs:
884
862
  echo "❌ TestFlight 테스트 빌드 업로드 실패!"
885
863
  echo "로그를 확인해주세요."
886
864
 
887
- # 진행 상황 최종 업데이트 - 성공
888
865
  - name: 진행 상황 최종 업데이트 - 성공
889
866
  if: success() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
890
867
  uses: actions/github-script@v9
@@ -947,7 +924,6 @@ jobs:
947
924
 
948
925
  console.log(`✅ 진행 상황 최종 업데이트 완료: 전체 성공 (${totalElapsed})`);
949
926
 
950
- # 진행 상황 최종 업데이트 - 실패
951
927
  - name: 진행 상황 최종 업데이트 - 실패
952
928
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
953
929
  uses: actions/github-script@v9
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter iOS TestFlight 자동 배포 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # 이 워크플로우는 Flutter iOS 앱을 빌드하여 TestFlight에 자동 배포합니다.
7
5
  #
@@ -14,30 +12,26 @@
14
12
  # 3. xcodebuild -exportArchive (IPA 생성, ExportOptions.plist 사용)
15
13
  # 4. fastlane deploy (ios/fastlane/Fastfile 사용, DEPLOY_MODE에 따라 TestFlight/심사 제출)
16
14
  #
17
- # ===================================================================
18
- # 🔑 필수 GitHub Secrets
19
- # ===================================================================
15
+ # 필수 GitHub Secrets
20
16
  #
21
- # 🔐 Apple 인증서 & 프로비저닝 프로파일:
17
+ # Apple 인증서 & 프로비저닝 프로파일:
22
18
  # APPLE_CERTIFICATE_BASE64: .p12 인증서 (base64 인코딩)
23
19
  # APPLE_CERTIFICATE_PASSWORD: .p12 인증서 비밀번호
24
20
  # APPLE_PROVISIONING_PROFILE_BASE64: .mobileprovision 파일 (base64 인코딩)
25
21
  # IOS_PROVISIONING_PROFILE_NAME: 프로비저닝 프로파일 이름
26
22
  #
27
- # 🔑 App Store Connect API:
23
+ # App Store Connect API:
28
24
  # APP_STORE_CONNECT_API_KEY_ID: API Key ID (10자리)
29
25
  # APP_STORE_CONNECT_ISSUER_ID: Issuer ID (UUID 형식)
30
26
  # APP_STORE_CONNECT_API_KEY_BASE64: AuthKey_XXXXXX.p8 파일 (base64 인코딩)
31
27
  # IOS_BUNDLE_ID (Secret 우선, 없으면 Variable): 앱 번들 ID —
32
28
  # store_prepare/store_submit을 쓰면 필수(비어 있으면 Fastfile이 명확한 오류로 중단)
33
29
  #
34
- # 📝 환경 설정 (선택):
30
+ # 환경 설정 (선택):
35
31
  # ENV_FILE (선택): .env 파일 내용
36
32
  # SECRETS_XCCONFIG (선택): ios/Flutter/Secrets.xcconfig 내용
37
33
  #
38
- # ===================================================================
39
- # 🛠️ 초기 설정 방법
40
- # ===================================================================
34
+ # 초기 설정 방법
41
35
  #
42
36
  # 1. GitHub Secrets 설정 (위 목록 참고)
43
37
  #
@@ -46,8 +40,6 @@
46
40
  # git commit -m "chore: iOS TestFlight 배포 설정"
47
41
  #
48
42
  # 3. {{MAIN_BRANCH}} 브랜치로 푸시하여 배포 시작
49
- #
50
- # ===================================================================
51
43
 
52
44
  name: PROJECT-iOS-TestFlight-Deploy
53
45
 
@@ -67,9 +59,7 @@ on:
67
59
  - store_prepare
68
60
  - store_submit
69
61
 
70
- # ============================================
71
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
72
- # ============================================
62
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
73
63
  env:
74
64
  FLUTTER_PROJECT_DIR: "." # @wizard auto:flutter-root
75
65
  # 환경변수 전달 방식 (dart-define | dotenv) — 설치 시 선택값으로 자동 설정
@@ -78,20 +68,14 @@ env:
78
68
  XCODE_VERSION: "26.0"
79
69
  PROJECT_TYPE: "flutter"
80
70
 
81
- # ============================================
82
- # 📝 환경 파일 설정
83
- # ============================================
71
+ # 환경 파일 설정
84
72
  # dotenv 모드에서 .env 파일을 만들 경로 (Flutter 루트 기준)
85
73
  ENV_FILE_PATH: ".env"
86
74
 
87
- # ============================================
88
- # 📝 TestFlight Changelog 설정
89
- # ============================================
75
+ # TestFlight Changelog 설정
90
76
  SKIP_WAITING_FOR_BUILD_PROCESSING: "false"
91
77
 
92
- # ============================================
93
- # 📝 배포 모드 (store_only | store_prepare | store_submit)
94
- # ============================================
78
+ # 배포 모드 (store_only | store_prepare | store_submit)
95
79
  DEPLOY_MODE: ${{ github.event.inputs.deploy_mode || vars.IOS_DEPLOY_MODE || 'store_only' }} # @wizard fallback:ios-deploy-mode
96
80
 
97
81
  jobs:
@@ -230,9 +214,7 @@ jobs:
230
214
  retention-days: 1
231
215
  if-no-files-found: error
232
216
 
233
- # ============================================
234
217
  # iOS 빌드 (xcodebuild 직접 사용)
235
- # ============================================
236
218
  build-ios:
237
219
  name: iOS 앱 빌드
238
220
  runs-on: macos-26
@@ -392,9 +374,7 @@ jobs:
392
374
  retention-days: 1
393
375
  if-no-files-found: error
394
376
 
395
- # ============================================
396
377
  # TestFlight 배포 (ios/fastlane/Fastfile 사용)
397
- # ============================================
398
378
  deploy-testflight:
399
379
  name: TestFlight 배포
400
380
  runs-on: macos-26
@@ -1,20 +1,11 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Go 빌드 검증 워크플로우 (CI Only)
4
- # ===================================================================
5
- #
6
- # 설명:
7
3
  # - {{DEVELOP_BRANCH}} 브랜치에 push/PR 시 go build/vet/test/lint로 검증
8
4
  # - Dockerfile이 필요 없어 CLI 도구·라이브러리 등 배포하지 않는 Go 프로젝트도 사용 가능
9
5
  # - go.mod의 go 지시자 버전을 자동으로 사용 (버전 하드코딩 없음)
10
- #
11
- # ===================================================================
12
6
 
13
7
  name: PROJECT-GO-CI
14
8
 
15
- # ===================================================================
16
- # 트리거 설정
17
- # ===================================================================
18
9
  on:
19
10
  push:
20
11
  branches:
@@ -24,9 +15,6 @@ on:
24
15
  - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치로의 PR 시 빌드 검증
25
16
  workflow_dispatch: # 수동 실행 허용
26
17
 
27
- # ===================================================================
28
- # 환경 변수 설정
29
- # ===================================================================
30
18
  env:
31
19
  # 프로젝트 고유 식별자
32
20
  PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
@@ -34,9 +22,7 @@ env:
34
22
  PROJECT_PATH: "." # @wizard auto:project-path
35
23
 
36
24
  jobs:
37
- # ===================================================================
38
25
  # 변경 감지 (모노레포에서 이 프로젝트 경로가 바뀌었는지 판별)
39
- # ===================================================================
40
26
  changes:
41
27
  name: 변경 감지
42
28
  runs-on: ubuntu-latest
@@ -58,9 +44,7 @@ jobs:
58
44
  project:
59
45
  - '${{ env.PROJECT_PATH == '.' && '**' || format('{0}/**', env.PROJECT_PATH) }}'
60
46
 
61
- # ===================================================================
62
- # 빌드 검증 작업
63
- # ===================================================================
47
+ # Job: 빌드 검증
64
48
  build-check:
65
49
  name: Go 빌드 검증
66
50
  runs-on: ubuntu-latest
@@ -68,37 +52,32 @@ jobs:
68
52
  if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.project == 'true' }}
69
53
 
70
54
  steps:
71
- # 1. 소스코드 체크아웃
72
55
  - name: 코드 체크아웃
73
56
  uses: actions/checkout@v7
74
57
 
75
- # 2. Go 툴체인 설정 (go.mod의 go 지시자 버전 자동 사용)
58
+ # go.mod의 go 지시자 버전 자동 사용
76
59
  - name: Go 설정
77
60
  uses: actions/setup-go@v7
78
61
  with:
79
62
  go-version-file: go.mod
80
63
  cache: true
81
64
 
82
- # 3. 빌드 검증
83
65
  - name: go build 검증
84
66
  run: go build ./...
85
67
 
86
- # 4. 정적 분석
87
68
  - name: go vet 검증
88
69
  run: go vet ./...
89
70
 
90
- # 5. 테스트 실행
91
71
  - name: go test 실행
92
72
  run: go test ./...
93
73
 
94
- # 6. 린트 (v8은 golangci-lint v2 계열을 요구 — .golangci.yml이 v1 형식이면
95
- # 프로젝트에서 별도 조정 필요. version: latest는 v2 최신 패치를 자동으로 받는다)
74
+ # golangci-lint v8은 golangci-lint v2 계열을 요구 — .golangci.yml이 v1 형식이면
75
+ # 프로젝트에서 별도 조정 필요. version: latest는 v2 최신 패치를 자동으로 받는다
96
76
  - name: golangci-lint
97
77
  uses: golangci/golangci-lint-action@v8
98
78
  with:
99
79
  version: latest
100
80
 
101
- # 7. 빌드 검증 완료 메시지
102
81
  - name: 빌드 검증 완료
103
82
  run: |
104
83
  echo "✅ Go 빌드 검증이 성공적으로 완료되었습니다!"
@@ -109,9 +88,7 @@ jobs:
109
88
  echo " 📝 커밋: ${{ github.sha }}"
110
89
  echo " ⏰ 검증 시간: $(date '+%Y-%m-%d %H:%M:%S')"
111
90
 
112
- # ===================================================================
113
- # CI Gate (required check로 등록할 단일 job)
114
- # ===================================================================
91
+ # Job: CI Gate (required check로 등록할 단일 job)
115
92
  ci-gate:
116
93
  name: CI Gate
117
94
  if: ${{ always() }}