-
Notifications
You must be signed in to change notification settings - Fork 4
164 lines (144 loc) · 7.02 KB
/
flutter_ci_test.yaml
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
name: flutter_test
on:
pull_request:
types: [opened, synchronize]
push:
branches:
- main
jobs:
flutter_test:
runs-on: ubuntu-latest
# timeout-minutesのデフォルト値は 6 時間となっている。
# タイムアウトを設定しないと処理が終わらないまま放置され、莫大な請求額になるため短めに設定する。
timeout-minutes: 10
env:
run-tests: 'false'
steps:
# ソースコードをチェックアウトする。
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# Dart ファイルが変更されたかチェックする。
- name: Check for Dart file changes
id: dartfile
run: |
echo "Checking for changes in Dart files..."
base_sha=${{ github.event.pull_request.base.sha }}
current_sha=${{ github.event.pull_request.head.sha }}
echo "Base SHA: $base_sha"
echo "Current SHA: $current_sha"
git diff --name-only $base_sha $current_sha || true
changed_files=$(git diff $base_sha $current_sha --name-only | grep '\.dart$' || true)
if [[ -n "$changed_files" ]]; then
echo "Dart files changed."
echo "::set-output name=run-tests::true"
else
echo "No Dart files changed."
echo "::set-output name=run-tests::false"
fi
# fvm のバージョンとチャネルを環境変数に設定する
- name: Check fvm
if: steps.dartfile.outputs.run-tests == 'true'
uses: kuhnroyal/flutter-fvm-config-action@v1
# Flutter SDK の設定
- name: Setup Flutter SDK
if: steps.dartfile.outputs.run-tests == 'true'
uses: subosito/flutter-action@v2
with:
# バージョンとチャネルは fvm の値を使う
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
# 次回以降起動を速くするためにキャッシュしておく
cache: true
cache-key: flutter
cache-path: ${{ runner.tool_cache }}/flutter
# /opt/hostedtoolcache/flutter
# melosの設定
# デフォルトでmelos bootstrapコマンドが実行される
- name: Setup melos
if: steps.dartfile.outputs.run-tests == 'true'
uses: bluefireteam/melos-action@v1
with:
run-bootstrap: false
# melos bootstrap を実行する。
- name: melos bootstrap
if: steps.dartfile.outputs.run-tests == 'true'
run: melos bootstrap --sdk-path=${{ runner.tool_cache }}/flutter
# 依存関係を解決する。
- name: Install Flutter dependencies by melos
if: steps.dartfile.outputs.run-tests == 'true'
run: melos pg --sdk-path=${{ runner.tool_cache }}/flutter
# コードフォーマットを実行する。
# フォーマットの結果変更が発生した場合はエラー扱いにする。
- name: Run Flutter format
if: steps.dartfile.outputs.run-tests == 'true'
run: melos exec --sdk-path=${{ runner.tool_cache }}/flutter -- "dart format --set-exit-if-changed ."
# 静的解析を実行する。
- name: Analyze project source
if: steps.dartfile.outputs.run-tests == 'true'
run: melos exec --sdk-path=${{ runner.tool_cache }}/flutter -- "flutter analyze ."
# テストを実行する。
- name: Run-Flutter-Test
if: steps.dartfile.outputs.run-tests == 'true'
run: melos exec --sdk-path=${{ runner.tool_cache }}/flutter -- "flutter test --machine --coverage > test-report.log"
# mottai_flutter_app のテスト結果を GitHub Actions に表示する。
- name: Report Test mottai_flutter_app
uses: dorny/test-reporter@v1
# テスト結果を表示するのでテストが失敗しても実行する。
# ただし、コードフォーマットや静的解析で CI が失敗した場合は処理を行わない。
if: steps.dartfile.outputs.run-tests == 'true' && steps.Run-Flutter-Test.outputs.return-code == '0'
with:
name: Flutter Test Report mottai_flutter_app
path: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/mottai_flutter_app/test-report.log
reporter: flutter-json
# Codecov に結果を送信する。
- name: Upload coverage to Codecov
if: steps.dartfile.outputs.run-tests == 'true'
uses: codecov/codecov-action@v2
with:
token: ${{secrets.CODECOV_TOKEN}}
file: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/mottai_flutter_app/coverage/lcov.info
fail_ci_if_error: true
flags: unittests_mottai_flutter_app
verbose: true
# firebase_common のテスト結果を GitHub Actions に表示する。
- name: Report Test firebase_common
uses: dorny/test-reporter@v1
# テスト結果を表示するのでテストが失敗しても実行する。
# ただし、コードフォーマットや静的解析で CI が失敗した場合は処理を行わない。
if: steps.dartfile.outputs.run-tests == 'true' && steps.Run-Flutter-Test.outputs.return-code == '0'
with:
name: Flutter Test Report mottai_flutter_app
path: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/firebase_common/test-report.log
reporter: flutter-json
# Codecov に結果を送信する。
- name: Upload coverage to Codecov
if: steps.dartfile.outputs.run-tests == 'true'
uses: codecov/codecov-action@v2
with:
token: ${{secrets.CODECOV_TOKEN}}
file: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/firebase_common/coverage/lcov.info
fail_ci_if_error: true
flags: unittests_firebase_common
verbose: true
# dart_flutter_common のテスト結果を GitHub Actions に表示する。
- name: Report Test dart_flutter_common
uses: dorny/test-reporter@v1
# テスト結果を表示するのでテストが失敗しても実行する。
# ただし、コードフォーマットや静的解析でCIが失敗した場合は処理を行わない。
if: steps.dartfile.outputs.run-tests == 'true' && steps.Run-Flutter-Test.outputs.return-code == '0'
with:
name: Flutter Test Report dart_flutter_common
path: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/dart_flutter_common/test-report.log
reporter: flutter-json
# Codecov に結果を送信する。
- name: Upload coverage to Codecov
if: steps.dartfile.outputs.run-tests == 'true'
uses: codecov/codecov-action@v2
with:
token: ${{secrets.CODECOV_TOKEN}}
file: /home/runner/work/mottai-flutter-app/mottai-flutter-app/packages/dart_flutter_common/coverage/lcov.info
fail_ci_if_error: true
flags: unittests_dart_flutter_common
verbose: true