Dart + GitHub Actions: Windows/macOS/Linux용 명령줄 도구를 GitHub 릴리스에 게시
10922 단어 githubactionsdart
동기 부여
Dart는
dart compile exe
로 단일 바이너리를 생성하기 때문에 신속하고 간편한 CLI 도구를 구축하고 동료와 공유하는 데 매우 적합합니다.다음과 같이 조직 내부 도구가 GitHub 릴리스에 게시되면 유용할 것입니다.
안타깝게도 Dart doesn't support cross-compile 현재 바이너리를 게시하기 전에 각 플랫폼(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
이 참조에 따르면 GitHub 릴리스에는 일부 바이너리를 게시하기 위한 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
또한 glob 표현식 대신 개별 파일 목록에
files
를 지정할 수 있습니다.아티팩트를 사용하여 빌드 프로세스와 릴리스 프로세스 결합
3개의 빌드 작업은 각각 바이너리를 생성하고 릴리스 프로세스는 한 번에 모두 업로드해야 합니다. 흐름은 GitHub 아티팩트로 구현할 수 있습니다.
name: Publish
on:
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 릴리스에 성공적으로 업로드되었습니다! :)
Reference
이 문제에 관하여(Dart + GitHub Actions: Windows/macOS/Linux용 명령줄 도구를 GitHub 릴리스에 게시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yusukeiwaki/dart-github-actions-publish-your-command-line-tools-for-windowsmacoslinux-into-github-releases-4hmn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)