Skip to content

Commit 59a1d73

Browse files
authored
feat(ci): APKのビルドタイプ(単一/分割)を選択可能に
手動実行時にAPKのビルドタイプを選択できる機能を追加しました。 これにより、用途に応じた柔軟なビルドが可能になります。 - **分割APK (split)**: これまでのデフォルト。CPUアーキテクチャごとに最適化された軽量なファイルで、本番リリースに適しています。 - **単一APK (single)**: 全アーキテクチャを含む単一のファイル。テストや内部確認用に配布しやすくなります。 実装詳細: - `workflow_dispatch` に `build_type` の選択肢 (`single`/`split`) を追加 - ビルド、アーティファクトのアップロード、リリースの各ステップに `if` 条件を追加し、選択に応じて処理を分岐
1 parent 1aa4df9 commit 59a1d73

File tree

1 file changed

+59
-23
lines changed

1 file changed

+59
-23
lines changed

.github/workflows/build.yaml

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# .github/workflows/build.yml
2-
31
name: Android Build
42

53
# ワークフローが実行されるトリガーを指定
@@ -29,33 +27,41 @@ on:
2927
type: boolean
3028
required: true
3129
default: true
30+
build_type: # <--- 変更点: ビルドタイプを選択する入力を追加
31+
description: 'APK Build Type (split per ABI or single universal)'
32+
type: choice
33+
required: true
34+
options:
35+
- split
36+
- single
37+
default: 'split'
3238

3339
jobs:
3440
build:
3541
# 実行環境としてUbuntuの最新版を使用
3642
runs-on: ubuntu-latest
3743
outputs: # outputs を定義して他のジョブから参照可能にする
3844
version: ${{ steps.get_version.outputs.version }}
45+
# <--- 変更点: deployジョブでビルドタイプを判定するためにoutputsを追加
46+
build_type: ${{ github.event.inputs.build_type || 'split' }}
3947

4048
steps:
4149
# Step 1: リポジトリのコードをチェックアウト
4250
- name: Checkout code
43-
uses: actions/checkout@v4 # 最新バージョンを確認してください
51+
uses: actions/checkout@v4
4452

45-
# Step 2: Java Development Kit (JDK) をセットアップ (Androidビルドに必要)
53+
# Step 2: Java Development Kit (JDK) をセットアップ
4654
- name: Set up JDK 21
47-
uses: actions/setup-java@v4 # 最新バージョンを確認してください
55+
uses: actions/setup-java@v4
4856
with:
49-
distribution: 'temurin' # または他のディストリビューション
50-
java-version: '21' # プロジェクトに必要なJavaバージョンを指定
57+
distribution: 'temurin'
58+
java-version: '21'
5159

5260
# Step 3: Flutter SDK をセットアップ
53-
# (オプション) プロジェクトルートに .flutter-version ファイルがあればそのバージョンが使われます
5461
- name: Set up Flutter
55-
uses: subosito/flutter-action@v2 # 最新バージョンを確認してください
62+
uses: subosito/flutter-action@v2
5663
with:
57-
channel: 'stable' # stable, beta, dev, master から選択
58-
# flutter-version: '3.x.x' # 特定のバージョンを指定する場合
64+
channel: 'stable'
5965

6066
# Step 4: Flutterの依存関係を取得
6167
- name: Get Flutter dependencies
@@ -65,26 +71,43 @@ jobs:
6571
# - name: Clean Flutter project
6672
# run: flutter clean
6773

68-
# Step 6: Android APK をビルド (--release オプションでリリースモード)
69-
# --split-per-abi をつけるとCPUアーキテクチャごとにAPKが分割されます
70-
- name: Build APK
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' }}
7180
run: flutter build apk --release --split-per-abi --build-number=${{ github.run_number }}
72-
# 単一のAPKが必要な場合は: flutter build apk --release
7381

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+
7487
# Step 7: pubspec.yaml からバージョンを読み取る
7588
- name: Read version from pubspec.yaml
7689
id: get_version
7790
run: |
7891
echo "version=$(grep '^version: ' pubspec.yaml | sed 's/version: //')" >> $GITHUB_OUTPUT
7992
8093
# Step 8: ビルドされたAPKを成果物としてアップロード
81-
# --split-per-abi を使用した場合、複数のAPKが生成されるためワイルドカードを使用
82-
- name: Upload APK Artifact
94+
# <--- 変更点: 以下の2つのステップでアップロードするファイルを分岐 --- >
95+
96+
# 分割APKをアップロード
97+
- name: Upload Split APKs Artifact
98+
if: ${{ (github.event.inputs.build_type || 'split') == 'split' }}
8399
uses: actions/upload-artifact@v4
84100
with:
85101
name: release-apk # deploy ジョブで参照するアーティファクト名
86102
path: build/app/outputs/flutter-apk/app-*-release.apk
87-
# 単一APKの場合のパス例: build/app/outputs/apk/release/app-release.apk
103+
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
88111

89112
deploy:
90113
runs-on: ubuntu-latest
@@ -102,13 +125,26 @@ jobs:
102125
name: release-apk # build ジョブでアップロードされたアーティファクト名
103126
path: artifacts/apk/ # ダウンロード先のディレクトリ
104127

105-
- name: Release
128+
# <--- 変更点: 以下の2つのステップでリリースするファイルを分岐 --- >
129+
130+
# 分割APKをリリース
131+
- name: Release with Split APKs
132+
if: ${{ needs.build.outputs.build_type == 'split' }}
106133
uses: softprops/action-gh-release@v2
107134
with:
108-
tag_name: ${{ needs.build.outputs.version }} # build ジョブからバージョンを取得
135+
tag_name: ${{ needs.build.outputs.version }}
109136
draft: false
110137
prerelease: false
111-
generate_release_notes: ${{ github.event.inputs.generate_release_notes }} # リリースノート生成のオプション
112-
files: artifacts/apk/app-*-release.apk # ダウンロードしたAPKファイルを指定
113-
138+
generate_release_notes: ${{ github.event.inputs.generate_release_notes }}
139+
files: artifacts/apk/app-*-release.apk # 分割APKのパス
114140

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

Comments
 (0)