乐趣区

关于ios:在GitHub-Actions上进行Flutter-的测试和部署

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. 其余

  1. 当咱们推送代码到 GitHub 上时,工作就会主动执行,详细信息能够在我的项目的 Actions 菜单中看到。

    上图就是其中一次的执行后果,能够看到有胜利的、勾销的、失败的。
  1. 咱们能够创立 workflows 执行状态的徽章,增加到我的项目的 Markdown 中。

    展现成果:

当然用法也不止我下面说到的这些,你也能够做打包、主动公布这些性能,也不止 Flutter 能够用到。所有看你的需要。最初奉上本篇的残缺代码。

最初的最初,如果本篇对你有所帮忙,无妨点赞珍藏一波。

5. 参考

  • Run Flutter Driver tests on GitHub Actions
  • CI_CD_Flutter_Demo
退出移动版