1
- # .github/workflows/build.yml
2
-
3
1
name : Android Build
4
2
5
3
# ワークフローが実行されるトリガーを指定
24
22
type : boolean
25
23
required : true
26
24
default : false
27
- version :
28
- description : ' Version'
29
- type : string
25
+ generate_release_notes :
26
+ description : ' Generate Release Notes'
27
+ type : boolean
28
+ required : true
29
+ default : true
30
+ build_type : # <--- 変更点: ビルドタイプを選択する入力を追加
31
+ description : ' APK Build Type (split per ABI or single universal)'
32
+ type : choice
30
33
required : true
31
- default : ' v0.0.0-Beta'
34
+ options :
35
+ - split
36
+ - single
37
+ default : ' split'
32
38
33
39
jobs :
34
40
build :
35
41
# 実行環境としてUbuntuの最新版を使用
36
42
runs-on : ubuntu-latest
43
+ outputs : # outputs を定義して他のジョブから参照可能にする
44
+ version : ${{ steps.get_version.outputs.version }}
45
+ # <--- 変更点: deployジョブでビルドタイプを判定するためにoutputsを追加
46
+ build_type : ${{ github.event.inputs.build_type || 'split' }}
37
47
38
48
steps :
39
49
# Step 1: リポジトリのコードをチェックアウト
40
50
- name : Checkout code
41
- uses : actions/checkout@v4 # 最新バージョンを確認してください
51
+ uses : actions/checkout@v4
42
52
43
- # Step 2: Java Development Kit (JDK) をセットアップ (Androidビルドに必要)
53
+ # Step 2: Java Development Kit (JDK) をセットアップ
44
54
- name : Set up JDK 21
45
- uses : actions/setup-java@v4 # 最新バージョンを確認してください
55
+ uses : actions/setup-java@v4
46
56
with :
47
- distribution : ' temurin' # または他のディストリビューション
48
- java-version : ' 21' # プロジェクトに必要なJavaバージョンを指定
57
+ distribution : ' temurin'
58
+ java-version : ' 21'
49
59
50
60
# Step 3: Flutter SDK をセットアップ
51
- # (オプション) プロジェクトルートに .flutter-version ファイルがあればそのバージョンが使われます
52
61
- name : Set up Flutter
53
- uses : subosito/flutter-action@v2 # 最新バージョンを確認してください
62
+ uses : subosito/flutter-action@v2
54
63
with :
55
- channel : ' stable' # stable, beta, dev, master から選択
56
- # flutter-version: '3.x.x' # 特定のバージョンを指定する場合
64
+ channel : ' stable'
57
65
58
66
# Step 4: Flutterの依存関係を取得
59
67
- name : Get Flutter dependencies
@@ -63,29 +71,80 @@ jobs:
63
71
# - name: Clean Flutter project
64
72
# run: flutter clean
65
73
66
- # Step 6: Android APK をビルド (--release オプションでリリースモード)
67
- # --split-per-abi をつけるとCPUアーキテクチャごとにAPKが分割されます
68
- - name : Build APK
69
- run : flutter build apk --release --split-per-abi
70
- # 単一のAPKが必要な場合は: flutter build apk --release
74
+ # Step 6: Android APK をビルド
75
+ # <--- 変更点: 以下の2つのステップでビルド方法を分岐 --- >
76
+
77
+ # 分割APKをビルド (デフォルトまたは手動で'split'を選択した場合)
78
+ - name : Build APK (Split per ABI)
79
+ if : ${{ (github.event.inputs.build_type || 'split') == 'split' }}
80
+ run : flutter build apk --release --split-per-abi --build-number=${{ github.run_number }}
81
+
82
+ # 単一APKをビルド (手動で'single'を選択した場合)
83
+ - name : Build APK (Single Universal)
84
+ if : ${{ github.event.inputs.build_type == 'single' }}
85
+ run : flutter build apk --release --build-number=${{ github.run_number }}
86
+
87
+ # Step 7: pubspec.yaml からバージョンを読み取る
88
+ - name : Read version from pubspec.yaml
89
+ id : get_version
90
+ run : |
91
+ echo "version=$(grep '^version: ' pubspec.yaml | sed 's/version: //')" >> $GITHUB_OUTPUT
71
92
72
- # Step 7: ビルドされたAPKを成果物としてアップロード
73
- # --split-per-abi を使用した場合、複数のAPKが生成されるためワイルドカードを使用
74
- - name : Upload APK Artifact
93
+ # Step 8: ビルドされたAPKを成果物としてアップロード
94
+ # <--- 変更点: 以下の2つのステップでアップロードするファイルを分岐 --- >
95
+
96
+ # 分割APKをアップロード
97
+ - name : Upload Split APKs Artifact
98
+ if : ${{ (github.event.inputs.build_type || 'split') == 'split' }}
75
99
uses : actions/upload-artifact@v4
76
100
with :
77
- name : release-apk # 成果物の名前
101
+ name : release-apk # deploy ジョブで参照するアーティファクト名
78
102
path : build/app/outputs/flutter-apk/app-*-release.apk
79
- # 単一APKの場合のパス例: build/app/outputs/apk/release/app-release.apk
80
103
81
- - name : Release
104
+ # 単一APKをアップロード
105
+ - name : Upload Single APK Artifact
106
+ if : ${{ github.event.inputs.build_type == 'single' }}
107
+ uses : actions/upload-artifact@v4
108
+ with :
109
+ name : release-apk
110
+ path : build/app/outputs/apk/release/app-release.apk
111
+
112
+ deploy :
113
+ runs-on : ubuntu-latest
114
+ needs : build # build ジョブの完了を待つ
115
+ if : github.event.inputs.release == 'true' # release 入力が true の場合のみ実行
116
+ steps :
117
+ - name : Checkout code # リリースノート生成のためにリポジトリのコードをチェックアウト
118
+ uses : actions/checkout@v4
119
+ with :
120
+ fetch-depth : 0 # タグやコミット履歴をすべて取得
121
+
122
+ - name : Download APK Artifact
123
+ uses : actions/download-artifact@v4
124
+ with :
125
+ name : release-apk # build ジョブでアップロードされたアーティファクト名
126
+ path : artifacts/apk/ # ダウンロード先のディレクトリ
127
+
128
+ # <--- 変更点: 以下の2つのステップでリリースするファイルを分岐 --- >
129
+
130
+ # 分割APKをリリース
131
+ - name : Release with Split APKs
132
+ if : ${{ needs.build.outputs.build_type == 'split' }}
82
133
uses : softprops/action-gh-release@v2
83
- if : github.event.inputs.release == 'true'
84
134
with :
85
- tag_name : ${{github.event.inputs .version}}
135
+ tag_name : ${{ needs.build.outputs .version }}
86
136
draft : false
87
137
prerelease : false
88
- generate_release_notes : true
89
- files : build/app/outputs/flutter- apk/app-*-release.apk
138
+ generate_release_notes : ${{ github.event.inputs.generate_release_notes }}
139
+ files : artifacts/ apk/app-*-release.apk # 分割APKのパス
90
140
91
-
141
+ # 単一APKをリリース
142
+ - name : Release with Single APK
143
+ if : ${{ needs.build.outputs.build_type == 'single' }}
144
+ uses : softprops/action-gh-release@v2
145
+ with :
146
+ tag_name : ${{ needs.build.outputs.version }}
147
+ draft : false
148
+ prerelease : false
149
+ generate_release_notes : ${{ github.event.inputs.generate_release_notes }}
150
+ files : artifacts/apk/app-release.apk # 単一APKのパス
0 commit comments