Dart + GitHub Actions:將 Windows/macOS/Linux 的命令列工具釋出到 GitHub Releases

TG_tuotebb發表於2022-04-02

動機

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章