Flutter GitHub Actions 集成插件github_actions_toolkit的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter GitHub Actions 集成插件 github_actions_toolkit 的使用

github_actions_toolkit 是一个用于 GitHub Actions 的第三方工具包,用 Dart 编写。它受到官方 JavaScript 工具包 actions/toolkit 的启发,并包含类似的命令。

使用指南

日志记录(Logging)

日志命令在 log 下可用。有四个级别的日志:

  • error
  • warning
  • info
  • debug

info 级别的日志将直接输出到 stdout,而 debug 级别的日志只有在仓库中设置了名为 ACTIONS_STEP_DEBUG 的秘密且值为 true 时才会显示。

示例代码:

import 'package:github_actions_toolkit/github_actions_toolkit.dart' as gaction;

void main() async {
  const logger = gaction.log;
  
  logger
    ..info('This is just a message')
    ..warning('This is a warning message')
    ..error('This is an error message');

  final message = gaction.isDebug
      ? 'This is a debug message'
      : 'This is a debug message that you will not see';
  logger.debug(message);
}

输入(Inputs)

创建一个 Input 对象来处理每个需要的输入参数,并通过 value getter 获取其值。如果输入是必需的但未提供,则会抛出 ArgumentError

示例代码:

import 'package:github_actions_toolkit/github_actions_toolkit.dart' as gaction;

void main() async {
  const input = gaction.Input(
    'who-to-greet', // 在 YAML 文件中定义的名字
    isRequired: true,
  );

  gaction.log.info('Hello ${input.value}!');
}

输出(Outputs)

可以使用 setOutput 方法设置输出供后续步骤使用。

子进程(Subprocesses)

使用 exec 函数执行命令行命令。一旦命令终止,它将返回一个包含退出代码和输出的 ExecResult 对象。

示例代码:

import 'package:github_actions_toolkit/github_actions_toolkit.dart' as gaction;

void main() async {
  final process = await gaction.exec('echo', ['Hello world']);

  gaction.log.info("The 'echo' command has terminated with code ${process.exitCode} and has printed ${process.stdout}");
}

完整示例 Demo

以下是一个完整的示例,展示了如何在 GitHub Actions 中使用 github_actions_toolkit

import 'dart:convert';
import 'dart:io';

import 'package:github_actions_toolkit/github_actions_toolkit.dart' as gaction;

void main() async {
  exitCode = 0;

  // Logging
  const logger = gaction.log;
  logger
    ..info('This is just a message')
    ..warning('This is a warning message')
    ..error('This is an error message');
  if (gaction.isDebug) logger.debug('This is a debug message');

  // Inputs
  const inputWhoToGreet = gaction.Input(
    'who-to-greet',
    isRequired: false,
    canBeEmpty: true,
  );
  logger.info('Hello ${inputWhoToGreet.value ?? 'World'}!');

  // Outputs
  final time = DateTime.now().toString();
  gaction.setOutput('time', time);

  // Environment
  final eventPayload =
      jsonDecode(gaction.env.eventPayload!) as Map<String, dynamic>;
  if (eventPayload.containsKey('pull_request')) {
    logger.info('This pull request has been ${eventPayload['action']}');
  }

  // Subprocesses
  final analyzerResult = await (logger.group(
    'Executing dartanalyzer',
    () async => gaction.exec(
      'dartanalyzer',
      [gaction.env.workspace!.path, '--format', 'machine'],
    ),
  ));

  if (analyzerResult.exitCode != 0) {
    logger.error('Execution of dartanalyzer has failed');
    exit(analyzerResult.exitCode);
  }

  var errorCount = 0;
  for (final line in analyzerResult.stdout.lines) {
    if (line.split('|')[0] == 'ERROR') errorCount += 1;
  }
  if (errorCount > 0) logger.warning('$errorCount have been found!');
}

更多关于Flutter GitHub Actions 集成插件github_actions_toolkit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GitHub Actions 集成插件github_actions_toolkit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成GitHub Actions并使用github_actions_toolkit插件的示例代码案例。需要注意的是,github_actions_toolkit并不是一个广泛认知的官方Flutter插件,通常我们直接使用GitHub Actions的YAML配置和GitHub提供的工具包(如@actions/core, @actions/github等)来编写自定义动作。不过,为了说明如何在Flutter项目中使用GitHub Actions,我将展示如何设置一个基本的GitHub Actions工作流,并在Flutter项目中执行一些操作。

步骤 1: 设置Flutter项目

首先,确保你已经有一个Flutter项目。如果没有,可以通过以下命令创建一个新的Flutter项目:

flutter create my_flutter_app
cd my_flutter_app

步骤 2: 创建 .github/workflows 目录

在你的Flutter项目根目录下,创建一个名为 .github 的目录,然后在该目录下创建一个名为 workflows 的子目录。这个目录将用于存放你的GitHub Actions工作流配置文件。

mkdir -p .github/workflows

步骤 3: 创建 GitHub Actions 工作流文件

.github/workflows 目录下创建一个YAML文件,例如 flutter_build.yml。这个文件将定义你的GitHub Actions工作流。

name: Flutter CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: subosito/flutter-action@v1
      with:
        flutter-version: '2.x'  # 指定你要使用的Flutter版本

    - name: Get Flutter dependencies
      run: flutter pub get

    - name: Run Flutter tests
      run: flutter test

    - name: Build Flutter app for web
      run: flutter build web
      
    # 这里可以添加更多步骤,比如部署到GitHub Pages或其他服务

步骤 4: (可选) 使用GitHub Actions Toolkit脚本

虽然Flutter本身不直接使用GitHub Actions Toolkit,但如果你需要在GitHub Actions中编写自定义的JavaScript或Node.js脚本来与GitHub API交互,你可以使用@actions/core@actions/github等工具包。以下是一个简单的示例,展示了如何在Actions中创建一个自定义动作,这里仅作为参考,实际在Flutter项目中不常用。

首先,创建一个Node.js项目来编写你的自定义动作:

mkdir my-github-action
cd my-github-action
npm init -y
npm install @actions/core @actions/github

然后,创建一个 index.js 文件,并添加以下代码:

const core = require('@actions/core');
const github = require('@actions/github');

async function run() {
  try {
    const token = core.getInput('GITHUB_TOKEN');
    const octokit = github.getOctokit(token);

    // 示例:获取当前仓库的信息
    const { data: repoData } = await octokit.repos.get({
      owner: github.context.repo.owner,
      repo: github.context.repo.repo
    });

    core.setOutput('repo-name', repoData.name);
    console.log(`Repo name is ${repoData.name}`);
  } catch (error) {
    core.setFailed(error.message);
  }
}

run();

将这个动作打包并发布到npm(或GitHub Packages),然后在你的Flutter项目的GitHub Actions工作流中引用它。不过,这通常用于更复杂的CI/CD流程,与Flutter本身的构建和测试不直接相关。

总结

以上示例展示了如何在Flutter项目中集成GitHub Actions来执行构建、测试和部署等任务。虽然github_actions_toolkit不是一个标准的Flutter插件,但你可以通过GitHub Actions的YAML配置和Node.js脚本实现自定义的CI/CD逻辑。希望这能帮助你更好地理解如何在Flutter项目中使用GitHub Actions。

回到顶部