GitHub Actions可轻松实现所有软件工作流程的自动化。间接从GitHub构建,测试和部署代码。使代码审查,分支机构治理和问题分类工作按您想要的形式进行。
记得在19年底的时候,我看到了Run Flutter Driver tests on GitHub Actions这篇文章,随即就开始在flutter_deer中去应用,因为过后我的项目中刚好就有写好的集成测试。
过后在flutter_deer中会有许多issue都是对于我的项目运行的问题,许多同学反映运行不起来,各种报错。说实话无奈确定是环境问题还是自身代码问题。有了GitHub Actions这个工具,就能够在GitHub上构建运行测试,只有测试通过,能够保障在代码在相应的flutter版本上运行没有问题。
GitHub Actions的性能十分弱小,同时提供有actions市场,咱们在下面能够搜寻应用别人写好的各种性能的 action。程度无限,这里我只做简略的应用介绍,具体能够看官网文档。
1.增加GitHub Actions到我的项目中
首先在我的项目中增加.github / workflows
目录。而后创立.yml
格局的工作流文件。比方:flutter-drive.yml
。它的根底格局如下:
# workflow 的名称
name: flutter_deer driver
# 触发 workflow 的条件
on: [push, pull_request]
# workflow执行的一项或多项工作
jobs:
...
触发workflow 的条件也能够依据状况定制。比方指定推送到某一分支、指定某些文件批改时触发。例如:
# push 提交中批改`pubspec.yaml`触发
on:
push:
paths:
- 'pubspec.yaml'
...
具体见文档[Workflow syntax for GitHub Actions
](https://docs.github.com/en/ac…
2.编写工作
工作的构造如下:
简略解释就是jobs下是job(工作),job下是step(步骤),step下是action(动作)。
上面举一个执行flutter单元测试的例子:
jobs:
# 工作id,必须是jobs下惟一的
accessibility_test:
# 运行所须要的虚拟机环境。例如 windows-2019, macOS-latest、macOS-10.14
runs-on: macos-latest
# job的运行步骤
steps:
# 便于获取flutter源码
# https://github.com/actions/checkout
- uses: actions/checkout@v2
# 设置flutter环境
# https://github.com/marketplace/actions/flutter-action
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable' # or: 'dev' or 'beta'
# 运行的命令
- run: "flutter pub get"
# 步骤名称
- name: "Run Flutter Accessibility Tests"
run: "flutter test test/accessibility_test.dart"
下面的正文解释的很分明了,其中用到了两个action,使得整个脚本的书写简略了很多。上面再贴上几个flutter_deer中用到的job,根本能够无脑应用,只需批改本人的运行命令即可。
3.实例
在iOS设施运行集成测试
drive_ios:
# 创立一个构建矩阵
strategy:
# 设置一组虚拟环境的不同配置
matrix:
device:
- "iPhone 8 (14.4)"
- "iPhone 11 Pro Max (14.4)"
# 设置为true时,如果任何矩阵job失败,GitHub将勾销所有正在进行的job。
fail-fast: false
runs-on: macOS-latest
steps:
- name: "List all simulators"
run: "xcrun instruments -s"
- name: "Start Simulator"
run: |
UDID=$(
xcrun instruments -s |
awk \
-F ' *[][]' \
-v 'device=${{ matrix.device }}' \
'$1 == device { print $2 }'
)
xcrun simctl boot "${UDID:?No Simulator with this name found}"
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2' # 指定flutter环境
channel: 'stable'
- name: "Run Flutter Driver tests"
run: "flutter drive --target=test_driver/driver.dart"
在Android设施运行集成测试
drive_android:
runs-on: macos-latest
strategy:
matrix:
api-level: [21, 29]
target: [default]
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable'
- name: "Run Flutter Driver tests"
# 用于装置,配置和运行Android模拟器的操作(仅实用于Mac OS)
# https://github.com/marketplace/actions/android-emulator-runner
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
target: ${{ matrix.target }}
arch: x86_64
profile: Nexus 6
script: "flutter drive --target=test_driver/driver.dart"
Flutter Web的构建及部署
web_build_and_deploy:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2.3.1
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable'
- name: "Web Build 🔧"
run: |
flutter pub get
flutter build web
- name: "Web Deploy 🚀"
# https://github.com/JamesIves/github-pages-deploy-action
uses: JamesIves/github-pages-deploy-action@4.0.0
with:
token: '${{ secrets.GITHUB_TOKEN }}'
branch: gh-pages
folder: build/web
最近flutter公布了2.0,在stable渠道就能够构建Web了。应用这个job咱们就能够轻松将本人的Web版代码部署在Github的page上了。
这里须要留神,部署实现后,须要咱们去设置GitHub Pages后才能够拜访。设置地位在我的项目主页的Settings菜单里。
4. 其余
- 当咱们推送代码到GitHub上时,工作就会主动执行,详细信息能够在我的项目的
Actions
菜单中看到。
上图就是其中一次的执行后果,能够看到有胜利的、勾销的、失败的。
- 咱们能够创立workflows执行状态的徽章,增加到我的项目的Markdown中。
展现成果:
当然用法也不止我下面说到的这些,你也能够做打包、主动公布这些性能,也不止Flutter能够用到。所有看你的需要。最初奉上本篇的残缺代码。
最初的最初,如果本篇对你有所帮忙,无妨点赞珍藏一波。
5.参考
- Run Flutter Driver tests on GitHub Actions
- CI_CD_Flutter_Demo
发表回复