Flutter GitHub Actions 集成插件github_actions_toolkit的使用
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
更多关于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。