project-auto-wizard 0.11.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.
- package/README.md +24 -21
- package/package.json +2 -2
- package/payload/config/breaking-changes.json +1 -1
- package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
- package/payload/scripts/changelog_manager.py +84 -31
- package/payload/scripts/version_manager.py +2 -2
- package/payload/version.yml.template +4 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +30 -10
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +37 -12
- package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +27 -6
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
- package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
- package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
- package/src/cli/args.js +8 -15
- package/src/cli/help.js +2 -3
- package/src/commands/doctor.js +9 -8
- package/src/commands/dry-run.js +1 -1
- package/src/commands/full.js +9 -10
- package/src/commands/interactive-flutter.js +1 -1
- package/src/commands/interactive.js +34 -46
- package/src/commands/purge.js +2 -2
- package/src/commands/status.js +5 -6
- package/src/commands/uninstall.js +3 -4
- package/src/context.js +5 -6
- package/src/core/assets.js +2 -2
- package/src/core/baseline.js +1 -1
- package/src/core/branches.js +3 -3
- package/src/core/breaking-check.js +1 -1
- package/src/core/breaking.js +1 -1
- package/src/core/copy/flutter-app.js +2 -2
- package/src/core/copy/gitignore.js +8 -8
- package/src/core/copy/workflows.js +24 -69
- package/src/core/deploy-style.js +2 -2
- package/src/core/detect-fs.js +11 -11
- package/src/core/detect.js +7 -7
- package/src/core/flutter-options.js +1 -1
- package/src/core/installed-stores.js +1 -1
- package/src/core/logger.js +1 -1
- package/src/core/paths-resolve.js +1 -1
- package/src/core/removal-plan.js +4 -4
- package/src/core/verify.js +4 -4
- package/src/core/version-yml.js +27 -34
- package/src/core/wizard-env.js +4 -4
- package/src/index.js +14 -14
- package/src/ui/banner.js +2 -2
- package/src/ui/env-plan.js +10 -16
- package/src/ui/prompts.js +9 -14
- package/src/ui/status-cards.js +10 -12
- package/src/ui/summary.js +13 -13
- package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
- package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
- 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
|
# 이 워크플로우는 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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
95
|
-
#
|
|
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() }}
|
|
@@ -1,42 +1,30 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# ===================================================================
|
|
3
2
|
# Go PR Preview (SSH + Docker + Traefik)
|
|
4
|
-
#
|
|
3
|
+
# PR 또는 Issue 코멘트 명령어를 통해 Preview 환경을 자동으로 관리합니다. Traefik 리버스 프록시로 동적 라우팅됩니다.
|
|
5
4
|
#
|
|
6
|
-
#
|
|
7
|
-
# Traefik 리버스 프록시를 통해 동적 라우팅됩니다.
|
|
8
|
-
#
|
|
9
|
-
# ===================================================================
|
|
10
|
-
# 🔑 필수 GitHub Secrets
|
|
11
|
-
# ===================================================================
|
|
5
|
+
# 필수 GitHub Secrets
|
|
12
6
|
# ENV_FILE: .env 파일 전체 내용
|
|
13
|
-
# DOCKERHUB_USERNAME: Docker Hub 사용자명
|
|
14
|
-
#
|
|
15
|
-
# SERVER_HOST: 서버 호스트(SSH 접속 주소)
|
|
16
|
-
# SERVER_USER: SSH 사용자명
|
|
7
|
+
# DOCKERHUB_USERNAME / DOCKERHUB_TOKEN: Docker Hub 사용자명 / 액세스 토큰
|
|
8
|
+
# SERVER_HOST / SERVER_USER: 서버 호스트(SSH 접속 주소) / SSH 사용자명
|
|
17
9
|
# SERVER_PASSWORD: SSH 비밀번호 (SSH_AUTH_METHOD=password일 때)
|
|
18
10
|
# SSH_KEY: SSH 개인키 .pem 내용 (SSH_AUTH_METHOD=key일 때, AWS EC2 등)
|
|
19
|
-
# ===================================================================
|
|
20
11
|
#
|
|
21
|
-
#
|
|
12
|
+
# 사용법
|
|
22
13
|
# /wizard server build - Preview 빌드 및 배포
|
|
23
14
|
# /wizard server destroy - Preview 환경 삭제
|
|
24
15
|
# /wizard server status - 현재 상태 확인
|
|
25
16
|
#
|
|
26
|
-
#
|
|
17
|
+
# 리소스 네이밍
|
|
27
18
|
# - 컨테이너: {PROJECT_NAME}-pr-{번호}
|
|
28
19
|
# - 도메인: {PROJECT_NAME}-pr-{번호}.pr.example.com
|
|
29
20
|
#
|
|
30
|
-
#
|
|
21
|
+
# 사전 요구사항
|
|
31
22
|
# - Traefik 컨테이너 실행 중 (traefik-network)
|
|
32
23
|
# - 와일드카드 DNS 설정: *.pr.example.com → 서버
|
|
33
|
-
# ===================================================================
|
|
34
24
|
|
|
35
25
|
name: PROJECT-GO-PR-PREVIEW
|
|
36
26
|
|
|
37
|
-
#
|
|
38
|
-
# ⚠️ [영역 1] 프로젝트별 설정 - 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
|
|
39
|
-
# ===================================================================
|
|
27
|
+
# [영역 1] 프로젝트별 설정 - 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
|
|
40
28
|
env:
|
|
41
29
|
# 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용)
|
|
42
30
|
PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
|
|
@@ -45,7 +33,7 @@ env:
|
|
|
45
33
|
DOCKERFILE_PATH: './Dockerfile'
|
|
46
34
|
INTERNAL_PORT: '8080'
|
|
47
35
|
|
|
48
|
-
#
|
|
36
|
+
# 볼륨 마운트 설정 (프로젝트별 수정 필요, 빈값이면 마운트 안함)
|
|
49
37
|
PROJECT_TARGET_DIR: "__PROJECT_TARGET_DIR__" # @wizard ask:/volume1/projects/__PROJECT_NAME__
|
|
50
38
|
PROJECT_MNT_DIR: "__PROJECT_MNT_DIR__" # @wizard ask:/mnt/__PROJECT_NAME__
|
|
51
39
|
|
|
@@ -54,7 +42,7 @@ env:
|
|
|
54
42
|
PREVIEW_DOMAIN_SUFFIX: "__PREVIEW_DOMAIN_SUFFIX__" # @wizard ask:pr.example.com
|
|
55
43
|
PREVIEW_PORT: '8079'
|
|
56
44
|
|
|
57
|
-
#
|
|
45
|
+
# SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
|
|
58
46
|
# password → SERVER_PASSWORD secret 사용
|
|
59
47
|
# key → SSH_KEY secret 사용 (.pem 파일 전체 내용을 secret 값으로)
|
|
60
48
|
SSH_AUTH_METHOD: "password" # @wizard ask:password
|
|
@@ -80,9 +68,6 @@ env:
|
|
|
80
68
|
HEALTH_CHECK_LOG_PATTERN: 'listening on'
|
|
81
69
|
API_DOCS_PATH: ''
|
|
82
70
|
|
|
83
|
-
# ===================================================================
|
|
84
|
-
# 트리거 설정
|
|
85
|
-
# ===================================================================
|
|
86
71
|
on:
|
|
87
72
|
issue_comment:
|
|
88
73
|
types: [created] # PR 댓글 + Issue 댓글
|
|
@@ -96,13 +81,8 @@ permissions:
|
|
|
96
81
|
pull-requests: write
|
|
97
82
|
issues: write
|
|
98
83
|
|
|
99
|
-
# ===================================================================
|
|
100
|
-
# Jobs
|
|
101
|
-
# ===================================================================
|
|
102
84
|
jobs:
|
|
103
|
-
# -----------------------------------------------------------------
|
|
104
85
|
# Job 1: 명령어 파싱 (PR 댓글 + Issue 댓글 모두 지원)
|
|
105
|
-
# -----------------------------------------------------------------
|
|
106
86
|
check-command:
|
|
107
87
|
name: 명령어 확인
|
|
108
88
|
if: github.event_name == 'issue_comment'
|
|
@@ -182,9 +162,7 @@ jobs:
|
|
|
182
162
|
echo "ℹ️ /wizard server 명령어가 아님"
|
|
183
163
|
fi
|
|
184
164
|
|
|
185
|
-
# -----------------------------------------------------------------
|
|
186
165
|
# Job 2-1: 빌드 & 배포 (PR 댓글에서 실행)
|
|
187
|
-
# -----------------------------------------------------------------
|
|
188
166
|
build-preview-pr:
|
|
189
167
|
name: Preview 빌드 & 배포 (PR)
|
|
190
168
|
needs: check-command
|
|
@@ -209,9 +187,7 @@ jobs:
|
|
|
209
187
|
core.setOutput('sha', pr.data.head.sha.substring(0, 7));
|
|
210
188
|
return pr.data.number;
|
|
211
189
|
|
|
212
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
213
190
|
# 진행 상황 댓글 시스템
|
|
214
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
191
|
- name: 진행 상황 댓글 생성
|
|
216
192
|
id: progress
|
|
217
193
|
uses: actions/github-script@v9
|
|
@@ -251,17 +227,13 @@ jobs:
|
|
|
251
227
|
with:
|
|
252
228
|
ref: ${{ steps.pr.outputs.ref }}
|
|
253
229
|
|
|
254
|
-
#
|
|
255
|
-
# ⚠️ [영역 2] 환경변수 파일 생성
|
|
256
|
-
# =================================================================
|
|
230
|
+
# [영역 2] 환경변수 파일 생성
|
|
257
231
|
- name: "[필수] .env 파일 생성"
|
|
258
232
|
run: |
|
|
259
233
|
cat << 'EOF' > .env
|
|
260
234
|
${{ secrets.ENV_FILE }}
|
|
261
235
|
EOF
|
|
262
|
-
#
|
|
263
|
-
# ⚠️ [영역 2 끝] 환경변수 파일 생성 끝
|
|
264
|
-
# =================================================================
|
|
236
|
+
# [영역 2 끝] 환경변수 파일 생성 끝
|
|
265
237
|
|
|
266
238
|
- name: Docker 로그인
|
|
267
239
|
uses: docker/login-action@v3
|
|
@@ -334,11 +306,10 @@ jobs:
|
|
|
334
306
|
script: |
|
|
335
307
|
set -e
|
|
336
308
|
|
|
337
|
-
# 환경 변수 설정 (배포 서버용)
|
|
338
309
|
export PATH=$PATH:/usr/local/bin
|
|
339
310
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
340
311
|
|
|
341
|
-
#
|
|
312
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
342
313
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
343
314
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
344
315
|
SUDO() { sudo "$@"; }
|
|
@@ -347,7 +318,6 @@ jobs:
|
|
|
347
318
|
fi
|
|
348
319
|
echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
|
|
349
320
|
|
|
350
|
-
# 변수 설정
|
|
351
321
|
PR_NUMBER=${{ github.event.issue.number }}
|
|
352
322
|
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
353
323
|
CONTAINER_NAME="${PROJECT_NAME}-pr-${PR_NUMBER}"
|
|
@@ -365,21 +335,17 @@ jobs:
|
|
|
365
335
|
echo "🌐 도메인: ${DOMAIN}"
|
|
366
336
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
367
337
|
|
|
368
|
-
# 이미지 Pull
|
|
369
338
|
echo "📥 Docker 이미지 Pull 중..."
|
|
370
339
|
SUDO docker pull "${IMAGE}"
|
|
371
340
|
|
|
372
|
-
# 기존 컨테이너 삭제
|
|
373
341
|
echo "🗑️ 기존 컨테이너 정리 중..."
|
|
374
342
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
375
343
|
|
|
376
|
-
# 볼륨 마운트 옵션 구성
|
|
377
344
|
VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
|
|
378
345
|
if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
|
|
379
346
|
VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
|
|
380
347
|
fi
|
|
381
348
|
|
|
382
|
-
# 새 컨테이너 실행
|
|
383
349
|
echo "🐳 새 컨테이너 실행 중..."
|
|
384
350
|
SUDO docker run -d \
|
|
385
351
|
--name "${CONTAINER_NAME}" \
|
|
@@ -393,11 +359,9 @@ jobs:
|
|
|
393
359
|
$VOLUME_OPTS \
|
|
394
360
|
"${IMAGE}"
|
|
395
361
|
|
|
396
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
397
362
|
# Health Check (최대 120초 대기) - 하이브리드 방식
|
|
398
363
|
# 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
|
|
399
364
|
# 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
|
|
400
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
401
365
|
echo ""
|
|
402
366
|
echo "⏳ Health Check 시작 (최대 120초 대기)..."
|
|
403
367
|
HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
|
|
@@ -617,9 +581,7 @@ jobs:
|
|
|
617
581
|
});
|
|
618
582
|
}
|
|
619
583
|
|
|
620
|
-
# -----------------------------------------------------------------
|
|
621
584
|
# Job 2-2: Issue에서 브랜치명 추출
|
|
622
|
-
# -----------------------------------------------------------------
|
|
623
585
|
get-branch-from-issue:
|
|
624
586
|
name: Issue에서 브랜치 추출
|
|
625
587
|
needs: check-command
|
|
@@ -707,9 +669,7 @@ jobs:
|
|
|
707
669
|
body: body
|
|
708
670
|
});
|
|
709
671
|
|
|
710
|
-
# -----------------------------------------------------------------
|
|
711
672
|
# Job 2-3: 빌드 & 배포 (Issue 댓글에서 실행)
|
|
712
|
-
# -----------------------------------------------------------------
|
|
713
673
|
build-preview-issue:
|
|
714
674
|
name: Preview 빌드 & 배포 (Issue)
|
|
715
675
|
needs: [check-command, get-branch-from-issue]
|
|
@@ -788,9 +748,7 @@ jobs:
|
|
|
788
748
|
# 브랜치의 최신 커밋 SHA 가져오기
|
|
789
749
|
echo "sha=$(git ls-remote https://github.com/${{ github.repository }}.git refs/heads/${{ needs.get-branch-from-issue.outputs.branch_name }} | cut -c1-7)" >> $GITHUB_OUTPUT
|
|
790
750
|
|
|
791
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
792
751
|
# 진행 상황 댓글 시스템
|
|
793
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
794
752
|
- name: 진행 상황 댓글 생성
|
|
795
753
|
if: steps.check_branch.outputs.exists == 'true'
|
|
796
754
|
id: progress
|
|
@@ -835,18 +793,14 @@ jobs:
|
|
|
835
793
|
with:
|
|
836
794
|
ref: ${{ needs.get-branch-from-issue.outputs.branch_name }}
|
|
837
795
|
|
|
838
|
-
#
|
|
839
|
-
# ⚠️ [영역 2] 환경변수 파일 생성
|
|
840
|
-
# =================================================================
|
|
796
|
+
# [영역 2] 환경변수 파일 생성
|
|
841
797
|
- name: "[필수] .env 파일 생성"
|
|
842
798
|
if: steps.check_branch.outputs.exists == 'true'
|
|
843
799
|
run: |
|
|
844
800
|
cat << 'EOF' > .env
|
|
845
801
|
${{ secrets.ENV_FILE }}
|
|
846
802
|
EOF
|
|
847
|
-
#
|
|
848
|
-
# ⚠️ [영역 2 끝] 환경변수 파일 생성 끝
|
|
849
|
-
# =================================================================
|
|
803
|
+
# [영역 2 끝] 환경변수 파일 생성 끝
|
|
850
804
|
|
|
851
805
|
- name: Docker 로그인
|
|
852
806
|
if: steps.check_branch.outputs.exists == 'true'
|
|
@@ -927,11 +881,10 @@ jobs:
|
|
|
927
881
|
script: |
|
|
928
882
|
set -e
|
|
929
883
|
|
|
930
|
-
# 환경 변수 설정 (배포 서버용)
|
|
931
884
|
export PATH=$PATH:/usr/local/bin
|
|
932
885
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
933
886
|
|
|
934
|
-
#
|
|
887
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
935
888
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
936
889
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
937
890
|
SUDO() { sudo "$@"; }
|
|
@@ -940,7 +893,6 @@ jobs:
|
|
|
940
893
|
fi
|
|
941
894
|
echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
|
|
942
895
|
|
|
943
|
-
# 변수 설정
|
|
944
896
|
ISSUE_NUMBER=${{ needs.get-branch-from-issue.outputs.issue_number }}
|
|
945
897
|
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
946
898
|
CONTAINER_NAME="${PROJECT_NAME}-pr-${ISSUE_NUMBER}"
|
|
@@ -958,21 +910,17 @@ jobs:
|
|
|
958
910
|
echo "🌐 도메인: ${DOMAIN}"
|
|
959
911
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
960
912
|
|
|
961
|
-
# 이미지 Pull
|
|
962
913
|
echo "📥 Docker 이미지 Pull 중..."
|
|
963
914
|
SUDO docker pull "${IMAGE}"
|
|
964
915
|
|
|
965
|
-
# 기존 컨테이너 삭제
|
|
966
916
|
echo "🗑️ 기존 컨테이너 정리 중..."
|
|
967
917
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
968
918
|
|
|
969
|
-
# 볼륨 마운트 옵션 구성
|
|
970
919
|
VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
|
|
971
920
|
if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
|
|
972
921
|
VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
|
|
973
922
|
fi
|
|
974
923
|
|
|
975
|
-
# 새 컨테이너 실행
|
|
976
924
|
echo "🐳 새 컨테이너 실행 중..."
|
|
977
925
|
SUDO docker run -d \
|
|
978
926
|
--name "${CONTAINER_NAME}" \
|
|
@@ -986,11 +934,9 @@ jobs:
|
|
|
986
934
|
$VOLUME_OPTS \
|
|
987
935
|
"${IMAGE}"
|
|
988
936
|
|
|
989
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
990
937
|
# Health Check (최대 120초 대기) - 하이브리드 방식
|
|
991
938
|
# 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
|
|
992
939
|
# 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
|
|
993
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
994
940
|
echo ""
|
|
995
941
|
echo "⏳ Health Check 시작 (최대 120초 대기)..."
|
|
996
942
|
HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
|
|
@@ -1210,9 +1156,7 @@ jobs:
|
|
|
1210
1156
|
});
|
|
1211
1157
|
}
|
|
1212
1158
|
|
|
1213
|
-
# -----------------------------------------------------------------
|
|
1214
1159
|
# Job 3: Preview 삭제 (PR/Issue 닫힘 또는 destroy 명령)
|
|
1215
|
-
# -----------------------------------------------------------------
|
|
1216
1160
|
destroy-preview:
|
|
1217
1161
|
name: Preview 삭제
|
|
1218
1162
|
# needs 의존성 제거: PR/Issue 닫힘 이벤트에서도 독립적으로 실행되도록 함
|
|
@@ -1248,11 +1192,10 @@ jobs:
|
|
|
1248
1192
|
port: ${{ env.SSH_PORT }}
|
|
1249
1193
|
envs: SSH_AUTH_METHOD
|
|
1250
1194
|
script: |
|
|
1251
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1252
1195
|
export PATH=$PATH:/usr/local/bin
|
|
1253
1196
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
1254
1197
|
|
|
1255
|
-
#
|
|
1198
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
1256
1199
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
1257
1200
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
1258
1201
|
SUDO() { sudo "$@"; }
|
|
@@ -1273,11 +1216,9 @@ jobs:
|
|
|
1273
1216
|
echo "🔢 PR 번호: #${PR_NUMBER}"
|
|
1274
1217
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1275
1218
|
|
|
1276
|
-
# 컨테이너 삭제
|
|
1277
1219
|
echo "🐳 컨테이너 삭제 중..."
|
|
1278
1220
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
1279
1221
|
|
|
1280
|
-
# 이미지 삭제
|
|
1281
1222
|
echo "🖼️ 이미지 삭제 중..."
|
|
1282
1223
|
SUDO docker rmi "${IMAGE}" 2>/dev/null || true
|
|
1283
1224
|
|
|
@@ -1315,9 +1256,7 @@ jobs:
|
|
|
1315
1256
|
body: body
|
|
1316
1257
|
});
|
|
1317
1258
|
|
|
1318
|
-
# -----------------------------------------------------------------
|
|
1319
1259
|
# Job 4: 상태 확인 (PR/Issue 모두 지원)
|
|
1320
|
-
# -----------------------------------------------------------------
|
|
1321
1260
|
check-status:
|
|
1322
1261
|
name: Preview 상태 확인
|
|
1323
1262
|
needs: check-command
|
|
@@ -1334,7 +1273,6 @@ jobs:
|
|
|
1334
1273
|
key: ${{ secrets.SSH_KEY }}
|
|
1335
1274
|
port: ${{ env.SSH_PORT }}
|
|
1336
1275
|
script: |
|
|
1337
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1338
1276
|
export PATH=$PATH:/usr/local/bin
|
|
1339
1277
|
|
|
1340
1278
|
NUMBER=${{ github.event.issue.number }}
|
|
@@ -1365,7 +1303,6 @@ jobs:
|
|
|
1365
1303
|
key: ${{ secrets.SSH_KEY }}
|
|
1366
1304
|
port: ${{ env.SSH_PORT }}
|
|
1367
1305
|
script: |
|
|
1368
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1369
1306
|
export PATH=$PATH:/usr/local/bin
|
|
1370
1307
|
|
|
1371
1308
|
NUMBER=${{ github.event.issue.number }}
|
|
@@ -1430,9 +1367,7 @@ jobs:
|
|
|
1430
1367
|
body: body
|
|
1431
1368
|
});
|
|
1432
1369
|
|
|
1433
|
-
# -----------------------------------------------------------------
|
|
1434
1370
|
# Job 5: 커스텀 브랜치 빌드 & 배포
|
|
1435
|
-
# -----------------------------------------------------------------
|
|
1436
1371
|
build-preview-custom-branch:
|
|
1437
1372
|
name: Preview 빌드 & 배포 (Custom Branch)
|
|
1438
1373
|
needs: check-command
|
|
@@ -1526,7 +1461,6 @@ jobs:
|
|
|
1526
1461
|
SHA=$(git ls-remote https://github.com/${{ github.repository }}.git refs/heads/${{ needs.check-command.outputs.custom_branch }} | cut -c1-7)
|
|
1527
1462
|
echo "sha=$SHA" >> $GITHUB_OUTPUT
|
|
1528
1463
|
|
|
1529
|
-
# 진행 상황 댓글 생성
|
|
1530
1464
|
- name: 진행 상황 댓글 생성
|
|
1531
1465
|
if: steps.branch_info.outputs.branch_exists == 'true'
|
|
1532
1466
|
id: progress
|
|
@@ -1571,7 +1505,6 @@ jobs:
|
|
|
1571
1505
|
with:
|
|
1572
1506
|
ref: ${{ needs.check-command.outputs.custom_branch }}
|
|
1573
1507
|
|
|
1574
|
-
# 환경변수 파일 생성
|
|
1575
1508
|
- name: "[필수] .env 파일 생성"
|
|
1576
1509
|
if: steps.branch_info.outputs.branch_exists == 'true'
|
|
1577
1510
|
run: |
|
|
@@ -1670,11 +1603,10 @@ jobs:
|
|
|
1670
1603
|
script: |
|
|
1671
1604
|
set -e
|
|
1672
1605
|
|
|
1673
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1674
1606
|
export PATH=$PATH:/usr/local/bin
|
|
1675
1607
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
1676
1608
|
|
|
1677
|
-
#
|
|
1609
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
1678
1610
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
1679
1611
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
1680
1612
|
SUDO() { sudo "$@"; }
|
|
@@ -1683,7 +1615,6 @@ jobs:
|
|
|
1683
1615
|
fi
|
|
1684
1616
|
echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
|
|
1685
1617
|
|
|
1686
|
-
# 변수 설정
|
|
1687
1618
|
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
1688
1619
|
CONTAINER_NAME="${{ steps.container.outputs.name }}"
|
|
1689
1620
|
CONTAINER_SUFFIX="${{ steps.container.outputs.suffix }}"
|
|
@@ -1700,21 +1631,17 @@ jobs:
|
|
|
1700
1631
|
echo "🌐 도메인: ${DOMAIN}"
|
|
1701
1632
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1702
1633
|
|
|
1703
|
-
# 이미지 Pull
|
|
1704
1634
|
echo "📥 Docker 이미지 Pull 중..."
|
|
1705
1635
|
SUDO docker pull "${IMAGE}"
|
|
1706
1636
|
|
|
1707
|
-
# 기존 컨테이너 삭제
|
|
1708
1637
|
echo "🗑️ 기존 컨테이너 정리 중..."
|
|
1709
1638
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
1710
1639
|
|
|
1711
|
-
# 볼륨 마운트 옵션 구성
|
|
1712
1640
|
VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
|
|
1713
1641
|
if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
|
|
1714
1642
|
VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
|
|
1715
1643
|
fi
|
|
1716
1644
|
|
|
1717
|
-
# 새 컨테이너 실행
|
|
1718
1645
|
echo "🐳 새 컨테이너 실행 중..."
|
|
1719
1646
|
SUDO docker run -d \
|
|
1720
1647
|
--name "${CONTAINER_NAME}" \
|
|
@@ -1943,9 +1870,7 @@ jobs:
|
|
|
1943
1870
|
});
|
|
1944
1871
|
}
|
|
1945
1872
|
|
|
1946
|
-
# -----------------------------------------------------------------
|
|
1947
1873
|
# Job 6: 커스텀 브랜치 Preview 삭제
|
|
1948
|
-
# -----------------------------------------------------------------
|
|
1949
1874
|
destroy-preview-custom-branch:
|
|
1950
1875
|
name: Preview 삭제 (Custom Branch)
|
|
1951
1876
|
needs: check-command
|
|
@@ -1998,11 +1923,10 @@ jobs:
|
|
|
1998
1923
|
port: ${{ env.SSH_PORT }}
|
|
1999
1924
|
envs: SSH_AUTH_METHOD
|
|
2000
1925
|
script: |
|
|
2001
|
-
# 환경 변수 설정 (배포 서버용)
|
|
2002
1926
|
export PATH=$PATH:/usr/local/bin
|
|
2003
1927
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
2004
1928
|
|
|
2005
|
-
#
|
|
1929
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
2006
1930
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
2007
1931
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
2008
1932
|
SUDO() { sudo "$@"; }
|
|
@@ -2025,11 +1949,9 @@ jobs:
|
|
|
2025
1949
|
echo "📛 컨테이너: ${CONTAINER_NAME}"
|
|
2026
1950
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
2027
1951
|
|
|
2028
|
-
# 컨테이너 삭제
|
|
2029
1952
|
echo "🐳 컨테이너 삭제 중..."
|
|
2030
1953
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
2031
1954
|
|
|
2032
|
-
# 이미지 삭제
|
|
2033
1955
|
echo "🖼️ 이미지 삭제 중..."
|
|
2034
1956
|
SUDO docker rmi "${IMAGE}" 2>/dev/null || true
|
|
2035
1957
|
|
|
@@ -2064,9 +1986,7 @@ jobs:
|
|
|
2064
1986
|
body: body
|
|
2065
1987
|
});
|
|
2066
1988
|
|
|
2067
|
-
# -----------------------------------------------------------------
|
|
2068
1989
|
# Job 7: 커스텀 브랜치 Preview 상태 확인
|
|
2069
|
-
# -----------------------------------------------------------------
|
|
2070
1990
|
check-status-custom-branch:
|
|
2071
1991
|
name: Preview 상태 확인 (Custom Branch)
|
|
2072
1992
|
needs: check-command
|