-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
_Build.rdr
337 lines (277 loc) · 19.5 KB
/
_Build.rdr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
※コンソール
「Source\アプリ.rdr」を参照する
「Source\ライセンス.rdr」を参照する
「Source\プロファイル管理器.rdr」を参照する
ビルド日時=「[今を「yyyyMMdd.HHmmss」に整えたもの]」
プログラムのタイトル=「[アプリの名前] Builder」
ソースファイル=「[今の位置]LegendUtil.rdrproj」
ソースコードコンパイル試行数=0
インストーラーコンパイル試行数=0
ビルド番号=0
アップロードフォルダー=「」
リリースチャンネル一覧={
「0」=「release」,
「1」=「beta」,
「2」=「dev」,
「3」=「dev_stable」
}
「[プログラムのタイトル]」をコンソールへ表示して改行する
コンフィグ値={
「Main」={
「ProduireCompiler_Path」=「」,
「InstallerCompiler_Path」=「」,
「Dev_Build_Releases_Brunch_Folder」=「」,
「DB_ID」=「」,
「DB_Name」=「」,
「DB_Key」=「」
}
}
コンフィグ値でコンフィグチェックする
ビルドする
終了する
【内容】をコンソール出力する手順
「[[][今を「yyyy/MM/dd HH:mm:ss」に整えたもの][]] [内容]」をコンソールへ表示して改行する
終わり
ビルドする手順
「ビルド開始[改行]」をコンソール出力する
【リリースチャンネル一覧文字列】=「」
リリースチャンネル一覧の見出しを【リリースチャンネル番号】へそれぞれ繰り返す
リリースチャンネル一覧文字列=リリースチャンネル一覧文字列&「 [リリースチャンネル番号]: [リリースチャンネル一覧(リリースチャンネル番号)][改行]」
繰り返し終わり
「リリースチャンネルを選択してください[改行][リリースチャンネル一覧文字列]選択肢: 」をコンソールへ表示する
リリースチャンネル番号=コンソールから受け取ったもの
もしリリースチャンネル番号がリリースチャンネル一覧に存在しないなら
リリースチャンネル番号=0
もし終わり
【リリースチャンネル】=リリースチャンネル一覧(リリースチャンネル番号)
アプリ名=「[アプリの名前]」
もしリリースチャンネルが「beta」なら // Beta
ビルド日時=ビルド日時&「.1」
ビルド番号=「[アプリのリリース番号]」
インストーラーソースファイル=「[今の位置]Source\_Setup\LegendUtil_Setup.iss」
他でもしリリースチャンネルが「dev」で始まるなら // Dev
アプリ名=「[アプリの名前] Dev Build」
インストーラーソースファイル=「[今の位置]Source\_Setup\LegendUtil_Setup_Dev.iss」
もしリリースチャンネルが「_stable」で終わるなら
アプリ名=「[アプリの名前] Dev Build」
ビルド日時=ビルド日時&「.3」
アプリのリリースチャンネル=「dev_stable」
アップロードフォルダー=「/Stable」
リリース先親フォルダー=「[メイン設定について「Main」から「Dev_Build_Releases_Brunch_Folder」を取得したもの]\Pack\Stable\」
そうでなければ
ビルド日時=ビルド日時&「.2」
アプリのリリースチャンネル=「dev」
アップロードフォルダー=「」
リリース先親フォルダー=「[メイン設定について「Main」から「Dev_Build_Releases_Brunch_Folder」を取得したもの]\Pack\」
もし終わり
ビルド番号=「[ビルド日時]」
そうでなければ // Release とかその他
ビルド日時=ビルド日時&「.0」
ビルド番号=「」
インストーラーソースファイル=「[今の位置]Source\_Setup\LegendUtil_Setup.iss」
もし終わり
もし(ビルド番号が「.」で始まらない)かつ(ビルド番号が無でない)ならビルド番号=「.」&ビルド番号
ビルド日時を「BuildVersion.txt」へ「UTF-8」で保存する
「リリースチャンネル: [アプリのリリースチャンネル]」をコンソールへ表示して改行する
//インストーラーのバージョン情報を更新
「インストーラーのバージョン情報を更新」をコンソール出力する
変数一覧={
「MyAppName」=「[アプリ名]」,
「MyAppVersion」=「[アプリのバージョン]」,
「MyAppReleaseChannel」=「[アプリのリリースチャンネル]」,
「MyAppReleaseNumber」=「[アプリのリリース番号]」,
「MyAppVersionText」=「[アプリのバージョン]-[アプリのリリースチャンネル][ビルド番号]」
}
インストーラーソースファイルテキスト=インストーラーソースファイルから読み込んだもの
変数一覧の見出しを変数名へそれぞれ繰り返す
インストーラーソースファイルテキスト=インストーラーソースファイルテキストで「#define [変数名] "[インストーラーソースファイルテキストで「#define [変数名] "」から「"」まで抽出したもの(1)]"」を「#define [変数名] "[変数一覧(変数名)]"」へ置き換えたもの
繰り返し終わり
インストーラーソースファイルテキストをインストーラーソースファイルへ保存する
ソースファイルをコンパイルする
もし「[今の位置]_Pack\[アプリの名前]\[ソースファイルの名前だけ].exe」というファイルが存在するなら
「実行ファイルを削除 ([今の位置]_Pack\[ソースファイルの名前だけ].exe)」をコンソール出力する
「[今の位置]_Pack\[アプリの名前]\[ソースファイルの名前だけ].exe」を削除する
もし終わり
「実行ファイルを移動 ([ソースファイルの名前だけ].exe)」をコンソール出力する
「[今の位置][ソースファイルの名前だけ].exe」を「[今の位置]_Pack\[アプリの名前]\[ソースファイルの名前だけ].exe」へ移動する
0.1秒待つ
インストーラーソースファイルをコンパイルする
「Build Version: [ビルド日時] ([ビルド日時で「.」を「」へ置換したもの])」をコンソール出力する
[アプリの内部バージョン]をクリップボードへコピーする
「内部バージョンをクリップボードへコピー」をコンソール出力する
// リリース
もしアプリのリリースチャンネルが「dev」で始まるなら
「リリースを行う場合は y を入力してください: 」をコンソールへ表示する
コンソールから受け取ったものについて分岐
「y」の場合
「コミットメッセージを入力: 」をコンソールへ表示する
【コミットメッセージ】=コンソールから受け取ったもの
コミットメッセージでリリースする
分岐終わり
もし終わり
終わり
【ソースファイル】をコンパイル手順
もしソースファイルの拡張子だけが「rdrproj」なら
アプリ:情報設定する
「 [ソースファイル] をコンパイル中」をコンソール出力する
コンパイラープロセス=「"[メイン設定について「Main」から「ProduireCompiler_Path」を取得したもの]"」を「"[ソースファイル]"」として「裏」で起動したもの
繰り返す
もしコンパイラープロセスの起動中が×なら繰り返しから抜け出す
0.1秒待つ
繰り返し終わり
もしコンパイラープロセスの終了コードが0なら
「ソースコードのコンパイル完了 - 戻り値: [コンパイラープロセスの終了コード]」をコンソール出力する
そうでなければ
もし"ソースコードコンパイル試行回数">3なら
「ソースコードのコンパイル失敗 - 戻り値: [コンパイラープロセスの終了コード] ([ソースコードコンパイル試行数]回目)[改行][プログラムのタイトル] を終了します...」をコンソール出力する
3秒待つ
終了する
そうでなければ
「ソースコードのコンパイル失敗 - 戻り値: [コンパイラープロセスの終了コード][改行]秒後に再試行します...」をコンソール出力する
1秒待つ
ソースコードコンパイル試行回数=ソースコードコンパイル試行数+1
ソースファイルをコンパイルする
もし終わり
もし終わり
他でもしソースファイルの拡張子だけが「iss」なら
「インストーラーをコンパイル中」をコンソール出力する
コンパイラープロセス=「"[メイン設定について「Main」から「InstallerCompiler_Path」を取得したもの]"」を「"[ソースファイル]"」として「裏」で起動したもの
繰り返す
もしコンパイラープロセスの起動中が×なら繰り返しから抜け出す
0.1秒待つ
繰り返し終わり
もしコンパイラープロセスの終了コードが0なら
「インストーラーのコンパイル完了 - 戻り値: [コンパイラープロセスの終了コード]」をコンソール出力する
そうでなければ
もしインストーラーコンパイル試行数>3なら
「インストーラーのコンパイル失敗 - 戻り値: [コンパイラープロセスの終了コード] ([インストーラーコンパイル試行数]回目)[改行][プログラムのタイトル] を終了します...」をコンソール出力する
3秒待つ
終了する
そうでなければ
「インストーラーのコンパイル失敗 - 戻り値: [コンパイラープロセスの終了コード][改行]2秒後に再試行します...」をコンソール出力する
2秒待つ
インストーラーコンパイル試行数=インストーラーコンパイル試行数+1
ソースファイルをコンパイルする
もし終わり
もし終わり
もし終わり
終わり
〈【コミットメッセージ:文字列】で〉リリースする手順
もしコミットメッセージが無ならコミットメッセージ=「」
もし[メイン設定について「Main」から「Dev_Build_Releases_Brunch_Folder」を取得したもの]というフォルダが存在しないなら
「リリース処理失敗: フォルダーが見つかりません。」をコンソール出力する
もし終わり
【リリースチャンネル】=アプリのリリースチャンネル
【データベースID】=[メイン設定について「Main」から「DB_ID」を取得したもの]
【データベース名】=[メイン設定について「Main」から「DB_Name」を取得したもの]
【データベースキー】=[メイン設定について「Main」から「DB_Key」を取得したもの]
// フォルダーを作成する
リリース先フォルダー=「[リリース先親フォルダー][アプリのバージョン]-[アプリのリリースチャンネル][ビルド番号]\」
もしリリース先フォルダーというフォルダが存在しないなら「[リリース先親フォルダー]」へ「[アプリのバージョン]-[アプリのリリースチャンネル][ビルド番号]」というフォルダを作成する
【APIURL】=「https://database.deta.sh/v1/[データベースID]/[データベース名]/items」
// 最新のリリース情報を取得する
【最新リリース情報】=[APIURL&「/[リリースチャンネル]」を{「Content-Type」=「application/json」,「X-API-Key」=データベースキー}にてHTTPで取得したもの]をJSON形式として読み取ったもの
もしHTTPのステータスコードが200なら
「最新リリース」をコンソールへ表示して改行する
「- バージョン: [最新リリース情報(「version」)]-[最新リリース情報(「release_channel」)][最新リリース情報(「build_version」)]」をコンソールへ表示して改行する
「- 内部バージョン: [最新リリース情報(「internal_version」)]」をコンソールへ表示して改行する
「===== 変更履歴 =========================」をコンソールへ表示して改行する
「[最新リリース情報(「changelog」)]」をコンソールへ表示して改行する
「========================================」をコンソールへ表示して改行する
// リリース情報を更新する
【最新リリース要求:HTTP要求】=HTTP要求を作ったもの
最新リリース要求のメソッド=「PUT」
【リリース情報:文字列】={
「items」={
{
「key」=リリースチャンネル,
「version」=「[アプリのバージョン]」,
「internal_version」=「[アプリの内部バージョン]」,
「release_channel」=「[アプリのリリースチャンネル]」,
「build_version」=「[ビルド番号]」,
「installer_file_name」=「[ソースファイルの名前だけ]_Setup.exe」,
「installer_download_url」=「https://github.com/femtoCommunity/LegendUtil/raw/releases/dev/Pack[アップロードフォルダー]/[アプリのバージョン]-[アプリのリリースチャンネル][ビルド番号]/[ソースファイルの名前だけ]_Setup.exe」,
「changelog」=「[コミットメッセージで[改行]を「\n」へ置換したもの]」
}
}
}をJSON形式として書き出したもの
//最新リリース要求の引数={「items」=リリース情報}
//最新リリース要求の引数をJSON形式として整形して書き出したものをクリップボードへコピーする
最新リリース要求の本文=リリース情報
最新リリース要求として「Content-Type」という「application/json」をヘッダへ設定する
最新リリース要求として「X-API-Key」というデータベースキーをヘッダへ設定する
【最新リリース応答:HTTP応答】=最新リリース要求にてAPIURLをHTTPで要求したもの
例外監視
【リリース情報更新結果】=最新リリース応答の本文をJSON形式として読み取ったもの
発生した場合
// JSONの読み取りに失敗した場合
「リリース情報更新失敗」をコンソールへ表示して改行する
「[エラーのメッセージ]」をコンソールへ表示して改行する
[リリース先フォルダー]というフォルダを削除する
手順から抜け出す
監視終わり
// リリース情報の更新に失敗した場合
もし最新リリース応答のステータスコード番号が207でないなら
「リリース情報更新失敗」をコンソールへ表示して改行する
「- ステータスコード: [最新リリース応答のステータスコード番号] [最新リリース応答のステータス記述]」をコンソールへ表示して改行する
「- エラー内容」をコンソールへ表示して改行する
リリース情報更新結果(「errors」)を【リリース情報更新エラー】へそれぞれ繰り返す
「 - [リリース情報更新エラー]」をコンソールへ表示して改行する
繰り返し終わり
[リリース先フォルダー]というフォルダを削除する
手順から抜け出す
もし終わり
// 更新に失敗した項目が存在した場合
もしリリース情報更新結果に「failed」が存在するなら
「リリース情報更新失敗」をコンソールへ表示して改行する
「- ステータスコード: [最新リリース応答のステータスコード番号] [最新リリース応答のステータス記述]」をコンソールへ表示して改行する
「- エラー内容: 一部の項目の内部処理に失敗」をコンソールへ表示して改行する
「- 更新に失敗した項目: [リリース情報更新結果(「failed」)(「items」)の個数]」をコンソールへ表示して改行する
リリース情報更新結果(「failed」)(「items」)を【リリース情報更新失敗項目】へそれぞれ繰り返す
「 - [リリース情報更新失敗項目]」をコンソールへ表示して改行する
繰り返し終わり
[リリース先フォルダー]というフォルダを削除する
手順から抜け出す
もし終わり
// 完了メッセージ
「リリース情報更新完了」をコンソールへ表示して改行する
「- ステータスコード: [最新リリース応答のステータスコード番号] [最新リリース応答のステータス記述]」をコンソールへ表示して改行する
「」をコンソールへ表示して改行する
「ファイルのアップロード開始」をコンソールへ表示して改行する
// Pull
「cd "[メイン設定について「Main」から「Dev_Build_Releases_Brunch_Folder」を取得したもの]" & git checkout releases/dev & git pull origin releases/dev & echo [ビルド番号]> "[今の位置]BuildVersion.txt"」をコマンド実行したものをコンソール出力する
コマンド一覧={
「cd "[メイン設定について「Main」から「Dev_Build_Releases_Brunch_Folder」を取得したもの]"」,
「git checkout releases/dev」,
「git add "[リリース先フォルダー][ソースファイルの名前だけ]_Setup.exe"」,
「git commit -m "Version [アプリのバージョン]-[アプリのリリースチャンネル][ビルド番号]"」,
「git push origin releases/dev」
}
例外監視
「[今の位置]_Pack\[ソースファイルの名前だけ]_Setup.exe」を「[リリース先フォルダー][ソースファイルの名前だけ]_Setup.exe」へコピーする
「」をコンソールへ表示して改行する
コマンド一覧を「 & 」で繋げたものをコマンド実行したものをコンソールへ表示して改行する
「」をコンソールへ表示して改行する
「完了」をコンソールへ表示して改行する
発生した場合
「リリース処理失敗: [エラーのメッセージ]」をコンソール出力する
[リリース先フォルダー]というフォルダを削除する
監視終わり
そうでなければ
// 正常に取得できなかった場合はフォルダーを削除する
「リリース情報取得失敗」をコンソールへ表示して改行する
「- ステータスコード: [HTTPのステータスコード]」をコンソールへ表示して改行する
「- 詳細: [最新リリース情報(「detail」)]」をコンソールへ表示して改行する
[リリース先フォルダー]というフォルダを削除する
もし終わり
終わり
【初期値】でコンフィグチェックする手順
メイン設定という設定ファイルを作る
メイン設定のファイル名=「[今の位置]BuilderConfig.ini」
メイン設定について「Info」で「CreatedDate」へ「[今]」を設定する
初期値の見出しを【コンフィグ親キー】へそれぞれ繰り返す
初期値(コンフィグ親キー)の見出しを【コンフィグキー】へそれぞれ繰り返す
もし[メイン設定についてコンフィグ親キーからコンフィグキーを取得したもの]が空ならメイン設定についてコンフィグ親キーでコンフィグキーへ[初期値(コンフィグ親キー)(コンフィグキー)]を設定する
繰り返し終わり
繰り返し終わり
終わり