ITPub博客

首页 > IT职业 > IT职场 > Dart + GitHub Actions:将 Windows/macOS/Linux 的命令行工具发布到 GitHub Releases

Dart + GitHub Actions:将 Windows/macOS/Linux 的命令行工具发布到 GitHub Releases

翻译 IT职场 作者:TG_tuotebb 时间:2022-04-02 17:11:19 0 删除 编辑

动机

Dart 非常适合构建快速而肮脏的 CLI 工具并在您的同事之间共享它们,因为它生成带有 dart compile exe .

如果组织内部工具像这样在 GitHub Releases 中发布会很有用:
图片

不幸的是, Dart 目前不支持交叉编译 , 我们必须 在发布二进制文件之前在每个平台(Windows、macOS、Linux)上编译源代码,而 Golang 支持交叉编译, GoReleaser 已经很容易发布每个平台的二进制文件。

GitHub Actions 免费提供 Windows/macOS/Linux 构建环境,对于编译和发布由 Dart 组成的 CLI 工具非常有用。

本文展示了如何配置 GitHub 操作。

用于构建的 GitHub 操作

正如许多文章已经说过的那样,编译 Dart 代码只需要 4 个步骤。

- uses: actions/checkout@v2- uses: dart-lang/setup-dart@v1- run: dart pub get- run: dart compile exe bin/mycli.dart -o mycli

需要考虑的一点是,输出二进制文件在 Windows 上应命名为 mycli  .exe ,在 macOS/Linux 上命名为 mycli(无扩展名)。
我们可以通过定义如下矩阵来解决命名问题:

jobs:
  compile:
    name: dart compile exe
    strategy:
      matrix:
        include:
          - runs-on: ubuntu-latest
            binary-name: mycli_linux_amd64
          - runs-on: macos-latest
            binary-name: mycli_macos_amd64
          - runs-on: windows-latest
            binary-name: mycli_windows.exe
    runs-on: ${{ matrix.runs-on }}
    steps:
      - uses: actions/checkout@v2
      - uses: dart-lang/setup-dart@v1
      - run: dart pub get
      - run: mkdir ${{ matrix.runs-on }}
      - run: dart compile exe bin/mycli.dart -o ${{ matrix.runs-on }}/${{ matrix.binary-name }}

用于发布的 GitHub 操作

https://docs.github.com/en/rest/reference/releases

根据this reference,GitHub Release需要2个步骤来发布一些二进制文件:

  • 创建发布资源
    • POST https://api.github.com/repos/{owner}/{repo}/releases
  • 将二进制文件上传到发行版
    • POST https://uploads.github.com/repos/{owner}/{repo}/releases/{release_id}/assets

使用 action-gh-release 进行简单上传

action-gh-release 确实使这些步骤变得容易。

- uses: softprops/action-gh-release@v1
  with:
    draft: true
    files: out/*

通过这个简单的定义,GitHub Actions 会将所有文件上传 out/ 到新的草稿版本中。

    files: |
      out/mycli_linux
      out/mycli_macos
      out/mycli_windows

也 files 可以指定到单个文件列表而不是 glob 表达式。

使用工件将构建过程与发布过程相结合

构建和发布

3 个构建操作中的每一个都会生成一个二进制文件,并且发布过程应该一次将它们全部上传。 该流程可以使用 GitHub 工件来实现。

name: Publishon:
  push:
    tags:
      - '[0-9]+.[0-9]+.[0-9]+'jobs:
  compile:
    name: dart compile exe
    strategy:
      matrix:
        include:
          - runs-on: ubuntu-latest
            binary-name: mycli_linux_amd64
          - runs-on: macos-latest
            binary-name: mycli_macos_amd64
          - runs-on: windows-latest
            binary-name: mycli_windows.exe
    runs-on: ${{ matrix.runs-on }}
    steps:
      - uses: actions/checkout@v2
      - uses: dart-lang/setup-dart@v1
      - run: dart pub get
      - run: mkdir ${{ matrix.runs-on }}
      - run: dart compile exe bin/mycli.dart -o ${{ matrix.runs-on }}/${{ matrix.binary-name }}
      - uses: actions/upload-artifact@v2
        with:
          name: bin-${{ matrix.runs-on }}
          path: ${{ matrix.runs-on }}
  release:
    needs: compile
    name: github release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v2
        with:
          name: bin-ubuntu-latest
          path: bin-linux
      - uses: actions/download-artifact@v2
        with:
          name: bin-macos-latest
          path: bin-macos
      - uses: actions/download-artifact@v2
        with:
          name: bin-windows-latest
          path: bin-windows
      - uses: softprops/action-gh-release@v1
        with:
          draft: true
          files: bin-*/*

这预期如下:

流动

并且工件已成功上传到 GitHub Releases! :)

发布


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016204/viewspace-2885583/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2022-04-02

  • 博文量
    2
  • 访问量
    633