project-auto-wizard 0.1.5
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/LICENSE +21 -0
- package/README.md +139 -0
- package/bin/project-auto-wizard.js +19 -0
- package/package.json +36 -0
- package/payload/coderabbit.yaml +19 -0
- package/payload/config/breaking-changes.json +1 -0
- package/payload/config/wizard-prompts.yml +62 -0
- package/payload/scripts/changelog_manager.py +726 -0
- package/payload/scripts/version_manager.py +617 -0
- package/payload/version.yml.template +48 -0
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +303 -0
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +293 -0
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +289 -0
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +192 -0
- package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +209 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +591 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +700 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +308 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +992 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +689 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +987 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +471 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-SUH-LAB-APP-BUILD-TRIGGER.yaml +500 -0
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +185 -0
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +271 -0
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +81 -0
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +2191 -0
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +386 -0
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +194 -0
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +255 -0
- package/payload/workflows/spring/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +84 -0
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-CI.yml +316 -0
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +58 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +535 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +437 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +2277 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +425 -0
- package/src/cli/args.js +95 -0
- package/src/cli/help.js +27 -0
- package/src/commands/full.js +53 -0
- package/src/commands/interactive.js +276 -0
- package/src/commands/revert.js +60 -0
- package/src/commands/version.js +31 -0
- package/src/commands/workflows.js +49 -0
- package/src/context.js +26 -0
- package/src/core/assets.js +47 -0
- package/src/core/branches.js +60 -0
- package/src/core/branding.js +15 -0
- package/src/core/breaking-check.js +65 -0
- package/src/core/breaking.js +26 -0
- package/src/core/copy/coderabbit.js +26 -0
- package/src/core/copy/gitignore.js +55 -0
- package/src/core/copy/readme.js +30 -0
- package/src/core/copy/simple.js +23 -0
- package/src/core/copy/workflows.js +233 -0
- package/src/core/detect-fs.js +106 -0
- package/src/core/detect.js +62 -0
- package/src/core/fsutil.js +46 -0
- package/src/core/options-ask.js +99 -0
- package/src/core/paths-resolve.js +261 -0
- package/src/core/paths.js +16 -0
- package/src/core/version-yml.js +190 -0
- package/src/core/wizard-env.js +101 -0
- package/src/core/wizard-labels.js +107 -0
- package/src/index.js +162 -0
- package/src/ui/ansi.js +26 -0
- package/src/ui/banner.js +29 -0
- package/src/ui/env-plan.js +207 -0
- package/src/ui/prompts.js +99 -0
- package/src/ui/readline-engine.js +257 -0
- package/src/ui/status-cards.js +56 -0
- package/src/ui/summary.js +127 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# ===================================================================
|
|
2
|
+
# Flutter Android 자체 서버(SMB) 배포 워크플로우
|
|
3
|
+
# ===================================================================
|
|
4
|
+
#
|
|
5
|
+
# {{MAIN_BRANCH}} 브랜치 푸시 시 Android APK를 빌드하고
|
|
6
|
+
# 자체 서버(예: Synology NAS·NAS·Linux)의 SMB 공유에 APK를 배포합니다.
|
|
7
|
+
#
|
|
8
|
+
# ===================================================================
|
|
9
|
+
# 🔑 필수 GitHub Secrets
|
|
10
|
+
# ===================================================================
|
|
11
|
+
# ENV_FILE 또는 ENV: .env 파일 내용 (둘 중 하나, ENV_FILE 우선)
|
|
12
|
+
# RELEASE_KEYSTORE_BASE64: 서명용 keystore (base64)
|
|
13
|
+
# RELEASE_KEYSTORE_PASSWORD: keystore 비밀번호
|
|
14
|
+
# RELEASE_KEY_ALIAS: key alias
|
|
15
|
+
# RELEASE_KEY_PASSWORD: key 비밀번호
|
|
16
|
+
# GOOGLE_SERVICES_JSON (선택): Firebase google-services.json
|
|
17
|
+
# SERVER_HOST: 서버 호스트(SMB 접속 주소)
|
|
18
|
+
# SERVER_USER: SMB 사용자명
|
|
19
|
+
# SERVER_PASSWORD: SMB 비밀번호
|
|
20
|
+
# ===================================================================
|
|
21
|
+
|
|
22
|
+
name: PROJECT-Android-SelfHosted-CICD
|
|
23
|
+
|
|
24
|
+
on:
|
|
25
|
+
push:
|
|
26
|
+
branches: ["{{MAIN_BRANCH}}"]
|
|
27
|
+
workflow_dispatch: # 수동 실행 옵션 추가
|
|
28
|
+
|
|
29
|
+
# ============================================
|
|
30
|
+
# 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
|
|
31
|
+
# ============================================
|
|
32
|
+
env:
|
|
33
|
+
# 프로젝트 이름 (APK 파일명, 아티팩트명, 히스토리 파일명에 사용)
|
|
34
|
+
APP_ARTIFACT_NAME: "__APP_ARTIFACT_NAME__" # @wizard ask:@repo
|
|
35
|
+
FLUTTER_VERSION: "3.35.5"
|
|
36
|
+
JAVA_VERSION: "__JAVA_VERSION__" # @wizard ask:17
|
|
37
|
+
# SMB 서버 설정 (자체 서버 — Synology NAS·Linux 등)
|
|
38
|
+
SMB_PORT: "44445" # 기본 445
|
|
39
|
+
SMB_SHARE: "web"
|
|
40
|
+
SMB_PATH_IOS: "/your-project/ios/download" # SMB 경로: /{APP_ARTIFACT_NAME}/ios/download 형식으로 사용
|
|
41
|
+
jobs:
|
|
42
|
+
build-android:
|
|
43
|
+
name: Build Android APK
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
# CHANGELOG 워크플로우가 성공한 경우에만 실행
|
|
46
|
+
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name != 'workflow_run' }}
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
# Repository 체크아웃 및 목록 출력
|
|
50
|
+
- name: Check out repository
|
|
51
|
+
uses: actions/checkout@v5
|
|
52
|
+
with:
|
|
53
|
+
fetch-depth: 0
|
|
54
|
+
|
|
55
|
+
- name: List repository contents
|
|
56
|
+
run: |
|
|
57
|
+
echo "Repository checked out"
|
|
58
|
+
ls -la
|
|
59
|
+
|
|
60
|
+
# Debug Keystore 설정 (디버깅 용도 유지)
|
|
61
|
+
- name: Setup Debug Keystore
|
|
62
|
+
run: |
|
|
63
|
+
mkdir -p ~/.android
|
|
64
|
+
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > ~/.android/debug.keystore || echo "Base64 decoding failed"
|
|
65
|
+
echo "Debug Keystore created (for debugging)"
|
|
66
|
+
ls -la ~/.android/
|
|
67
|
+
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android || echo "Keytool failed"
|
|
68
|
+
|
|
69
|
+
# .env 파일 생성
|
|
70
|
+
- name: Create .env file from GitHub Secret
|
|
71
|
+
env:
|
|
72
|
+
ENV_CONTENT: ${{ secrets.ENV_FILE || secrets.ENV }}
|
|
73
|
+
run: |
|
|
74
|
+
printf '%s\n' "$ENV_CONTENT" > .env
|
|
75
|
+
echo ".env file created"
|
|
76
|
+
ls -la
|
|
77
|
+
|
|
78
|
+
# Keystore와 key.properties 설정
|
|
79
|
+
- name: Setup Keystore and key.properties
|
|
80
|
+
run: |
|
|
81
|
+
mkdir -p android/app/keystore
|
|
82
|
+
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > android/app/keystore/key.jks || echo "Base64 decoding failed"
|
|
83
|
+
echo "Keystore created from DEBUG_KEYSTORE"
|
|
84
|
+
ls -la android/app/keystore
|
|
85
|
+
echo "storeFile=app/keystore/key.jks" > android/key.properties
|
|
86
|
+
echo "storePassword=android" >> android/key.properties
|
|
87
|
+
echo "keyAlias=androiddebugkey" >> android/key.properties
|
|
88
|
+
echo "keyPassword=android" >> android/key.properties
|
|
89
|
+
echo "key.properties created"
|
|
90
|
+
ls -la android/
|
|
91
|
+
|
|
92
|
+
# Google-services.json 생성
|
|
93
|
+
- name: Create Google-services.json
|
|
94
|
+
run: |
|
|
95
|
+
cat << 'EOF' > android/app/google-services.json
|
|
96
|
+
${{ secrets.GOOGLE_SERVICES_JSON }}
|
|
97
|
+
EOF
|
|
98
|
+
echo "✅ Google-services.json 생성 완료"
|
|
99
|
+
ls -la android/app/
|
|
100
|
+
|
|
101
|
+
# Flutter 설정 및 버전 확인
|
|
102
|
+
- name: Set up Flutter
|
|
103
|
+
uses: subosito/flutter-action@v2
|
|
104
|
+
with:
|
|
105
|
+
flutter-version: ${{ env.FLUTTER_VERSION }}
|
|
106
|
+
cache: true
|
|
107
|
+
cache-key: flutter-${{ runner.os }}-${{ env.FLUTTER_VERSION }}
|
|
108
|
+
|
|
109
|
+
- name: Verify Flutter version
|
|
110
|
+
run: |
|
|
111
|
+
echo "Flutter setup completed"
|
|
112
|
+
flutter --version
|
|
113
|
+
|
|
114
|
+
# Flutter 및 Gradle 캐시
|
|
115
|
+
- name: Cache Flutter dependencies
|
|
116
|
+
uses: actions/cache@v4
|
|
117
|
+
with:
|
|
118
|
+
path: ~/.pub-cache
|
|
119
|
+
key: ${{ runner.os }}-flutter-pub-${{ hashFiles('**/pubspec.lock') }}
|
|
120
|
+
restore-keys: ${{ runner.os }}-flutter-pub-
|
|
121
|
+
|
|
122
|
+
- name: Cache Gradle dependencies
|
|
123
|
+
uses: actions/cache@v4
|
|
124
|
+
with:
|
|
125
|
+
path: |
|
|
126
|
+
~/.gradle/caches
|
|
127
|
+
~/.gradle/wrapper
|
|
128
|
+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties') }}
|
|
129
|
+
restore-keys: |
|
|
130
|
+
${{ runner.os }}-gradle-
|
|
131
|
+
|
|
132
|
+
# 프로젝트 의존성 설치
|
|
133
|
+
- name: Install dependencies
|
|
134
|
+
run: |
|
|
135
|
+
flutter pub get
|
|
136
|
+
echo "Dependencies installed"
|
|
137
|
+
ls -la
|
|
138
|
+
|
|
139
|
+
# Gradle 셋업
|
|
140
|
+
- name: Setup Gradle
|
|
141
|
+
working-directory: android
|
|
142
|
+
run: |
|
|
143
|
+
chmod +x gradlew
|
|
144
|
+
echo "Gradle wrapper permissions set"
|
|
145
|
+
|
|
146
|
+
# Java 설정 및 버전 확인
|
|
147
|
+
- name: Set up Java
|
|
148
|
+
uses: actions/setup-java@v3
|
|
149
|
+
with:
|
|
150
|
+
distribution: "temurin"
|
|
151
|
+
java-version: ${{ env.JAVA_VERSION }}
|
|
152
|
+
|
|
153
|
+
- name: Verify Java version
|
|
154
|
+
run: |
|
|
155
|
+
echo "Java setup completed"
|
|
156
|
+
java -version
|
|
157
|
+
|
|
158
|
+
# Ruby 설정 및 확인
|
|
159
|
+
- name: Set up Ruby
|
|
160
|
+
uses: ruby/setup-ruby@v1
|
|
161
|
+
with:
|
|
162
|
+
ruby-version: "3.4.1"
|
|
163
|
+
|
|
164
|
+
- name: Verify Ruby version
|
|
165
|
+
run: |
|
|
166
|
+
echo "Ruby setup completed"
|
|
167
|
+
ruby -v
|
|
168
|
+
|
|
169
|
+
# Fastlane 설치 (Bundler 방식 - gem 충돌 방지)
|
|
170
|
+
- name: Install Fastlane
|
|
171
|
+
working-directory: android
|
|
172
|
+
run: |
|
|
173
|
+
# multi_json: google-apis transitive 의존성이 선언 누락한 upstream 버그 회피 (gemspec 미선언 → Gem::LoadError)
|
|
174
|
+
printf 'source "https://rubygems.org"\ngem "fastlane"\ngem "multi_json"\n' > Gemfile
|
|
175
|
+
bundle install
|
|
176
|
+
echo "Fastlane installed (Bundler)"
|
|
177
|
+
bundle exec fastlane --version
|
|
178
|
+
|
|
179
|
+
# 현재 버전 정보 및 짧은 커밋 해시 계산
|
|
180
|
+
- name: Get version info and calculate short commit hash
|
|
181
|
+
id: version_info
|
|
182
|
+
run: |
|
|
183
|
+
CURRENT_VERSION=$(grep 'version:' pubspec.yaml | sed 's/version: //' | tr -d ' ')
|
|
184
|
+
VERSION=$(echo $CURRENT_VERSION | cut -d'+' -f1)
|
|
185
|
+
BUILD_NUMBER=$(echo $CURRENT_VERSION | cut -d'+' -f2)
|
|
186
|
+
SHORT_COMMIT_HASH=$(echo ${{ github.sha }} | cut -c1-7)
|
|
187
|
+
|
|
188
|
+
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV
|
|
189
|
+
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
|
190
|
+
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
|
|
191
|
+
echo "SHORT_COMMIT_HASH=$SHORT_COMMIT_HASH" >> $GITHUB_ENV
|
|
192
|
+
|
|
193
|
+
echo "현재 버전: $CURRENT_VERSION"
|
|
194
|
+
echo "짧은 커밋 해시: $SHORT_COMMIT_HASH"
|
|
195
|
+
|
|
196
|
+
# Fastlane을 이용하여 APK 빌드 (릴리스 빌드 유지)
|
|
197
|
+
- name: Build APK with Fastlane
|
|
198
|
+
run: |
|
|
199
|
+
cd android
|
|
200
|
+
bundle exec fastlane build --verbose
|
|
201
|
+
ls -la ../build/app/outputs/flutter-apk/ || true
|
|
202
|
+
echo "APK built with Fastlane"
|
|
203
|
+
|
|
204
|
+
# APK 파일 이름 변경 및 준비
|
|
205
|
+
- name: Rename and Prepare APK
|
|
206
|
+
run: |
|
|
207
|
+
mkdir -p ./android/app/build/outputs/apk/release/
|
|
208
|
+
mv ./build/app/outputs/flutter-apk/app-release.apk ./android/app/build/outputs/apk/release/${{ env.APP_ARTIFACT_NAME }}-v${{ env.VERSION }}-${{ env.SHORT_COMMIT_HASH }}.apk
|
|
209
|
+
echo "APK renamed to ${{ env.APP_ARTIFACT_NAME }}-v${{ env.VERSION }}-${{ env.SHORT_COMMIT_HASH }}.apk"
|
|
210
|
+
ls -la ./android/app/build/outputs/apk/release/
|
|
211
|
+
|
|
212
|
+
# APK를 아티팩트로 업로드
|
|
213
|
+
- name: Upload APK as Artifact
|
|
214
|
+
uses: actions/upload-artifact@v4
|
|
215
|
+
with:
|
|
216
|
+
name: ${{ env.APP_ARTIFACT_NAME }}-apk
|
|
217
|
+
path: ./android/app/build/outputs/apk/release/${{ env.APP_ARTIFACT_NAME }}-v${{ env.VERSION }}-${{ env.SHORT_COMMIT_HASH }}.apk
|
|
218
|
+
retention-days: 1
|
|
219
|
+
|
|
220
|
+
deploy-android:
|
|
221
|
+
name: Deploy Android APK
|
|
222
|
+
runs-on: ubuntu-latest
|
|
223
|
+
needs: build-android
|
|
224
|
+
if: github.ref == 'refs/heads/{{MAIN_BRANCH}}'
|
|
225
|
+
|
|
226
|
+
steps:
|
|
227
|
+
- name: Checkout code
|
|
228
|
+
uses: actions/checkout@v5
|
|
229
|
+
|
|
230
|
+
- name: List repository contents for deploy
|
|
231
|
+
run: |
|
|
232
|
+
echo "Repository checked out for deploy"
|
|
233
|
+
ls -la
|
|
234
|
+
|
|
235
|
+
- name: Install dependencies
|
|
236
|
+
run: |
|
|
237
|
+
sudo apt-get update
|
|
238
|
+
sudo apt-get install -y smbclient jq
|
|
239
|
+
echo "SMB and jq dependencies installed"
|
|
240
|
+
|
|
241
|
+
- name: Download build artifacts
|
|
242
|
+
uses: actions/download-artifact@v4
|
|
243
|
+
with:
|
|
244
|
+
name: ${{ env.APP_ARTIFACT_NAME }}-apk
|
|
245
|
+
path: android/app/build/outputs/
|
|
246
|
+
|
|
247
|
+
- name: List downloaded structure (Debug)
|
|
248
|
+
run: |
|
|
249
|
+
ls -alR android/app/build/outputs
|
|
250
|
+
echo "Downloaded structure listed"
|
|
251
|
+
|
|
252
|
+
- name: Find APK file
|
|
253
|
+
run: |
|
|
254
|
+
APK_FILE=$(find android/app/build/outputs/ -name "*.apk" | head -n 1)
|
|
255
|
+
echo "APK_FILE=$APK_FILE" >> $GITHUB_ENV
|
|
256
|
+
APK_NAME=$(basename "$APK_FILE")
|
|
257
|
+
echo "APK_NAME=$APK_NAME" >> $GITHUB_ENV
|
|
258
|
+
echo "APK file found: $APK_FILE"
|
|
259
|
+
|
|
260
|
+
- name: Upload files to server via SMB
|
|
261
|
+
env:
|
|
262
|
+
SMB_USERNAME: ${{ secrets.SERVER_USER }}
|
|
263
|
+
SMB_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
|
|
264
|
+
run: |
|
|
265
|
+
SMB_SERVER=${{ secrets.SERVER_HOST }}
|
|
266
|
+
SMB_PORT=${{ env.SMB_PORT }}
|
|
267
|
+
SMB_SHARE=${{ env.SMB_SHARE }}
|
|
268
|
+
SMB_PATH="/${{ env.APP_ARTIFACT_NAME }}${{ env.SMB_PATH_ANDROID }}"
|
|
269
|
+
echo "Uploading APK file ${{ env.APK_NAME }} to SMB..."
|
|
270
|
+
echo "SMB Path: $SMB_PATH"
|
|
271
|
+
smbclient "//$SMB_SERVER/$SMB_SHARE" -p "$SMB_PORT" -U "$SMB_USERNAME%$SMB_PASSWORD" -m SMB3 -d 10 -c "mkdir $SMB_PATH; cd $SMB_PATH; put ${{ env.APK_FILE }} ${{ env.APK_NAME }}"
|
|
272
|
+
echo "APK uploaded to SMB"
|
|
273
|
+
|
|
274
|
+
- name: Update CICD history JSON
|
|
275
|
+
env:
|
|
276
|
+
SMB_USERNAME: ${{ secrets.SERVER_USER }}
|
|
277
|
+
SMB_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
|
|
278
|
+
run: |
|
|
279
|
+
export TZ='Asia/Seoul'
|
|
280
|
+
BUILD_DATE=$(date +"%Y-%m-%d %H:%M")
|
|
281
|
+
FILE_SIZE=$(stat -c%s "${{ env.APK_FILE }}")
|
|
282
|
+
COMMIT_LINK="https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
|
|
283
|
+
FULL_COMMIT_HASH="${{ github.sha }}"
|
|
284
|
+
HISTORY_FILE="${{ env.APP_ARTIFACT_NAME }}-android-cicd-history.json"
|
|
285
|
+
|
|
286
|
+
NEW_BUILD_INFO=$(jq -n \
|
|
287
|
+
--arg apk_name "${{ env.APK_NAME }}" \
|
|
288
|
+
--arg file_size "$FILE_SIZE" \
|
|
289
|
+
--arg build_date "$BUILD_DATE" \
|
|
290
|
+
--arg commit_link "$COMMIT_LINK" \
|
|
291
|
+
--arg full_commit_hash "$FULL_COMMIT_HASH" \
|
|
292
|
+
'{apk_name: $apk_name, file_size: $file_size, build_date: $build_date, commit_link: $commit_link, full_commit_hash: $full_commit_hash}')
|
|
293
|
+
|
|
294
|
+
SMB_SERVER=${{ secrets.SERVER_HOST }}
|
|
295
|
+
SMB_PORT=${{ env.SMB_PORT }}
|
|
296
|
+
SMB_SHARE=${{ env.SMB_SHARE }}
|
|
297
|
+
SMB_PATH="/${{ env.APP_ARTIFACT_NAME }}${{ env.SMB_PATH_ANDROID }}"
|
|
298
|
+
|
|
299
|
+
smbclient "//$SMB_SERVER/$SMB_SHARE" -p "$SMB_PORT" -U "$SMB_USERNAME%$SMB_PASSWORD" -m SMB3 -d 10 -c "cd $SMB_PATH; get $HISTORY_FILE" || echo '{"files": []}' > $HISTORY_FILE
|
|
300
|
+
echo "Downloaded or initialized $HISTORY_FILE"
|
|
301
|
+
cat $HISTORY_FILE
|
|
302
|
+
|
|
303
|
+
jq --argjson new_build "$NEW_BUILD_INFO" '.files += [$new_build]' $HISTORY_FILE > updated.json
|
|
304
|
+
echo "Updated $HISTORY_FILE with new build info"
|
|
305
|
+
cat updated.json
|
|
306
|
+
|
|
307
|
+
smbclient "//$SMB_SERVER/$SMB_SHARE" -p "$SMB_PORT" -U "$SMB_USERNAME%$SMB_PASSWORD" -m SMB3 -d 10 -c "cd $SMB_PATH; put updated.json $HISTORY_FILE"
|
|
308
|
+
echo "Updated $HISTORY_FILE uploaded to SMB"
|