Flutter GitHub Actions集成插件dart_github_actions的使用

Flutter GitHub Actions 集成插件 dart_github_actions 的使用


Dart Github Actions

该项目允许使用类型安全的 API 而不是 YAML 来编写 GitHub 工作流。

该插件受到了 github-actions-kotlin-dsl 的启发,并旨在填补 Kotlin 脚本的一些空白。这个项目绝不是替代品,而是一个替代方案。


版本 0.X

Dart Github Actions 目前仍在开发中,基本功能已经实现以开始编写和生成工作流。在 0.x 版本范围内,API 可能会根据实现更多的 GitHub 工作流语法而更改。

如果您发现任何问题或有功能请求,请提交一个 issue 或发起一个 讨论


功能列表


通用语法

  • ❌ 工作流
    • ❌ 工作流并发
    • ❌ 工作流权限
    • ❌ 工作流环境变量
  • ❌ 任务
    • ✅ 任务输出
    • ✅ 任务默认值
    • ❌ 任务并发
    • ❌ 任务策略
    • ❌ 动作步骤
    • ❌ 命令步骤
    • ❌ 任务条件
    • ❌ 任务环境变量
    • ❌ 任务容器
    • ❌ 任务服务

触发器

  • ❌ 分支保护规则
  • ❌ 检查运行
  • ❌ 检查套件
  • ❌ 创建
  • ❌ 删除
  • ❌ 部署
  • ❌ 部署状态
  • ❌ 讨论
  • ❌ 讨论评论
  • ❌ 分叉
  • ❌ Gollum
  • ❌ 问题评论
  • ❌ 问题
  • ❌ 标签
  • ❌ 合并组
  • ❌ 里程碑
  • ❌ 页面构建
  • ❌ 项目
  • ❌ 项目卡片
  • ❌ 项目列
  • ❌ 公开
  • ✅ Pull 请求
  • ❌ Pull 请求评论(使用问题评论)
  • ❌ Pull 请求审查
  • ❌ Pull 请求审查评论
  • ❌ Pull 请求目标
  • ✅ 推送
  • ❌ 注册包
  • ❌ 发布
  • ❌ 存储库调度
  • ❌ 状态
  • ❌ 关注
  • ❌ 工作流调用
  • ❌ 工作流调度
  • ❌ 工作流运行

设置

  1. 在项目的 .github 文件夹中创建一个 pubspec.yaml 文件,并将 dart_github_actions 添加为依赖项。

    注意:目前最佳的方式是将 pubspec.yaml 文件放在 .github 文件夹中,然后在 Visual Studio Code 中打开该文件夹以获得最佳的 IDE 体验。我发现打开根目录会导致 IDE 自动完成和错误识别出现问题。

    # .github/pubspec.yaml
    name: workflows
    description: 项目用于定义 dart_github_actions 工作流。
    version: 1.0.0+1
    publish_to: none
    
    environment:
      sdk: ">=2.17.0 <3.0.0"
    
    dependencies:
      dart_github_actions: latest
    
  2. 运行 dart pub get


编写工作流

  1. 为您的工作流创建一个 Dart 文件。您的文件应该包含一个异步的 main() 方法。

    // .github/workflows/workflow.dart
    import 'package:dart_github_actions/dart_github_actions.dart';
    
    void main() async {
      await Workflow(
        name: 'workflow',
        on: [
          Push(
            branches: ['master'],
          )
        ],
        jobs: [
          Job(
            id: 'job-1',
            runsOn: RunnerType.ubuntuLatest,
          )
            ..run('echo step 1', name: 'Step 1')
            ..run('echo step 2', name: 'Step 1'),
        ],
      ).writeYamlToFile();
    }
    
  2. 使用 dart workflow.dart 运行您的文件,将会生成以下内容:

    # 这个工作流已使用 dart_github_actions (https://github.com/scottbisaillon/dart_github_actions) 生成。
    # 所有的修改都应该在 'workflow.dart' 中进行,并重新生成工作流。
    
    name: workflow
    on:
      push:
        branches:
          - master
    jobs:
      job-1:
        runs-on: ubuntu-latest
        steps:
          -
            id: step-0
            name: Step 1
            run: echo step 1
          -
            id: step-1
            name: Step 1
            run: echo step 2
    

