Compiling Dart to Native Executables for Windows, Linux and macOS using GitHub Actions
Dart v2.6 includes dart2native - a new tool for compiling Dart scripts to native executables for Windows, Linux and macOS. Currently there’s no cross-compilation support (see dart-lang/sdk#28617) so each binary needs to be compiled from the correct OS.
Cloud services like GitHub Actions make it very easy to run code on different OSes so I created a sample repo that compiles a simple Dart script to native executables for each platform and upload them as artifacts for easy download:
github.com/DanTup/dart-native-executables
You can try this out with your own scripts by forking the repo and modifying the script or copying the relevant parts out of the GitHub workflow.
The GitHub Workflow
The workflow is relatively straight forward. It sets up a matrix to run on all platforms and sets an output-name
variable for the executable.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
include:
- os: ubuntu-latest
output-name: hello-linux
- os: macOS-latest
output-name: hello-mac
- os: windows-latest
output-name: hello-windows.exe
Dart is downloaded using a simple GitHub action I created:
- uses: DanTup/gh-actions/setup-dart@master
# Defaults to stable channel, but can be overriden.
# with:
# channel: dev
Next, dart2native
is invoked with the platform-specific output name:
- run: dart2native bin/main.dart -v -o build/${{ matrix.output-name }}
And finally, the executable is uploaded as a GitHub artifact:
- uses: actions/upload-artifact@v1
with:
name: native-executables
path: build
After each commit, GitHub will run this action on each platform:
The executables will be attached to the Action results in the artifacts list: