Dart + GitHub Actions:將 Windows/macOS/Linux 的命令列工具釋出到 GitHub Releases
動機
Dart 非常適合構建快速而骯髒的 CLI 工具並在您的同事之間共享它們,因為它生成帶有
dart compile exe
.
如果組織內部工具像這樣在 GitHub Releases 中釋出會很有用:
不幸的是, , 我們必須 在釋出二進位制檔案之前在每個平臺(Windows、macOS、Linux)上編譯原始碼,而 Golang 支援交叉編譯, 已經很容易釋出每個平臺的二進位制檔案。
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 操作
根據this reference,GitHub Release需要2個步驟來發布一些二進位制檔案:
-
建立釋出資源
-
POST {owner}/{repo}/releases
-
-
將二進位制檔案上傳到發行版
-
POST {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部落格 ” ,連結:http://blog.itpub.net/70016204/viewspace-2885583/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Github Actions 初探Github
- 利用github Actions釋出npm和releaseGithubNPM
- 強大的Github ActionsGithub
- GitHub Actions 入門教程Github
- github actions自動部署Github
- GitHub Actions 入門指南Github
- 使用 Github Actions 持續釋出 Flutter 應用GithubFlutter
- 用GitHub Actions自動釋出Hexo部落格GithubHexo
- iOS開發之將自己寫的小控制元件釋出到Github上iOS控制元件Github
- 同時釋出到 github 和 gitcafe 的部落格的方法Github
- GitHub Actions 支援 "skip ci" 了Github
- GitHub Actions 入門實踐Github
- Github Actions Hexo 自動部署GithubHexo
- GitHub Actions,臥槽!牛批!Github
- Github Actions 中 Service Container 的使用GithubAI
- GitHub迎來史上最大產品變革:釋出可直接執行程式碼的GitHub ActionsGithub行程
- 用 GitHub Actions 自動打包釋出 Python 專案GithubPython
- Github Actions 還能做這些事Github
- 使用 Github Actions 部署 VuePress 部落格GithubVue
- CICD最簡實踐————github actionsGithub
- 【CICID】GitHub-Actions語法Github
- 針不戳!GitHub Actions 入坑指南Github
- Github Actions 實戰提高生產力Github
- 使用GitHub Actions和GitHub pages實現前端專案的自動打包部署Github前端
- 開發現代化的.NetCore控制檯程式:(3)將nuget包釋出到GitHubPackagesNetCoreGithubPackage
- https://github.com/breezy-weather/breezy-weather/releasesHTTPGithub
- 透過 GitHub Actions 實現程式碼的自動編譯和釋出Github編譯
- Flutter App 使用 Github Actions 進行 CI/CDFlutterAPPGithub
- 用 GitHub Actions 部署 Go 語言服務GithubGo
- 還不會用 GitHub Actions ?看看這篇Github
- GitHub Actions + Docker 持續整合工作流GithubDocker
- 利用Github Actions實現自動化部署Github
- Github Actions:再次改變軟體開發Github
- 如何將WHQL驅動程式釋出到 Windows 更新Windows
- 命令列的藝術 (GitHub 星標 6 萬多)命令列Github
- 為Github倉庫新增Github Actions實現持續整合: Android apk自動編譯釋出以及github pages同步推送coding.netGithubAndroidAPK編譯
- 使用 GitHub Actions 自動備份程式碼倉Github
- Vuepress + GitHub Actions 實現部落格自動部署!VueGithub