完整示例

// .github/workflows/example.dart
import 'package:dart_github_actions/dart_github_actions.dart';

void main() async {
  const basePath = 'packages/dart_github_actions';

  await Workflow(
    name: 'dart_github_actions',
    on: [
      Push(
        branches: ['master', 'development'],
        paths: [
          '.github/workflows/build_dart_github_actions.yaml',
          '$basePath/**',
        ],
      )
    ],
    jobs: [
      Job(
        id: 'build',
        runsOn: RunnerType.ubuntuLatest,
        defaults: const Defaults(
          run: Run(workingDirectory: 'packages/dart_github_actions'),
        ),
      )
        ..uses(
          const CustomAction(
            actionOwner: 'actions',
            actionName: 'checkout',
            actionVersion: 'v3',
          ),
        )
        ..uses(
          const CustomAction(
            actionOwner: 'dart-lang',
            actionName: 'setup-dart',
            actionVersion: 'v1',
          ),
        )
        ..run('dart pub get', name: 'Install Dependencies')
        ..run('dart format --set-exit-if-changed .', name: 'Format')
        ..run('dart analyze --fatal-infos --fatal-warnings .', name: 'Analyze')
        ..run('dart run coverage:test_with_coverage', name: 'Run Tests')
    ],
  ).writeYamlToFile();
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成并使用dart_github_actions插件的示例代码和配置说明。这个插件允许你在Flutter项目中通过Dart代码来与GitHub Actions进行交互。

第一步:添加依赖

首先,在你的pubspec.yaml文件中添加dart_github_actions的依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_github_actions: ^最新版本号  # 请替换为实际发布的最新版本号

然后运行flutter pub get来安装依赖。

第二步:配置GitHub Actions

你需要在GitHub仓库中创建一个.github/workflows/your-workflow.yml文件来定义你的GitHub Actions工作流。这里是一个简单的例子,用于在代码推送到主分支时触发一些操作:

name: Flutter CI

on:
  push:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: Dart-Code/flutter-action@v1
      with:
        flutter-version: '稳定版'  # 或者 'beta', 'dev', 'canary' 等
    - run: flutter pub get
    - run: flutter test

第三步:在Flutter项目中使用dart_github_actions

虽然dart_github_actions这个包名可能听起来像是直接与GitHub Actions交互的,但实际上,Flutter和Dart生态中并没有一个直接名为dart_github_actions的官方或广泛使用的包用于这种目的。通常,与GitHub Actions的交互是通过配置.github/workflows/下的YAML文件来完成的,而不是通过Dart代码。

不过,如果你想要从Flutter应用中调用GitHub API(这可能与GitHub Actions的某些功能相关,比如触发工作流或检查状态),你可以使用像http这样的Dart包来发送HTTP请求。下面是一个使用http包来发送GET请求到GitHub API的示例:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> fetchGitHubData() async {
  final client = http.Client();
  
  try {
    final response = await client.get(
      Uri.parse('https://api.github.com/repos/your-username/your-repo/commits/main'),
      headers: {
        'Accept': 'application/vnd.github.v3+json',
        'Authorization': 'Bearer YOUR_GITHUB_ACCESS_TOKEN'
      }
    );

    // 确保响应状态码为200
    response.raiseForStatus();

    // 将响应体转换为JSON
    final body = await response.body;
    final jsonData = jsonDecode(body);
    
    print(jsonData);
    
  } catch (exception) {
    print('Error fetching data: $exception');
  } finally {
    // 关闭客户端
    client.close();
  }
}

void main() {
  fetchGitHubData();
}

在这个例子中,你需要将your-usernameyour-repoYOUR_GITHUB_ACCESS_TOKEN替换为你的实际值。注意,直接在代码中硬编码GitHub访问令牌是不安全的,你应该使用环境变量或其他安全的方式来管理这些敏感信息。

结论

虽然没有一个直接名为dart_github_actions的包用于Flutter和Dart项目与GitHub Actions的直接交互,但你可以通过配置GitHub Actions的YAML文件和在Flutter应用中使用HTTP客户端来与GitHub API进行交互,从而间接地实现与GitHub Actions相关的功能。

回到顶部