GitHub Actions可轻松实现全部软件工做流程的自动化。直接从GitHub构建,测试和部署代码。使代码审查,分支机构管理和问题分类工做按您想要的方式进行。react
记得在19年末的时候,我看到了Run Flutter Driver tests on GitHub Actions这篇文章,随即就开始在flutter_deer中去使用,由于当时项目中恰好就有写好的集成测试。android
当时在flutter_deer中会有许多issue都是关于项目运行的问题,许多同窗反映运行不起来,各类报错。说实话没法肯定是环境问题仍是自己代码问题。有了GitHub Actions这个工具,就能够在GitHub上构建运行测试,只要测试经过,能够保证在代码在相应的flutter版本上运行没有问题。ios
GitHub Actions的功能很是强大,同时提供有actions市场,咱们在上面能够搜索使用他人写好的各类功能的 action。水平有限,这里我只作简单的使用介绍,详细能够看官方文档。git
首先在项目中添加.github / workflows
目录。而后建立.yml
格式的工做流文件。好比:flutter-drive.yml
。它的基础格式以下:github
# workflow 的名称 name: flutter_deer driver # 触发 workflow 的条件 on: [push, pull_request] # workflow执行的一项或多项任务 jobs: ...
触发workflow 的条件也能够根据状况定制。好比指定推送到某一分支、指定某些文件修改时触发。例如:web
# push 提交中修改`pubspec.yaml`触发 on: push: paths: - 'pubspec.yaml' ...
详细见文档[Workflow syntax for GitHub Actions
](https://docs.github.com/en/ac...macos
任务的结构以下:windows
简单解释就是jobs下是job(任务),job下是step(步骤),step下是action(动做)。api
下面举一个执行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,基本能够无脑使用,只需修改本身的运行命令便可。
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"
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"
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菜单里。
Actions
菜单中看到。固然用法也不止我上面说到的这些,你也能够作打包、自动发布这些功能,也不止Flutter能够用到。一切看你的需求。最后奉上本篇的完整代码。
最后的最后,若是本篇对你有所帮助,不妨点赞收藏一波。