GiitHub Actions로 Dart 제작 명령줄 도구 구축 및 공개
13998 단어 GitHub ActionsDarttech
하고 싶은 일
Dart
dart compile exe
는 단일 바이너리를 출력하기 때문에 회사 내부를 대상으로 하는 명령행 도구를 제작하여 나누어 주는 등 쉽다.GiitHub Releases↓에서 이런 느낌으로 만들고 싶어요.
GiitHub Actions 구축 후 Releases에 업로드
Go로 쓰면 교차 컴파일할 수 있고, Gooleaser로 GiitHub Releases에 업로드하는 것도 수월하지만, Dart에서는 그렇게 완벽한 구조가 없다.
교차 번역이 안 된 지 2년 정도 지났는데 다들 포기할 뻔했다.대신 GiitHub Actions를 사용하는 윈도우즈-latest, 마코스-latest, Ubuntu-latest가 정형화됐다.
위의 issue는 실제로 각자의 구축 환경에서 구축되어 위영에 업로드된 샘플이 있지만 GiitHub Releases는 이를 총괄하는 스크립트가 없습니다.
편역하다
각 OS
dart compile exe
에서만 작동하지만 출력 파일 이름은 Windows.exe
에서만 작동해야 합니다.다음 matrix/include를 사용할 수 있습니다.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 }}
발행 방법
영화를 보려면 두 가지 일이 필요하다.
acti-gh-release를 사용하여 제작 발행
actions/create-release@v1
와actions/upload-release-asset@v1
유지 보수가 없는 것 같아서 softprops/action-gh-release@v1
로 대체했습니다.하나의 동작으로 파일을 제작하고 업로드할 수 있어 편리하다.
다양한 옵션을 지정할 수 있지만 초고로 먼저 제작해 배포하고 파일을 올리고 싶다면 다음과 같은 내용만 있으면 된다.
- uses: softprops/action-gh-release@v1
with:
draft: true
files: out/*
files는glob 형식으로 지정할 수도 있고 다음과 같이 여러 줄을 지정할 수도 있습니다. files: |
out/mycli_linux
out/mycli_macos
out/mycli_windows
총결산
이런 느낌 괜찮은데.바이너리 이름만 조정하면 다양한 CLI 애플리케이션에서 사용할 수 있을 것입니다.
.github/workflows/deploy.yml
name: Deploy
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-*/*
이렇게 실제로 쳐봤어요.3 병렬 컴파일된/제작
상상했던 것과 같은 것을 만들었습니다(^o^)/
Reference
이 문제에 관하여(GiitHub Actions로 Dart 제작 명령줄 도구 구축 및 공개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yusukeiwaki/articles/dc168f5aba605d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)