Dart 非常适合构建快速而肮脏的 CLI 工具并在您的同事之间共享它们,因为它生成带有
dart compile exe
.
如果组织内部工具像这样在 GitHub Releases 中发布会很有用:

不幸的是, Dart 目前不支持交叉编译 , 我们必须 在发布二进制文件之前在每个平台(Windows、macOS、Linux)上编译源代码,而 Golang 支持交叉编译, GoReleaser 已经很容易发布每个平台的二进制文件。
GitHub Actions 免费提供 Windows/macOS/Linux 构建环境,对于编译和发布由 Dart 组成的 CLI 工具非常有用。
本文展示了如何配置 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 }}
https://docs.github.com/en/rest/reference/releases
根据this reference,GitHub Release需要2个步骤来发布一些二进制文件:
POST https://api.github.com/repos/{owner}/{repo}/releasesPOST https://uploads.github.com/repos/{owner}/{repo}/releases/{release_id}/assets
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/ ,如需转载,请注明出处,否则将追究法律责任。